From 8da62ce02ab47cf8f241a695bf65949bf758bb10 Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 15 Sep 2015 13:06:25 +0300 Subject: [PATCH] #688: done --- devops-service/app/api2/handlers/project.rb | 14 ++- devops-service/app/api2/parsers/project.rb | 11 +- devops-service/app/api2/routes/project.rb | 112 +++++++++++------- devops-service/db/mongo/connectors/project.rb | 11 +- 4 files changed, 93 insertions(+), 55 deletions(-) diff --git a/devops-service/app/api2/handlers/project.rb b/devops-service/app/api2/handlers/project.rb index 5431f0b..4eef0ad 100644 --- a/devops-service/app/api2/handlers/project.rb +++ b/devops-service/app/api2/handlers/project.rb @@ -98,13 +98,17 @@ module Devops end end + def delete_deploy_env id, deploy_env + project = Devops::Db.connector.project(id) + servers = Devops::Db.connector.servers_by_project_and_deploy_env(id, deploy_env) + raise InvalidRecord.new("Can not delete environment '#{deploy_env}', there are #{servers.size} servers on it") unless servers.empty? + project.delete_deploy_env(deploy_env) + end + def update_project id - project = parser.update - project.id = id + body = parser.update old_project = Devops::Db.connector.project id - Devops::Db.connector.project_update project -# roles = create_new_roles(old_project, project) -# create_roles_response(roles) + Devops::Db.connector.project_update id, body end # TODO: multi project diff --git a/devops-service/app/api2/parsers/project.rb b/devops-service/app/api2/parsers/project.rb index 1c123d1..a99c449 100644 --- a/devops-service/app/api2/parsers/project.rb +++ b/devops-service/app/api2/parsers/project.rb @@ -52,9 +52,14 @@ module Devops 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) - # check_array(body["run_list"], "Parameter 'run_list' must be a not empty array of string", String, false, true) - Devops::Model::Project.new(body) + check_string(body["name"], "Parameter 'name' must be a not empty string", true, false) + check_string(body["description"], "Parameter 'description' must be a string", true, true) + #check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash) + check_array(body["run_list"], "Parameter 'run_list' must be an array of string", String, true, true) + Validators::Helpers::RunList.new(rl).validate! unless rl.nil? + #raise InvalidRecord.new("'components' key not found") if c["components"].nil? + #Devops::Model::Project.new(body) + body end def delete diff --git a/devops-service/app/api2/routes/project.rb b/devops-service/app/api2/routes/project.rb index 25a010e..7d33349 100644 --- a/devops-service/app/api2/routes/project.rb +++ b/devops-service/app/api2/routes/project.rb @@ -77,7 +77,7 @@ module Devops json Devops::API2_0::Handler::Project.new(request).project(project) } - # Update project and create chef roles + # Update project # # * *Request* # - method : PUT @@ -115,8 +115,7 @@ module Devops hash["PUT"] = lambda { |project| check_privileges("project", "w") r = Devops::API2_0::Handler::Project.new(request).update_project project - info = "Project '#{project}' has been updated." - create_response(info) + create_response("Project '#{project}' has been updated.") } # Delete project @@ -212,18 +211,77 @@ module Devops json Devops::API2_0::Handler::Project.new(request).project_deploy_envs(project) end + deploy_env_hash = {} # Get project deploy environment # # * *Request* # - method : GET # - headers : # - Accept: application/json - app.get_with_headers "/project/:project/deploy_envs/:env", :headers => [:accept] do |project, env| + deploy_env_hash["GET"] = lambda{|project, env| check_privileges("project", "r") json Devops::API2_0::Handler::Project.new(request).project_deploy_env(project, env) - end + } - # Create project and chef roles + # Add or update deploy_env + # + # * *Request* + # - method : PUT + # - 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 - Updated + deploy_env_hash["PUT"] = lambda{|id, deploy_env| + check_privileges("project", "w") + begin + 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) + end + } + + # Delete deploy_env + # + # * *Request* + # - method : DELETE + # - headers : + # - Accept: application/json + # + # * *Returns* : + # 200 - Deleted + deploy_env_hash["DELETE"] = lambda{|id, deploy_env| + check_privileges("project", "w") + begin + res = Devops::API2_0::Handler::Project.new(request).delete_deploy_env(id, deploy_env) + create_response(res, nil, 200) + rescue InvalidRecord => e + halt_response(e.message) + end + } + app.multi_routes "/project/:id/deploy_envs/:deploy_env", {}, deploy_env_hash + + # Create project # # * *Request* # - method : POST @@ -269,6 +327,7 @@ module Devops end end +=begin # Set components to project # # * *Request* @@ -290,44 +349,7 @@ module Devops res = Devops::API2_0::Handler::Project.new(request).set_project_components(id) create_response(res) end - - # Add or update deploy_env - # - # * *Request* - # - method : PUT - # - 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 - 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_or_update_deploy_env(id, deploy_env) - create_response(res, nil, 200) - rescue InvalidRecord => e - halt_response(e.message) - end - end +=end users_hash = {} # Add users to project environment @@ -484,7 +506,7 @@ module Devops # - delete server # # * *Request* - # - method : DELETE + # - method : POST # - headers : # - Accept: application/json # - Content-Type: application/json diff --git a/devops-service/db/mongo/connectors/project.rb b/devops-service/db/mongo/connectors/project.rb index 64ef6f4..14e89b9 100644 --- a/devops-service/db/mongo/connectors/project.rb +++ b/devops-service/db/mongo/connectors/project.rb @@ -3,8 +3,8 @@ module Connectors include Helpers::InsertCommand, Helpers::ShowCommand, # Helpers::ListCommand, - Helpers::DeleteCommand, - Helpers::UpdateCommand + Helpers::DeleteCommand +# Helpers::UpdateCommand def initialize(db) @@ -118,6 +118,13 @@ module Connectors @collection.update({"_id" => id}, {'$set' => obj }) end + def project_update id, params + raise InvalidRecord.new("You can not change project name for '#{id}'.") if params["name"] + keys = %w(run_list description) + params.delete_if{|k,v| !keys.include?(k)} + @collection.update({"_id" => id}, {'$set' => params }) + end + private def list(query={}, query_options={})