Merge branch 'bug_fix' into qa
This commit is contained in:
commit
80ca2d7ad1
@ -3,6 +3,7 @@ require "date"
|
|||||||
module Connectors
|
module Connectors
|
||||||
class Report < Base
|
class Report < Base
|
||||||
include Helpers::ShowCommand,
|
include Helpers::ShowCommand,
|
||||||
|
Helpers::UpdateCommand,
|
||||||
Helpers::ListCommand
|
Helpers::ListCommand
|
||||||
|
|
||||||
def initialize(db)
|
def initialize(db)
|
||||||
|
|||||||
@ -31,7 +31,7 @@ class MongoConnector
|
|||||||
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
|
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
|
||||||
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
||||||
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
[:keys, :key, :key_insert, :key_delete] => :keys_connector,
|
||||||
[:save_report, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
[:save_report, :report_update, :report, :reports, :set_report_status, :set_report_server_data, :add_report_subreports] => :reports_connector,
|
||||||
[:insert_statistic, :search_statistic] => :statistics_connector,
|
[:insert_statistic, :search_statistic] => :statistics_connector,
|
||||||
[:provider_accounts, :provider_account_insert, :provider_account_delete, :provider_account] => :provider_accounts_connector
|
[:provider_accounts, :provider_account_insert, :provider_account_delete, :provider_account] => :provider_accounts_connector
|
||||||
)
|
)
|
||||||
|
|||||||
@ -15,12 +15,15 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
|
|||||||
before do
|
before do
|
||||||
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2))
|
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2))
|
||||||
allow(stubbed_connector).to receive(:save_report)
|
allow(stubbed_connector).to receive(:save_report)
|
||||||
|
allow(stubbed_connector).to receive(:report) { build(:report) }
|
||||||
|
allow(stubbed_connector).to receive(:report_update)
|
||||||
allow(stubbed_connector).to receive(:stack_insert)
|
allow(stubbed_connector).to receive(:stack_insert)
|
||||||
|
|
||||||
allow(worker).to receive(:stack_synchronizer) { stack_synchronizer }
|
allow(worker).to receive(:stack_synchronizer) { stack_synchronizer }
|
||||||
allow(worker).to receive(:stack_servers_bootstrapper) { stack_servers_bootstrapper }
|
allow(worker).to receive(:stack_servers_bootstrapper) { stack_servers_bootstrapper }
|
||||||
allow(worker).to receive(:stack_servers_persister) { stack_servers_persister }
|
allow(worker).to receive(:stack_servers_persister) { stack_servers_persister }
|
||||||
allow(worker).to receive(:call).and_yield(out, file)
|
allow(worker).to receive(:call).and_yield
|
||||||
|
worker.out = out
|
||||||
allow(Devops::Model::StackEc2).to receive(:create) { Devops::Model::StackEc2.new(stack_attrs) }
|
allow(Devops::Model::StackEc2).to receive(:create) { Devops::Model::StackEc2.new(stack_attrs) }
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -31,14 +34,14 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
|
|||||||
}.to raise_error KeyError
|
}.to raise_error KeyError
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'saves report about operation' do
|
it 'updates report about operation' do
|
||||||
expect(stubbed_connector).to receive(:save_report).with(instance_of(Devops::Model::Report))
|
expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report))
|
||||||
perform_without_bootstrap
|
perform_without_bootstrap
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'saves report about operation, creates stack and persists stack servers' do
|
it 'updates report about operation, creates stack and persists stack servers' do
|
||||||
allow(worker).to receive(:create_stack).and_call_original
|
allow(worker).to receive(:create_stack).and_call_original
|
||||||
expect(stubbed_connector).to receive(:save_report).with(instance_of(Devops::Model::Report)).ordered
|
expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report)).ordered
|
||||||
expect(worker).to receive(:create_stack).ordered
|
expect(worker).to receive(:create_stack).ordered
|
||||||
expect(stack_servers_persister).to receive(:persist).ordered
|
expect(stack_servers_persister).to receive(:persist).ordered
|
||||||
perform_without_bootstrap
|
perform_without_bootstrap
|
||||||
|
|||||||
@ -6,24 +6,18 @@ require "db/mongo/models/report"
|
|||||||
|
|
||||||
class BootstrapWorker < Worker
|
class BootstrapWorker < Worker
|
||||||
|
|
||||||
|
# options must contain 'server_attrs', 'owner'
|
||||||
def perform(options)
|
def perform(options)
|
||||||
server_attrs = options.fetch('server_attrs')
|
call do
|
||||||
# bootstrap_template = options.fetch('bootstrap_template')
|
owner = options.fetch('owner')
|
||||||
owner = options.fetch('owner')
|
converted_options = convert_config(options)
|
||||||
options = convert_config(options)
|
|
||||||
|
|
||||||
call() do |out, file|
|
server = Devops::Model::Server.new(options.fetch('server_attrs'))
|
||||||
server = Devops::Model::Server.new(server_attrs)
|
report = save_report(owner, server)
|
||||||
report = save_report(file, owner, server)
|
|
||||||
|
|
||||||
=begin
|
|
||||||
options = {
|
|
||||||
bootstrap_template: bootstrap_template
|
|
||||||
}
|
|
||||||
=end
|
|
||||||
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
||||||
executor.report = report
|
executor.report = report
|
||||||
status = executor.two_phase_bootstrap(options)
|
status = executor.two_phase_bootstrap(converted_options)
|
||||||
mongo.set_report_server_data(jid, server.chef_node_name, server.public_ip || server.private_ip)
|
mongo.set_report_server_data(jid, server.chef_node_name, server.public_ip || server.private_ip)
|
||||||
status
|
status
|
||||||
end
|
end
|
||||||
@ -31,18 +25,19 @@ class BootstrapWorker < Worker
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def save_report(file, owner, server)
|
def save_report(owner, server)
|
||||||
report_data = {
|
update_report(
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => owner,
|
"created_by" => owner,
|
||||||
"project" => server.project,
|
"project" => server.project,
|
||||||
"deploy_env" => server.deploy_env,
|
"deploy_env" => server.deploy_env,
|
||||||
"type" => Devops::Model::Report::BOOTSTRAP_TYPE
|
"type" => Devops::Model::Report::BOOTSTRAP_TYPE
|
||||||
}
|
)
|
||||||
report = Devops::Model::Report.new(report_data)
|
end
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
def convert_config conf
|
||||||
|
config = {}
|
||||||
|
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
|
||||||
|
config
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -6,14 +6,15 @@ require "lib/executors/server_executor"
|
|||||||
|
|
||||||
class CreateServerWorker < Worker
|
class CreateServerWorker < Worker
|
||||||
|
|
||||||
|
# options must contain 'server_attrs', 'owner'
|
||||||
def perform(options)
|
def perform(options)
|
||||||
server_attrs = options.fetch('server_attrs')
|
call do
|
||||||
owner = options.fetch('owner')
|
server_attrs = options.fetch('server_attrs')
|
||||||
|
owner = options.fetch('owner')
|
||||||
|
|
||||||
call() do |out, file|
|
|
||||||
project = mongo.project(server_attrs["project"])
|
project = mongo.project(server_attrs["project"])
|
||||||
env = project.deploy_env(server_attrs["deploy_env"])
|
env = project.deploy_env(server_attrs["deploy_env"])
|
||||||
report = save_report(file, project, env, owner)
|
report = save_report(project, env, owner)
|
||||||
|
|
||||||
e = Devops::Executor::ServerExecutor.new(nil, out)
|
e = Devops::Executor::ServerExecutor.new(nil, out)
|
||||||
e.project = project
|
e.project = project
|
||||||
@ -26,18 +27,13 @@ class CreateServerWorker < Worker
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def save_report(file, project, env, owner)
|
def save_report(project, env, owner)
|
||||||
report_data = {
|
update_report(
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => owner,
|
"created_by" => owner,
|
||||||
"project" => project.id,
|
"project" => project.id,
|
||||||
"deploy_env" => env.identifier,
|
"deploy_env" => env.identifier,
|
||||||
"type" => Devops::Model::Report::SERVER_TYPE
|
"type" => Devops::Model::Report::SERVER_TYPE
|
||||||
}
|
)
|
||||||
report = Devops::Model::Report.new(report_data)
|
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -5,15 +5,14 @@ require "workers/worker"
|
|||||||
|
|
||||||
class DeleteServerWorker < Worker
|
class DeleteServerWorker < Worker
|
||||||
|
|
||||||
# options should contain 'server_id'
|
# options must contain 'server_id', 'current_user'
|
||||||
def perform(options)
|
def perform(options)
|
||||||
server_id = options.fetch('server_id')
|
call do
|
||||||
current_user = options.fetch('current_user')
|
server_id = options.fetch('server_id')
|
||||||
|
|
||||||
call() do |out, file|
|
|
||||||
out.puts "Deleting server with id #{server_id}" and out.flush
|
out.puts "Deleting server with id #{server_id}" and out.flush
|
||||||
@server = mongo.server_by_instance_id(server_id)
|
@server = mongo.server_by_instance_id(server_id)
|
||||||
report = save_report(file, current_user)
|
report = save_report(options.fetch('current_user'))
|
||||||
|
|
||||||
e = Devops::Executor::ServerExecutor.new(@server, out)
|
e = Devops::Executor::ServerExecutor.new(@server, out)
|
||||||
e.report = report
|
e.report = report
|
||||||
@ -23,17 +22,13 @@ class DeleteServerWorker < Worker
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def save_report(file, current_user)
|
def save_report(current_user)
|
||||||
report = Devops::Model::Report.new(
|
update_report(
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => current_user,
|
"created_by" => current_user,
|
||||||
"project" => @server.project,
|
"project" => @server.project,
|
||||||
"deploy_env" => @server.deploy_env,
|
"deploy_env" => @server.deploy_env,
|
||||||
"type" => Devops::Model::Report::DELETE_SERVER_TYPE
|
"type" => Devops::Model::Report::DELETE_SERVER_TYPE
|
||||||
)
|
)
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,15 +6,16 @@ require "db/mongo/models/report"
|
|||||||
|
|
||||||
class DeployWorker < Worker
|
class DeployWorker < Worker
|
||||||
|
|
||||||
|
# options must contain 'server_attrs', 'owner', 'tags', 'deploy_info'
|
||||||
def perform(options)
|
def perform(options)
|
||||||
server_attrs = options.fetch('server_attrs')
|
call do
|
||||||
owner = options.fetch('owner')
|
server_attrs = options.fetch('server_attrs')
|
||||||
tags = options.fetch('tags')
|
owner = options.fetch('owner')
|
||||||
deploy_info = options.fetch('deploy_info')
|
tags = options.fetch('tags')
|
||||||
|
deploy_info = options.fetch('deploy_info')
|
||||||
|
|
||||||
call() do |out, file|
|
|
||||||
server = Devops::Model::Server.new(server_attrs)
|
server = Devops::Model::Server.new(server_attrs)
|
||||||
report = save_report(file, owner, server)
|
report = save_report(owner, server)
|
||||||
|
|
||||||
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
|
||||||
executor.report = report
|
executor.report = report
|
||||||
@ -24,14 +25,11 @@ class DeployWorker < Worker
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def save_report(file, owner, server)
|
def save_report(owner, server)
|
||||||
report_data = {
|
report_data = {
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => owner,
|
"created_by" => owner,
|
||||||
"project" => server.project,
|
"project" => server.project,
|
||||||
"deploy_env" => server.deploy_env,
|
"deploy_env" => server.deploy_env,
|
||||||
"status" => STATUS::RUNNING,
|
|
||||||
"chef_node_name" => server.chef_node_name,
|
"chef_node_name" => server.chef_node_name,
|
||||||
"host" => server.public_ip || server.private_ip
|
"host" => server.public_ip || server.private_ip
|
||||||
}
|
}
|
||||||
@ -41,9 +39,7 @@ class DeployWorker < Worker
|
|||||||
report_data["type"] = Devops::Model::Report::DEPLOY_STACK_TYPE
|
report_data["type"] = Devops::Model::Report::DEPLOY_STACK_TYPE
|
||||||
report_data["stack"] = server.stack
|
report_data["stack"] = server.stack
|
||||||
end
|
end
|
||||||
report = Devops::Model::Report.new(report_data)
|
update_report(report_data)
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -11,15 +11,15 @@ class ProjectTestWorker < Worker
|
|||||||
include StatusCommands
|
include StatusCommands
|
||||||
|
|
||||||
def perform(params)
|
def perform(params)
|
||||||
user = params.fetch('user')
|
call do
|
||||||
project_name = params.fetch('project')
|
user = params.fetch('user')
|
||||||
deploy_env_name = params.fetch('deploy_env')
|
project_name = params.fetch('project')
|
||||||
|
deploy_env_name = params.fetch('deploy_env')
|
||||||
|
|
||||||
call() do |out, file|
|
|
||||||
DevopsLogger.logger.info "Test project '#{project_name}' and env '#{deploy_env_name}' (user - #{user})"
|
DevopsLogger.logger.info "Test project '#{project_name}' and env '#{deploy_env_name}' (user - #{user})"
|
||||||
project = mongo.project(project_name)
|
project = mongo.project(project_name)
|
||||||
env = project.deploy_env(deploy_env_name)
|
env = project.deploy_env(deploy_env_name)
|
||||||
report = save_report(file, user, project_name, deploy_env_name)
|
report = save_report(user, project_name, deploy_env_name)
|
||||||
|
|
||||||
executor = Devops::Executor::ServerExecutor.new(nil, out)
|
executor = Devops::Executor::ServerExecutor.new(nil, out)
|
||||||
executor.project = project
|
executor.project = project
|
||||||
@ -102,17 +102,12 @@ class ProjectTestWorker < Worker
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def save_report(file, user, project_name, deploy_env_name)
|
def save_report(user, project_name, deploy_env_name)
|
||||||
report_data = {
|
update_report(
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => user,
|
"created_by" => user,
|
||||||
"project" => project_name,
|
"project" => project_name,
|
||||||
"deploy_env" => deploy_env_name,
|
"deploy_env" => deploy_env_name,
|
||||||
"type" => Devops::Model::Report::PROJECT_TEST_TYPE
|
"type" => Devops::Model::Report::PROJECT_TEST_TYPE
|
||||||
}
|
)
|
||||||
report = Devops::Model::Report.new(report_data)
|
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -9,15 +9,15 @@ require "workers/stack_bootstrap/errors"
|
|||||||
|
|
||||||
class StackBootstrapWorker < Worker
|
class StackBootstrapWorker < Worker
|
||||||
|
|
||||||
|
# options must contain 'stack_attributes'
|
||||||
def perform(options)
|
def perform(options)
|
||||||
stack_attrs = options.fetch('stack_attributes')
|
call do
|
||||||
|
stack_attrs = options.fetch('stack_attributes')
|
||||||
|
|
||||||
call() do |out, file|
|
|
||||||
@out = out
|
|
||||||
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
without_bootstrap = stack_attrs.delete('without_bootstrap')
|
||||||
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
|
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
|
||||||
|
|
||||||
save_report(file, stack_attrs)
|
save_report(stack_attrs)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@stack = create_stack(stack_attrs)
|
@stack = create_stack(stack_attrs)
|
||||||
@ -99,10 +99,8 @@ class StackBootstrapWorker < Worker
|
|||||||
puts_and_flush "Rollback has been completed"
|
puts_and_flush "Rollback has been completed"
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_report(file, stack_attrs)
|
def save_report(stack_attrs)
|
||||||
report = ::Devops::Model::Report.new(
|
update_report(
|
||||||
"file" => file,
|
|
||||||
"_id" => jid,
|
|
||||||
"created_by" => stack_attrs['owner'],
|
"created_by" => stack_attrs['owner'],
|
||||||
"project" => stack_attrs["project"],
|
"project" => stack_attrs["project"],
|
||||||
"deploy_env" => stack_attrs["deploy_env"],
|
"deploy_env" => stack_attrs["deploy_env"],
|
||||||
@ -110,7 +108,5 @@ class StackBootstrapWorker < Worker
|
|||||||
"subreports" => [],
|
"subreports" => [],
|
||||||
"stack" => stack_attrs['name']
|
"stack" => stack_attrs['name']
|
||||||
)
|
)
|
||||||
mongo.save_report(report)
|
|
||||||
report
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -83,15 +83,16 @@ class Worker
|
|||||||
def call_async()
|
def call_async()
|
||||||
dir = DevopsConfig[:report_dir_v2]
|
dir = DevopsConfig[:report_dir_v2]
|
||||||
# directory is created on server start in config.ru
|
# directory is created on server start in config.ru
|
||||||
file = File.join(dir, jid)
|
@file = File.join(dir, jid)
|
||||||
|
|
||||||
|
create_report
|
||||||
update_job_status(STATUS::INIT, nil)
|
update_job_status(STATUS::INIT, nil)
|
||||||
File.open(file, "w") do |out|
|
File.open(@file, "w") do |out|
|
||||||
begin
|
begin
|
||||||
update_job_status(STATUS::RUNNING, nil)
|
update_job_status(STATUS::RUNNING, nil)
|
||||||
self.out = out
|
self.out = out
|
||||||
|
|
||||||
job_result = yield(out, file)
|
job_result = yield
|
||||||
canonical_status = (job_result == 0 ? STATUS::COMPLETED : STATUS::FAILED)
|
canonical_status = (job_result == 0 ? STATUS::COMPLETED : STATUS::FAILED)
|
||||||
update_job_status(canonical_status, job_result)
|
update_job_status(canonical_status, job_result)
|
||||||
rescue StandardError, RecordNotFound => e
|
rescue StandardError, RecordNotFound => e
|
||||||
@ -125,10 +126,16 @@ class Worker
|
|||||||
status
|
status
|
||||||
end
|
end
|
||||||
|
|
||||||
def convert_config conf
|
def create_report
|
||||||
config = {}
|
report = Devops::Model::Report.new('_id' => jid, 'file' => @file)
|
||||||
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
|
mongo.save_report(report)
|
||||||
config
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_report(additional_report_attrs)
|
||||||
|
initial_report = mongo.report(jid)
|
||||||
|
report_attrs = initial_report.to_mongo_hash.merge(additional_report_attrs)
|
||||||
|
report = Devops::Model::Report.new(report_attrs)
|
||||||
|
mongo.report_update(report)
|
||||||
|
report
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user