From 45ede3d962d2ee0a10b5a6796c1fcf1820e3a820 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 2 Nov 2015 13:09:53 +0300 Subject: [PATCH 1/3] #853: server deploy command --- devops-service/app/api2/handlers/server.rb | 43 ++++++++++++++++++++ devops-service/app/api2/routes/server.rb | 47 ++++++++++++++++++++++ devops-service/workers/worker.rb | 4 +- 3 files changed, 91 insertions(+), 3 deletions(-) diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index 6eb4cbd..f4f4cbc 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -78,6 +78,49 @@ module Devops [uri] end + def deploy node_name + call_deploy(node_name) do |options| + [ Worker.start_async(DeployWorker, @request, options) ] + end + end + + def deploy_stream node_name, out + call_deploy(node_name) do |options| + Worker.start_sync(DeployWorker, @request, options, out) + end + rescue RecordNotFound => e + out << e.message + -10 + end + + def call_deploy node_name + body = parser.deploy + names = body["names"] + tags = body["tags"] || [] + run_list = body["run_list"] + dir = DevopsConfig.config[:report_dir_v2] + owner = parser.current_user + s = Server.get_server_by_key(node_name, parser.instance_key) + project = Devops::Db.connector.check_project_auth s.project, s.deploy_env, owner + deploy_info = create_deploy_info(s, project, body["build_number"]) + deploy_info["run_list"] = run_list if run_list + + yield({ + server_attrs: s.to_hash, + owner: owner, + tags: tags, + deploy_info: deploy_info + }) + end + + def servers names + servers = Devops::Db.connector.servers(nil, nil, names, true) + raise RecordNotFound.new("No reserved servers found for names '#{names.join("', '")}'") if servers.empty? + servers.sort_by!{|s| names.index(s.chef_node_name)} + servers + end + + def pause_server node_name s = Server.get_server_by_key(node_name, parser.instance_key) ## Authorization diff --git a/devops-service/app/api2/routes/server.rb b/devops-service/app/api2/routes/server.rb index 88d75f7..b00d983 100644 --- a/devops-service/app/api2/routes/server.rb +++ b/devops-service/app/api2/routes/server.rb @@ -132,6 +132,53 @@ module Devops } app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash + # Run deploy command on reserved server + # + # * *Request* + # - method : POST + # - headers : + # - Content-Type: application/json + # - body : + # { + # "names": [], -> array of servers names to run chef-client + # "tags": [], -> array of tags to apply on each server before running chef-client + # "build_number": "", -> string, build number to deploy + # "run_list": [], -> array of strings to set run_list for chef-client + # } + # + # * *Returns* : text stream + app.post_with_headers "/server/:node_name/deploy", :headers => [:content_type, :accept] do |node_name| + check_privileges("server", "x") + + if request["HTTP_X_STREAM"] + stream() do |out| + status = [] + begin + status = Devops::API2_0::Handler::Server.new(request).deploy_stream(node_name, out) + out << create_status(status) + rescue DeployInfoError => e + msg = "Can not get deploy info: " + e.message + DevopsLogger.logger.error "msg:\n#{e.backtrace.join('\n')}" + out.puts msg + rescue IOError => e + logger.error e.message + break + end + end # stream + else + files = begin + Devops::API2_0::Handler::Server.new(request).deploy(node_name) + rescue DeployInfoError => e + msg = "Can not get deploy info: " + e.message + DevopsLogger.logger.error "#{msg}:\n#{e.backtrace.join("\n")}" + out << "\nError - " + out.puts msg + end + sleep 1 + json files + end + end + # Create devops server # # * *Request* diff --git a/devops-service/workers/worker.rb b/devops-service/workers/worker.rb index ca91940..9ae96c9 100644 --- a/devops-service/workers/worker.rb +++ b/devops-service/workers/worker.rb @@ -60,9 +60,7 @@ class Worker call_sync(provider, &block) end rescue StandardError => e - puts e.message - puts e.backtrace.join("\n") - DevopsLogger.logger.error e.message + DevopsLogger.logger.error "#{e.message}:\n#{e.backtrace.join("\n")}" end end From 7c8122eb118c9a4e1811086574ec411a4fba9444 Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 10 Nov 2015 11:31:21 +0300 Subject: [PATCH 2/3] #853: fixed (#866) --- devops-service/app/api2/handlers/server.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index f4f4cbc..742e806 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -113,14 +113,6 @@ module Devops }) end - def servers names - servers = Devops::Db.connector.servers(nil, nil, names, true) - raise RecordNotFound.new("No reserved servers found for names '#{names.join("', '")}'") if servers.empty? - servers.sort_by!{|s| names.index(s.chef_node_name)} - servers - end - - def pause_server node_name s = Server.get_server_by_key(node_name, parser.instance_key) ## Authorization From 5bd098c818937b44f90dc6dd7aaf89589c4e7a1f Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 10 Nov 2015 11:38:04 +0300 Subject: [PATCH 3/3] version: 2.3.2 --- devops-service/app/version/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/app/version/version.rb b/devops-service/app/version/version.rb index b32fcd3..5e423f6 100644 --- a/devops-service/app/version/version.rb +++ b/devops-service/app/version/version.rb @@ -2,7 +2,7 @@ require 'sinatra/base' class DevopsVersion < Sinatra::Base - VERSION = "2.3.0" + VERSION = "2.3.2" get "/" do VERSION