require "commands/server" require 'commands/commands_storage' module StackCommands include ServerCommands extend self def sync_stack_till_not_in_progress_proc lambda do |out, stack, mongo| # two tries each 2 seconds, then 5 tries each 10 seconds, then 5 tries each minute. sleep_times = [2]*2 + [10]*5 + [60]*5 begin out << "Syncing stack '#{stack.id}'...\n" sleep_times.each do |sleep_time| sleep sleep_time stack.sync_details! if stack.stack_status != 'CREATE_IN_PROGRESS' mongo.stack_update(stack) out << "Stack '#{stack.id}' status is now #{stack.stack_status}" break end out << "Next try...\n" end rescue StandardError => e logger.error e.message return 5 end end end def create_devops_servers_from_stack_resources lambda do |out, stack, mongo, owner| project = mongo.project(stack.project) deploy_env = project.deploy_envs.detect {|env| env.identifier == stack.deploy_env} provider = ::Provider::ProviderFactory.get(stack.provider) stack.resources.each do |resource| logical_name = resource['resource_name'] attrs = stack.resource(logical_name) body = { 'name' => logical_name, 'key' => attrs['key_name'] } server = extract_servers(provider, project, deploy_env, body, owner, mongo) server.private_ip = attrs['addresses']['devops-net-1'].first['addr'] end end end CommandsStorage.add_job_lambda( sync_stack_till_not_in_progress: sync_stack_till_not_in_progress_proc, create_devops_servers_from_stack_resources: create_devops_servers_from_stack_resources ) end