Merge branch '#853' into features

This commit is contained in:
amartynov 2015-11-10 12:15:57 +03:00
commit c0d1afb148
4 changed files with 84 additions and 4 deletions

View File

@ -78,6 +78,41 @@ module Devops
[uri] [uri]
end 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 pause_server node_name def pause_server node_name
s = Server.get_server_by_key(node_name, parser.instance_key) s = Server.get_server_by_key(node_name, parser.instance_key)
## Authorization ## Authorization

View File

@ -132,6 +132,53 @@ module Devops
} }
app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash 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 # Create devops server
# #
# * *Request* # * *Request*

View File

@ -2,7 +2,7 @@ require 'sinatra/base'
class DevopsVersion < Sinatra::Base class DevopsVersion < Sinatra::Base
VERSION = "2.3.0" VERSION = "2.3.2"
get "/" do get "/" do
VERSION VERSION

View File

@ -64,9 +64,7 @@ class Worker
call_sync(provider, &block) call_sync(provider, &block)
end end
rescue StandardError => e rescue StandardError => e
puts e.message DevopsLogger.logger.error "#{e.message}:\n#{e.backtrace.join("\n")}"
puts e.backtrace.join("\n")
DevopsLogger.logger.error e.message
end end
end end