You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2010/11/26 13:54:15 UTC
[PATCH core 1/2] Moved DRIVER and @version into Sinatra settings (needs Sinatra 1.1.0)
From: Michal Fojtik <mf...@redhat.com>
---
server/lib/drivers.rb | 93 +++++++++++++++-------------
server/lib/sinatra/lazy_auth.rb | 2 +-
server/lib/sinatra/rabbit.rb | 8 +-
server/server.rb | 14 +++-
server/views/api/show.html.haml | 4 +-
server/views/api/show.xml.haml | 2 +-
server/views/errors/backend_error.xml.haml | 2 +-
server/views/layout.html.haml | 2 +-
8 files changed, 70 insertions(+), 57 deletions(-)
diff --git a/server/lib/drivers.rb b/server/lib/drivers.rb
index 6e31bb7..f30ab21 100644
--- a/server/lib/drivers.rb
+++ b/server/lib/drivers.rb
@@ -1,51 +1,56 @@
-DRIVERS = {
- :ec2 => { :name => "EC2" },
- :rackspace => { :name => "Rackspace" },
- :gogrid => { :name => "Gogrid" },
- :rhevm => { :name => "RHEVM" },
- :rimuhosting => { :name => "RimuHosting"},
- :opennebula => { :name => "Opennebula", :class => "OpennebulaDriver" },
- :terremark => { :name => "Terremark"},
- :azure => { :name => "Azure" },
- :mock => { :name => "Mock" }
-}
-
-DEFAULT_COLLECTIONS = [
- :hardware_profiles,
- :images,
- :instances,
- :instance_states,
- :realms,
- :storage_volumes,
- :storage_snapshots
-]
-
-DRIVER=ENV['API_DRIVER'] ? ENV['API_DRIVER'].to_sym : :mock
-
-def driver_name
- DRIVERS[DRIVER][:name]
-end
+module Deltacloud
+ DRIVERS = {
+ :ec2 => { :name => "EC2" },
+ :rackspace => { :name => "Rackspace" },
+ :gogrid => { :name => "Gogrid" },
+ :rhevm => { :name => "RHEVM" },
+ :rimuhosting => { :name => "RimuHosting"},
+ :opennebula => { :name => "Opennebula", :class => "OpennebulaDriver" },
+ :terremark => { :name => "Terremark"},
+ :azure => { :name => "Azure" },
+ :mock => { :name => "Mock" }
+ }
+
+ DEFAULT_COLLECTIONS = [
+ :hardware_profiles,
+ :images,
+ :instances,
+ :instance_states,
+ :realms,
+ :storage_volumes,
+ :storage_snapshots
+ ]
+
+ DRIVER=ENV['API_DRIVER'] ? ENV['API_DRIVER'].to_sym : :mock
+
+ def driver_name
+ DRIVERS[:"#{settings.driver}"][:name]
+ end
-def driver_class_name
- basename = DRIVERS[DRIVER][:class] || "#{driver_name}Driver"
- "Deltacloud::Drivers::#{driver_name}::#{basename}"
-end
+ def driver_class_name
+ basename = DRIVERS[:"#{settings.driver}"][:class] || "#{driver_name}Driver"
+ "Deltacloud::Drivers::#{driver_name}::#{basename}"
+ end
-def driver_source_name
- File.join("deltacloud", "drivers", "#{DRIVER}", "#{DRIVER}_driver.rb")
-end
+ def driver_source_name
+ File.join("deltacloud", "drivers", "#{settings.driver}", "#{settings.driver}_driver.rb")
+ end
-def driver_mock_source_name
- return File.join('deltacloud', 'drivers', DRIVER.to_s, "#{DRIVER}_driver.rb") if driver_name.eql? 'Mock'
-end
+ def driver_mock_source_name
+ return File.join('deltacloud', 'drivers', "#{settings.driver}",
+ "#{settings.driver}_driver.rb") if driver_name.eql? 'Mock'
+ end
-def driver
- require driver_source_name
- #require 'deltacloud/base_driver/mock_driver.rb'
+ def driver
+ require driver_source_name
+ #require 'deltacloud/base_driver/mock_driver.rb'
- if Sinatra::Application.environment.eql? :test
- require driver_mock_source_name if driver_mock_source_name
- end
+ if Sinatra::Application.environment.eql? :test
+ require driver_mock_source_name if driver_mock_source_name
+ end
- @driver ||= eval( driver_class_name ).new
+ @driver ||= eval( driver_class_name ).new
+ end
end
+
+include Deltacloud
diff --git a/server/lib/sinatra/lazy_auth.rb b/server/lib/sinatra/lazy_auth.rb
index 2a26fdf..43c4b4e 100644
--- a/server/lib/sinatra/lazy_auth.rb
+++ b/server/lib/sinatra/lazy_auth.rb
@@ -40,7 +40,7 @@ module Sinatra
end
def authorize!
- r = "#{DRIVER}-deltacloud@#{HOSTNAME}"
+ r = "#{settings.driver}-deltacloud@#{HOSTNAME}"
response['WWW-Authenticate'] = %(Basic realm="#{r}")
throw(:halt, [401, "Not authorized\n"])
end
diff --git a/server/lib/sinatra/rabbit.rb b/server/lib/sinatra/rabbit.rb
index 94c74e3..05bd6c5 100644
--- a/server/lib/sinatra/rabbit.rb
+++ b/server/lib/sinatra/rabbit.rb
@@ -60,7 +60,7 @@ module Sinatra
def control(&block)
op = self
@control = Proc.new do
- op.check_capability(driver)
+ op.check_capability(Deltacloud::driver)
op.validate(params)
instance_eval(&block)
end
@@ -133,7 +133,7 @@ module Sinatra
end
def generate_documentation
- coll, oper, features = self, @operations, driver.features(name)
+ coll, oper, features = self, @operations, Deltacloud::driver.features(name)
::Sinatra::Application.get("/api/docs/#{@name}") do
@collection, @operations, @features = coll, oper, features
respond_to do |format|
@@ -206,9 +206,9 @@ module Sinatra
# operation on this collection.
def collection(name, &block)
raise DuplicateCollectionException if collections[name]
- return unless driver.has_collection?(name.to_sym)
+ return unless Deltacloud::driver.has_collection?(name.to_sym)
collections[name] = Collection.new(name, &block)
- collections[name].add_feature_params(driver.features(name))
+ collections[name].add_feature_params(Deltacloud::driver.features(name))
collections[name].generate
end
diff --git a/server/server.rb b/server/server.rb
index d3f7d8a..297e556 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -11,6 +11,9 @@ require 'haml'
require 'open3'
require 'lib/deltacloud/helpers/blob_stream'
+set :driver, (ENV['API_DRIVER'] ? ENV['API_DRIVER'] : :mock)
+set :version, '0.0.1'
+
configure do
set :raise_errors => false
set :show_exceptions, false
@@ -48,8 +51,13 @@ Sinatra::Application.register Sinatra::RespondTo
# Redirect to /api
get '/' do redirect url_for('/api'); end
+get '/api/drivers\/?' do
+ respond_to do |format|
+ format.xml { haml :"api/drivers" }
+ end
+end
+
get '/api\/?' do
- @version = 0.1
if params[:force_auth]
return [401, 'Authentication failed'] unless driver.valid_credentials?(credentials)
end
@@ -57,8 +65,8 @@ get '/api\/?' do
format.xml { haml :"api/show" }
format.json do
{ :api => {
- :version => @version,
- :driver => DRIVER,
+ :version => settings.version,
+ :driver => settings.driver,
:links => entry_points.collect { |l| { :rel => l[0], :href => l[1]} }
}
}.to_json
diff --git a/server/views/api/show.html.haml b/server/views/api/show.html.haml
index 0077972..74ec175 100644
--- a/server/views/api/show.html.haml
+++ b/server/views/api/show.html.haml
@@ -1,5 +1,5 @@
%h1
- API v#{@version}
+ API v#{settings.version}
%ul
- collections.keys.sort_by { |k| k.to_s }.each do |key|
@@ -12,4 +12,4 @@
= op
%li
%strong
- %a{:href => url_for("/api/docs")} Documentation (v#{@version})
+ %a{:href => url_for("/api/docs")} Documentation (#{settings.version})
diff --git a/server/views/api/show.xml.haml b/server/views/api/show.xml.haml
index 70c26c9..9b69bf5 100644
--- a/server/views/api/show.xml.haml
+++ b/server/views/api/show.xml.haml
@@ -1,4 +1,4 @@
-%api{ :version=>@version, :driver=>DRIVER }
+%api{ :version => settings.version, :driver => settings.driver }
- for entry_point in entry_points
%link{ :rel=>entry_point[0], :href=>entry_point[1] }
- for feature in driver.features(entry_point[0])
diff --git a/server/views/errors/backend_error.xml.haml b/server/views/errors/backend_error.xml.haml
index 75866eb..62d067d 100644
--- a/server/views/errors/backend_error.xml.haml
+++ b/server/views/errors/backend_error.xml.haml
@@ -1,6 +1,6 @@
%error{:url => "#{request.env['REQUEST_URI']}", :status => "#{response.status}"}
%kind backend_error
- %backend{ :driver => DRIVER }
+ %backend{ :driver => settings.driver }
%code= @error.code
%cause= @error.cause
- if @error.details
diff --git a/server/views/layout.html.haml b/server/views/layout.html.haml
index c46b15b..9e6dba7 100644
--- a/server/views/layout.html.haml
+++ b/server/views/layout.html.haml
@@ -19,7 +19,7 @@
= yield
#footer
#driver_info
- Driver: #{DRIVER}
+ Driver: #{settings.driver} | API version: #{settings.version}
#copyright
Copyright 2009, 2010
%a{:href => 'http://redhat.com'} Red Hat
--
1.7.3.2