deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mfoj...@redhat.com
Subject [PATCH core] Core: Replaced 'check_capability' method with Sinatra::Base 'set' method
Date Tue, 10 Jul 2012 12:39:23 GMT
From: Michal Fojtik <mfojtik@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 <mfojtik@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


Mime
View raw message