Getting the IP address/attributes of the AWS instance created using Ansible

Read http://www.ansible.com/blog/ansible-ec2-tags It details how to spin up an ec2 instance (or multiple) and then run tasks against it (I.e install nginx).

I'f you want to jump straight to the example playbook https://github.com/chrismeyersfsu/playbook-ec2_properties/blob/master/new_group.yml

  • Bring up ec2 instance
  • Wait for ssh
  • add ec2 instance to Ansible dynamically created host group w/ associated ec2 pem file (so you can ssh to it)
  • Call an example play with a ping task to show everything works

Note: you would replace the ping task with your set of tasks to install nginx

@Bidyut How to reference ec2 ip address

look at Line 27 Note the use of register: ec2Then at Line 46 the ec2 ip address is "extracted" {{ ec2.results[item.0]['instances'][0]['public_ip'] }}. Note that the example calls register within a loop. If you are just creating one ec2 instance then the ec2 ip address reference would look like {{ ec2.results['instances'][0]['public_ip'] }}


Here is a working example that might help you.

---
- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: Create the EC2 Instance
      ec2:
        region: us-east-1
        group: sg-xxxxx # Replace your Security Group here
        keypair: test-key # Replace Key here
        instance_type: t2.mirco
        image: ami-xxxxx # Replace AMI here
        vpc_subnet_id: subnet-xxxxx # Replace Subnet here
        assign_public_ip: yes
        wait: yes
        wait_timeout: 600
        instance_tags:
           Name: "My-EC2-Instance"
      register: ec2

    - name: Create SSH Group to login dynamically to EC2 Instance
      add_host: 
        hostname: "{{ item.public_ip }}"
        ansible_ssh_private_key_file: path/to/test-pair.pem
        groupname: ec2_server
      with_items: ec2.instances

    - name: Wait for SSH to come up
      wait_for: 
        host: "{{ item.public_ip }}" 
        port: 22 
        state: started
      with_items: ec2.instances

 - hosts: ec2_server
   become: yes
   # Use ec2_user if you are using CentOS/Amazon server
   remote_user: ubuntu # for Ubuntu server
   gather_facts: yes
   roles:
     - webserver