Bad Ansible Error Message - No handler was ready to authenticate
Of all the multitude of sins that software engineers wreak upon the world, I have a personal hatred for crappy error messages. Crappy error messages are an unforgivable sin that condemn all the people that ever get the error message to waste inordinate amounts of time on thinking, tinkering, google and more. Here is my command:
python /etc/ansible/inventory/ec2.py --list
What this is doing is executing the Ansible ec2.py script which talks to AWS and returns a list of resources. And here is today's favorite crappy error message:
Traceback (most recent call last):
File "/etc/ansible/inventory/ec2.py", line 1701, in <module>
Ec2Inventory()
File "/etc/ansible/inventory/ec2.py", line 272, in __init__
self.do_api_calls_update_cache()
File "/etc/ansible/inventory/ec2.py", line 539, in do_api_calls_update_cache
self.get_instances_by_region(region)
File "/etc/ansible/inventory/ec2.py", line 593, in get_instances_by_region
conn = self.connect(region)
File "/etc/ansible/inventory/ec2.py", line 557, in connect
conn = self.connect_to_aws(ec2, region)
File "/etc/ansible/inventory/ec2.py", line 582, in connect_to_aws
conn = module.connect_to_region(region, **connect_args)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/ec2/__init__.py", line 66, in connect_to_region
connection_cls=EC2Connection, **kw_params)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/regioninfo.py", line 220, in connect
return region.connect(**kw_params)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/regioninfo.py", line 290, in connect
return self.connection_cls(region=self, **kw_params)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/ec2/connection.py", line 103, in __init__
profile_name=profile_name)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/connection.py", line 1100, in __init__
provider=provider)
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/connection.py", line 569, in __init__
host, config, self.provider, self._required_auth_capability())
File "/var/lib/jenkins/.local/lib/python2.7/site-packages/boto/auth.py", line 1021, in get_auth_handler
'Check your credentials' % (len(names), str(names)))
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials
jenkins@ip-172-31-19-205:/home/ubuntu$ sudo^C
jenkins@ip-172-31-19-205:/home/ubuntu$ mkdir ~/.aws
jenkins@ip-172-31-19-205:/home/ubuntu$ mkdir ~/.aws/credentials
jenkins@ip-172-31-19-205:/home/ubuntu$ rmdir ~/.aws/credentials
jenkins@ip-172-31-19-205:/home/ubuntu$ nano ~/.aws/credentials
jenkins@ip-172-31-19-205:/home/ubuntu$ python /etc/ansible/inventory/ec2.py --list
{
"_meta": {
"hostvars": {
"199.31.18.123": {
The trick here was reading enough of it to find "No handler was ready to authenticate." I discovered this while setting up a new Jenkins server and the error was that Ansible's AWS credentials hadn't yet been copied up the server in the directory:
/home/jenkins/.aws/credentials
Once I put them there this problem went away (another problem came up immediately but one down and N thousand to go).
Posted In: #ansible