Class: AWS::ELB::InstanceCollection
- Inherits:
-
Object
- Object
- AWS::ELB::InstanceCollection
- Includes:
- Core::Collection::Simple
- Defined in:
- lib/aws/elb/instance_collection.rb
Instance Attribute Summary collapse
-
#load_balancer ⇒ LoadBalancer
readonly
Returns the load balancer this collection belongs to.
Instance Method Summary collapse
-
#[](instance_id) ⇒ EC2::Instance
Returns an AWS::EC2::Instance object with 3 extra methods added:.
- #deregister(*instances) ⇒ Object (also: #remove)
-
#health(*instances) ⇒ Array<Hash>
Returns an array of instance health descriptions.
-
#initialize(load_balancer, options = {}) ⇒ InstanceCollection
constructor
A new instance of InstanceCollection.
- #register(*instances) ⇒ Object (also: #add)
Methods included from Core::Collection::Simple
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, = {} @load_balancer = load_balancer super end |
Instance Attribute Details
#load_balancer ⇒ LoadBalancer (readonly)
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.
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 => ... }
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 |