Merge branch 'bug_fix' into qa

This commit is contained in:
Tim Lianov 2016-02-17 11:27:20 -05:00
commit 80ca2d7ad1
10 changed files with 77 additions and 93 deletions

View File

@ -3,6 +3,7 @@ require "date"
module Connectors
class Report < Base
include Helpers::ShowCommand,
Helpers::UpdateCommand,
Helpers::ListCommand
def initialize(db)

View File

@ -31,7 +31,7 @@ class MongoConnector
[:user_auth, :user, :users, :users_names, :user_insert, :user_delete,
:user_update, :create_root_user, :check_user_privileges] => :users_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,
[:provider_accounts, :provider_account_insert, :provider_account_delete, :provider_account] => :provider_accounts_connector
)

View File

@ -15,12 +15,15 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
before do
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2))
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(worker).to receive(:stack_synchronizer) { stack_synchronizer }
allow(worker).to receive(:stack_servers_bootstrapper) { stack_servers_bootstrapper }
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) }
end
@ -31,14 +34,14 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do
}.to raise_error KeyError
end
it 'saves report about operation' do
expect(stubbed_connector).to receive(:save_report).with(instance_of(Devops::Model::Report))
it 'updates report about operation' do
expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report))
perform_without_bootstrap
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
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(stack_servers_persister).to receive(:persist).ordered
perform_without_bootstrap

View File

@ -6,24 +6,18 @@ require "db/mongo/models/report"
class BootstrapWorker < Worker
# options must contain 'server_attrs', 'owner'
def perform(options)
server_attrs = options.fetch('server_attrs')
# bootstrap_template = options.fetch('bootstrap_template')
owner = options.fetch('owner')
options = convert_config(options)
call do
owner = options.fetch('owner')
converted_options = convert_config(options)
call() do |out, file|
server = Devops::Model::Server.new(server_attrs)
report = save_report(file, owner, server)
server = Devops::Model::Server.new(options.fetch('server_attrs'))
report = save_report(owner, server)
=begin
options = {
bootstrap_template: bootstrap_template
}
=end
executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner)
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)
status
end
@ -31,18 +25,19 @@ class BootstrapWorker < Worker
private
def save_report(file, owner, server)
report_data = {
"file" => file,
"_id" => jid,
def save_report(owner, server)
update_report(
"created_by" => owner,
"project" => server.project,
"deploy_env" => server.deploy_env,
"type" => Devops::Model::Report::BOOTSTRAP_TYPE
}
report = Devops::Model::Report.new(report_data)
mongo.save_report(report)
report
)
end
def convert_config conf
config = {}
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
config
end
end

View File

@ -6,14 +6,15 @@ require "lib/executors/server_executor"
class CreateServerWorker < Worker
# options must contain 'server_attrs', 'owner'
def perform(options)
server_attrs = options.fetch('server_attrs')
owner = options.fetch('owner')
call do
server_attrs = options.fetch('server_attrs')
owner = options.fetch('owner')
call() do |out, file|
project = mongo.project(server_attrs["project"])
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.project = project
@ -26,18 +27,13 @@ class CreateServerWorker < Worker
private
def save_report(file, project, env, owner)
report_data = {
"file" => file,
"_id" => jid,
def save_report(project, env, owner)
update_report(
"created_by" => owner,
"project" => project.id,
"deploy_env" => env.identifier,
"type" => Devops::Model::Report::SERVER_TYPE
}
report = Devops::Model::Report.new(report_data)
mongo.save_report(report)
report
)
end
end

View File

