class Algae::Asg

Public Class Methods

new(name) click to toggle source
# File lib/algae.rb, line 47
def initialize(name)
  @name = name
end

Public Instance Methods

client() click to toggle source
# File lib/algae.rb, line 117
def client
  @client ||= Aws::AutoScaling::Resource.new
end
desired() click to toggle source
# File lib/algae.rb, line 92
def desired
  group.reload
  group.desired_capacity
end
desired=(value) click to toggle source
# File lib/algae.rb, line 97
def desired=(value)
  puts "setting desired to #{value} for #{group.name}"
  group.set_desired_capacity desired_capacity: value,
                             honor_cooldown: false
end
display() click to toggle source
# File lib/algae.rb, line 51
def display
  pp status
end
elb_client() click to toggle source
# File lib/algae.rb, line 129
def elb_client
  @elb_client ||= Aws::ElasticLoadBalancing::Client.new
end
elb_in_service() click to toggle source
# File lib/algae.rb, line 67
def elb_in_service
  status.select do |i, status|
    status[:elb_health_status] == 'InService'
  end.keys
end
elb_instance_health() click to toggle source
# File lib/algae.rb, line 121
def elb_instance_health
  result = {}
  elb_client.describe_instance_health(load_balancer_name: @name).instance_states.each do |instance|
    result[instance.instance_id] = instance.state
  end
  result
end
find_group() click to toggle source
# File lib/algae.rb, line 103
def find_group
  matching_groups = client.groups.select do |g|
    g.auto_scaling_group_name.start_with? @name
  end

  raise('group name isnt unique') if matching_groups.count > 1

  matching_groups.first
end
group() click to toggle source
# File lib/algae.rb, line 113
def group
  @group ||= find_group
end
healthy_instances() click to toggle source
# File lib/algae.rb, line 86
def healthy_instances
  instances.select do |i|
    i.health_status == 'Healthy' and i.lifecycle_state == 'InService'
  end
end
in_service() click to toggle source
# File lib/algae.rb, line 78
def in_service
  elb_instance_health.select{|id, state| state == 'InService'}
end
instance_ids() click to toggle source
# File lib/algae.rb, line 82
def instance_ids
  instances.map(&:id)
end
instances() click to toggle source
# File lib/algae.rb, line 73
def instances
  group.reload
  group.instances
end
status() click to toggle source
# File lib/algae.rb, line 55
def status
  result = {}
  elb_instance_healths = elb_instance_health
  instances.each do |i|
    result[i.instance_id] = {#az: i.availability_zone,
                             lifecycle_state: i.lifecycle_state,
                             health_status: i.health_status,
                             elb_health_status: elb_instance_healths[i.instance_id]}
  end
  result
end