class CloudFormationTool::CLI::Recycle

Public Instance Methods

execute() click to toggle source
# File lib/cloud_formation_tool/cli/recycle.rb, line 10
def execute
  st = CloudFormation::Stack.new(stack_name)
  st.asgroups.select do |res|
    asg_name.nil? or (res.logical_resource_id == asg_name)
  end.collect do |res|
    Thread.new do
      grp = res.group
      torecycle = cursize = grp.instances.size
      puts "#{grp.name}: Recyclying #{cursize} instance" + (cursize > 1 ? "s" : "")
      while torecycle > 0
        grp.set_desired_capacity(desired_capacity: (cursize + 1))
        while grp.instances.size != (cursize + 1)
          sleep 5
          grp.reload
        end 
        grp.set_desired_capacity(desired_capacity: cursize)
        while grp.instances.size != cursize
          sleep 5
          grp.reload
        end 
        torecycle -= 1
        puts "#{grp.name}: Left to recycle - #{torecycle}"
      end
    end
  end.each(&:join).length > 0 or error "No valid Autoscaling groups found named #{asg_name}"
end