@ -5,15 +5,14 @@ require "workers/worker"
class DeleteServerWorker < Worker
# options should contain 'server_id'
# options must contain 'server_id', 'current_user'
def perform(options)
server_id = options.fetch('server_id')
current_user = options.fetch('current_user')
call do
server_id = options.fetch('server_id')
call() do |out, file|
out.puts "Deleting server with id #{server_id}" and out.flush
@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.report = report
@ -23,17 +22,13 @@ class DeleteServerWorker < Worker
private
def save_report(file, current_user)
report = Devops::Model::Report.new(
"file" => file,
"_id" => jid,
def save_report(current_user)
update_report(
"created_by" => current_user,
"project" => @server.project,
"deploy_env" => @server.deploy_env,
"type" => Devops::Model::Report::DELETE_SERVER_TYPE
)
mongo.save_report(report)
report
end
end

View File

@ -6,15 +6,16 @@ require "db/mongo/models/report"
class DeployWorker < Worker
# options must contain 'server_attrs', 'owner', 'tags', 'deploy_info'
def perform(options)
server_attrs = options.fetch('server_attrs')
owner = options.fetch('owner')
tags = options.fetch('tags')
deploy_info = options.fetch('deploy_info')
call do
server_attrs = options.fetch('server_attrs')
owner = options.fetch('owner')
tags = options.fetch('tags')
deploy_info = options.fetch('deploy_info')
call() do |out, file|
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.report = report
@ -24,14 +25,11 @@ class DeployWorker < Worker
private
def save_report(file, owner, server)
def save_report(owner, server)
report_data = {
"file" => file,
"_id" => jid,
"created_by" => owner,
"project" => server.project,
"deploy_env" => server.deploy_env,
"status" => STATUS::RUNNING,
"chef_node_name" => server.chef_node_name,
"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["stack"] = server.stack
end
report = Devops::Model::Report.new(report_data)
mongo.save_report(report)
report
update_report(report_data)
end
end

View File

@ -11,15 +11,15 @@ class ProjectTestWorker < Worker
include StatusCommands
def perform(params)
user = params.fetch('user')
project_name = params.fetch('project')
deploy_env_name = params.fetch('deploy_env')
call do
user = params.fetch('user')
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})"
project = mongo.project(project_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.project = project
@ -102,17 +102,12 @@ class ProjectTestWorker < Worker
private
def save_report(file, user, project_name, deploy_env_name)
report_data = {
"file" => file,
"_id" => jid,
def save_report(user, project_name, deploy_env_name)
update_report(
"created_by" => user,
"project" => project_name,
"deploy_env" => deploy_env_name,
"type" => Devops::Model::Report::PROJECT_TEST_TYPE
}
report = Devops::Model::Report.new(report_data)
mongo.save_report(report)
report
)
end
end

View File

@ -9,15 +9,15 @@ require "workers/stack_bootstrap/errors"
class StackBootstrapWorker < Worker
# options must contain 'stack_attributes'
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')
@out.puts "Received 'without_bootstrap' option" if without_bootstrap
save_report(file, stack_attrs)
save_report(stack_attrs)
begin
@stack = create_stack(stack_attrs)
@ -99,10 +99,8 @@ class StackBootstrapWorker < Worker
puts_and_flush "Rollback has been completed"
end
def save_report(file, stack_attrs)
report = ::Devops::Model::Report.new(
"file" => file,
"_id" => jid,
def save_report(stack_attrs)
update_report(
"created_by" => stack_attrs['owner'],
"project" => stack_attrs["project"],
"deploy_env" => stack_attrs["deploy_env"],
@ -110,7 +108,5 @@ class StackBootstrapWorker < Worker
"subreports" => [],
"stack" => stack_attrs['name']
)
mongo.save_report(report)
report
end
end

View File

@ -83,15 +83,16 @@ class Worker
def call_async()
dir = DevopsConfig[:report_dir_v2]
# 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)
File.open(file, "w") do |out|
File.open(@file, "w") do |out|
begin
update_job_status(STATUS::RUNNING, nil)
self.out = out
job_result = yield(out, file)
job_result = yield
canonical_status = (job_result == 0 ? STATUS::COMPLETED : STATUS::FAILED)
update_job_status(canonical_status, job_result)
rescue StandardError, RecordNotFound => e
@ -125,10 +126,16 @@ class Worker
status
end
def convert_config conf
config = {}
conf.each {|k,v| config[k.is_a?(String) ? k.to_sym : k] = v}
config
def create_report
report = Devops::Model::Report.new('_id' => jid, 'file' => @file)
mongo.save_report(report)
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