bootstrap stack servers
This commit is contained in:
parent
9fece78466
commit
d09ae85ab4
@ -49,46 +49,4 @@ module ServerCommands
|
||||
end
|
||||
end
|
||||
|
||||
def two_phase_bootstrap s, options, out
|
||||
provider = ::Provider::ProviderFactory.get(s.provider)
|
||||
mongo = ::Devops::Db.connector
|
||||
out << "\n\nBootstrap...\n"
|
||||
out.flush if out.respond_to?(:flush)
|
||||
options[:run_list] = provider.run_list
|
||||
status = bootstrap(s, options, out)
|
||||
out.flush if out.respond_to?(:flush)
|
||||
if status == 0
|
||||
DevopsLogger.logger.info "Server with id '#{s.id}' is bootstraped"
|
||||
if check_server(s)
|
||||
out << "Server #{s.chef_node_name} is created"
|
||||
else
|
||||
out << roll_back(s, provider)
|
||||
mongo.server_delete s.id
|
||||
return 5
|
||||
end
|
||||
out << "\n"
|
||||
out.flush if out.respond_to?(:flush)
|
||||
|
||||
run_list = s.run_list + provider.run_list
|
||||
out << "\nRun list: #{run_list.inspect}"
|
||||
# s.options[:run_list] += run_list
|
||||
KnifeCommands.set_run_list(s.chef_node_name, run_list)
|
||||
status = deploy_server(out, s, cert_path)
|
||||
if status != 0
|
||||
msg = "Failed on chef-client with project run list, server with id '#{s.id}'"
|
||||
DevopsLogger.logger.error msg
|
||||
out << "\n" + msg + "\n"
|
||||
end
|
||||
else
|
||||
msg = "Failed while bootstraping server with id '#{s.id}'"
|
||||
DevopsLogger.logger.error msg
|
||||
out << "\n" + msg + "\n"
|
||||
out << roll_back(s, provider)
|
||||
mongo.server_delete s.id
|
||||
end
|
||||
return status
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
@ -28,6 +28,7 @@ module Devops
|
||||
@knife_instance = KnifeFactory.instance
|
||||
@server = server
|
||||
@out = out
|
||||
@out.class.send(:define_method, :flush) { } unless @out.respond_to?(:flush)
|
||||
end
|
||||
|
||||
def project= p
|
||||
@ -44,7 +45,7 @@ module Devops
|
||||
mongo = ::Devops::Db.connector
|
||||
begin
|
||||
@out << "Create server...\n"
|
||||
@out.flush if @out.respond_to?(:flush)
|
||||
@out.flush
|
||||
|
||||
@server.run_list = options["run_list"] || []
|
||||
@server.chef_node_name = options["name"]
|
||||
@ -61,7 +62,7 @@ module Devops
|
||||
@out << "\nAfter create hooks...\n"
|
||||
res[:after] = self.run_hook :after_create
|
||||
|
||||
@out.flush if @out.respond_to?(:flush)
|
||||
@out.flush
|
||||
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
|
||||
unless options["without_bootstrap"]
|
||||
@server.run_list = Set.new.merge(@project.run_list).merge(@deploy_env.run_list).merge(@server.run_list)
|
||||
@ -69,7 +70,7 @@ module Devops
|
||||
bootstrap_options = {
|
||||
bootstrap_template: i.bootstrap_template
|
||||
}
|
||||
return bootstrap(bootstrap_options)
|
||||
return two_phase_bootstrap(bootstrap_options)
|
||||
else
|
||||
return 0
|
||||
end
|
||||
@ -83,6 +84,8 @@ module Devops
|
||||
end
|
||||
|
||||
def bootstrap options
|
||||
@out << "\n\nBootstrap...\n"
|
||||
@out.flush
|
||||
k = Devops::Db.connector.key(@server.key)
|
||||
cert_path = k.path
|
||||
@out << "\nBefore bootstrap hooks...\n"
|
||||
@ -102,7 +105,7 @@ module Devops
|
||||
@out << "\nPublic IP is present\n"
|
||||
end
|
||||
@out << "\nWaiting for SSH..."
|
||||
@out.flush if @out.respond_to?(:flush)
|
||||
@out.flush
|
||||
i = 0
|
||||
cmd = "ssh -i #{cert_path} -q #{@server.remote_user}@#{ip} 'exit' 2>&1"
|
||||
begin
|
||||
@ -128,8 +131,10 @@ module Devops
|
||||
@out << "After bootstrap hooks...\n"
|
||||
res = self.run_hook(:after_bootstrap, @out)
|
||||
@out << "Done\n"
|
||||
DevopsLogger.logger.info "Server with id '#{@server.id}' is bootstraped"
|
||||
else
|
||||
end
|
||||
@out.flush
|
||||
r
|
||||
end
|
||||
|
||||
@ -148,6 +153,42 @@ module Devops
|
||||
bootstrap_options
|
||||
end
|
||||
|
||||
def two_phase_bootstrap options
|
||||
provider = @server.provider_instance
|
||||
mongo = ::Devops::Db.connector
|
||||
options[:run_list] = provider.run_list
|
||||
status = bootstrap(options)
|
||||
if status == 0
|
||||
if check_server
|
||||
@out << "Server #{@server.chef_node_name} is created"
|
||||
else
|
||||
@out << roll_back
|
||||
mongo.server_delete @server.id
|
||||
return 5
|
||||
end
|
||||
@out << "\n"
|
||||
@out.flush
|
||||
|
||||
run_list = @server.run_list + provider.run_list
|
||||
@out << "\nRun list: #{run_list.inspect}"
|
||||
# s.options[:run_list] += run_list
|
||||
@knife_instance.set_run_list(@server.chef_node_name, run_list)
|
||||
status = deploy_server({})
|
||||
if status != 0
|
||||
msg = "Failed on chef-client with project run list, server with id '#{@server.id}'"
|
||||
DevopsLogger.logger.error msg
|
||||
@out << "\n" + msg + "\n"
|
||||
end
|
||||
else
|
||||
msg = "Failed while bootstraping server with id '#{s.id}'"
|
||||
DevopsLogger.logger.error msg
|
||||
@out << "\n" + msg + "\n"
|
||||
@out << roll_back
|
||||
mongo.server_delete @server.id
|
||||
end
|
||||
return status
|
||||
end
|
||||
|
||||
def check_server
|
||||
@knife_instance.chef_node_list.include?(@server.chef_node_name) and @knife_instance.chef_client_list.include?(@server.chef_node_name)
|
||||
end
|
||||
@ -218,7 +259,7 @@ module Devops
|
||||
File.open(File.join(dir, file), "w") do |f|
|
||||
f.write json
|
||||
end
|
||||
@out.flush if @out.respond_to?(:flush)
|
||||
@out.flush
|
||||
cmd << " -j http://#{DevopsConfig.config[:address]}:#{DevopsConfig.config[:port]}/#{DevopsConfig.config[:url_prefix]}/v2.0/deploy/data/#{file}"
|
||||
end
|
||||
ip = if @server.public_ip.nil?
|
||||
@ -227,7 +268,7 @@ module Devops
|
||||
@out << "Public IP detected\n"
|
||||
@server.public_ip
|
||||
end
|
||||
@out.flush if @out.respond_to?(:flush)
|
||||
@out.flush
|
||||
k = Devops::Db.connector.key(@server.key)
|
||||
lline = @knife_instance.ssh_stream(@out, cmd, ip, @server.remote_user, k.path)
|
||||
r = /Chef\sClient\sfinished/i
|
||||
|
||||
@ -17,7 +17,10 @@ class StackBootstrapWorker < Worker
|
||||
save_report(mongo, stack, file)
|
||||
|
||||
sync_bootstrap_proc.call(out, stack, mongo)
|
||||
persist_stack_servers!(stack, provider)
|
||||
servers = persist_stack_servers!(stack, provider)
|
||||
statuses = servers.map do |s|
|
||||
Devops::Executor::ServerExecutor.new(s, out).two_phase_bootstrap({})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -40,7 +43,7 @@ class StackBootstrapWorker < Worker
|
||||
project = mongo.project(stack.project)
|
||||
deploy_env = project.deploy_env(stack.deploy_env)
|
||||
|
||||
stack.resources.each do |resource|
|
||||
stack.resources.map do |resource|
|
||||
extended_info = stack.resource(resource.resource_name)
|
||||
server_attrs = {
|
||||
'provider' => provider.name,
|
||||
@ -58,6 +61,7 @@ class StackBootstrapWorker < Worker
|
||||
|
||||
server = ::Devops::Model::Server.new(server_attrs)
|
||||
mongo.server_insert(server)
|
||||
server
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user