From 3fcc4f16d1317c4383a5ba5208c58b29dac36440 Mon Sep 17 00:00:00 2001 From: amartynov Date: Fri, 14 Aug 2015 17:47:18 +0300 Subject: [PATCH] patch method to add environment to project --- devops-service/app/api2/handlers/project.rb | 10 +++-- devops-service/app/api2/parsers/project.rb | 5 +++ devops-service/app/api2/routes/project.rb | 38 +++++++++++++++++++ devops-service/db/mongo/connectors/project.rb | 5 +++ devops-service/db/mongo/models/project.rb | 4 ++ 5 files changed, 59 insertions(+), 3 deletions(-) diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index fcf54f4..7b37875 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -30,7 +30,6 @@ module Devops end def project_servers id - # check if project exists Devops::Db.connector.project(id) Devops::Db.connector.servers(id, parser.project_servers) end @@ -44,7 +43,6 @@ module Devops Devops::Db.connector.stacks(options) end - # TODO: multi project def create_project p = parser.create_project raise InvalidRecord.new("Project '#{p.id}' already exist") if Devops::Db.connector.is_project_exists?(p) @@ -59,7 +57,13 @@ module Devops end end - # TODO: multi project + def add_deploy_env_to_project id + 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}'" + end + def update_project id project = parser.update project.id = id diff --git a/devops-service/app/api2/parsers/project.rb b/devops-service/app/api2/parsers/project.rb index 37c6f59..99bfa92 100644 --- a/devops-service/app/api2/parsers/project.rb +++ b/devops-service/app/api2/parsers/project.rb @@ -38,6 +38,11 @@ module Devops Devops::Model::Project.new(body) end + def add_deploy_env_to_project + body = create_object_from_json_body + Devops::Model::DeployEnvFactory.create(body) + end + def update body = create_object_from_json_body check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash) diff --git a/devops-service/app/api2/routes/project.rb b/devops-service/app/api2/routes/project.rb index d166137..3726e9d 100644 --- a/devops-service/app/api2/routes/project.rb +++ b/devops-service/app/api2/routes/project.rb @@ -249,6 +249,44 @@ module Devops end end + # Add new deploy_env to project + # + # * *Request* + # - method : PATCH + # - headers : + # - Accept: application/json + # - Content-Type: application/json + # - body : + # { + # "identifier": "prod", + # "provider": "openstack", + # "flavor": "m1.small", + # "image": "image id", + # "subnets": [ + # "private" + # ], + # "groups": [ + # "default" + # ], + # "users": [ + # "user" + # ], + # "run_list": [ ], + # "expires": null + # } + # + # * *Returns* : + # 200 - Created + app.patch_with_headers "/project/:id/deploy_env", :headers => [:accept, :content_type] do |id| + check_privileges("project", "w") + begin + res = Devops::API2_0::Handler::Project.new(request).add_deploy_env_to_project(id) + create_response(res, nil, 200) + rescue InvalidRecord => e + halt_response(e.message) + end + end + users_hash = {} # Add users to project environment # diff --git a/devops-service/db/mongo/connectors/project.rb b/devops-service/db/mongo/connectors/project.rb index 0c279da..ea05130 100644 --- a/devops-service/db/mongo/connectors/project.rb +++ b/devops-service/db/mongo/connectors/project.rb @@ -103,6 +103,11 @@ module Connectors @collection.update({"_id" => project_id}, {"$set" => {run_list: run_list}}) end + def add_deploy_env_to_project id, env + env.validate! + @collection.update({"_id" => id}, {'$push' => {deploy_envs: env.to_hash} }) + 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 88e353a..7f500cf 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -62,6 +62,10 @@ module Devops de end + def add_deploy_env deploy_env + Devops::Db.connector.add_deploy_env_to_project self.id, deploy_env + end + def add_authorized_user user, env=nil return if user.nil? new_users = ( user.is_a?(Array) ? user : [ user ] )