update test project worker

This commit is contained in:
Anton Chuchkalov 2015-09-03 17:03:47 +03:00
parent 871d24948b
commit 9e56624870
4 changed files with 61 additions and 45 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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