[elb] Adding support for DescribeInstanceHealth

This commit is contained in:
Alex Malinovich 2010-05-03 10:06:03 +08:00 committed by Wesley Beary
parent d88ed58f53
commit 14417a7e94
3 changed files with 84 additions and 8 deletions

View File

@ -5,16 +5,18 @@ module Fog
def self.new(options={})
unless @required
require 'fog/aws/parsers/elb/deregister_instances_from_load_balancer.rb'
require 'fog/aws/parsers/elb/deregister_instances_from_load_balancer'
require 'fog/aws/parsers/elb/describe_instance_health'
require 'fog/aws/parsers/elb/describe_load_balancers'
require 'fog/aws/parsers/elb/disable_availability_zones_for_load_balancer.rb'
require 'fog/aws/parsers/elb/enable_availability_zones_for_load_balancer.rb'
require 'fog/aws/parsers/elb/register_instances_with_load_balancer.rb'
require 'fog/aws/requests/elb/deregister_instances_from_load_balancer.rb'
require 'fog/aws/parsers/elb/disable_availability_zones_for_load_balancer'
require 'fog/aws/parsers/elb/enable_availability_zones_for_load_balancer'
require 'fog/aws/parsers/elb/register_instances_with_load_balancer'
require 'fog/aws/requests/elb/deregister_instances_from_load_balancer'
require 'fog/aws/requests/elb/describe_instance_health'
require 'fog/aws/requests/elb/describe_load_balancers'
require 'fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb'
require 'fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb'
require 'fog/aws/requests/elb/register_instances_with_load_balancer.rb'
require 'fog/aws/requests/elb/disable_availability_zones_for_load_balancer'
require 'fog/aws/requests/elb/enable_availability_zones_for_load_balancer'
require 'fog/aws/requests/elb/register_instances_with_load_balancer'
@required = true
end

View File

@ -0,0 +1,30 @@
module Fog
module Parsers
module AWS
module ELB
class DescribeInstanceHealth < Fog::Parsers::Base
def reset
@response = { 'DescribeInstanceHealthResult' => { 'InstanceStates' => [] }, 'ResponseMetadata' => {} }
@instance_state = {}
end
def end_element(name)
case name
when 'Description', 'State', 'InstanceId', 'ReasonCode'
@instance_state[name] = @value
when 'member'
@response['DescribeInstanceHealthResult']['InstanceStates'] << @instance_state
@instance_state = {}
when 'RequestId'
@response['ResponseMetadata'][name] = @value
end
end
end
end
end
end
end

View File

@ -0,0 +1,44 @@
module Fog
module AWS
module ELB
class Real
# Get health status for one or more instances on an existing ELB
#
# ==== Parameters
# * lb_name<~String> - Load balancer to check instances health on
# * instance_ids<~Array> - Optional list of instance IDs to check
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'ResponseMetadata'<~Hash>:
# * 'RequestId'<~String> - Id of request
# * 'DescribeInstanceHealthResult'<~Hash>:
# * 'InstanceStates'<~Array> - array of hashes describing instance health
# * 'Description'<~String>
# * 'State'<~String>
# * 'InstanceId'<~String>
# * 'ReasonCode'<~String>
def describe_instance_health(lb_name, instance_ids = [])
params = ELB.indexed_param('Instances.member.%.InstanceId', [*instance_ids], 1)
request({
'Action' => 'DescribeInstanceHealth',
'LoadBalancerName' => lb_name,
:parser => Fog::Parsers::AWS::ELB::DescribeInstanceHealth.new
}.merge!(params))
end
end
class Mock
def describe_instance_health(lb_name, instance_ids = [])
raise MockNotImplemented.new("Contributions welcome!")
end
end
end
end
end