require 'elbas' include Elbas::Logger
namespace :elbas do
task :ssh do include Capistrano::DSL info "SSH commands:" env.servers.to_a.each.with_index do |server, i| info " #{i + 1}) ssh #{fetch(:user)}@#{server.hostname}" end end task :deploy do asg = Elbas::AWS::AutoscaleGroup.new fetch(:aws_autoscale_group_name) info "Creating AMI from a running instance..." ami = Elbas::AWS::AMI.create asg.instances.running.sample ami.tag 'ELBAS-Deploy-group', asg.name ami.tag 'ELBAS-Deploy-id', env.timestamp.to_i.to_s info "Created AMI: #{ami.id}" info "Updating launch template with the new AMI..." launch_template = asg.launch_template.update ami info "Updated launch template, new default version = #{launch_template.version}" info "Cleaning up old AMIs..." ami.ancestors.each do |ancestor| info "Deleting old AMI: #{ancestor.id}" ancestor.delete end info "Deployment complete!" end
end