class AWS::ELB::InstanceCollection
Attributes
@return [LoadBalancer] Returns the load balancer this collection
belongs to.
Public Class Methods
# File lib/aws/elb/instance_collection.rb, line 21 def initialize load_balancer, options = {} @load_balancer = load_balancer super end
Public Instance Methods
Returns an {EC2::Instance} object with 3 extra methods added:
-
`#load_balancer`
-
`#remove_from_load_balancer`
-
`#elb_health`
See {#health} for more information about what `#elb_health` returns.
@return [EC2::Instance] Return an EC2::Instance object with additional
methods added.
# File lib/aws/elb/instance_collection.rb, line 37 def [] instance_id load_balancer = self.load_balancer instance = EC2.new(:config => config).instances[instance_id] Core::MetaUtils.extend_method(instance, :load_balancer) do load_balancer end Core::MetaUtils.extend_method(instance, :elb_health) do health = load_balancer.instances.health(id).first health.delete(:instance) health end Core::MetaUtils.extend_method(instance, :remove_from_load_balancer) do load_balancer.instances.deregister(self) end instance end
# File lib/aws/elb/instance_collection.rb, line 138 def deregister *instances client.deregister_instances_from_load_balancer( :load_balancer_name => load_balancer.name, :instances => instance_ids(instances)) nil end
Returns an array of instance health descriptions. Each description is a hash with the following entries:
* `:instance` - The {EC2::Instance} being described. * `:description` - Provides a description of the instance. * `:state` - Specifies the current state of the instance. * `:reason_code` - Provides information about the cause of OutOfService instances. Specifically, it indicates whether the cause is Elastic Load Balancing or the instance behind the load balancer.
You can get the health of all instances for this load balancer by passing no arguments to this method:
# get the health of all instances in the collection load_balancer.instances.health.each do |instance_health| puts "Instance: " + instance_health[:instance].id puts "description: " + instance_health[:description] puts "state: " + instance_health[:state] puts "reason code: " + instance_health[:reason_code] end
If you want the health of a specific list of instances, pass instance ids or instance objects to this method:
# get the health for a few specific instances load_balancer.instances.health('i-12345', 'i-67890').each{|h| ... }
## Health for a Single Instance
If you want the health of a single instance you can use the {#[]} instead:
load_balancer.instances['i-123456'].elb_health # => { :state => ..., :reason_code => ..., :description => ... }
@param [String,EC2::Instance] instances A list of instances to
receive health information for.
@return [Array<Hash>] Returns an array of hashes. Each hash represents
the health of a single instance. Each hash includes the following entries:
# File lib/aws/elb/instance_collection.rb, line 104 def health *instances instance_ids = instance_ids(instances) opts = {} opts[:load_balancer_name] = load_balancer.name opts[:instances] = instance_ids unless instance_ids.empty? client.describe_instance_health(opts).instance_states.map do |state| { :instance => self[state.instance_id], :description => state.description, :state => state.state, :reason_code => state.reason_code, } end end
# File lib/aws/elb/instance_collection.rb, line 127 def register *instances client.register_instances_with_load_balancer( :load_balancer_name => load_balancer.name, :instances => instance_ids(instances)) nil end
Protected Instance Methods
# File lib/aws/elb/instance_collection.rb, line 160 def _each_item options = {} load_balancer.instance_descriptions.each do |instance| yield(self[instance[:instance_id]]) end end
# File lib/aws/elb/instance_collection.rb, line 150 def instance_ids instances instances.flatten.collect do |instance| case instance when EC2::Instance then { :instance_id => instance.id } else { :instance_id => instance } end end end