sinatra multi routes

This commit is contained in:
Anton Martynov 2015-02-18 13:50:02 +03:00
parent ad4c823251
commit d7ac68c592
6 changed files with 50 additions and 41 deletions

View File

@ -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

View File

@ -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

View File

@ -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) || []

View File

@ -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

View File

@ -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

View File

@ -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