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({})
end
def create
def create(keys_dir)
body = parser.create
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)
File.open(file_name, "w") do |f|
f.write(body["content"])

View File

@ -63,38 +63,15 @@ module Devops
end
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
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)
env = p.deploy_env(body["deploy_env"])
provider = env.provider_instance
server_name = body["name"]
check_chef_node_name(server_name, provider, KnifeFactory.instance) unless server_name.nil?
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
check_if_server_attrs_are_valid(body, user)
file = Worker.start_async(CreateServerWorker, @request,
server_attrs: body,
owner: user
)
[file]
end
def pause_server node_name
@ -276,28 +253,26 @@ module Devops
raise InvalidRecord.new("Chef client with name '#{name}' already exist") unless s.nil?
end
end
private
=begin
class ExpireHandler
include ServerCommands
def check_if_server_attrs_are_valid(body, user)
key_name = body["key"]
Devops::Db.connector.key(key_name) unless key_name.nil?
def initialize server, logger
@server = server
@logger = logger
end
project = Devops::Db.connector.check_project_auth(body["project"], body["deploy_env"], user)
env = project.deploy_env(body["deploy_env"])
def call(job)
@logger.info("Removing node '#{@server.chef_node_name}' form project '#{@server.project}' and env '#{@server.deploy_env}'")
begin
delete_server(@server, Devops::Db.connector, @logger)
rescue => e
logger.error "ExpiredHandler error: " + e.message
provider = env.provider_instance
server_name = body["name"]
check_chef_node_name(server_name, provider, KnifeFactory.instance) unless server_name.nil?
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
end
end
=end
end
end
end
end

View File

@ -43,7 +43,7 @@ module Devops
# 201 - Created
app.post_with_headers "/key", :headers => [:accept, :content_type] do
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)
end

View File

@ -1,9 +1,9 @@
require_relative '../helpers/file_existence'
module Validators
module Key
class FileExistence < Base
delegate_to_helper_validator { Helpers::FileExistence.new(@model.path) }
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 "providers/provider_factory"
#require "commands/server"
require "db/mongo/models/server"
require "db/mongo/models/report"
require "lib/executors/server_executor"
class CreateServerWorker < Worker
# include ServerCommands
def perform(dir, params, owner, conf)
logger.info "Create server"
call(conf, nil, dir) do |provider, out, file|
mongo = Devops::Db.connector
project = mongo.project(params["project"])
env = project.deploy_env(params["deploy_env"])
# s = Devops::Model::Server.new(server)
# s.options = convert_config(server["options"])
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))
def perform(options)
server_attrs = options.fetch('server_attrs')
owner = options.fetch('owner')
call(nil) do |not_used, out, file|
project = mongo.project(server_attrs["project"])
env = project.deploy_env(server_attrs["deploy_env"])
save_report(file, project, env, owner)
e = Devops::Executor::ServerExecutor.new(nil, out)
e.project = project
e.deploy_env = env
params["created_by"] = owner
status = e.create_server(params)
# status = create_server(project, env, params, owner, out)
status
server_attrs["created_by"] = owner
e.create_server(server_attrs)
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

View File

@ -27,7 +27,7 @@ class Worker
def self.start_async(worker_class, request, job_options)
jid = worker_class.perform_async(job_options.dup)
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.path = "#{DevopsConfig[:url_prefix]}/v2.0/report/#{jid}"