From 844c11ae3fb642cccee16fcc67468b3190aa1dd4 Mon Sep 17 00:00:00 2001 From: amartynov Date: Tue, 15 Sep 2015 17:14:26 +0300 Subject: [PATCH] #661: done --- devops-service/app/api2/handlers/server.rb | 6 ++-- devops-service/app/api2/handlers/stack.rb | 24 +++++++++++++ devops-service/app/api2/parsers/stack.rb | 10 ++++++ devops-service/app/api2/routes/server.rb | 4 +-- devops-service/app/api2/routes/stack.rb | 40 ++++++++++++++++++++++ 5 files changed, 80 insertions(+), 4 deletions(-) diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index ef1c5a3..a43ec4b 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -210,14 +210,16 @@ module Devops end def set_tags node_name + tags = parser.tags prepare_tags do |id, provider| - provider.set_tags id, parser.tags + provider.set_tags id, tags end end def unset_tags node_name + tags = parser.tags prepare_tags do |id, provider| - provider.unset_tags id, parser.tags + provider.unset_tags id, tags end end diff --git a/devops-service/app/api2/handlers/stack.rb b/devops-service/app/api2/handlers/stack.rb index 20837f8..cbdac96 100644 --- a/devops-service/app/api2/handlers/stack.rb +++ b/devops-service/app/api2/handlers/stack.rb @@ -72,6 +72,30 @@ module Devops Devops::Db.connector.set_stack_run_list(id, parser.run_list) end + def set_tags id + tags = parser.tags + prepare_tags do |id, provider| + provider.set_tags id, tags + end + end + + def unset_tags id + tags = parser.tags + prepare_tags do |id, provider| + provider.unset_tags id, tags + end + end + + def prepare_tags node_name + stack = Devops::Db.connector.stack(id) + Devops::Db.connector.check_project_auth stack.project, stack.deploy_env, parser.current_user + stack_servers = Devops::Db.connector.stack_servers(id) + provider = stack.provider_instance + stack_servers.each do |s| + yield s.id, provider + end + end + def deploy id stack = self.stack(id) owner = parser.current_user diff --git a/devops-service/app/api2/parsers/stack.rb b/devops-service/app/api2/parsers/stack.rb index 42e666a..c9d5c64 100644 --- a/devops-service/app/api2/parsers/stack.rb +++ b/devops-service/app/api2/parsers/stack.rb @@ -21,6 +21,16 @@ module Devops list end + def tags + @body ||= create_object_from_json_body + raise InvalidRecord.new("Request body should be an object") unless @body.is_a?(Hash) + @body.each do |k, v| + raise InvalidRecord.new("Invalid key '#{k}', it should be a String") unless k.is_a?(String) + raise InvalidRecord.new("Invalid value '#{v}' for key '#{k}', it should be a String") unless v.is_a?(String) + end + @body + end + def deploy @body ||= create_object_from_json_body names = check_array(@body["names"], "Parameter 'names' should be a not empty array of strings", String, true) diff --git a/devops-service/app/api2/routes/server.rb b/devops-service/app/api2/routes/server.rb index f7c10af..60c9383 100644 --- a/devops-service/app/api2/routes/server.rb +++ b/devops-service/app/api2/routes/server.rb @@ -305,7 +305,7 @@ module Devops end hash = {} - # Add devops server tags + # Add instance tags # # * *Request* # - method : PUT @@ -325,7 +325,7 @@ module Devops create_response("Added") } - # Delete devops server tags + # Delete instance tags # # * *Request* # - method : DELETE diff --git a/devops-service/app/api2/routes/stack.rb b/devops-service/app/api2/routes/stack.rb index ec14acc..b45cbd9 100644 --- a/devops-service/app/api2/routes/stack.rb +++ b/devops-service/app/api2/routes/stack.rb @@ -111,6 +111,46 @@ module Devops end end + hash = {} + # Add tags to stack instances + # + # * *Request* + # - method : PUT + # - headers : + # - Content-Type: application/json + # - body : + # { + # "tag name": "tag value" + # } + # + # * *Returns* : + # 200 - Added + hash["PUT"] = lambda {|id| + check_privileges("stack", "w") + Devops::API2_0::Handler::Stack.new(request).set_tags(id) + create_response("Added") + } + + # Delete tags from stack instances + # + # * *Request* + # - method : DELETE + # - headers : + # - Content-Type: application/json + # - body : + # { + # "tag name": "tag value" + # } + # + # * *Returns* : + # 200 - Deleted + hash["DELETE"] = lambda {|id| + check_privileges("stack", "w") + Devops::API2_0::Handler::Stack.new(request).unset_tags(id) + create_response("Deleted") + } + app.multi_routes "/stack/:id/tags", {:headers => [:content_type]}, hash + puts "Stack routes initialized" end