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 2011/02/18 12:04:06 UTC
[PATCH core] Advertising supported drivers and their entrypoints Advertising of credentials needed for backend authentication Drivers Hash moved to YAML configuration file
From: Michal Fojtik <mf...@redhat.com>
---
server/config/rhevm_config.yml.EXAMPLE | 1 -
server/lib/deltacloud/drivers/ec2/ec2_driver.rb | 25 +-------
server/lib/drivers.rb | 78 +++++++++++------------
server/server.rb | 2 +
server/tests/drivers/mock/api_test.rb | 18 +++++-
server/views/api/drivers.html.haml | 2 +-
server/views/api/drivers.xml.haml | 11 +++-
7 files changed, 67 insertions(+), 70 deletions(-)
delete mode 100644 server/config/rhevm_config.yml.EXAMPLE
diff --git a/server/config/rhevm_config.yml.EXAMPLE b/server/config/rhevm_config.yml.EXAMPLE
deleted file mode 100644
index 4828b94..0000000
--- a/server/config/rhevm_config.yml.EXAMPLE
+++ /dev/null
@@ -1 +0,0 @@
-domain: demo
\ No newline at end of file
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 5083622..d40dfcb 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -515,34 +515,11 @@ module Deltacloud
klass.new(credentials.user, credentials.password, {:server => endpoint_for_service(type), :connection_mode => :per_thread})
end
- DEFAULT_SERVICE_ENDPOINTS = {
- 'ec2' => {
- 'ap-southeast-1' => 'ec2.ap-southeast-1.amazonaws.com',
- 'eu-west-1' => 'ec2.eu-west-1.amazonaws.com',
- 'us-east-1' => 'ec2.us-east-1.amazonaws.com',
- 'us-west-1' => 'ec2.us-west-1.amazonaws.com'
- },
-
- 'elb' => {
- 'ap-southeast-1' => 'elasticloadbalancing.ap-southeast-1.amazonaws.com',
- 'eu-west-1' => 'elasticloadbalancing.eu-west-1.amazonaws.com',
- 'us-east-1' => 'elasticloadbalancing.us-east-1.amazonaws.com',
- 'us-west-1' => 'elasticloadbalancing.us-west-1.amazonaws.com'
- },
-
- 's3' => {
- 'us-east-1' => 's3.amazonaws.com',
- 'us-west-1' => 's3-us-west-1.amazonaws.com',
- 'ap-southeast-1' => 's3-ap-southeast-1.amazonaws.com',
- 'eu-west-1' => 's3-eu-west-1.amazonaws.com'
- }
- }
-
def endpoint_for_service(service)
endpoint = (Thread.current[:provider] || ENV['API_PROVIDER'] || DEFAULT_REGION)
# return the endpoint if it does not map to a default endpoint, allowing
# the endpoint to be a full hostname instead of a region.
- DEFAULT_SERVICE_ENDPOINTS[service.to_s][endpoint] || endpoint
+ Deltacloud::Drivers::driver_config[:ec2][:entry_points][service.to_s][endpoint] || endpoint
end
def tag_instance(credentials, instance, name)
diff --git a/server/lib/drivers.rb b/server/lib/drivers.rb
index ab31627..d38bf95 100644
--- a/server/lib/drivers.rb
+++ b/server/lib/drivers.rb
@@ -18,56 +18,50 @@
# FIXME: This should be moved into lib/ and be called Deltacloud::Drivers
# or some such
module Deltacloud
- DRIVERS = {
- :ec2 => { :name => "EC2" },
- :sbc => { :name => "SBC" },
- :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
- ]
+ module Drivers
- DRIVER=ENV['API_DRIVER'] ? ENV['API_DRIVER'].to_sym : :mock
+ DEFAULT_COLLECTIONS = [
+ :hardware_profiles,
+ :images,
+ :instances,
+ :instance_states,
+ :realms,
+ :storage_volumes,
+ :storage_snapshots
+ ]
- def driver_symbol
- (Thread.current[:driver] || DRIVER).to_sym
- end
+ DRIVER=ENV['API_DRIVER'] ? ENV['API_DRIVER'].to_sym : :mock
- def driver_name
- DRIVERS[:"#{driver_symbol}"][:name]
- end
+ def driver_config
+ YAML::load(File.read(File.join(File.dirname(__FILE__), '..', 'config', 'drivers.yaml')))
+ end
- def driver_class
- basename = DRIVERS[:"#{driver_symbol}"][:class] || "#{driver_name}Driver"
- Deltacloud::Drivers.const_get(driver_name).const_get(basename)
- end
+ def driver_symbol
+ (Thread.current[:driver] || DRIVER).to_sym
+ end
- def driver_source_name
- File.join("deltacloud", "drivers", "#{driver_symbol}", "#{driver_symbol}_driver.rb")
- end
+ def driver_name
+ driver_config[:"#{driver_symbol}"][:name]
+ end
- def driver_mock_source_name
- return File.join('deltacloud', 'drivers', "#{driver_symbol}",
- "#{driver_symbol}_driver.rb") if driver_name.eql? 'Mock'
- end
+ def driver_class
+ basename = driver_config[:"#{driver_symbol}"][:class] || "#{driver_name}Driver"
+ Deltacloud::Drivers.const_get(driver_name).const_get(basename)
+ end
+
+ def driver_source_name
+ File.join("deltacloud", "drivers", "#{driver_symbol}", "#{driver_symbol}_driver.rb")
+ end
- def driver
- require driver_source_name
+ def driver_mock_source_name
+ return File.join('deltacloud', 'drivers', "#{driver_symbol}",
+ "#{driver_symbol}_driver.rb") if driver_name.eql? 'Mock'
+ end
- @driver ||= driver_class.new
+ def driver
+ require driver_source_name
+ @driver ||= driver_class.new
+ end
end
end
diff --git a/server/server.rb b/server/server.rb
index 3f092e4..4a8a869 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -33,6 +33,8 @@ require 'sinatra/rack_etag'
set :version, '0.2.0'
+include Deltacloud::Drivers
+set :drivers, Proc.new { driver_config }
use Rack::DriverSelect
use Rack::ETag
diff --git a/server/tests/drivers/mock/api_test.rb b/server/tests/drivers/mock/api_test.rb
index 062b417..0657f72 100644
--- a/server/tests/drivers/mock/api_test.rb
+++ b/server/tests/drivers/mock/api_test.rb
@@ -67,11 +67,27 @@ module DeltacloudUnitTest
end
end
- def test_it_repond_to_head
+ def test_it_respond_to_head
head '/api/instances'
last_response.headers['Allow'].should_not == nil
last_response.headers['Allow'].split(',').include?('HEAD').should == true
end
+ def test_it_expose_available_drivers
+ do_xml_request '/api/drivers'
+ last_response.status.should == 200
+ (last_xml_response/"api/drivers").length.should > 0
+ (last_xml_response/'api/drivers/driver').length.should > 0
+ end
+
+ def test_it_expose_ec2_driver_entrypoints
+ do_xml_request '/api/drivers'
+ last_response.status.should == 200
+ (last_xml_response/"api/drivers").length.should > 0
+ (last_xml_response/'api/drivers/driver[@id=ec2]/entrypoints').length.should > 0
+ (last_xml_response/'api/drivers/driver[@id=ec2]/entrypoints/entrypoint').first[:id].should_not == nil
+ (last_xml_response/'api/drivers/driver[@id=ec2]/entrypoints/entrypoint').first.text.should_not == ""
+ end
+
end
end
diff --git a/server/views/api/drivers.html.haml b/server/views/api/drivers.html.haml
index 62b90ca..9eef8cf 100644
--- a/server/views/api/drivers.html.haml
+++ b/server/views/api/drivers.html.haml
@@ -7,7 +7,7 @@
%th ID
%th Name
%tbody
- - DRIVERS.each do |id, details|
+ - settings.drivers.each do |id, details|
%tr
%td{ :width => '20%' }
%tt= id
diff --git a/server/views/api/drivers.xml.haml b/server/views/api/drivers.xml.haml
index 7beb9c8..adae310 100644
--- a/server/views/api/drivers.xml.haml
+++ b/server/views/api/drivers.xml.haml
@@ -1,6 +1,15 @@
%api{ :version => settings.version }
%drivers
- - DRIVERS.each do |id, details|
+ - settings.drivers.each do |id, details|
%driver{ :id => id }
%name<
=details[:name]
+ - if details[:username] or details[:password]
+ %credentials
+ %username<=cdata(details[:username])
+ %password<=cdata(details[:password])
+ - if details[:entrypoints]
+ - details[:entrypoints].each do |list_id, entrypoints|
+ %entrypoints{:id => list_id}
+ - entrypoints.each do |entrypoint, url|
+ %entrypoint{ :id => entrypoint }<=cdata(url)
--
1.7.4