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

Attributes included from Core::Model

#config

Instance Method Summary collapse

Methods included from Core::Collection::Simple

#each_batch

Methods included from Core::Collection

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

Methods included from Core::Model

#client, #config_prefix, #inspect

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.


130
131
132
# File 'lib/aws/elb/instance_collection.rb', line 130

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.


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

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


143
144
145
146
147
148
149
150
151
# 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

#health(*instances) ⇒ Array<Hash>

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 => ... }

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:


109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# 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) ⇒ Object Also known as: add


132
133
134
135
136
137
138
139
140
# 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