Merge branch '#840' into features

This commit is contained in:
amartynov 2015-11-10 12:15:47 +03:00
commit 9dbeacb7d6
4 changed files with 57 additions and 35 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)