From 3eb40adc75a128100356b7ab9d1e6b6f10dbda73 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 11 Aug 2016 15:45:55 +0300 Subject: [PATCH] don't launch deploy on chef server migration --- devops-service/db/mongo/models/report.rb | 1 + .../lib/executors/server_executor.rb | 6 ++- devops-service/lib/helpers/job_waiter.rb | 1 + devops-service/workers/bootstrap_worker.rb | 1 + devops-service/workers/run_workers.rb | 1 + .../workers/wait_rebootstrap_worker.rb | 38 +++++++++++++++++++ 6 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 devops-service/workers/wait_rebootstrap_worker.rb diff --git a/devops-service/db/mongo/models/report.rb b/devops-service/db/mongo/models/report.rb index 0115314..6463294 100644 --- a/devops-service/db/mongo/models/report.rb +++ b/devops-service/db/mongo/models/report.rb @@ -13,6 +13,7 @@ module Devops DELETE_SERVER_TYPE = 7 EXPIRE_SERVER_TYPE = 8 SYNC_STACK_TYPE = 9 + WAIT_BOOTSTRAP = 10 SYSTEM_OWNER = 'SYSTEM' diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 5e6fc8a..cb2307c 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -268,7 +268,7 @@ module Devops # deploy phase. Assume that all servers are bootstraped successfully here. begin - run_list = compute_run_list + run_list = options[:forced_runlist] || compute_run_list @out << "\n\nComputed run list: #{run_list.join(", ")}" @out.flush knife_instance.set_run_list(@server.chef_node_name, run_list) @@ -519,6 +519,10 @@ module Devops raise 'Failed to sync project metadata with chef' unless succeeded end + def set_run_list(run_list) + knife_instance.set_run_list(@server.chef_node_name, run_list) + end + private def schedule_expiration diff --git a/devops-service/lib/helpers/job_waiter.rb b/devops-service/lib/helpers/job_waiter.rb index e30ff22..ed71994 100644 --- a/devops-service/lib/helpers/job_waiter.rb +++ b/devops-service/lib/helpers/job_waiter.rb @@ -5,6 +5,7 @@ module Devops INTERVAL = 5 + # timeout in seconds def initialize(job_id, timeout=5000) @job_id, @timeout = job_id, timeout end diff --git a/devops-service/workers/bootstrap_worker.rb b/devops-service/workers/bootstrap_worker.rb index b959d56..96c6668 100644 --- a/devops-service/workers/bootstrap_worker.rb +++ b/devops-service/workers/bootstrap_worker.rb @@ -15,6 +15,7 @@ class BootstrapWorker < Worker # 'bootstrap_template': optional # 'chef_environment': optional # 'config': optional, whatever this parameter really means + # 'forced_runlist': optional, used only in change_server_env action def perform(options) call do owner = options.fetch('owner') diff --git a/devops-service/workers/run_workers.rb b/devops-service/workers/run_workers.rb index 98e3d1b..efa72ea 100644 --- a/devops-service/workers/run_workers.rb +++ b/devops-service/workers/run_workers.rb @@ -8,6 +8,7 @@ require File.join(root, "stack_bootstrap_worker") require File.join(root, "delete_server_worker") require File.join(root, "delete_expired_server_worker") require File.join(root, "stack_sync_worker") +require File.join(root, "wait_rebootstrap_worker") require 'byebug' config = {} #require File.join(root, "../proxy") diff --git a/devops-service/workers/wait_rebootstrap_worker.rb b/devops-service/workers/wait_rebootstrap_worker.rb new file mode 100644 index 0000000..11c6b22 --- /dev/null +++ b/devops-service/workers/wait_rebootstrap_worker.rb @@ -0,0 +1,38 @@ +require File.join(File.dirname(__FILE__), "worker") + +require "lib/executors/server_executor" +require "db/mongo/models/report" + +class WaitRebootstrapWorker < Worker + + # @options + # 'jid': bootstrap job to wait + # 'server_node_name' + # 'owner' + # 'old_chef_node': node info + + def perform(options) + call do + owner = options.fetch("owner") + server = Devops::Db.connector.server_by_chef_node_name(options.fetch("server_node_name")) + save_report(owner, server) + Devops::Helpers::JobWaiter.new(options["jid"], 10*60).wait + + old_node_info = options.fetch('old_chef_node') + out.puts(JSON.pretty_generate(old_node_info)) + + executor = Devops::Executor::ServerExecutor.new(server, out, current_user: owner) + executor.set_run_list(old_node_info["run_list"]) + end + end + + def save_report(owner, server) + update_report( + "created_by" => owner, + "project" => server.project, + "deploy_env" => server.deploy_env, + "type" => Devops::Model::Report::WAIT_BOOTSTRAP + ) + end +end +