From fa1fc396eae061d5c9c8187ab17e7951b02b4568 Mon Sep 17 00:00:00 2001 From: amartynov Date: Fri, 2 Oct 2015 18:19:44 +0300 Subject: [PATCH 01/11] fixed error with 'out' --- devops-service/lib/executors/server_executor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index 2edf407..7c502c9 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -453,7 +453,7 @@ module Devops rlist = Set.new(rlist) if @server.stack stack = Devops::Db.connector.stack(@server.stack) - out << "Stack run list: #{stack.run_list.join(", ")}\n" +# out << "Stack run list: #{stack.run_list.join(", ")}\n" srl = stack.run_list rlist.merge(srl) if srl.is_a?(Array) end From c0219ab1bef44ada90644ec818db66a6a446b5e0 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 13:21:48 +0300 Subject: [PATCH 02/11] #801: fixed --- devops-service/app/api2/handlers/stack.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/app/api2/handlers/stack.rb b/devops-service/app/api2/handlers/stack.rb index abf5637..315e8a6 100644 --- a/devops-service/app/api2/handlers/stack.rb +++ b/devops-service/app/api2/handlers/stack.rb @@ -15,7 +15,7 @@ module Devops end def stacks_for_provider provider - Devops::Db.connector.stacks(provider) + Devops::Db.connector.stacks(provider: provider) end def create_stack From 03e3b16aca0df83e3b26ec1507909c5b81427a43 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 13:39:29 +0300 Subject: [PATCH 03/11] #810: fixed ssh commands --- devops-service/commands/ssh.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/devops-service/commands/ssh.rb b/devops-service/commands/ssh.rb index 64515c6..cbe1816 100644 --- a/devops-service/commands/ssh.rb +++ b/devops-service/commands/ssh.rb @@ -6,8 +6,10 @@ module SshCommands end def ssh_execute server, cmd - key_path = File.join(DevopsCid.config[:keys_dir], server[:private_key]) - res = `ssh -i #{key_path} #{server[:remote_user]}@#{server[:host]} '#{cmd}'` + key_path = File.join(DevopsConfig.config[:keys_dir], server[:private_key]) + ssh_cmd = "ssh -i #{key_path} #{server[:remote_user]}@#{server[:host]} '#{cmd}'" + DevopsLogger.logger.info "Ssh command: #{ssh_cmd}" + res = `#{ssh_cmd}` return res, $? end From f256b6545f661c4fa9acc89873459eda5d550b04 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 14:54:47 +0300 Subject: [PATCH 04/11] #780: add new project environment path --- devops-service/app/api2/handlers/project.rb | 14 +++++++++ devops-service/app/api2/parsers/project.rb | 5 ++++ devops-service/app/api2/routes/project.rb | 12 ++++++++ .../models/deploy_env/deploy_env_base.rb | 30 +++++++++++++++++++ devops-service/db/mongo/models/project.rb | 17 ++++++++++- 5 files changed, 77 insertions(+), 1 deletion(-) diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index 93ec9c6..80f4b01 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -80,6 +80,20 @@ module Devops "Updated project '#{project.id}' with components '#{body["components"].inspect}'" end + def add_deploy_env id + project = Devops::Db.connector.project(id) + env = parser.add_deploy_env + env.add_users [parser.current_user] + env.validate! + begin + db_env = project.deploy_env(env.identifier) + raise InvalidRecord.new("Can not add new environment for project '#{id}'. Environment '#{env.identifier}' already exist") + rescue RecordNotFound => e + res = project.add_deploy_env env + return "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'." + res, env + end + end + def add_or_update_deploy_env id, deploy_env project = Devops::Db.connector.project(id) env = parser.add_or_update_deploy_env diff --git a/devops-service/app/api2/parsers/project.rb b/devops-service/app/api2/parsers/project.rb index 5138fc9..e300977 100644 --- a/devops-service/app/api2/parsers/project.rb +++ b/devops-service/app/api2/parsers/project.rb @@ -45,6 +45,11 @@ module Devops c end + def add_deploy_env + body = create_object_from_json_body + Devops::Model::DeployEnvFactory.create(body) + end + def add_or_update_deploy_env body = create_object_from_json_body rl = check_array(body["run_list"], "Parameter 'run_list' should be an array of string", String, false, true) diff --git a/devops-service/app/api2/routes/project.rb b/devops-service/app/api2/routes/project.rb index 7d33349..973bbc4c 100644 --- a/devops-service/app/api2/routes/project.rb +++ b/devops-service/app/api2/routes/project.rb @@ -211,6 +211,18 @@ module Devops json Devops::API2_0::Handler::Project.new(request).project_deploy_envs(project) end + # Add project deploy environment + # + # * *Request* + # - method : POST + # - headers : + # - Accept: application/json + app.post_with_headers "/project/:project/deploy_env", :headers => [:accept, :content_type] do |project| + check_privileges("project", "w") + res, env = Devops::API2_0::Handler::Project.new(request).add_deploy_env(project) + create_response(res, {environment: env.to_hash}, 200) + end + deploy_env_hash = {} # Get project deploy environment # diff --git a/devops-service/db/mongo/models/deploy_env/deploy_env_base.rb b/devops-service/db/mongo/models/deploy_env/deploy_env_base.rb index 5fecd43..4d8eb29 100644 --- a/devops-service/db/mongo/models/deploy_env/deploy_env_base.rb +++ b/devops-service/db/mongo/models/deploy_env/deploy_env_base.rb @@ -45,6 +45,36 @@ module Devops "Deploy environment '#{self.identifier}'. " + message end + def create_role project_id + knife = KnifeFactory.instance + if knife.nil? + DevopsLogger.logger.error "Can not get knife instance" + return nil + end + all_roles = knife.roles + info = {} + if all_roles.nil? + msg = "Can't get roles list from chef" + DevopsLogger.logger.error msg + return {error: msg} + end + role_name = knife.role_name(project_id, self.identifier) + begin + if all_roles.include? role_name + info[:exist] = role_name + else + knife.create_role role_name, project_id, self.identifier + info[:new] = role_name + DevopsLogger.logger.info "Role '#{role_name}' created" + end + self.run_list << "role[#{role_name}]" + rescue => er + info[:error] = role_name + DevopsLogger.logger.error "Role '#{role_name}' can not be created: #{er.message}" + end + info + end + end end end diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index fb67c8f..f8a51e7 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -19,6 +19,8 @@ module Devops define_hook :before_delete define_hook :after_delete + #define_hook :after_add_deploy_env + attr_accessor :id, :deploy_envs, :type, :archived, :description, :run_list types :id => {:type => String, :empty => false}, @@ -63,8 +65,9 @@ module Devops end def add_deploy_env deploy_env + res = deploy_env.create_role(self.id) Devops::Db.connector.add_deploy_env_to_project self.id, deploy_env - "" + create_roles_response(res) end def add_authorized_user user, env=nil @@ -207,6 +210,18 @@ module Devops end end + def create_roles_response roles + if roles.is_a?(String) + roles + else + info = "" + info += " Project roles '#{roles[:new].join("', '")}' have been automaticaly created" unless roles[:new].empty? + info += " Project roles '#{roles[:exist].join("', '")}' weren't created because they exist" unless roles[:exist].empty? + info += " Project roles '#{roles[:error].join("', '")}' weren't created because of internal error" unless roles[:error].empty? + info + end + end + end end end From 97e903e5e1af0be30568deeff3cbb1f4fe0f189c Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 15:27:06 +0300 Subject: [PATCH 05/11] new access logger --- devops-service/app/api2/routes/v2.0.rb | 2 ++ devops-service/core/devops-logger.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/devops-service/app/api2/routes/v2.0.rb b/devops-service/app/api2/routes/v2.0.rb index 27b73b2..109af99 100644 --- a/devops-service/app/api2/routes/v2.0.rb +++ b/devops-service/app/api2/routes/v2.0.rb @@ -24,6 +24,7 @@ module Devops register Sinatra::DevopsAuth @@logger = nil + @@access_logger = DevopsLogger.access_logger(File.join(config[:log_dir], "devops-api2.access.log")) configure :production do config = DevopsConfig.config @@ -57,6 +58,7 @@ module Devops # set current logger and call handlers def call env DevopsLogger.logger = @@logger + @@access_logger.info(env.inspect) super(env) end diff --git a/devops-service/core/devops-logger.rb b/devops-service/core/devops-logger.rb index 0060aab..bb2074a 100644 --- a/devops-service/core/devops-logger.rb +++ b/devops-service/core/devops-logger.rb @@ -10,6 +10,18 @@ class DevopsLogger logger end + def self.access_logger out, level=Logger::INFO, format='%d-%m-%Y %H:%M:%S' + logger = Logger.new out + logger.level = level + logger.datetime_format = format + logger.formatter = proc do |severity, datetime, progname, msg| + date_format = datetime.strftime(self.datetime_format) + "[#{date_format}] (#{progname}): #{msg}\n" + end + logger.debug("Logger has been created") + logger + end + def self.logger @_logger ||= DevopsLogger.create(File.join(DevopsConfig.config[:log_dir], "devops.errors.log")) end From d21b381553967cc7e5363deb8bb5e49bbc2a162e Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 15:30:46 +0300 Subject: [PATCH 06/11] fixed --- devops-service/app/api2/routes/v2.0.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/app/api2/routes/v2.0.rb b/devops-service/app/api2/routes/v2.0.rb index 109af99..837f1aa 100644 --- a/devops-service/app/api2/routes/v2.0.rb +++ b/devops-service/app/api2/routes/v2.0.rb @@ -24,7 +24,7 @@ module Devops register Sinatra::DevopsAuth @@logger = nil - @@access_logger = DevopsLogger.access_logger(File.join(config[:log_dir], "devops-api2.access.log")) + @@access_logger = DevopsLogger.access_logger(File.join(DevopsConfig.config[:log_dir], "devops-api2.access.log")) configure :production do config = DevopsConfig.config From 17dc96542e889b9dbb7fd9f662da351ef0b9ac5c Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 15:34:48 +0300 Subject: [PATCH 07/11] fixed format --- devops-service/core/devops-logger.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/core/devops-logger.rb b/devops-service/core/devops-logger.rb index bb2074a..b148bea 100644 --- a/devops-service/core/devops-logger.rb +++ b/devops-service/core/devops-logger.rb @@ -15,7 +15,7 @@ class DevopsLogger logger.level = level logger.datetime_format = format logger.formatter = proc do |severity, datetime, progname, msg| - date_format = datetime.strftime(self.datetime_format) + date_format = datetime.strftime(format) "[#{date_format}] (#{progname}): #{msg}\n" end logger.debug("Logger has been created") From a9df8f9a205ec7fbb09101affd2d7da2006ed571 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 16:20:56 +0300 Subject: [PATCH 08/11] log format test --- devops-service/app/api2/routes/v2.0.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/devops-service/app/api2/routes/v2.0.rb b/devops-service/app/api2/routes/v2.0.rb index 837f1aa..ee4ced9 100644 --- a/devops-service/app/api2/routes/v2.0.rb +++ b/devops-service/app/api2/routes/v2.0.rb @@ -58,8 +58,9 @@ module Devops # set current logger and call handlers def call env DevopsLogger.logger = @@logger - @@access_logger.info(env.inspect) super(env) + @@access_logger.info(env["REQUEST_METHOD"] + " " + env["REQUEST_URI"] + " from #{env["HTTP_USER_AGENT"]}") + @@access_logger.info(request.inspect) end error Devops::ValidationError do From d906ae1fe6b5aeb04343d28f5b5098f06dbf7eb0 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 5 Oct 2015 16:27:23 +0300 Subject: [PATCH 09/11] access logger, done, without remote_user --- devops-service/app/api2/routes/v2.0.rb | 3 +-- devops-service/core/devops-logger.rb | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/devops-service/app/api2/routes/v2.0.rb b/devops-service/app/api2/routes/v2.0.rb index ee4ced9..652dd81 100644 --- a/devops-service/app/api2/routes/v2.0.rb +++ b/devops-service/app/api2/routes/v2.0.rb @@ -59,8 +59,7 @@ module Devops def call env DevopsLogger.logger = @@logger super(env) - @@access_logger.info(env["REQUEST_METHOD"] + " " + env["REQUEST_URI"] + " from #{env["HTTP_USER_AGENT"]}") - @@access_logger.info(request.inspect) + @@access_logger.info(env["REQUEST_METHOD"] + " " + env["REQUEST_URI"] + " - from #{env["HTTP_USER_AGENT"]}") end error Devops::ValidationError do diff --git a/devops-service/core/devops-logger.rb b/devops-service/core/devops-logger.rb index b148bea..e7d853a 100644 --- a/devops-service/core/devops-logger.rb +++ b/devops-service/core/devops-logger.rb @@ -16,7 +16,7 @@ class DevopsLogger logger.datetime_format = format logger.formatter = proc do |severity, datetime, progname, msg| date_format = datetime.strftime(format) - "[#{date_format}] (#{progname}): #{msg}\n" + "[#{date_format}] #{msg}\n" end logger.debug("Logger has been created") logger From daf6ac639c194b5204b2f776acc2501ce12ebfc3 Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 6 Oct 2015 12:45:08 +0300 Subject: [PATCH 10/11] fixed --- devops-service/app/api2/routes/v2.0.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/devops-service/app/api2/routes/v2.0.rb b/devops-service/app/api2/routes/v2.0.rb index 652dd81..53310b3 100644 --- a/devops-service/app/api2/routes/v2.0.rb +++ b/devops-service/app/api2/routes/v2.0.rb @@ -58,8 +58,9 @@ module Devops # set current logger and call handlers def call env DevopsLogger.logger = @@logger - super(env) + res = super(env) @@access_logger.info(env["REQUEST_METHOD"] + " " + env["REQUEST_URI"] + " - from #{env["HTTP_USER_AGENT"]}") + res end error Devops::ValidationError do From 1feedb5c9e3893a2a71acab9096d5b240ed7f6e1 Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 6 Oct 2015 13:36:24 +0300 Subject: [PATCH 11/11] archive server private key must be an absolute path --- devops-service/commands/ssh.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devops-service/commands/ssh.rb b/devops-service/commands/ssh.rb index cbe1816..7eb9f54 100644 --- a/devops-service/commands/ssh.rb +++ b/devops-service/commands/ssh.rb @@ -6,7 +6,7 @@ module SshCommands end def ssh_execute server, cmd - key_path = File.join(DevopsConfig.config[:keys_dir], server[:private_key]) + key_path = server[:private_key] ssh_cmd = "ssh -i #{key_path} #{server[:remote_user]}@#{server[:host]} '#{cmd}'" DevopsLogger.logger.info "Ssh command: #{ssh_cmd}" res = `#{ssh_cmd}`