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