hooks in executor

This commit is contained in:
amartynov 2015-08-12 11:37:17 +03:00
parent 6fb077903d
commit 9fece78466
7 changed files with 60 additions and 44 deletions

View File

@ -2,9 +2,10 @@ require 'rufus-scheduler'
require "uri" require "uri"
require "commands/status" require "commands/status"
require "commands/server" #require "commands/server"
require "commands/bootstrap_templates" require "commands/bootstrap_templates"
require "lib/executors/server_executor"
require "providers/provider_factory" require "providers/provider_factory"
require "db/mongo/models/server" require "db/mongo/models/server"
@ -22,7 +23,7 @@ module Devops
set_parser Devops::API2_0::Parser::ServerParser set_parser Devops::API2_0::Parser::ServerParser
extend StatusCommands extend StatusCommands
extend ServerCommands # extend ServerCommands
extend BootstrapTemplatesCommands extend BootstrapTemplatesCommands
scheduler = Rufus::Scheduler.new scheduler = Rufus::Scheduler.new
@ -51,10 +52,14 @@ module Devops
delete_server(s, Devops::Db.connector, DevopsLogger.logger) delete_server(s, Devops::Db.connector, DevopsLogger.logger)
end end
def create_server_stream out, body def create_server_stream out
status = [] status = []
prepare_create_server do |project, env, user, body| prepare_create_server do |project, env, user, body|
res = create_server(project, env, body, user, out) e = Devops::Executor::ServerExecutor.new(nil, out)
e.project = project
e.deploy_env = env
body["created_by"] = user
res = e.create_server(body)
status.push res status.push res
end end
status status

View File

@ -10,9 +10,7 @@
<% end %> <% end %>
</head> </head>
<body> <body>
<pre> <pre><%= @text %></pre>
<%= @text %>
</pre>
</body> </body>
</html> </html>

View File

@ -1,5 +1,4 @@
require "db/mongo/models/mongo_model" require "db/mongo/models/mongo_model"
require "hooks"
require "db/mongo/models/model_with_provider" require "db/mongo/models/model_with_provider"
@ -8,20 +7,6 @@ module Devops
class Server < MongoModel class Server < MongoModel
include ModelWithProvider include ModelWithProvider
include Hooks
#params:
# out - container for output data
# deploy_info - hash with deploy data
define_hook :before_deploy
define_hook :after_deploy
define_hook :before_create
define_hook :after_create
#params:
# out - container for output data
define_hook :before_bootstrap
define_hook :after_bootstrap
attr_accessor :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack, :run_list attr_accessor :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack, :run_list
attr_accessor :key attr_accessor :key

View File

