I have a bit of a bone to pick with the way the ec2_elb module currently
operates, and I'm wondering if other folks have had issue with this or if
they like the way it currently works.
A bit of background first, especially for those who aren't EC2 & ELB
experts. Amazon makes their ELB (elastic load balancer) pretty trivial to
use. If you have a server instance registered to an ELB then it basically
can be in one of two states, either InService or OutOfService. A server
that's InService is able to respond to requests. A server that's
OutOfService could be out of service for many reasons. It could be
anything from the server being powered off to a service like Apache not
running to a health check failing to the server being in a transition
period while it's being added or removed from the load balancer.
If you use the ec2_elb module to remove an instance from an ELB then the
very first thing it does is to check to see if the instance is InService.
If the instance is InService then it removes the instance from the ELB.
However, if the instance is OutOfService then the module immediately
returns with changed:false. The code in the module explicitly checks for
this:
if initial_state and initial_state.state == 'InService':
lb.deregister_instances([self.instance_id])
else:
return
We recently ran into a problem because of this behavior. We have an
ansible playbook that we use to switch our production site to/from
maintenance pages if we ever have problems with the site. We recently had
a site problem so I ran the playbook to switch to our maintenance pages.
It does this by adding a few instances to the load balancer that run static
web pages, then removes all the webapp servers from the load balancer. The
only problem is because all our webapp servers were failing their health
checks Amazon was reporting them as OutOfService, so Ansible didn't
actually remove them from the ELB. We had to log into AWS and manually
remove them from the ELB before we could safely restart them and verify
that they were working properly before adding them back into the ELB.
Given that the ec2_elb module documentation states that specifying
"state=absent" will deregister an instance from the load balancer, I think
it should be doing it no matter what state the instance is in, not just if
the instance is InService. I'm more than willing to submit a pull request
with the necessary changes, but I'm not entirely certain what the best
approach to take on this matter is. I know Michael prefers to maintain the
default behavior of modules as much as possible, but in this case I'd argue
that it's a bug that instances are removed only if they're in a healthy
state. I suppose we could keep the current behavior and add a new optional
parameter along the lines of "ignore_current_state=true", but I would think
most people would rather have the default be to always remove an instance
and instead perhaps have an optional parameter that would cause an instance
to be removed only if it's healthy.
-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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/485ebd3f-3e5d-42e0-8b2b-884f5070a0e8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.