Waiting for Elastic IP address?

204 views
Skip to first unread message

Slim Slam

unread,
Jun 26, 2014, 4:22:57 PM6/26/14
to ansible...@googlegroups.com
Does anyone have an example of waiting for an Elastic IP address to
become "ready" to access? Apparently, waiting for state=started and
port 22 to become accessible (see below) is not sufficient.  The
next step after this usually fails because the Elastic IP isn't ready yet.

J

=================================

- name: Start a test instance
  hosts
: 127.0.0.1
  connection
: local
  gather_facts
: no
  vars
:
    my_elastic_ip
: aa.bb.cc.dd
    key
: somekey
    instance_name
: MYFUNTEST
    image
: ami-0000000
    instance_type
: m3.large
    region
: us-east-1
    security_group
: test
  tasks
:
   
- name: Start an instance
      local_action
:
       
module: ec2
        instance_tags
:
           
Name: '{{ instance_name }}'
        key_name
: '{{ key }}'
        image
: '{{ image }}'
        region
: '{{ region }}'
       
group: '{{ security_group }}'
        instance_type
: '{{ instance_type }}'
        wait
: True
     
register: ec2_info


   
- add_host: hostname={{ item.public_ip }} groupname=ec2hosts
      with_items
: ec2_info.instances


   
- name: Tie elastic IP to the instance
      ec2_eip
: instance_id={{ item }} region={{ region }} public_ip={{ my_elastic_ip }}
      with_items
: ec2_info.instance_ids


   
- name: wait for instances to listen on port:22
      wait_for
:
        timeout
=480
        state
=started
        host
={{ item.public_ip }}
        port
=22
      with_items
: ec2_info.instances



Michael DeHaan

unread,
Jun 27, 2014, 8:43:34 AM6/27/14
to ansible...@googlegroups.com
"Apparently, waiting for state=started and
port 22 to become accessible (see below) is not sufficient."

Almost always, it's useful to put a "pause" after waiting for port 22 to become open.   The reason for this is SSH isn't always ready as soon as the port is up - usually it's not.   a 5 second pause module call after the wait_for takes care of it.




--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/742d37d4-144e-4dd1-9141-f05f066a7c3f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Slim Slam

unread,
Jun 27, 2014, 11:29:58 AM6/27/14
to ansible...@googlegroups.com
It's still not working. I even made the pause 10 seconds (see below). SSH still doesn't work
until maybe 30 seconds later. I'm launching an m3large instance and I'm only
using the Amazon Linux base (no customization).  AMI: ami-7c807d14

Any ideas?

J




   
- name: Tie elastic IP to the instance
      ec2_eip
: instance_id={{ item }} region={{ region }} public_ip={{ my_elastic_ip }}
      with_items
: ec2_info.instance_ids

   
- name: wait for instances to listen on port:22
 
      wait_for
: timeout=480 state=started host={{ my_elastic_ip }} port=22

   
- pause: seconds=10

Michael DeHaan

unread,
Jun 27, 2014, 11:45:48 AM6/27/14
to ansible...@googlegroups.com
Perhaps it's taking longer because an EIP is involved, apologies as my previous info-sharing was based on general SSH experiments.

Could it be that the EIP itself is not yet ready?




--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.

Slim Slam

unread,
Jun 27, 2014, 12:06:55 PM6/27/14
to ansible...@googlegroups.com
Quite probably it's the EIP since it worked ok before I added it. On the documentation page for
the ansible ec2-eip module, it says:

"There may be a delay between the time the Elastic IP is assigned and when the cloud instance is reachable via the new address. Use wait_for and pause to delay further playbook execution until the instance is reachable, if necessary."

However, there is no example provided for how to do this with the ec2-eip module.
So, I'm wondering how to specifically wait for an EIP to be "ready". 
It seems to me that this should work for both the elastic ip and port 22, but it doesn't even though it executes without error:
- name: wait for instances to listen on port:22
     
  wait_for
: timeout=480 state=started host={{ my_elastic_ip }} port=22

J

On Thursday, June 26, 2014 3:22:57 PM UTC-5, Slim Slam wrote:

Michael Blakeley

unread,
Mar 11, 2015, 12:20:39 AM3/11/15
to ansible...@googlegroups.com
I find this works well:

    - pause: seconds=15
    - name: wait for ssh
      wait_for: port=22 timeout=600

Without the pause, I find that wait_for alone often fails. Pausing less than 15 seconds usually fails, too.
Reply all
Reply to author
Forward
0 new messages