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 "commands/status"
require "commands/server"
#require "commands/server"
require "commands/bootstrap_templates"
require "lib/executors/server_executor"
require "providers/provider_factory"
require "db/mongo/models/server"
@ -22,7 +23,7 @@ module Devops
set_parser Devops::API2_0::Parser::ServerParser
extend StatusCommands
extend ServerCommands
# extend ServerCommands
extend BootstrapTemplatesCommands
scheduler = Rufus::Scheduler.new
@ -51,10 +52,14 @@ module Devops
delete_server(s, Devops::Db.connector, DevopsLogger.logger)
end
def create_server_stream out, body
def create_server_stream out
status = []
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
end
status

View File

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

View File

@ -1,5 +1,4 @@
require "db/mongo/models/mongo_model"
require "hooks"
require "db/mongo/models/model_with_provider"
@ -8,20 +7,6 @@ module Devops
class Server < MongoModel
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 :key

View File

@ -1,45 +1,66 @@
require "lib/knife/knife_factory"
require "hooks"
module Devops
module Executor
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
@project = Devops::Db.connector.project(server.project)
@deploy_env = @project.deploy_env(server.deploy_env)
if server
@project = Devops::Db.connector.project(server.project)
@deploy_env = @project.deploy_env(server.deploy_env)
end
@knife_instance = KnifeFactory.instance
@server = server
@out = out
end
def project= p
@project = p
end
def deploy_env= e
@deploy_env = e
end
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
mongo = ::Devops::Db.connector
begin
@out << "Create server...\n"
@out.flush if @out.respond_to?(:flush)
=begin
s = Devops::Model::Server.new
s.provider = provider.name
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
@server.run_list = options["run_list"] || []
@server.chef_node_name = options["name"]
@server.key = options["key"] || provider.ssh_key
s.created_by = user
=end
i = mongo.image(@deploy_env.image)
@server.remote_user = i.remote_user
res = {}
@out << "\nBefore create hooks...\n"
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)
mongo.server_insert @server
@out << "\nAfter create hooks...\n"
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)
DevopsLogger.logger.info "Server with parameters: #{@server.to_hash.inspect} is running"
unless options["without_bootstrap"]
@ -64,7 +85,7 @@ module Devops
def bootstrap options
k = Devops::Db.connector.key(@server.key)
cert_path = k.path
@out << "Before bootstrap hooks...\n"
@out << "\nBefore bootstrap hooks...\n"
res = self.run_hook(:before_bootstrap, @out)
@out << "Done\n"
if @server.private_ip.nil?

View File

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

View File

@ -4,12 +4,13 @@
require File.join(File.dirname(__FILE__), "worker")
require "providers/provider_factory"
require "commands/server"
#require "commands/server"
require "db/mongo/models/server"
require "db/mongo/models/report"
require "lib/executors/server_executor"
class CreateServerWorker < Worker
include ServerCommands
# include ServerCommands
def perform(dir, params, owner, conf)
logger.info "Create server"
@ -29,7 +30,12 @@ class CreateServerWorker < Worker
}
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
end
end

View File

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