diff --git a/devops-service/routes/v2.0/deploy.rb b/devops-service/routes/v2.0/deploy.rb index 1a98002..ea881a3 100644 --- a/devops-service/routes/v2.0/deploy.rb +++ b/devops-service/routes/v2.0/deploy.rb @@ -5,15 +5,6 @@ module Devops module DeployRoutes def self.registered(app) - app.after "/deploy" do - statistic - end - - app.before "/deploy" do - check_headers :content_type - check_privileges("server", "x") - broadcast(:devops_deploy, "deploy") - end # Run chef-client on reserved server # @@ -29,7 +20,7 @@ module Devops # } # # * *Returns* : text stream - app.post "/deploy", &Devops::Version2_0::Handler::Deploy.deploy + app.post_with_headers "/deploy", :headers => [:content_type], &Devops::Version2_0::Handler::Deploy.deploy puts "Deploy routes initialized" end diff --git a/devops-service/routes/v2.0/filter.rb b/devops-service/routes/v2.0/filter.rb index 08e38c8..cbc7c08 100644 --- a/devops-service/routes/v2.0/filter.rb +++ b/devops-service/routes/v2.0/filter.rb @@ -14,15 +14,6 @@ module Devops check_array(@images, "Request body should contains an array with strings") end - app.after "/filter/:provider/image" do - statistic - end - - app.before "/filter/:provider/images" do - check_headers :accept - check_privileges("filter", "r") - check_provider(params[:provider]) - end # Get list of images filters for :provider # # Devops can works with images from filters list only @@ -41,7 +32,9 @@ module Devops # [ # "36dc7618-4178-4e29-be43-286fbfe90f50" # ] - app.get "/filter/:provider/images", &Devops::Version2_0::Handler::Filter.get_filters + app.get_with_headers "/filter/:provider/images", :headers => [:accept], &Devops::Version2_0::Handler::Filter.get_filters + + hash = {} # Add image ids to filter for :provider # @@ -56,7 +49,7 @@ module Devops # ] -> array of image ids to add to filter # # * *Returns* : list of images filters for :provider - app.put "/filter/:provider/image", &Devops::Version2_0::Handler::Filter.add_filter + hash["PUT"] = Devops::Version2_0::Handler::Filter.add_filter # Delete image ids from filter for :provider # @@ -71,7 +64,9 @@ module Devops # ] -> array of image ids to delete from filter # # * *Returns* : list of images filters for :provider - app.delete "/filter/:provider/image", &Devops::Version2_0::Handler::Filter.delete_filter + hash["DELETE"] = Devops::Version2_0::Handler::Filter.delete_filter + + app.multi_routes "/filter/:provider/image", {:headers => [:accept, :content_type]}, hash puts "Filter routes initialized" end diff --git a/devops-service/routes/v2.0/handlers/deploy.rb b/devops-service/routes/v2.0/handlers/deploy.rb index 60f836b..9efc066 100644 --- a/devops-service/routes/v2.0/handlers/deploy.rb +++ b/devops-service/routes/v2.0/handlers/deploy.rb @@ -11,6 +11,9 @@ module Devops def self.deploy lambda { + check_privileges("server", "x") + # TODO: send message + #broadcast(:devops_deploy, "deploy") r = create_object_from_json_body names = check_array(r["names"], "Parameter 'names' should be a not empty array of strings") tags = check_array(r["tags"], "Parameter 'tags' should be an array of strings", String, true) || [] diff --git a/devops-service/routes/v2.0/handlers/filter.rb b/devops-service/routes/v2.0/handlers/filter.rb index 4723cd4..e765490 100644 --- a/devops-service/routes/v2.0/handlers/filter.rb +++ b/devops-service/routes/v2.0/handlers/filter.rb @@ -5,6 +5,8 @@ module Devops def self.get_filters lambda { + check_privileges("filter", "r") + check_provider(params[:provider]) json settings.mongo.available_images(params[:provider]) } end diff --git a/devops-service/routes/v2.0/image.rb b/devops-service/routes/v2.0/image.rb index e6bf3ea..0ee2b8b 100644 --- a/devops-service/routes/v2.0/image.rb +++ b/devops-service/routes/v2.0/image.rb @@ -55,23 +55,6 @@ module Devops # ] app.get "/images/provider/:provider", :headers => [:accept], &Devops::Version2_0::Handler::Image.get_provider_images - # Get devops image by id - # - # * *Request* - # - method : GET - # - headers : - # - Accept: application/json - # - # * *Returns* : - # { - # "provider": "openstack", - # "name": "centos-6.4-x86_64", - # "remote_user": "root", - # "bootstrap_template": null, - # "id": "36dc7618-4178-4e29-be43-286fbfe90f50" - # } - app.get "/image/:image_id", :headers => [:accept], &Devops::Version2_0::Handler::Image.get_image - # Create devops image # # * *Request* @@ -92,6 +75,24 @@ module Devops # 201 - Created app.post "/image", &Devops::Version2_0::Handler::Image.create_image + hash = {} + # Get devops image by id + # + # * *Request* + # - method : GET + # - headers : + # - Accept: application/json + # + # * *Returns* : + # { + # "provider": "openstack", + # "name": "centos-6.4-x86_64", + # "remote_user": "root", + # "bootstrap_template": null, + # "id": "36dc7618-4178-4e29-be43-286fbfe90f50" + # } + hash["GET"] = Devops::Version2_0::Handler::Image.get_image + # Update devops image # # * *Request* @@ -110,7 +111,7 @@ module Devops # # * *Returns* : # 200 - Updated - app.put "/image/:image_id", &Devops::Version2_0::Handler::Image.update_image + hash["PUT"] = Devops::Version2_0::Handler::Image.update_image # Delete devops image # @@ -121,7 +122,9 @@ module Devops # # * *Returns* : # 200 - Deleted - app.delete "/image/:image_id", &Devops::Version2_0::Handler::Image.delete_image + hash["DELETE"] = Devops::Version2_0::Handler::Image.delete_image + + app.multi_routes "/image/:image_id", {}, hash puts "Image routes initialized" end diff --git a/devops-service/sinatra/methods_with_headers.rb b/devops-service/sinatra/methods_with_headers.rb index 83744f9..5e05c82 100644 --- a/devops-service/sinatra/methods_with_headers.rb +++ b/devops-service/sinatra/methods_with_headers.rb @@ -59,6 +59,21 @@ module Sinatra statistic end end + + def multi_routes path, opts={}, hash={} + headers = opt.delete(:headers) || [] + before path do + check_headers *headers + end + + hash.each do |method, block| + route(method, path, opts, &block) + end + + after path do + statistic + end + end end # Check request headers