refactore create server worker

This commit is contained in:
Anton Chuchkalov 2015-09-01 16:54:21 +03:00
parent f02b905716
commit 6ade8a015a
6 changed files with 51 additions and 77 deletions

View File

@ -15,10 +15,10 @@ module Devops
Devops::Db.connector.keys({}) Devops::Db.connector.keys({})
end end
def create def create(keys_dir)
body = parser.create body = parser.create
fname = body["file_name"] fname = body["file_name"]
file_name = File.join(settings.keys_dir, fname) file_name = File.join(keys_dir, fname)
raise InvalidRecord.new("File '#{fname}' already exist") if File.exists?(file_name) raise InvalidRecord.new("File '#{fname}' already exist") if File.exists?(file_name)
File.open(file_name, "w") do |f| File.open(file_name, "w") do |f|
f.write(body["content"]) f.write(body["content"])

View File

@ -63,38 +63,15 @@ module Devops
end end
def create_server def create_server
dir = DevopsConfig[:report_dir_v2]
uri = URI.parse(parser.request.url)
file = prepare_create_server do |project, env, user, body|
jid = CreateServerWorker.perform_async(dir, body, user, DevopsConfig.config)
Worker.set_status jid, Worker::STATUS::IN_QUEUE
DevopsLogger.logger.info "Job '#{jid}' has been queued"
uri.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/" + jid
uri.to_s
end
sleep 1
[file]
end
def prepare_create_server
body = parser.create body = parser.create
user = parser.current_user user = parser.current_user
key_name = body["key"]
new_key = Devops::Db.connector.key(key_name) unless key_name.nil?
p = Devops::Db.connector.check_project_auth(body["project"], body["deploy_env"], user) check_if_server_attrs_are_valid(body, user)
env = p.deploy_env(body["deploy_env"]) file = Worker.start_async(CreateServerWorker, @request,
server_attrs: body,
provider = env.provider_instance owner: user
server_name = body["name"] )
check_chef_node_name(server_name, provider, KnifeFactory.instance) unless server_name.nil? [file]
groups = body["groups"]
unless groups.nil?
buf = groups - provider.groups.keys
halt_response("Invalid security groups '#{buf.join("', '")}' for provider '#{provider.name}'") if buf.empty?
end
yield p, env, user, body
end end
def pause_server node_name def pause_server node_name
@ -276,28 +253,26 @@ module Devops
raise InvalidRecord.new("Chef client with name '#{name}' already exist") unless s.nil? raise InvalidRecord.new("Chef client with name '#{name}' already exist") unless s.nil?
end end
end private
=begin def check_if_server_attrs_are_valid(body, user)
class ExpireHandler key_name = body["key"]
include ServerCommands Devops::Db.connector.key(key_name) unless key_name.nil?
def initialize server, logger project = Devops::Db.connector.check_project_auth(body["project"], body["deploy_env"], user)
@server = server env = project.deploy_env(body["deploy_env"])
@logger = logger
end
def call(job) provider = env.provider_instance
@logger.info("Removing node '#{@server.chef_node_name}' form project '#{@server.project}' and env '#{@server.deploy_env}'") server_name = body["name"]
begin check_chef_node_name(server_name, provider, KnifeFactory.instance) unless server_name.nil?
delete_server(@server, Devops::Db.connector, @logger) groups = body["groups"]
rescue => e unless groups.nil?
logger.error "ExpiredHandler error: " + e.message buf = groups - provider.groups.keys
halt_response("Invalid security groups '#{buf.join("', '")}' for provider '#{provider.name}'") if buf.empty?
end end
end end
end
=end
end
end end
end end
end end

View File

@ -43,7 +43,7 @@ module Devops
# 201 - Created # 201 - Created
app.post_with_headers "/key", :headers => [:accept, :content_type] do app.post_with_headers "/key", :headers => [:accept, :content_type] do
check_privileges("key", "w") check_privileges("key", "w")
Devops::API2_0::Handler::Key.new(request).create Devops::API2_0::Handler::Key.new(request).create(settings.keys_dir)
create_response("Created", nil, 201) create_response("Created", nil, 201)
end end

View File

@ -1,9 +1,9 @@
require_relative '../helpers/file_existence'
module Validators module Validators
module Key module Key
class FileExistence < Base class FileExistence < Base
delegate_to_helper_validator { Helpers::FileExistence.new(@model.path) } delegate_to_helper_validator { Helpers::FileExistence.new(@model.path) }
end end
end end
end end

View File

@ -1,42 +1,41 @@
#root = File.join(File.dirname(__FILE__), "..")
#$LOAD_PATH.push root unless $LOAD_PATH.include? root
require File.join(File.dirname(__FILE__), "worker") require File.join(File.dirname(__FILE__), "worker")
require "providers/provider_factory" require "providers/provider_factory"
#require "commands/server"
require "db/mongo/models/server" require "db/mongo/models/server"
require "db/mongo/models/report" require "db/mongo/models/report"
require "lib/executors/server_executor" require "lib/executors/server_executor"
class CreateServerWorker < Worker class CreateServerWorker < Worker
# include ServerCommands
def perform(dir, params, owner, conf) def perform(options)
logger.info "Create server" server_attrs = options.fetch('server_attrs')
call(conf, nil, dir) do |provider, out, file| owner = options.fetch('owner')
mongo = Devops::Db.connector
project = mongo.project(params["project"]) call(nil) do |not_used, out, file|
env = project.deploy_env(params["deploy_env"]) project = mongo.project(server_attrs["project"])
# s = Devops::Model::Server.new(server) env = project.deploy_env(server_attrs["deploy_env"])
# s.options = convert_config(server["options"]) save_report(file, project, env, owner)
o = {
"file" => file,
"_id" => jid,
"created_by" => owner,
"project" => project.id,
"deploy_env" => env.identifier,
"type" => Devops::Model::Report::SERVER_TYPE
}
mongo.save_report(Devops::Model::Report.new(o))
e = Devops::Executor::ServerExecutor.new(nil, out) e = Devops::Executor::ServerExecutor.new(nil, out)
e.project = project e.project = project
e.deploy_env = env e.deploy_env = env
params["created_by"] = owner server_attrs["created_by"] = owner
status = e.create_server(params) e.create_server(server_attrs)
# status = create_server(project, env, params, owner, out)
status
end end
end end
private
def save_report(file, project, env, owner)
report = {
"file" => file,
"_id" => jid,
"created_by" => owner,
"project" => project.id,
"deploy_env" => env.identifier,
"type" => Devops::Model::Report::SERVER_TYPE
}
mongo.save_report(Devops::Model::Report.new(report))
end
end end

View File

@ -27,7 +27,7 @@ class Worker
def self.start_async(worker_class, request, job_options) def self.start_async(worker_class, request, job_options)
jid = worker_class.perform_async(job_options.dup) jid = worker_class.perform_async(job_options.dup)
Worker.set_status jid, Worker::STATUS::IN_QUEUE Worker.set_status jid, Worker::STATUS::IN_QUEUE
DevopsLogger.logger.info "Job '#{jid}' has been started" DevopsLogger.logger.info "Job '#{jid}' has been queued"
uri = URI.parse(request.url) uri = URI.parse(request.url)
uri.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/#{jid}" uri.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/#{jid}"