@ -1,45 +1,66 @@
require "lib/knife/knife_factory" require "lib/knife/knife_factory"
require "hooks"
module Devops module Devops
module Executor module Executor
class ServerExecutor class ServerExecutor
include Hooks
#params:
# out - container for output data
# deploy_info - hash with deploy data
define_hook :before_deploy
define_hook :after_deploy
define_hook :before_create
define_hook :after_create
#params:
# out - container for output data
define_hook :before_bootstrap
define_hook :after_bootstrap
def initialize server, out def initialize server, out
@project = Devops::Db.connector.project(server.project) if server
@deploy_env = @project.deploy_env(server.deploy_env) @project = Devops::Db.connector.project(server.project)
@deploy_env = @project.deploy_env(server.deploy_env)
end
@knife_instance = KnifeFactory.instance @knife_instance = KnifeFactory.instance
@server = server @server = server
@out = out @out = out
end end
def project= p
@project = p
end
def deploy_env= e
@deploy_env = e
end
def create_server options def create_server options
@server = Devops::Model::Server.new({"project" => @project.id, "deploy_env" => @deploy_env.identifier, "created_by" => options["created_by"], "provider" => @deploy_env.provider})
provider = @server.provider_instance provider = @server.provider_instance
mongo = ::Devops::Db.connector mongo = ::Devops::Db.connector
begin begin
@out << "Create server...\n" @out << "Create server...\n"
@out.flush if @out.respond_to?(:flush) @out.flush if @out.respond_to?(:flush)
=begin @server.run_list = options["run_list"] || []
s = Devops::Model::Server.new @server.chef_node_name = options["name"]
s.provider = provider.name @server.key = options["key"] || provider.ssh_key
s.project = self.id
s.deploy_env = env.identifier
s.run_list = options["run_list"] || []
s.chef_node_name = options["name"]
s.key = options["key"] || provider.ssh_key
s.created_by = user
=end
i = mongo.image(@deploy_env.image) i = mongo.image(@deploy_env.image)
@server.remote_user = i.remote_user @server.remote_user = i.remote_user
res = {} res = {}
@out << "\nBefore create hooks...\n"
res[:before] = self.run_hook :before_create res[:before] = self.run_hook :before_create
return false unless provider.create_server(@server, @deploy_env.image, @deploy_env.flavor, @deploy_env.subnets, @deploy_env.groups, @out) return false unless provider.create_server(@server, @deploy_env.image, @deploy_env.flavor, @deploy_env.subnets, @deploy_env.groups, @out)
mongo.server_insert @server mongo.server_insert @server
@out << "\nAfter create hooks...\n"
res[:after] = self.run_hook :after_create res[:after] = self.run_hook :after_create
res
# return 3 unless @server.create(provider, env.image, env.flavor, env.subnets, env.groups, @out)
@out.flush if @out.respond_to?(:flush) @out.flush if @out.respond_to?(:flush)
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running" DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
unless options["without_bootstrap"] unless options["without_bootstrap"]
@ -64,7 +85,7 @@ module Devops
def bootstrap options def bootstrap options
k = Devops::Db.connector.key(@server.key) k = Devops::Db.connector.key(@server.key)
cert_path = k.path cert_path = k.path
@out << "Before bootstrap hooks...\n" @out << "\nBefore bootstrap hooks...\n"
res = self.run_hook(:before_bootstrap, @out) res = self.run_hook(:before_bootstrap, @out)
@out << "Done\n" @out << "Done\n"
if @server.private_ip.nil? if @server.private_ip.nil?

View File

@ -2,15 +2,14 @@ require "commands/knife_commands"
class KnifeFactory class KnifeFactory
@instance = nil
class << self class << self
attr_accessor :instance
def init def init
c = DevopsConfig.config[:knife_config_file] c = DevopsConfig.config[:knife_config_file]
raise "Option ':knife_config_file' is undefined, please check config.rb file" unless c raise "Option ':knife_config_file' is undefined, please check config.rb file" unless c
@instance = KnifeCommands.new(c) @instance = KnifeCommands.new(c)
end DevopsLogger.logger.info("Knife instance has been initialized")
def instance
@instance
end end
end end

View File

@ -4,12 +4,13 @@
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 "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"
class CreateServerWorker < Worker class CreateServerWorker < Worker
include ServerCommands # include ServerCommands
def perform(dir, params, owner, conf) def perform(dir, params, owner, conf)
logger.info "Create server" logger.info "Create server"
@ -29,7 +30,12 @@ class CreateServerWorker < Worker
} }
mongo.save_report(Devops::Model::Report.new(o)) mongo.save_report(Devops::Model::Report.new(o))
status = create_server(project, env, params, owner, out) 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 status
end end
end end

View File

@ -11,6 +11,7 @@ require "core/devops-logger"
require "core/devops-db" require "core/devops-db"
require "providers/provider_factory" require "providers/provider_factory"
require 'workers/workers_storage' require 'workers/workers_storage'
require "lib/knife/knife_factory"
class Worker class Worker
include Sidekiq::Worker include Sidekiq::Worker
@ -50,6 +51,7 @@ class Worker
error = nil error = nil
provider = nil provider = nil
begin begin
KnifeFactory.init
Devops::Db.init Devops::Db.init
::Provider::ProviderFactory.init(DevopsConfig.config) ::Provider::ProviderFactory.init(DevopsConfig.config)
unless e_provider.nil? unless e_provider.nil?