From: Michal Fojtik <mfoj...@redhat.com> The 'check_capability' method set a class variable in Sinatra::Rabbit to a lambda that was evaluated when server was starting. However this class variable was not replaced when client switched the driver using HTTP headers.
This patch will replace it with 'set' and now the lambda is evaluated for every request in Sinatra::Rabbit (sinatra-rabbit 1.0.7) Signed-off-by: Michal fojtik <mfoj...@redhat.com> --- server/lib/deltacloud/collections/addresses.rb | 2 +- server/lib/deltacloud/collections/buckets.rb | 3 ++- server/lib/deltacloud/collections/firewalls.rb | 3 ++- server/lib/deltacloud/collections/hardware_profiles.rb | 2 +- server/lib/deltacloud/collections/images.rb | 2 +- server/lib/deltacloud/collections/instance_states.rb | 2 +- server/lib/deltacloud/collections/instances.rb | 2 +- server/lib/deltacloud/collections/keys.rb | 2 +- server/lib/deltacloud/collections/load_balancers.rb | 3 ++- server/lib/deltacloud/collections/metrics.rb | 3 ++- server/lib/deltacloud/collections/realms.rb | 2 +- server/lib/deltacloud/collections/storage_snapshots.rb | 3 ++- server/lib/deltacloud/collections/storage_volumes.rb | 2 +- server/lib/deltacloud/helpers.rb | 4 ---- server/lib/deltacloud/server.rb | 4 ++++ server/lib/sinatra/rack_driver_select.rb | 4 ++-- 16 files changed, 24 insertions(+), 19 deletions(-) diff --git a/server/lib/deltacloud/collections/addresses.rb b/server/lib/deltacloud/collections/addresses.rb index 95c4ae5..c43f478 100644 --- a/server/lib/deltacloud/collections/addresses.rb +++ b/server/lib/deltacloud/collections/addresses.rb @@ -16,7 +16,7 @@ module Deltacloud::Collections class Addresses < Base - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } get route_for('/addresses/:id/associate') do @address = driver.address(credentials, params ) diff --git a/server/lib/deltacloud/collections/buckets.rb b/server/lib/deltacloud/collections/buckets.rb index 28b6d5a..77a431c 100644 --- a/server/lib/deltacloud/collections/buckets.rb +++ b/server/lib/deltacloud/collections/buckets.rb @@ -18,7 +18,8 @@ module Deltacloud::Collections include Deltacloud::Features - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } + check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } new_route_for :buckets diff --git a/server/lib/deltacloud/collections/firewalls.rb b/server/lib/deltacloud/collections/firewalls.rb index 0a4242a..603a62e 100644 --- a/server/lib/deltacloud/collections/firewalls.rb +++ b/server/lib/deltacloud/collections/firewalls.rb @@ -16,7 +16,8 @@ module Deltacloud::Collections class Firewalls < Base - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } + check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } get route_for('/firewalls/:id/new_rule') do diff --git a/server/lib/deltacloud/collections/hardware_profiles.rb b/server/lib/deltacloud/collections/hardware_profiles.rb index 5c72aff..d5bf400 100644 --- a/server/lib/deltacloud/collections/hardware_profiles.rb +++ b/server/lib/deltacloud/collections/hardware_profiles.rb @@ -16,7 +16,7 @@ module Deltacloud::Collections class HardwareProfiles < Base - check_capability :for => lambda { |m| !driver.class.send(m).empty? } + set :capability, lambda { |m| !driver.class.send(m).empty? } collection :hardware_profiles do diff --git a/server/lib/deltacloud/collections/images.rb b/server/lib/deltacloud/collections/images.rb index 0edd7c0..2bb836e 100644 --- a/server/lib/deltacloud/collections/images.rb +++ b/server/lib/deltacloud/collections/images.rb @@ -18,8 +18,8 @@ module Deltacloud::Collections include Deltacloud::Features - check_capability :for => lambda { |m| driver.respond_to? m } check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } + set :capability, lambda { |m| driver.respond_to? m } new_route_for :images do @instance = Instance.new( :id => params[:instance_id] ) diff --git a/server/lib/deltacloud/collections/instance_states.rb b/server/lib/deltacloud/collections/instance_states.rb index 6122cca..74328a8 100644 --- a/server/lib/deltacloud/collections/instance_states.rb +++ b/server/lib/deltacloud/collections/instance_states.rb @@ -16,7 +16,7 @@ module Deltacloud::Collections class InstanceStates < Base - check_capability :for => lambda { |m| !driver.send(m).nil? } + set :capability, lambda { |m| !driver.send(m).nil? } collection :instance_states do operation :index, :with_capability => :instance_state_machine do diff --git a/server/lib/deltacloud/collections/instances.rb b/server/lib/deltacloud/collections/instances.rb index 0faea0c..742b16a 100644 --- a/server/lib/deltacloud/collections/instances.rb +++ b/server/lib/deltacloud/collections/instances.rb @@ -18,7 +18,7 @@ module Deltacloud::Collections include Deltacloud::Features - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } new_route_for(:instances) do diff --git a/server/lib/deltacloud/collections/keys.rb b/server/lib/deltacloud/collections/keys.rb index 6d0ef03..c59eb15 100644 --- a/server/lib/deltacloud/collections/keys.rb +++ b/server/lib/deltacloud/collections/keys.rb @@ -18,7 +18,7 @@ module Deltacloud::Collections include Deltacloud::Features - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } get route_for('/keys/new') do diff --git a/server/lib/deltacloud/collections/load_balancers.rb b/server/lib/deltacloud/collections/load_balancers.rb index 7d6392b..2a10311 100644 --- a/server/lib/deltacloud/collections/load_balancers.rb +++ b/server/lib/deltacloud/collections/load_balancers.rb @@ -15,7 +15,8 @@ module Deltacloud::Collections class LoadBalancers < Base - check_capability :for => lambda { |m| driver.has_capability? m } + + set :capability, lambda { |m| driver.respond_to? m } new_route_for :load_balancers do @realms = driver.realms(credentials) diff --git a/server/lib/deltacloud/collections/metrics.rb b/server/lib/deltacloud/collections/metrics.rb index d13ba38..45b0ee5 100644 --- a/server/lib/deltacloud/collections/metrics.rb +++ b/server/lib/deltacloud/collections/metrics.rb @@ -15,7 +15,8 @@ module Deltacloud::Collections class Metrics < Base - check_capability :for => lambda { |m| driver.respond_to? m } + + set :capability, lambda { |m| driver.respond_to? m } collection :metrics do description 'Metrics provide monitoring for the cloud resources' diff --git a/server/lib/deltacloud/collections/realms.rb b/server/lib/deltacloud/collections/realms.rb index 609a1dd..619e31a 100644 --- a/server/lib/deltacloud/collections/realms.rb +++ b/server/lib/deltacloud/collections/realms.rb @@ -15,7 +15,7 @@ module Deltacloud::Collections class Realms < Base - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } collection :realms do description "Within a cloud provider a realm represents a boundary containing resources" diff --git a/server/lib/deltacloud/collections/storage_snapshots.rb b/server/lib/deltacloud/collections/storage_snapshots.rb index b468614..5d5ac53 100644 --- a/server/lib/deltacloud/collections/storage_snapshots.rb +++ b/server/lib/deltacloud/collections/storage_snapshots.rb @@ -15,7 +15,8 @@ module Deltacloud::Collections class StorageSnapshots < Base - check_capability :for => lambda { |m| driver.respond_to? m } + + set :capability, lambda { |m| driver.respond_to? m } check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } new_route_for(:storage_snapshots) diff --git a/server/lib/deltacloud/collections/storage_volumes.rb b/server/lib/deltacloud/collections/storage_volumes.rb index 9cdcd66..147c4c1 100644 --- a/server/lib/deltacloud/collections/storage_volumes.rb +++ b/server/lib/deltacloud/collections/storage_volumes.rb @@ -16,7 +16,7 @@ module Deltacloud::Collections class StorageVolumes < Base - check_capability :for => lambda { |m| driver.respond_to? m } + set :capability, lambda { |m| driver.respond_to? m } check_features :for => lambda { |c, f| driver.class.has_feature?(c, f) } new_route_for(:storage_volumes) diff --git a/server/lib/deltacloud/helpers.rb b/server/lib/deltacloud/helpers.rb index 77d201e..0c66103 100644 --- a/server/lib/deltacloud/helpers.rb +++ b/server/lib/deltacloud/helpers.rb @@ -79,10 +79,6 @@ module Deltacloud::Collections end end - def self.check_capability(opts={}) - Sinatra::Rabbit.set :check_capability, opts[:for] - end - def self.check_features(opts={}) Sinatra::Rabbit.set :check_features, opts[:for] end diff --git a/server/lib/deltacloud/server.rb b/server/lib/deltacloud/server.rb index 9f00ca1..10af202 100644 --- a/server/lib/deltacloud/server.rb +++ b/server/lib/deltacloud/server.rb @@ -55,6 +55,10 @@ module Deltacloud end end + options Deltacloud.config[:deltacloud].root_url + '/?' do + headers 'Allow' => Deltacloud.collections.select { |c| driver.respond_to?(c.collection_name) }.map { |c| c.collection_name }.join(',') + end + post Deltacloud.config[:deltacloud].root_url + '/?' do param_driver, param_provider = params["driver"], params["provider"] if param_driver diff --git a/server/lib/sinatra/rack_driver_select.rb b/server/lib/sinatra/rack_driver_select.rb index 141f399..6bba3e0 100644 --- a/server/lib/sinatra/rack_driver_select.rb +++ b/server/lib/sinatra/rack_driver_select.rb @@ -31,10 +31,10 @@ module Rack original_settings = { } req = Rack::Request.new(env) if req.params['api'] and req.params['api']['driver'] - env['HTTP_X_DELTACLOUD_DRIVER'] = req.params['api']['driver'] + env['HTTP_X_DELTACLOUD_DRIVER'] = req.params['api']['driver'] end if req.params['api'] and req.params['api']['provider'] - env['HTTP_X_DELTACLOUD_PROVIDER'] = req.params['api']['provider'] + env['HTTP_X_DELTACLOUD_PROVIDER'] = req.params['api']['provider'] end HEADER_TO_ENV_MAP.each do |header, name| original_settings[name] = Thread.current[name] -- 1.7.10.2