Naveen Vijay
Naveen Vijay

Reputation: 16530

Ansible EC2 Module to Retrieve information about the Instance

I see the Ansible EC2 Module's capability to provision / start / stop / terminate. However is there a way to lookup / query for the instance details like Private IP, Public IP etc.

I am looking at the use case to obtain the Public IP [not the Elastic IP] which keeps changing during stop/start and update the Route53 DNS records accordingly.

Any ideas ?

Upvotes: 3

Views: 1043

Answers (2)

Eli
Eli

Reputation: 39009

You can register the new boxes to an ec2 variable and wait for them to get private and public IPs, and then access them like so:

- name: provision new boxes
  hosts: localhost
  gather_facts: False
  tasks:
    - name: Provision a set of instances
      ec2:
        group: "{{ aws_security_group }}"
        instance_type: "{{ aws_instance_type }}"
        image: "{{ aws_ami_id }}"
        region: "{{ aws_region }}"
        vpc_subnet_id: "{{ aws_vpc_subnet_id }}"
        key_name: "{{ aws_key_name }}"
        wait: true
        count: "{{ num_machines }}"
        instance_tags: "{{ tags }}"
      register: ec2

    - name: Add all instance public IPs to public group
      add_host: hostname={{ item.public_ip }} groups=new_public_ips
      with_items: ec2.instances

    - name: Add all instance private IPs to private group
      add_host: hostname={{ item.private_ip }} groups=new_private_ips
      with_items: ec2.instances

Upvotes: 2

helloV
helloV

Reputation: 52443

Did you set wait: True? It will wait for the instance to go to running state. I never had issues with the following. I was able to get the public IP after register. If you still have issues, use wait_for for IP to be available. Or post your script here.

- name: Start the instance if not running
  ec2:
    instance_ids: myinstanceid
    region: us-east-1
    state: running
    wait: True
  register: myinst

Upvotes: 2

Related Questions