From feebbd19c7871efbfd487e919504ad6a00325f60 Mon Sep 17 00:00:00 2001 From: amartynov Date: Mon, 14 Sep 2015 17:47:11 +0300 Subject: [PATCH] update project components --- devops-service/app/api2/handlers/project.rb | 9 ++++++++ devops-service/app/api2/parsers/project.rb | 6 +++++ devops-service/app/api2/routes/project.rb | 22 +++++++++++++++++++ devops-service/db/mongo/connectors/project.rb | 6 +++++ devops-service/db/mongo/models/project.rb | 8 +++++++ devops-service/db/mongo/mongo_connector.rb | 2 +- 6 files changed, 52 insertions(+), 1 deletion(-) diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index 570dab8..7851780 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -57,6 +57,15 @@ module Devops end end + def set_project_components id + body = parser.set_project_components + project = BaseRoutes.mongo.project(id) + project.components = body["components"] + project.validate_components + Devops::Db.connector.project_update id, "components", body["components"] + "Updated project '#{project.id}' with components '#{body["components"].inspect}'" + 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 188cee7..1c123d1 100644 --- a/devops-service/app/api2/parsers/project.rb +++ b/devops-service/app/api2/parsers/project.rb @@ -39,6 +39,12 @@ module Devops Devops::Model::Project.new(body) end + def set_project_components + c = create_object_from_json_body(Hash) + raise InvalidRecord.new("'components' key not found") if c["components"].nil? + c + end + def add_or_update_deploy_env body = create_object_from_json_body Devops::Model::DeployEnvFactory.create(body) diff --git a/devops-service/app/api2/routes/project.rb b/devops-service/app/api2/routes/project.rb index 7ff67ac..529a3a2 100644 --- a/devops-service/app/api2/routes/project.rb +++ b/devops-service/app/api2/routes/project.rb @@ -247,6 +247,28 @@ module Devops end end + # Set components to project + # + # * *Request* + # - method : PUT + # - headers : + # - Accept: application/json + # - Content-Type: application/json + # - body : + # components: { + # "some_id": { + # "filename" : "some.war" + # } + # } + # + # * *Returns* : + # 200 - Updated + app.patch_with_headers "/project/:id/components", :headers => [:accept, :content_type] do |id| + check_privileges("project", "w") + res = Devops::API2_0::Handler::Project.new(request).set_project_components(id) + create_response(res) + end + # Add or update deploy_env # # * *Request* diff --git a/devops-service/db/mongo/connectors/project.rb b/devops-service/db/mongo/connectors/project.rb index 2144415..8aba9b8 100644 --- a/devops-service/db/mongo/connectors/project.rb +++ b/devops-service/db/mongo/connectors/project.rb @@ -112,6 +112,12 @@ module Connectors @collection.update({"_id" => id}, {'$pull' => {deploy_envs: {identifier: env}} }) end + def project_update id, field, value + obj = {} + obj[field] = value + @collection.update({"_id" => id}, {'$set' => obj }) + 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 ba5bf2b..55216b2 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -194,6 +194,14 @@ module Devops Project.new p end + #TODO: create validator + def validate_components + raise InvalidRecord.new "Components is not a hash" unless self.components.is_a?(Hash) + self.components.each do |id, c| + raise InvalidRecord.new "Component '#{id}' has no attribute 'filename'" unless c.key?("filename") + end + end + end end end diff --git a/devops-service/db/mongo/mongo_connector.rb b/devops-service/db/mongo/mongo_connector.rb index 714c927..926653a 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, :remove_deploy_env_from_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, :project_update] => :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,