I'm ok with the above.
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]. For more options, visit https://groups.google.com/groups/opt_out.
