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.
