59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
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
|