Rarrgh, replies to old thread, please disregard.



On Sat, Mar 15, 2014 at 9:27 AM, Michael DeHaan <[email protected]> wrote:

> This seems fine to me, +1
>
>
> On Thu, Feb 13, 2014 at 4:26 PM, Bruce Pennypacker <
> [email protected]> wrote:
>
>> I occasionally run into an issue with the ec2_elb module that I think
>> needs to be addressed.  This module is used to add and remove Amazon EC2
>> instances to/from an Amazon load balancer.  The API into Amazon is
>> asynchronous, so when you use it to add an instance to a load balancer it
>> issues a "insert" command then it goes into a loop where it sleeps for a
>> second, checks the status, and continues to loop until the instance reaches
>> an "In Service" state in the load balancer. There's also a check to see if
>> the instance enters an error state, and if it does then the module
>> immediately returns an error. Here's a bit of pseudocode to demonstrate the
>> behavior:
>>
>> while True:
>>     get_instance_state
>>     if InService:
>>       return success;
>>     else if instance_error:
>>       return error;
>>     sleep 1
>>
>> So when an instance is added to the load balancer, the module waits until
>> it reaches the InService state.  If at any point along that way it enters
>> an error state then it immediately fails.
>>
>> The problem I have is that it's not terribly uncommon for an instance to
>> enter a transient unhealthy state for a couple of seconds prior to being
>> successfully put into service.  I have on a number of occasions had my
>> Ansible playbook fail because the ec2_elb module throws an error and yet
>> the EC2 instance is successfully put into service in the load balancer.  If
>> the module had simply waited a few more seconds to check on the health of
>> the instance then my playbook would have run successfully.
>>
>> I would like to propose making a change to the ec2_elb module to address
>> these sorts of transient errors.  There really should be a timeout
>> associated with this while loop in the module.  It should only fail if the
>> instance is not put into service during that period of time, and any errors
>> that occur within that time period should be ignored.  To maintain the
>> current state it shouldn't be too difficult to add an optional timeout
>> parameter that changes the behavior only if it is set.  So if a timeout
>> parameter is added then the above loop woudl look something like this:
>>
>> while not timeout_exceeded:
>>     get_instance_state
>>     if InService:
>>       return success;
>>     else if instance_error AND timeout_exceeded:
>>       return error;
>>     sleep 1
>>
>> return timeout
>>
>> Any comments/suggestions about this, especially from other folks using
>> the ec2_elb module?
>>
>> -Bruce
>>
>>
>>  --
>> 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 [email protected].
>> To post to this group, send email to [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAEVJ8QNV3uVJ%2BXWG3eWVH%2BJVC2-n%3D%2B%2BpT5op8GSCahLXSNOKrA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to