From e893beaf556a8c0b5c785c6129c765d5b22918b8 Mon Sep 17 00:00:00 2001 From: amartynov Date: Fri, 11 Sep 2015 16:18:20 +0300 Subject: [PATCH] #687: done --- devops-service/app/api2/handlers/project.rb | 28 ++++++++++++++----- devops-service/app/api2/parsers/project.rb | 2 +- devops-service/app/api2/routes/project.rb | 10 +++---- devops-service/db/mongo/connectors/project.rb | 4 +++ devops-service/db/mongo/models/project.rb | 5 +++- devops-service/db/mongo/mongo_connector.rb | 2 +- 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index 42b7fed..aeb034e 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -57,11 +57,24 @@ module Devops end end - def add_deploy_env_to_project id + def add_or_update_deploy_env id, deploy_env project = Devops::Db.connector.project(id) - env = parser.add_deploy_env_to_project - project.add_deploy_env env - "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'" + env = parser.add_or_update_deploy_env + begin + db_env = project.deploy_env(deploy_env) + begin + project.deploy_env(env.identifier) + raise InvalidRecord.new("Can not change environment '#{deploy_env}' to '#{env.identifier}', environment '#{env.identifier}' already exist") unless deploy_env == env.identifier + rescue RecordNotFound => e + end + project.delete_deploy_env(deploy_env) + project.add_deploy_env(env) + "Deploy environment '#{deploy_env}' has been updated in project '#{project.id}'" + rescue RecordNotFound => e + env.identifier = deploy_env + project.add_deploy_env env + "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'" + end end def update_project id @@ -119,8 +132,7 @@ module Devops project.delete "Project '#{id}' is deleted" else - project.remove_env deploy_env - Devops::Db.connector.project_update project + project.delete_deploy_env(deploy_env) "Project '#{id}'. Deploy environment '#{deploy_env}' has been deleted" end end @@ -211,6 +223,7 @@ module Devops return [uri] end +=begin def create_roles project_id, envs all_roles = KnifeFactory.instance.roles return " Can't get roles list" if all_roles.nil? @@ -235,7 +248,7 @@ module Devops def create_new_roles old_project, new_project old_project.deploy_envs.each do |e| - new_project.remove_env(e.identifier) + new_project.deploy_envs.delete_if {|env| e.identifier == env.identifier} end create_roles new_project.id, new_project.deploy_envs end @@ -251,6 +264,7 @@ module Devops info end end +=end end end diff --git a/devops-service/app/api2/parsers/project.rb b/devops-service/app/api2/parsers/project.rb index 657282e..188cee7 100644 --- a/devops-service/app/api2/parsers/project.rb +++ b/devops-service/app/api2/parsers/project.rb @@ -39,7 +39,7 @@ module Devops Devops::Model::Project.new(body) end - def add_deploy_env_to_project + def add_or_update_deploy_env body = create_object_from_json_body Devops::Model::DeployEnvFactory.create(body) end diff --git a/devops-service/app/api2/routes/project.rb b/devops-service/app/api2/routes/project.rb index fdee5a1..7ff67ac 100644 --- a/devops-service/app/api2/routes/project.rb +++ b/devops-service/app/api2/routes/project.rb @@ -247,10 +247,10 @@ module Devops end end - # Add new deploy_env to project + # Add or update deploy_env # # * *Request* - # - method : PATCH + # - method : PUT # - headers : # - Accept: application/json # - Content-Type: application/json @@ -274,11 +274,11 @@ module Devops # } # # * *Returns* : - # 200 - Created - app.patch_with_headers "/project/:id/deploy_env", :headers => [:accept, :content_type] do |id| + # 200 - Updated + app.put_with_headers "/project/:id/:deploy_env", :headers => [:accept, :content_type] do |id, deploy_env| check_privileges("project", "w") begin - res = Devops::API2_0::Handler::Project.new(request).add_deploy_env_to_project(id) + res = Devops::API2_0::Handler::Project.new(request).add_or_update_deploy_env(id, deploy_env) create_response(res, nil, 200) rescue InvalidRecord => e halt_response(e.message) diff --git a/devops-service/db/mongo/connectors/project.rb b/devops-service/db/mongo/connectors/project.rb index ea05130..2144415 100644 --- a/devops-service/db/mongo/connectors/project.rb +++ b/devops-service/db/mongo/connectors/project.rb @@ -108,6 +108,10 @@ module Connectors @collection.update({"_id" => id}, {'$push' => {deploy_envs: env.to_hash} }) end + def remove_deploy_env_from_project id, env + @collection.update({"_id" => id}, {'$pull' => {deploy_envs: {identifier: env}} }) + end + private def list(query={}, query_options={}) diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index a66dc29..ba5bf2b 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -115,14 +115,17 @@ module Devops end =end - def remove_env env + def delete_deploy_env env self.deploy_envs.delete_if {|e| e.identifier == env} + Devops::Db.connector.remove_deploy_env_from_project self.id, env end +=begin def add_env env raise InvalidRecord.new "Deploy environment '#{env.identifier}' for project '#{self.id}' already exist" unless self.deploy_env(env.identifier).nil? self.deploy_envs.push env end +=end def to_hash h = self.to_hash_without_id diff --git a/devops-service/db/mongo/mongo_connector.rb b/devops-service/db/mongo/mongo_connector.rb index 7600562..71e0bd1 100644 --- a/devops-service/db/mongo/mongo_connector.rb +++ b/devops-service/db/mongo/mongo_connector.rb @@ -21,7 +21,7 @@ class MongoConnector [:available_images, :add_available_images, :delete_available_images] => :filters_connector, [:project, :projects_all, :projects, :project_names_with_envs, :projects_by_image, :projects_by_user, :project_insert, :project_update, - :project_delete, :is_project_exists?, :check_project_auth, :set_project_run_list, :set_project_env_run_list, :add_deploy_env_to_project] => :projects_connector, + :project_delete, :is_project_exists?, :check_project_auth, :set_project_run_list, :set_project_env_run_list, :add_deploy_env_to_project, :remove_deploy_env_from_project] => :projects_connector, [:project_templates, :project_template_insert, :project_template_update, :project_template_delete] => :projects_templates_connector, [:servers_find, :servers, :stack_servers, :servers_by_names, :server_by_instance_id,