59 lines
1.8 KiB
Ruby
59 lines
1.8 KiB
Ruby
require 'lib/helpers/job_waiter'
|
|
require 'workers/bootstrap_worker'
|
|
|
|
# Starts bootstrap workers for each server in group and wait for them to end (synchroniously).
|
|
class Devops::Executor::StackExecutor
|
|
class GroupBootstrapper
|
|
include PutsAndFlush
|
|
attr_reader :out
|
|
|
|
class Result < Devops::Helpers::ResultObject
|
|
set_result_codes timeout_reached: 4
|
|
def one_of_bootstrap_errors?
|
|
false
|
|
end
|
|
end
|
|
|
|
def initialize(out, jid, servers)
|
|
@out, @jid, @servers = out, jid, servers
|
|
@server_bootstrap_jobs = {}
|
|
end
|
|
|
|
# returns array of Results
|
|
def bootstrap_group
|
|
start_workers!
|
|
::Devops::Db.connector.add_report_subreports(@jid, @server_bootstrap_jobs.values)
|
|
|
|
@server_bootstrap_jobs.map do |server_id, job_id|
|
|
result = wait_for_bootstrap_job(job_id)
|
|
puts_and_flush Devops::Messages.t("stack_executor.group_bootstrapper.result.#{result.reason}", server_id: server_id, job_id: job_id)
|
|
result
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# returns hash: {server_id => worker_job_id}
|
|
def start_workers!
|
|
@servers.each do |server|
|
|
job_id = Worker.start_async(::BootstrapWorker,
|
|
server_attrs: server.to_mongo_hash,
|
|
bootstrap_template: 'omnibus',
|
|
owner: server.created_by,
|
|
skip_rollback: true
|
|
)
|
|
@out.puts "Start bootstraping server '#{server.id}' job (job id: #{job_id})."
|
|
@server_bootstrap_jobs[server.id] = job_id
|
|
end
|
|
puts_and_flush "\n\n\n"
|
|
end
|
|
|
|
def wait_for_bootstrap_job(job_id)
|
|
result_code = Devops::Helpers::JobWaiter.new(job_id).wait
|
|
Devops::Executor::ServerOperationResult.new(result_code)
|
|
rescue Devops::Helpers::JobWaiter::TimeoutReached
|
|
Result.from_reason(:timeout_reached)
|
|
end
|
|
|
|
end
|
|
end |