class Stax::Cmd::Asg

Constants

COLORS

Public Instance Methods

filter_asgs(asgs, groups) click to toggle source
# File lib/stax/mixin/asg.rb, line 36
def filter_asgs(asgs, groups)
  return asgs unless groups
  ids = groups.map { |g| prepend(:asg, g) }
  asgs.select { |g| ids.include?(g.logical_resource_id) }
end
ls() click to toggle source
# File lib/stax/mixin/asg.rb, line 44
def ls
  print_table Aws::Asg.describe(stack_asgs.map(&:physical_resource_id)).map { |a|
    [
      a.auto_scaling_group_name[0,40],
      a.launch_configuration_name[0,40],
      "#{a.instances.length}/#{a.desired_capacity}",
      "#{a.min_size}-#{a.max_size}",
      a.availability_zones.map{ |az| az[-1,1] }.sort.join(','),
      a.created_time
    ]
  }
end
old() click to toggle source
# File lib/stax/mixin/asg.rb, line 87
def old
  Aws::Asg.describe(stack_asgs.map(&:physical_resource_id)).map do |a|
    Aws::Asg.instances(a.auto_scaling_group_name).select do |i|
      i.launch_configuration_name != a.launch_configuration_name
    end
  end.flatten.tap do |list|
    print_table list.map { |i| [i.instance_id, i.auto_scaling_group_name, i.launch_configuration_name] }
    if options[:terminate]
      list.each do |i|
        yes?("Terminate #{i.instance_id}?", :yellow) && Aws::Asg.terminate(i.instance_id, options[:decrement])
      end
    end
  end
end
scale() click to toggle source
# File lib/stax/mixin/asg.rb, line 106
def scale
  opt = options.slice(*%w[desired_capacity min_size max_size])
  fail_task('No change requested') if opt.empty?
  stack_asgs.each do |a|
    debug("Scaling to #{opt} for #{a.logical_resource_id} #{a.physical_resource_id}")
    Aws::Asg.update(a.physical_resource_id, opt)
  end
end
stack_asgs() click to toggle source
# File lib/stax/mixin/asg.rb, line 31
def stack_asgs
  a = Aws::Cfn.resources_by_type(my.stack_name, 'AWS::AutoScaling::AutoScalingGroup')
  filter_asgs(a, options[:groups])
end
status() click to toggle source
# File lib/stax/mixin/asg.rb, line 58
def status
  stack_asgs.each do |asg|
    debug("ASG status for #{asg.physical_resource_id}")
    print_table Aws::Asg.instances(asg.physical_resource_id).map { |i|
      [
        i.instance_id,
        i.availability_zone,
        color(i.lifecycle_state, COLORS),
        color(i.health_status, COLORS),
        i.launch_configuration_name,
      ]
    }
  end
end
terminate(*ids) click to toggle source
# File lib/stax/mixin/asg.rb, line 75
def terminate(*ids)
   instances = Aws::Asg.instances(stack_asgs.map(&:physical_resource_id))
   instances.select do |i|
     ids.any? { |id| i.instance_id.match(id) }
   end.each do |i|
     yes?("Terminate #{i.instance_id}?", :yellow) && Aws::Asg.terminate(i.instance_id, options[:decrement])
   end
end