class AWS::ELB::InstanceCollection

Attributes

load_balancer[R]

@return [LoadBalancer] Returns the load balancer this collection

belongs to.

Public Class Methods

new(load_balancer, options = {}) click to toggle source
# File lib/aws/elb/instance_collection.rb, line 21
def initialize load_balancer, options = {}
  @load_balancer = load_balancer
  super
end

Public Instance Methods

[](instance_id) click to toggle source

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 39
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
add(*instances) click to toggle source
Alias for: register
deregister(*instances) click to toggle source
# File lib/aws/elb/instance_collection.rb, line 143
def deregister *instances

  client.deregister_instances_from_load_balancer(
    :load_balancer_name => load_balancer.name,
    :instances => instance_ids(instances))

  nil

end
Also aliased as: remove
health(*instances) click to toggle source

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] One or more 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 109
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
register(*instances) click to toggle source
# File lib/aws/elb/instance_collection.rb, line 132
def register *instances

  client.register_instances_with_load_balancer(
    :load_balancer_name => load_balancer.name,
    :instances => instance_ids(instances))

  nil

end
Also aliased as: add
remove(*instances) click to toggle source
Alias for: deregister

Protected Instance Methods

_each_item(options = {}) { |instance| ... } click to toggle source
# File lib/aws/elb/instance_collection.rb, line 165
def _each_item options = {}
  load_balancer.instance_descriptions.each do |instance|
    instance = self[instance.instance_id]
    yield(instance)
  end
end
instance_ids(instances) click to toggle source
# File lib/aws/elb/instance_collection.rb, line 155
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