Class: AWS::ELB::InstanceCollection

Inherits:
Object
  • Object
show all
Includes:
Core::Collection::Simple
Defined in:
lib/aws/elb/instance_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Core::Collection

#each, #each_batch, #enum, #first, #in_groups_of, #page

Constructor Details

#initialize(load_balancer, options = {}) ⇒ InstanceCollection

Returns a new instance of InstanceCollection.



21
22
23
24
# File 'lib/aws/elb/instance_collection.rb', line 21

def initialize load_balancer, options = {}
  @load_balancer = load_balancer
  super
end

Instance Attribute Details

#load_balancerLoadBalancer (readonly)

Returns the load balancer this collection belongs to.

Returns:

  • (LoadBalancer)

    Returns the load balancer this collection belongs to.



125
126
127
# File 'lib/aws/elb/instance_collection.rb', line 125

def load_balancer
  @load_balancer
end

Instance Method Details

#[](instance_id) ⇒ EC2::Instance

Returns an AWS::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.

Returns:

  • (EC2::Instance)

    Return an EC2::Instance object with additional methods added.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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

#deregister(*instances) ⇒ Object Also known as: remove



138
139
140
141
142
143
144
145
146
# 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

#health(*instances) ⇒ Array<Hash>

Returns an array of instance health descriptions. Each description is a hash with the following entries:

  • :instance - The AWS::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 => ... }

Parameters:

  • instances (String, EC2::Instance)

    A list of instances to receive health information for.

Returns:

  • (Array<Hash>)

    Returns an array of hashes. Each hash represents the health of a single instance. Each hash includes the following entries:



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# 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

#register(*instances) ⇒ Object Also known as: add



127
128
129
130
131
132
133
134
135
# 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