Extracting Single IP from launched EC2 instances

I’m launching a cluster of ec2 instances and would like one (don’t care which one) of them to become a head node and pass it’s IP to the other cluster members. I’ve been looking for an easy way to do this but could not fine one so would appreciate any assistance.

Here is what I’ve got.

later on the main playbook I’d like to pull one of the IP’s and feed it into a startup script to be called on all the hosts.

I could not find a way to extract element 0 from the group_name var array.I tried this: set_fact: headnode={{ groups[[{{ group_name }}][0]] }} but it did not work. I had to use the actual group_var value and then I got the IP but it was not a clean string rather it looked like this: [u’10.77.0.211’,

Any idea how to get a clean IP from the group_name set? BDW in the sub playbook where I launch the instances I register the private ip’s from the instances: set_fact: private_ips: “{{ ec2.tagged_instances|join(', ', attribute=‘private_ip’) }}” but I cannot refer to this variable back in the main playbook.

thanks in advance.

Mike,

This may give you some insight:

https://github.com/basho-labs/ansible-riak/blob/develop/examples/form_cluster.yml

Particularly:

`
primary_node: “{{ hostvars[groups[‘riak_cluster’][0]][‘riak_outputs’][‘node_name’] }}”

  • James
    `

Here is a similar example from my project

Creating the instance on EC2:

`

That worked. Thanks!

Anyone know if there is a way to do this same sort of discovery based on EC2 tags? i.e. Gather the IP associated with tag role: master and make use of it?