Merge branch '#840' into features
This commit is contained in:
commit
9dbeacb7d6
@ -123,17 +123,15 @@ module Devops
|
||||
|
||||
# TODO: check bootstrap template name
|
||||
def bootstrap_server_stream out
|
||||
s, rl, bt = prepare_bootstrap_server
|
||||
options = prepare_bootstrap_server
|
||||
s = options.delete(:server)
|
||||
status = []
|
||||
cert = Devops::Db.connector.key s.key
|
||||
DevopsLogger.logger.debug "Bootstrap certificate path: #{cert.path}"
|
||||
#bootstrap s, out, cert.path, logger
|
||||
options = {
|
||||
:bootstrap_template => bt,
|
||||
:cert_path => cert.path,
|
||||
:run_list => rl
|
||||
}
|
||||
r = two_phase_bootstrap s, options, out
|
||||
options[:cert_path] = cert.path
|
||||
executor = Devops::Executor::ServerExecutor.new(s, out)
|
||||
r = executor.two_phase_bootstrap(options)
|
||||
str = nil
|
||||
r = if check_server(s)
|
||||
Devops::Db.connector.server_set_chef_node_name s
|
||||
@ -152,17 +150,16 @@ module Devops
|
||||
end
|
||||
|
||||
def bootstrap_server
|
||||
server, rl, bootstrap_template = prepare_bootstrap_server
|
||||
dir = DevopsConfig[:report_dir_v2]
|
||||
files = []
|
||||
uri = URI.parse(@request.url)
|
||||
options = prepare_bootstrap_server
|
||||
s = options.delete(:server)
|
||||
options[:provider_name] = s.provider
|
||||
options[:server_attrs] = s.to_mongo_hash
|
||||
options[:owner] = parser.current_user
|
||||
# dir = DevopsConfig[:report_dir_v2]
|
||||
# files = []
|
||||
# uri = URI.parse(@request.url)
|
||||
|
||||
uri = Worker.start_async(BootstrapWorker, @request,
|
||||
provider_name: server.provider,
|
||||
server_attrs: server.to_mongo_hash,
|
||||
bootstrap_template: bootstrap_template,
|
||||
owner: parser.current_user
|
||||
)
|
||||
uri = Worker.start_async(BootstrapWorker, @request, options)
|
||||
|
||||
sleep 1
|
||||
[uri]
|
||||
@ -175,6 +172,7 @@ module Devops
|
||||
rl = body["run_list"]
|
||||
t = body["bootstrap_template"]
|
||||
s = Devops::Db.connector.server_by_instance_id(id)
|
||||
res = {server: s}
|
||||
|
||||
p = Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user
|
||||
d = p.deploy_env(s.deploy_env)
|
||||
@ -185,9 +183,11 @@ module Devops
|
||||
unless t.nil?
|
||||
templates = get_templates
|
||||
halt_response("Invalid bootstrap template '#{t}', available values: #{templates.join(", ")}", 400) unless templates.include?(t)
|
||||
res[:bootstrap_template] = t
|
||||
end
|
||||
s.chef_node_name = name || provider.create_default_chef_node_name(s)
|
||||
return s, rl || d.run_list, t
|
||||
res[:run_list] = rl || d.run_list
|
||||
return res
|
||||
end
|
||||
|
||||
def unbootstrap_server id
|
||||
|
||||
@ -193,8 +193,10 @@ module Devops
|
||||
@out << "After bootstrap hooks...\n"
|
||||
res = self.run_hook(:after_bootstrap, @out)
|
||||
@out << "Done\n"
|
||||
msg = "Server with id '#{@server.id}' is bootstraped"
|
||||
@out.puts msg
|
||||
@out.flush
|
||||
DevopsLogger.logger.info "Server with id '#{@server.id}' is bootstraped"
|
||||
DevopsLogger.logger.info msg
|
||||
r
|
||||
else
|
||||
@out << "Can not bootstrap node '#{@server.id}', error code: #{r}"
|
||||
@ -218,7 +220,13 @@ module Devops
|
||||
bootstrap_options
|
||||
end
|
||||
|
||||
def prepare_two_phase_bootstrap options
|
||||
@out << "Prepare bootstrap...\n"
|
||||
@out << "Done\n"
|
||||
end
|
||||
|
||||
def two_phase_bootstrap options
|
||||
prepare_two_phase_bootstrap(options)
|
||||
# bootstrap phase
|
||||
begin
|
||||
provider = @server.provider_instance
|
||||
@ -230,7 +238,8 @@ module Devops
|
||||
if check_server
|
||||
@out << "Server #{@server.chef_node_name} is created"
|
||||
else
|
||||
@out << roll_back
|
||||
@out.puts "Can not find client or node on chef-server"
|
||||
roll_back
|
||||
@out.flush
|
||||
mongo.server_delete @server.id
|
||||
return result_code(:server_not_in_chef_nodes)
|
||||
@ -259,7 +268,7 @@ module Devops
|
||||
@out << "\nComputed run list: #{run_list.join(", ")}"
|
||||
@out.flush
|
||||
@knife_instance.set_run_list(@server.chef_node_name, run_list)
|
||||
deploy_info = @project.deploy_info(@deploy_env)
|
||||
deploy_info = options[:deploy_info] || @project.deploy_info(@deploy_env)
|
||||
deploy_status = deploy_server(deploy_info)
|
||||
if deploy_status == 0
|
||||
0
|
||||
@ -348,15 +357,20 @@ module Devops
|
||||
cmd = "chef-client --no-color"
|
||||
if deploy_info["use_json_file"]
|
||||
deploy_info.delete("use_json_file")
|
||||
@out << "Deploy Input Parameters:\n"
|
||||
json = JSON.pretty_generate(deploy_info)
|
||||
@out << json
|
||||
@out << "\n"
|
||||
file = "#{@server.project}_#{@server.deploy_env}_#{Time.new.to_i}"
|
||||
json = nil
|
||||
dir = DevopsConfig.config[:project_info_dir]
|
||||
file = deploy_info["json_file"] || "#{@server.project}_#{@server.deploy_env}_#{Time.new.to_i}"
|
||||
path = File.join(dir, file)
|
||||
if File.exists?(path)
|
||||
json = File.read(path)
|
||||
else
|
||||
json = JSON.pretty_generate(deploy_info)
|
||||
File.open(File.join(dir, file), "w") do |f|
|
||||
f.write json
|
||||
end
|
||||
end
|
||||
@out << "Deploy Input Parameters:\n"
|
||||
@out.puts json
|
||||
@out.flush
|
||||
cmd << " -j http://#{DevopsConfig.config[:address]}:#{DevopsConfig.config[:port]}/#{DevopsConfig.config[:url_prefix]}/v2.0/deploy/data/#{file}"
|
||||
else
|
||||
@ -426,13 +440,14 @@ module Devops
|
||||
end
|
||||
|
||||
def roll_back
|
||||
@out.puts "Trying to roll back..."
|
||||
unless @server.id.nil?
|
||||
@out << "Server '#{@server.chef_node_name}' with id '#{@server.id}' is not created\n"
|
||||
@out << delete_from_chef_server(@server.chef_node_name).values.join("\n")
|
||||
@out.puts "Server '#{@server.chef_node_name}' with id '#{@server.id}' is not created"
|
||||
@out.puts delete_from_chef_server(@server.chef_node_name).values.join("\n")
|
||||
begin
|
||||
@out << @server.provider_instance.delete_server(@server)
|
||||
@out.puts @server.provider_instance.delete_server(@server)
|
||||
rescue => e
|
||||
@out << e.message
|
||||
@out.puts e.message
|
||||
end
|
||||
@out << "\nRolled back\n"
|
||||
end
|
||||
|
||||
@ -10,16 +10,19 @@ class BootstrapWorker < Worker
|
||||
def perform(options)
|
||||
provider_name = options.fetch('provider_name')
|
||||
server_attrs = options.fetch('server_attrs')
|
||||
bootstrap_template = options.fetch('bootstrap_template')
|
||||
# bootstrap_template = options.fetch('bootstrap_template')
|
||||
owner = options.fetch('owner')
|
||||
options = convert_config(options)
|
||||
|
||||
call(provider_name) do |provider, out, file|
|
||||
server = Devops::Model::Server.new(server_attrs)
|
||||
report = save_report(file, owner, server)
|
||||
|
||||
=begin
|
||||
options = {
|
||||
bootstrap_template: bootstrap_template
|
||||
}
|
||||
=end
|
||||
executor = Devops::Executor::ServerExecutor.new(server, out)
|
||||
executor.report = report
|
||||
status = executor.two_phase_bootstrap(options)
|
||||
|
||||
@ -13,6 +13,8 @@ require "core/devops-db"
|
||||
require "providers/provider_factory"
|
||||
require "lib/knife/knife_factory"
|
||||
|
||||
|
||||
# All options keys MUST be a symbol!!!
|
||||
class Worker
|
||||
include Sidekiq::Worker
|
||||
|
||||
@ -27,7 +29,7 @@ class Worker
|
||||
end
|
||||
|
||||
def self.start_async(worker_class, request, job_options)
|
||||
jid = worker_class.perform_async(job_options.dup)
|
||||
jid = worker_class.perform_async(job_options)
|
||||
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
||||
DevopsLogger.logger.info "Job '#{jid}' has been queued"
|
||||
|
||||
@ -37,10 +39,12 @@ class Worker
|
||||
end
|
||||
|
||||
def self.start_sync(worker_class, request, job_options, out)
|
||||
stringified_options = {}
|
||||
stringified_options = job_options
|
||||
=begin
|
||||
job_options.each do |key, value|
|
||||
stringified_options[key.to_s] = value
|
||||
end
|
||||
=end
|
||||
w = worker_class.new
|
||||
w.out = out
|
||||
w.perform(stringified_options)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user