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