From 9fece784664d5d5377f62547fb6fda42cf4444a0 Mon Sep 17 00:00:00 2001 From: amartynov Date: Wed, 12 Aug 2015 11:37:17 +0300 Subject: [PATCH] hooks in executor --- devops-service/app/api2/handlers/server.rb | 13 +++-- .../app/api2/routes/views/report.erb | 4 +- devops-service/db/mongo/models/server.rb | 15 ------ .../lib/executors/server_executor.rb | 51 +++++++++++++------ devops-service/lib/knife/knife_factory.rb | 7 ++- .../workers/create_server_worker.rb | 12 +++-- devops-service/workers/worker.rb | 2 + 7 files changed, 60 insertions(+), 44 deletions(-) diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index e72df10..4a5a96a 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -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 diff --git a/devops-service/app/api2/routes/views/report.erb b/devops-service/app/api2/routes/views/report.erb index a0d27c0..82422b0 100644 --- a/devops-service/app/api2/routes/views/report.erb +++ b/devops-service/app/api2/routes/views/report.erb @@ -10,9 +10,7 @@ <% end %> -
-      <%= @text %>
-    
+
<%= @text %>
diff --git a/devops-service/db/mongo/models/server.rb b/devops-service/db/mongo/models/server.rb index 5433bae..511cf86 100644 --- a/devops-service/db/mongo/models/server.rb +++ b/devops-service/db/mongo/models/server.rb @@ -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 diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index df0f1f5..3db40e6 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -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? diff --git a/devops-service/lib/knife/knife_factory.rb b/devops-service/lib/knife/knife_factory.rb index 117ca0f..a50a3f8 100644 --- a/devops-service/lib/knife/knife_factory.rb +++ b/devops-service/lib/knife/knife_factory.rb @@ -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 diff --git a/devops-service/workers/create_server_worker.rb b/devops-service/workers/create_server_worker.rb index 93a56d8..1b708e1 100644 --- a/devops-service/workers/create_server_worker.rb +++ b/devops-service/workers/create_server_worker.rb @@ -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 diff --git a/devops-service/workers/worker.rb b/devops-service/workers/worker.rb index 251c41a..d807f79 100644 --- a/devops-service/workers/worker.rb +++ b/devops-service/workers/worker.rb @@ -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?