fluke/devops-service/workers/stack_bootstrap_worker.rb

91 lines
2.5 KiB
Ruby
Raw Normal View History

2016-03-30 12:05:59 +03:00
require 'lib/executors/stack_executor'
2015-09-21 15:54:33 +03:00
class StackBootstrapWorker < Worker
2015-07-20 18:59:26 +03:00
# options must contain 'stack_attributes'
2015-07-23 12:54:36 +03:00
def perform(options)
call do
stack_attrs = options.fetch('stack_attributes')
2015-09-01 16:31:31 +03:00
without_bootstrap = stack_attrs.delete('without_bootstrap')
2016-03-30 12:05:59 +03:00
skip_rollback = false # take it from options in future
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
save_report(stack_attrs)
2015-09-01 16:31:31 +03:00
2016-03-30 12:05:59 +03:00
create_stack(stack_attrs)
if !executor.wait_till_stack_is_created
puts_and_flush "Stack creating error"
2016-03-25 14:50:22 +03:00
return 1
end
begin
2016-03-29 21:32:18 +03:00
persist_stack_servers
2016-03-30 12:05:59 +03:00
if without_bootstrap
0
else
bootstrap_or_rollback_if_failed(skip_rollback: skip_rollback)
end
2016-03-25 14:50:22 +03:00
rescue StandardError => e
puts_and_flush "\nAn error occured."
2016-03-30 12:05:59 +03:00
rollback_stack! unless skip_rollback
2016-03-25 14:50:22 +03:00
raise e
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
def create_stack(stack_attrs)
@stack = executor.create_stack(stack_attrs)
end
def persist_stack_servers
2016-03-30 12:05:59 +03:00
@servers_by_priorities = executor.persist_stack_servers[:just_persisted_by_priority]
end
# options should contain :skip_rollback
def bootstrap_or_rollback_if_failed(options)
bootstrap_result = bootstrap_servers_by_priority
puts_and_flush Devops::Messages.t("worker.stack_bootstrap.bootstrap_result.#{bootstrap_result.reason}")
if bootstrap_result.bootstrap_error? && !options[:skip_rollback]
rollback_stack!
end
bootstrap_result.code
end
def bootstrap_servers_by_priority
2016-03-29 21:32:18 +03:00
out.puts "Bootstrapping just persisted servers"
@servers_by_priorities.each do |priority, servers|
out.puts "Servers with priority '#{priority}': #{servers.map(&:id).join(", ")}"
end
out.flush
2016-03-30 12:05:59 +03:00
executor.bootstrap_servers_by_priority(@servers_by_priorities, jid)
2015-09-21 15:54:33 +03:00
end
2016-03-30 12:05:59 +03:00
def rollback_stack!
puts_and_flush "\nStart rollback of a stack"
begin
2016-03-30 12:05:59 +03:00
executor.delete_stack
puts_and_flush "Stack rollback has been completed"
2016-03-30 12:05:59 +03:00
rescue StandardError
puts_and_flush "Stack rollback failed"
end
2015-09-01 16:31:31 +03:00
end
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