From: David Lutterkort <[email protected]>

The generation of the provider selection was EC2 specific, and causes an
internal error for drivers other than the EC2 driver.

Cleaned this up by adding a 'configured_providers' method to drivers, since
they ultimately are the ones who knows how available providers are listed
in their YAML config files.

Fixes https://issues.apache.org/jira/browse/DTACLOUD-124

Signed-off-by: David Lutterkort <[email protected]>
---
 server/lib/deltacloud/base_driver/base_driver.rb |    5 +++++
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb  |    4 ++++
 server/lib/deltacloud/server.rb                  |    3 +--
 server/views/api/show.html.haml                  |    3 +--
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/server/lib/deltacloud/base_driver/base_driver.rb 
b/server/lib/deltacloud/base_driver/base_driver.rb
index 5620a30..dcc3b9a 100644
--- a/server/lib/deltacloud/base_driver/base_driver.rb
+++ b/server/lib/deltacloud/base_driver/base_driver.rb
@@ -235,6 +235,11 @@ module Deltacloud
       Thread.current[:provider] || ENV['API_PROVIDER']
     end
 
+    # Return an array of the providers statically configured
+    # in the driver's YAML file
+    def configured_providers
+      []
+    end
   end
 
 end
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb 
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index a6e2380..f899ea1 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -701,6 +701,10 @@ module Deltacloud
            
:url=>"#{ENV['API_HOST']}:#{ENV['API_PORT']}#{settings.root_url}\;provider=#{r}"
 }) }
         end
 
+        def configured_providers
+          Deltacloud::Drivers::driver_config[:ec2][:entrypoints]["ec2"].keys
+        end
+
         def valid_credentials?(credentials)
           retval = true
           begin
diff --git a/server/lib/deltacloud/server.rb b/server/lib/deltacloud/server.rb
index aa3e4fe..bc9ef76 100644
--- a/server/lib/deltacloud/server.rb
+++ b/server/lib/deltacloud/server.rb
@@ -110,8 +110,7 @@ get "#{settings.root_url}\/?" do
     return [401, 'Authentication failed'] unless 
driver.valid_credentials?(credentials)
   end
   @collections = [:drivers] + driver.supported_collections
-  #could use driver.providers - but that will require credentials for /api ...
-  @providers = 
Deltacloud::Drivers::driver_config["#{driver.name}".to_sym][:entrypoints]["#{driver.name}"].keys
 unless 
driver_provider(Deltacloud::Drivers::driver_config["#{driver.name}".to_sym]).empty?
+  @providers = driver.configured_providers
   respond_to do |format|
     format.xml { haml :"api/show" }
     format.json do
diff --git a/server/views/api/show.html.haml b/server/views/api/show.html.haml
index 7bd5c16..0d8a0fc 100644
--- a/server/views/api/show.html.haml
+++ b/server/views/api/show.html.haml
@@ -6,7 +6,7 @@
     - @collections.sort_by { |k| k.to_s }.each do |key|
       %li= link_to key.to_s.gsub('_', ' ').titlecase, api_url_for(key), 
:'data-icon' => "arrow-r", :'data-ajax' => false
 
-- if @providers
+- if @providers.size > 1
   %div{ :'data-role' => :footer, :'data-theme' => 'a'}
     %form{ :action => settings.root_url, :method => :post, :'data-ajax' => 
'false'}
       %div{ :'data-role' => :footer, :'data-theme' => 'a' , :class => 
'middle-dialog'}
@@ -16,4 +16,3 @@
           - @providers.each do |provider|
             %option{ :value => provider } #{provider}
         %button{ :type => :submit} Change Provider
-
-- 
1.7.7.5

Reply via email to