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