2016-03-30 12:05:59 +03:00
|
|
|
require 'lib/executors/stack_executor'
|
2015-09-21 15:54:33 +03:00
|
|
|
|
2015-07-30 13:18:55 +03:00
|
|
|
class StackBootstrapWorker < Worker
|
2015-07-20 18:59:26 +03:00
|
|
|
|
2016-04-04 13:17:07 +03:00
|
|
|
# @options:
|
|
|
|
|
# 'stack_attributes', required
|
2015-07-23 12:54:36 +03:00
|
|
|
def perform(options)
|
2016-02-10 20:39:49 +03:00
|
|
|
call do
|
2016-04-04 13:17:07 +03:00
|
|
|
puts_and_flush JSON.pretty_generate(options)
|
2016-02-10 20:39:49 +03:00
|
|
|
stack_attrs = options.fetch('stack_attributes')
|
|
|
|
|
save_report(stack_attrs)
|
2015-09-01 16:31:31 +03:00
|
|
|
|
2016-04-15 17:05:50 +03:00
|
|
|
@stack = executor.create_stack(stack_attrs)
|
2016-04-20 14:48:33 +03:00
|
|
|
|
2016-03-30 12:05:59 +03:00
|
|
|
if !executor.wait_till_stack_is_created
|
2016-01-31 17:52:11 +03:00
|
|
|
puts_and_flush "Stack creating error"
|
2016-06-29 16:48:31 +03:00
|
|
|
1
|
|
|
|
|
else
|
|
|
|
|
persist_and_bootstrap_servers
|
2015-08-12 12:24:48 +03:00
|
|
|
end
|
2015-07-20 18:59:26 +03:00
|
|
|
end
|
|
|
|
|
end
|
2015-07-30 02:14:45 +03:00
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
2016-03-30 12:05:59 +03:00
|
|
|
def executor
|
|
|
|
|
@executor ||= Devops::Executor::StackExecutor.new(out: out)
|
|
|
|
|
end
|
|
|
|
|
|
2016-06-29 16:48:31 +03:00
|
|
|
def persist_and_bootstrap_servers
|
|
|
|
|
executor.persist_new_servers
|
|
|
|
|
@stack.unlock_persisting!
|
|
|
|
|
if @stack.without_bootstrap?
|
|
|
|
|
puts_and_flush "\n\nBootstrap has been skipped. Stack has been successfully created."
|
|
|
|
|
0
|
|
|
|
|
else
|
|
|
|
|
bootstrap_or_rollback_if_failed(skip_rollback: @stack.skip_rollback?)
|
|
|
|
|
end
|
|
|
|
|
rescue => e
|
|
|
|
|
puts_and_flush "\nAn error occured."
|
|
|
|
|
rollback_stack! unless @stack.skip_rollback?
|
|
|
|
|
raise e
|
|
|
|
|
end
|
|
|
|
|
|
2016-03-30 12:05:59 +03:00
|
|
|
def bootstrap_or_rollback_if_failed(options)
|
2016-04-04 13:17:07 +03:00
|
|
|
bootstrap_result = executor.bootstrap_just_persisted(jid)
|
2016-03-30 12:05:59 +03:00
|
|
|
puts_and_flush Devops::Messages.t("worker.stack_bootstrap.bootstrap_result.#{bootstrap_result.reason}")
|
2016-04-22 12:18:45 +03:00
|
|
|
if bootstrap_result.bootstrap_error?
|
|
|
|
|
if options[:skip_rollback]
|
2016-04-22 15:43:59 +03:00
|
|
|
puts_and_flush "\nSkip rollback because skip_rollback option set to true."
|
2016-04-22 12:18:45 +03:00
|
|
|
else
|
|
|
|
|
rollback_stack!
|
|
|
|
|
end
|
2016-03-30 12:05:59 +03:00
|
|
|
end
|
|
|
|
|
bootstrap_result.code
|
2016-01-31 17:52:11 +03:00
|
|
|
end
|
|
|
|
|
|
2015-09-21 15:54:33 +03:00
|
|
|
|
2016-03-30 12:05:59 +03:00
|
|
|
def rollback_stack!
|
2016-01-31 17:52:11 +03:00
|
|
|
puts_and_flush "\nStart rollback of a stack"
|
2016-04-15 15:51:52 +03:00
|
|
|
executor.delete_stack
|
|
|
|
|
puts_and_flush "Stack rollback has been completed"
|
2015-09-01 16:31:31 +03:00
|
|
|
end
|
|
|
|
|
|
2016-02-10 20:39:49 +03:00
|
|
|
def save_report(stack_attrs)
|
|
|
|
|
update_report(
|
2015-09-01 16:31:31 +03:00
|
|
|
"created_by" => stack_attrs['owner'],
|
|
|
|
|
"project" => stack_attrs["project"],
|
|
|
|
|
"deploy_env" => stack_attrs["deploy_env"],
|
2015-11-05 16:47:12 +03:00
|
|
|
"type" => ::Devops::Model::Report::STACK_TYPE,
|
|
|
|
|
"subreports" => [],
|
|
|
|
|
"stack" => stack_attrs['name']
|
2015-09-01 16:31:31 +03:00
|
|
|
)
|
|
|
|
|
end
|
2015-07-20 18:59:26 +03:00
|
|
|
end
|