fluke/devops-service/commands/stack.rb
2015-09-21 20:27:43 +03:00

55 lines
1.5 KiB
Ruby

module StackCommands
extend self
def self.result_codes
{
stack_rolled_back: 1,
unkown_status: 2,
timeout: 3,
error: 5
}
end
def self.result_code(code)
result_codes.fetch(code)
end
def sync_stack_proc
lambda do |out, stack, mongo|
# 5 tries each 5 seconds, then 200 tries each 10 seconds
sleep_times = [5]*5 + [10]*200
begin
out << "Syncing stack '#{stack.id}'...\n"
sleep_times.each do |sleep_time|
sleep sleep_time
stack.sync_details!
case stack.stack_status
when 'CREATE_IN_PROGRESS'
out << "."
out.flush
when 'CREATE_COMPLETE'
mongo.stack_update(stack)
out << "\nStack '#{stack.id}' status is now #{stack.stack_status}\n"
out.flush
return 0
when 'ROLLBACK_COMPLETE'
out << "\nStack '#{stack.id}' status is rolled back\n"
return StackCommands.result_code(:stack_rolled_back)
else
out.puts "\nUnknown stack status: '#{stack.stack_status}'"
return StackCommands.result_code(:unkown_status)
end
end
out.puts "Stack hasn't synced in #{sleep_times.inject(&:+)} seconds."
return StackCommands.result_code(:timeout)
rescue StandardError => e
logger.error e.message
out << "Error: #{e.message}\n"
return StackCommands.result_code(:error)
end
end
end
end