update test project worker
This commit is contained in:
parent
871d24948b
commit
9e56624870
@ -84,7 +84,6 @@ class Project < Handler
|
|||||||
when "test"
|
when "test"
|
||||||
self.options = @options_parser.test_options
|
self.options = @options_parser.test_options
|
||||||
test_handler @options_parser.args
|
test_handler @options_parser.args
|
||||||
output(output_type: :test)
|
|
||||||
else
|
else
|
||||||
@options_parser.invalid_command
|
@options_parser.invalid_command
|
||||||
end
|
end
|
||||||
@ -285,7 +284,8 @@ class Project < Handler
|
|||||||
@options_parser.invalid_test_command
|
@options_parser.invalid_test_command
|
||||||
abort(r)
|
abort(r)
|
||||||
end
|
end
|
||||||
@test = post "/project/test/#{args[2]}/#{args[3]}"
|
response = post "/project/test/#{args[2]}/#{args[3]}"
|
||||||
|
puts response.inspect
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|||||||
@ -201,19 +201,14 @@ module Devops
|
|||||||
raise InvalidRecord.new(msg)
|
raise InvalidRecord.new(msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
dir = DevopsConfig[:report_dir_v2]
|
uri = Worker.start_async(ProjectTestWorker, @request,
|
||||||
uri = URI.parse(request.url)
|
project: project.id,
|
||||||
p = {
|
deploy_env: env.identifier,
|
||||||
:project => project.id,
|
user: @request.env['REMOTE_USER']
|
||||||
:env => env.identifier,
|
)
|
||||||
:user => @request.env['REMOTE_USER']
|
|
||||||
}
|
|
||||||
jid = ProjectTestWorker.perform_async(dir, p, DevopsConfig.config)
|
|
||||||
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
|
||||||
DevopsLogger.logger.info "Job '#{jid}' has been created"
|
|
||||||
uri.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/" + jid
|
|
||||||
sleep 1
|
sleep 1
|
||||||
return [uri.to_s]
|
return [uri]
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_roles project_id, envs
|
def create_roles project_id, envs
|
||||||
|
|||||||
@ -112,20 +112,29 @@ module Devops
|
|||||||
ip = @server.public_ip
|
ip = @server.public_ip
|
||||||
@out << "\nPublic IP is present\n"
|
@out << "\nPublic IP is present\n"
|
||||||
end
|
end
|
||||||
@out << "\nWaiting for SSH..."
|
|
||||||
@out.flush
|
address = "#{@server.remote_user}@#{ip}"
|
||||||
i = 0
|
|
||||||
cmd = "ssh -i #{cert_path} -q #{@server.remote_user}@#{ip} 'exit'"
|
cmd = 'ssh '
|
||||||
@out << "Test command: '#{cmd}'\n"
|
cmd << "-i #{cert_path} "
|
||||||
|
cmd << '-q '
|
||||||
|
cmd << '-o ConnectTimeout=2 -o ConnectionAttempts=1 '
|
||||||
|
cmd << "#{address} 'exit'"
|
||||||
cmd << " 2>&1"
|
cmd << " 2>&1"
|
||||||
|
|
||||||
|
@out << "\nWaiting for SSH..."
|
||||||
|
@out << "Test command: '#{cmd}'\n"
|
||||||
|
@out.flush
|
||||||
|
|
||||||
|
retries_amount = 0
|
||||||
begin
|
begin
|
||||||
sleep(5)
|
sleep(5)
|
||||||
res = `#{cmd}`
|
res = `#{cmd}`
|
||||||
i += 1
|
retries_amount += 1
|
||||||
if i == 120
|
if retries_amount == max_retries_amount
|
||||||
@out << "\nCan not connect to #{@server.remote_user}@#{ip}"
|
@out << "\nCan not connect to #{address}"
|
||||||
@out << "\n" + res
|
@out << "\n" + res
|
||||||
DevopsLogger.logger.error "Can not connect with command 'ssh -i #{cert_path} #{@server.remote_user}@#{ip}':\n#{res}"
|
DevopsLogger.logger.error "Can not connect with command '#{cmd}':\n#{res}"
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
raise ArgumentError.new("Can not connect with command '#{cmd}' ") unless $?.success?
|
raise ArgumentError.new("Can not connect with command '#{cmd}' ") unless $?.success?
|
||||||
@ -366,6 +375,12 @@ module Devops
|
|||||||
out << "New deploy run list: #{deploy_info["run_list"].join(", ")}\nRun list has been generated\n\n"
|
out << "New deploy run list: #{deploy_info["run_list"].join(", ")}\nRun list has been generated\n\n"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def max_retries_amount
|
||||||
|
120
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,28 +10,20 @@ require "db/mongo/models/report"
|
|||||||
class ProjectTestWorker < Worker
|
class ProjectTestWorker < Worker
|
||||||
include StatusCommands
|
include StatusCommands
|
||||||
|
|
||||||
def perform(dir, params, conf)
|
def perform(params)
|
||||||
call(conf, nil, dir) do |provider, out, file|
|
user = params.fetch('user')
|
||||||
user = params["user"]
|
project_name = params.fetch('project')
|
||||||
DevopsLogger.logger.info "Test project '#{params["project"]}' and env '#{params["env"]}' (user - #{user})"
|
deploy_env_name = params.fetch('deploy_env')
|
||||||
mongo = Devops::Db.connector
|
|
||||||
project = mongo.project(params["project"])
|
call(nil) do |not_used, out, file|
|
||||||
env = project.deploy_env(params["env"])
|
DevopsLogger.logger.info "Test project '#{project_name}' and env '#{deploy_env_name}' (user - #{user})"
|
||||||
o = {
|
project = mongo.project(project_name)
|
||||||
"file" => file,
|
env = project.deploy_env(deploy_env_name)
|
||||||
"_id" => jid,
|
save_report(file, user, project_name, deploy_env_name)
|
||||||
"created_by" => user,
|
|
||||||
"project" => params["project"],
|
|
||||||
"deploy_env" => params["env"],
|
|
||||||
"type" => Report::PROJECT_TEST_TYPE
|
|
||||||
}
|
|
||||||
mongo.save_report(Report.new(o))
|
|
||||||
|
|
||||||
executor = Devops::Executor::ServerExecutor.new(nil, out)
|
executor = Devops::Executor::ServerExecutor.new(nil, out)
|
||||||
executor.project = project
|
executor.project = project
|
||||||
executor.deploy_env = env
|
executor.deploy_env = env
|
||||||
params["created_by"] = user
|
|
||||||
|
|
||||||
|
|
||||||
result = {:servers => []}
|
result = {:servers => []}
|
||||||
project.deploy_envs = [ env ]
|
project.deploy_envs = [ env ]
|
||||||
@ -41,7 +33,7 @@ class ProjectTestWorker < Worker
|
|||||||
t1 = Time.now
|
t1 = Time.now
|
||||||
out << "\n=== Create server ===\n"
|
out << "\n=== Create server ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
if executor.create_server({"without_bootstrap" => true})
|
if executor.create_server("without_bootstrap" => true)
|
||||||
out << "\n=== Create server - OK ===\n"
|
out << "\n=== Create server - OK ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
t2 = Time.now
|
t2 = Time.now
|
||||||
@ -64,7 +56,7 @@ class ProjectTestWorker < Worker
|
|||||||
out << "\n=== Check server ===\n"
|
out << "\n=== Check server ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
if executor.check_server
|
if executor.check_server
|
||||||
# mongo.server_insert s
|
# mongo.server_insert s
|
||||||
out << "\n=== OK, server has been inserted ===\n"
|
out << "\n=== OK, server has been inserted ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
end
|
end
|
||||||
@ -79,7 +71,7 @@ class ProjectTestWorker < Worker
|
|||||||
t1 = Time.now
|
t1 = Time.now
|
||||||
out << "\n=== Delete server ===\n"
|
out << "\n=== Delete server ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
r = executor.delete_from_chef_server
|
r = executor.delete_from_chef_server(s.chef_node_name)
|
||||||
begin
|
begin
|
||||||
r[:server] = s.provider_instance.delete_server s
|
r[:server] = s.provider_instance.delete_server s
|
||||||
out << "\n=== Delete server - OK ===\n"
|
out << "\n=== Delete server - OK ===\n"
|
||||||
@ -88,7 +80,7 @@ class ProjectTestWorker < Worker
|
|||||||
status = 3
|
status = 3
|
||||||
out << "\n=== Delete server - FAIL ===\n"
|
out << "\n=== Delete server - FAIL ===\n"
|
||||||
out.flush
|
out.flush
|
||||||
r[:server] = "Server with id '#{s.id}' not found in '#{provider.name}' servers"
|
r[:server] = "Server with id '#{s.id}' not found in '#{s.provider_instance.name}' servers"
|
||||||
DevopsLogger.logger.warn r[:server]
|
DevopsLogger.logger.warn r[:server]
|
||||||
end
|
end
|
||||||
mongo.server_delete s.id
|
mongo.server_delete s.id
|
||||||
@ -106,4 +98,18 @@ class ProjectTestWorker < Worker
|
|||||||
status
|
status
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def save_report(file, user, project_name, deploy_env_name)
|
||||||
|
report = {
|
||||||
|
"file" => file,
|
||||||
|
"_id" => jid,
|
||||||
|
"created_by" => user,
|
||||||
|
"project" => project_name,
|
||||||
|
"deploy_env" => deploy_env_name,
|
||||||
|
"type" => Devops::Model::Report::PROJECT_TEST_TYPE
|
||||||
|
}
|
||||||
|
mongo.save_report(Devops::Model::Report.new(report))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user