2015-08-05 14:05:14 +03:00
|
|
|
require 'set'
|
2014-05-08 15:34:26 +04:00
|
|
|
require "commands/knife_commands"
|
2014-11-20 15:08:42 +03:00
|
|
|
require "commands/deploy"
|
2015-07-16 17:18:55 +03:00
|
|
|
require "exceptions/record_not_found"
|
2014-05-08 15:34:26 +04:00
|
|
|
|
|
|
|
|
module ServerCommands
|
|
|
|
|
|
2014-11-20 15:08:42 +03:00
|
|
|
include DeployCommands
|
|
|
|
|
|
2015-08-05 14:05:14 +03:00
|
|
|
def create_server project, env, params, user, out
|
|
|
|
|
provider = ::Provider::ProviderFactory.get(env.provider)
|
|
|
|
|
mongo = ::Devops::Db.connector
|
|
|
|
|
begin
|
|
|
|
|
out << "Create server...\n"
|
|
|
|
|
out.flush if out.respond_to?(:flush)
|
|
|
|
|
|
|
|
|
|
s = Devops::Model::Server.new
|
|
|
|
|
s.provider = provider.name
|
|
|
|
|
s.project = project.id
|
|
|
|
|
s.deploy_env = env.identifier
|
|
|
|
|
s.run_list = params["run_list"] || []
|
|
|
|
|
s.chef_node_name = params["name"]
|
|
|
|
|
s.key = params["key"] || provider.ssh_key
|
|
|
|
|
|
|
|
|
|
i = mongo.image env.image
|
|
|
|
|
s.remote_user = i.remote_user
|
|
|
|
|
s.created_by = user
|
|
|
|
|
|
|
|
|
|
return 3 unless s.create(provider, env.image, env.flavor, env.subnets, env.groups, out)
|
|
|
|
|
out.flush if out.respond_to?(:flush)
|
|
|
|
|
DevopsLogger.logger.info "Server with parameters: #{s.to_hash.inspect} is running"
|
|
|
|
|
unless params["without_bootstrap"]
|
|
|
|
|
s.run_list = Set.new.merge(project.run_list).merge(env.run_list).merge(s.run_list)
|
2014-10-22 15:01:55 +04:00
|
|
|
key = mongo.key(s.key)
|
|
|
|
|
s.chef_node_name = provider.create_default_chef_node_name(s) if s.chef_node_name.nil?
|
2015-08-11 19:47:54 +03:00
|
|
|
options = {
|
|
|
|
|
bootstrap_template: i.bootstrap_template,
|
|
|
|
|
cert_path: key.path
|
|
|
|
|
}
|
|
|
|
|
return two_phase_bootstrap(s, options, out)
|
2015-08-05 14:05:14 +03:00
|
|
|
else
|
|
|
|
|
return 0
|
2014-10-22 15:01:55 +04:00
|
|
|
end
|
2015-08-05 14:05:14 +03:00
|
|
|
rescue => e
|
|
|
|
|
DevopsLogger.logger.error e.message
|
|
|
|
|
DevopsLogger.logger.warn roll_back(s, provider)
|
|
|
|
|
mongo.server_delete s.id
|
|
|
|
|
return 5
|
2014-10-22 15:01:55 +04:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2015-08-11 19:47:54 +03:00
|
|
|
def two_phase_bootstrap s, options, out
|
2015-08-10 13:35:52 +03:00
|
|
|
provider = ::Provider::ProviderFactory.get(s.provider)
|
2015-07-30 15:37:43 +03:00
|
|
|
mongo = ::Devops::Db.connector
|
2015-08-04 13:20:35 +03:00
|
|
|
out << "\n\nBootstrap...\n"
|
2015-07-30 15:37:43 +03:00
|
|
|
out.flush if out.respond_to?(:flush)
|
2015-08-11 19:47:54 +03:00
|
|
|
options[:run_list] = provider.run_list
|
|
|
|
|
status = bootstrap(s, options, out)
|
2015-07-30 15:37:43 +03:00
|
|
|
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"
|
2014-11-20 15:08:42 +03:00
|
|
|
else
|
|
|
|
|
out << roll_back(s, provider)
|
|
|
|
|
mongo.server_delete s.id
|
2015-07-30 15:37:43 +03:00
|
|
|
return 5
|
|
|
|
|
end
|
|
|
|
|
out << "\n"
|
|
|
|
|
out.flush if out.respond_to?(:flush)
|
|
|
|
|
|
2015-08-11 19:47:54 +03:00
|
|
|
run_list = s.run_list + provider.run_list
|
2015-08-05 14:05:14 +03:00
|
|
|
out << "\nRun list: #{run_list.inspect}"
|
|
|
|
|
# s.options[:run_list] += run_list
|
|
|
|
|
KnifeCommands.set_run_list(s.chef_node_name, run_list)
|
2015-07-30 15:37:43 +03:00
|
|
|
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"
|
2014-11-20 15:08:42 +03:00
|
|
|
end
|
2015-07-30 15:37:43 +03:00
|
|
|
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
|
2014-11-20 15:08:42 +03:00
|
|
|
end
|
2014-10-22 15:01:55 +04:00
|
|
|
|
2014-05-08 15:34:26 +04:00
|
|
|
|
2014-05-23 17:58:49 +04:00
|
|
|
|
2014-05-08 15:34:26 +04:00
|
|
|
end
|