refactore create server worker
This commit is contained in:
parent
f02b905716
commit
6ade8a015a
@ -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"])
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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}"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user