80 lines
1.8 KiB
Ruby
80 lines
1.8 KiB
Ruby
module AWS
|
|
class FakeELB
|
|
def initialize
|
|
end
|
|
|
|
class LoadBalancer
|
|
attr_reader :name, :instances
|
|
|
|
def initialize(name, instances_and_healths)
|
|
@name = name
|
|
@instances ||= InstanceCollection.new(instances_and_healths)
|
|
end
|
|
end
|
|
|
|
class LoadBalancerCollection < Array
|
|
def initialize
|
|
end
|
|
end
|
|
|
|
class InstanceCollection < Array
|
|
attr_reader :health
|
|
|
|
def initialize(instances_and_healths)
|
|
@health = []
|
|
|
|
instances_and_healths.each do |instance_and_health|
|
|
self << instance_and_health[:instance]
|
|
instance_and_health[:healthy] ? make_instance_healthy(instance_and_health[:instance]) : make_instance_unhealthy(instance_and_health[:instance])
|
|
end
|
|
end
|
|
|
|
def register(*instances)
|
|
self.concat instances
|
|
end
|
|
|
|
def deregister(*instances)
|
|
instances.each do |i|
|
|
self.delete i
|
|
end
|
|
end
|
|
|
|
def make_instance_healthy(instance)
|
|
opts = {
|
|
instance: instance,
|
|
description: 'N/A',
|
|
state: 'InService',
|
|
reason_code: 'N/A'
|
|
}
|
|
|
|
@health.each_with_index do |health, i|
|
|
if health[:instance] == instance
|
|
@health[i] = opts
|
|
return
|
|
end
|
|
end
|
|
|
|
@health << opts
|
|
end
|
|
|
|
def make_instance_unhealthy(instance)
|
|
opts = {
|
|
instance: instance,
|
|
description: 'Instance has failed at least the UnhealthyThreshold number of health checks consecutively.',
|
|
state: 'OutOfService',
|
|
reason_code: 'Instance'
|
|
}
|
|
|
|
@health.each_with_index do |health, i|
|
|
if health[:instance] == instance
|
|
@health[i] = opts
|
|
return
|
|
end
|
|
end
|
|
|
|
@health << opts
|
|
end
|
|
end
|
|
end
|
|
end
|