autosync stack after creating till status not changed

This commit is contained in:
Anton Chuchkalov 2015-07-21 18:13:10 +04:00
parent 344514d08e
commit ef26dc19e4
6 changed files with 18 additions and 9 deletions

View File

@ -2,16 +2,20 @@ module StackCommands
def sync_stack_till_not_in_progress_proc def sync_stack_till_not_in_progress_proc
lambda do |out, stack, mongo| lambda do |out, stack, mongo|
# two tries each 5 seconds, then 5 tries each 10 seconds, then 5 tries each minute.
sleep_times = [5]*2 + [10]*5 + [60]*5
begin begin
10.times do |i| out << "Syncing stack '#{stack.id}'...\n"
sleep 10 sleep_times.each do |sleep_time|
out << "Syncing stack '#{stack.id}'..." sleep sleep_time
stack.sync_details! stack.sync_details!
if stack.stack_status != 'CREATE_IN_PROGRESS' if stack.stack_status != 'CREATE_IN_PROGRESS'
mongo.stack_update(stack) mongo.stack_update(stack)
out << "Stack '#{stack.id}' status is now #{stack.stack_status}" out << "Stack '#{stack.id}' status is now #{stack.stack_status}"
break break
end end
out << "Next try...\n"
end end
rescue StandardError => e rescue StandardError => e
logger.error e.message logger.error e.message

View File

@ -38,6 +38,10 @@ module Connectors
list(options) list(options)
end end
def set_report_status(jid, status)
# TODO: merge from novartis
end
private private
def model_from_bson(bson) def model_from_bson(bson)

View File

@ -4,7 +4,7 @@ module Devops
self.provider = 'openstack' self.provider = 'openstack'
def stack_status def stack_status
details[:stack_status] if details details[:stack_status] || details['stack_status'] if details
end end
end end
end end

View File

@ -26,7 +26,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] => :reports_connector, [:save_report, :report, :reports, :set_report_status] => :reports_connector,
[:statistic] => :statistics_connector [:statistic] => :statistics_connector
) )

View File

@ -34,6 +34,7 @@ module Devops
jid = StackSyncWorker.perform_async( jid = StackSyncWorker.perform_async(
DevopsConfig[:report_dir_v2], DevopsConfig[:report_dir_v2],
stack.provider,
stack.id, stack.id,
request.env['REMOTE_USER'], # owner request.env['REMOTE_USER'], # owner
DevopsConfig.config DevopsConfig.config

View File

@ -10,8 +10,8 @@ require "db/mongo/models/report"
class StackSyncWorker < Worker class StackSyncWorker < Worker
include StackCommands include StackCommands
def perform(dir, stack_id, owner, conf) def perform(dir, provider, stack_id, owner, conf)
call(conf, nil, dir) do |mongo, useless, out, file| call(conf, provider, dir) do |mongo, provider, out, file|
stack = mongo.stack(stack_id) stack = mongo.stack(stack_id)
o = { o = {
"file" => file, "file" => file,
@ -19,9 +19,9 @@ class StackSyncWorker < Worker
"created_by" => owner, "created_by" => owner,
"project" => stack.project, "project" => stack.project,
"deploy_env" => stack.deploy_env, "deploy_env" => stack.deploy_env,
"type" => Report::STACK_TYPE "type" => ::Devops::Model::Report::STACK_TYPE
} }
mongo.save_report(Report.new(o)) mongo.save_report(::Devops::Model::Report.new(o))
status = sync_stack_till_not_in_progress_proc.call(out, stack, mongo) status = sync_stack_till_not_in_progress_proc.call(out, stack, mongo)
status status