Using Peter Sankauskas EC2 inventory file.
Assuming Ansible is setup, see old post for setting up Ansible or here.
$ cd ansible $ export AWS_ACCESS_KEY_ID=aws_accesskey_id $ export AWS_SECRET_ACCESS_KEY=aws_secret_key $ export ANSIBLE_HOSTS=$(pwd)/plugins/inventory/ec2.py # use the next line only if you're using ssh as transport $ export ANSIBLE_SSH_ARGS="-o ForwardAgent=yes"
The ansible/plugins/inventory/ec2.ini file is read by ec2.py. To limit it to us-east-1 only:
[ec2] regions: us-east-1 cache_path: /tmp cache_max_age: 300 destination_variable: public_dns_name vpc_destination_variable: public_dns_name
Testing the inventory file:
$ ./plugins/inventory/ec2.py --list { "i-xxxxx": [ "ec2-xx.xx.xx.xx.compute-1.amazonaws.com" ], ""i-yyyyy": [ "ec2-yy-yy-yy-yy.compute-1.amazonaws.com" ], "security-group_DEVGroup": [ "ec2-xx.xx.xx.xx.compute-1.amazonaws.com", "ec2-yy.yy.yy.yy.compute-1.amazonaws.com" ], "us-east-1": [ "ec2-xx.xx.xx.xx.compute-1.amazonaws.com", "ec2-yy.yy.yy.yy.compute-1.amazonaws.com" ], "us-east-1d": [ "ec2-xx.xx.xx.xx.compute-1.amazonaws.com", "ec2-yy.yy.yy.yy.compute-1.amazonaws.com" ] }
Now for Ansible simple commands:
Update: (11/16/2012) Use ssh agent for EC2 keypairs.
$ ssh-add /path-to/my-ec2-keypair
$ source hacking/env-setup $ ansible us-east-1d -u ubuntu -m ping ec2-xx-xx-xx-xx.compute-1.amazonaws.com | success >> { "ping": "pong" } ec2-yy-yy-yy-yy.compute-1.amazonaws.com | success >> { "ping": "pong" }
Now for a sample playbook filenamed as sample.yml:
--- - hosts: i-xxxxx tasks: - name: Do stuff action: command uptime
And the command to run the playbook. Target machine is an Ubuntu Precise instance.
ansible-playbook sample.yml -u ubuntu --verbose PLAY [i-xxxxx] ********************* GATHERING FACTS ********************* ok: [ec2-xx-xx-xx-xx.compute-1.amazonaws.com] TASK: [Do stuff] ********************* changed: [ec2-xx-xx-xx-xx.compute-1.amazonaws.com] => {"changed": true, "cmd": ["uptime"], "delta": "0:00:00.006583", "end": "2012-10-10 09:16:47.070108", "rc": 0, "start": "2012-10-10 09:16:47.063525", "stderr": "", "stdout": "09:16:47 up 1 days, 2:58, 1 user, load average: 0.14, 0.05, 0.05"} PLAY RECAP ********************* ec2-xx-xx-xx-xx.compute-1.amazonaws.com : ok=2 changed=1 unreachable=0 failed=0
For the complete examples and documentation EC2 inventory files, it is found here.
Update: Nov 22,2012
There’s also a very nice post about provisioning CentOS EC2 instance with Ansible by Jan-Piet Mens.