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