diff --git a/lib/fog/vcloud.rb b/lib/fog/vcloud.rb index f8b1bb4ee..dabfcb348 100644 --- a/lib/fog/vcloud.rb +++ b/lib/fog/vcloud.rb @@ -44,7 +44,7 @@ module Fog extend Fog::Vcloud::Generators attr_accessor :login_uri - attr_reader :supported_versions, :versions_uri + attr_reader :versions_uri def initialize(options = {}) @connections = {} @@ -53,7 +53,6 @@ module Fog @version = options[:version] @username = options[:username] @password = options[:password] - @login_uri = get_login_uri @persistent = options[:persistent] end @@ -98,6 +97,9 @@ module Fog end end + def supported_versions + @supported_versions ||= get_versions(@versions_uri).body[:VersionInfo] + end private @@ -118,31 +120,31 @@ module Fog end def supported_version_numbers - case @supported_versions + case supported_versions when Array - @supported_versions.map { |version| version[:Version] } + supported_versions.map { |version| version[:Version] } when Hash - @supported_versions[:Version] + [ supported_versions[:Version] ] end end def get_login_uri check_versions - URI.parse case @supported_versions + URI.parse case supported_versions when Array - @supported_versions.detect {|version| version[:Version] == @version }[:LoginUrl] + supported_versions.detect {|version| version[:Version] == @version }[:LoginUrl] when Hash - @supported_versions[:LoginUrl] + supported_versions[:LoginUrl] end end - # Load up @all_versions and @supported_versions from the provided :versions_uri + # Load up @all_versions and supported_versions from the provided :versions_uri # If there are no supported versions raise an error # And choose a default version is none is specified def check_versions - @supported_versions = get_versions(@versions_uri).body[:VersionInfo] + supported_versions = get_versions(@versions_uri).body[:VersionInfo] - if @supported_versions.empty? + if supported_versions.empty? raise UnsupportedVersion.new("No supported versions found @ #{@version_uri}") end @@ -164,6 +166,7 @@ module Fog # login handles the auth, but we just need the Set-Cookie # header from that call. def do_login + @login_uri ||= get_login_uri @login_results = login @cookie = @login_results.headers['Set-Cookie'] end @@ -346,7 +349,6 @@ module Fog def initialize(credentials = {}) @versions_uri = URI.parse('https://vcloud.fakey.com/api/versions') - @login_uri = get_login_uri end def mock_it(status, mock_data, mock_headers = {}) diff --git a/lib/fog/vcloud/extension.rb b/lib/fog/vcloud/extension.rb index 23f37f17b..531e30e06 100644 --- a/lib/fog/vcloud/extension.rb +++ b/lib/fog/vcloud/extension.rb @@ -12,9 +12,9 @@ module Fog end module #{other}::Mock end - module #{other}::Versions - SUPPORTED = @versions - end + def self.supported_versions + @versions + end def self.extended(klass) unless @required models.each do |model| diff --git a/lib/fog/vcloud/terremark/ecloud.rb b/lib/fog/vcloud/terremark/ecloud.rb index 7ba914a47..6d34d2e65 100644 --- a/lib/fog/vcloud/terremark/ecloud.rb +++ b/lib/fog/vcloud/terremark/ecloud.rb @@ -63,7 +63,7 @@ module Fog request :power_reset request :power_shutdown - versions "v0.8b-ext2.3" + versions "v0.8b-ext2.3", "0.8b-ext2.3" module Mock def self.base_url @@ -189,19 +189,20 @@ module Fog end end + module Real + private - private - - # If we don't support any versions the service does, then raise an error. - # If the @version that super selected isn't in our supported list, then select one that is. - def check_versions - super - unless (supported_version_ids & Versions::SUPPORTED).length > 0 - raise UnsupportedVersion.new("\nService @ #{@versions_uri} supports: #{supported_version_ids.join(', ')}\n" + - "Fog::Vcloud::Terremark::Ecloud supports: #{Versions::SUPPORTED.join(', ')}") - end - unless supported_version_ids.include?(@version) - @version = (supported_version_ids & Versions::SUPPORTED).sort.first + # If we don't support any versions the service does, then raise an error. + # If the @version that super selected isn't in our supported list, then select one that is. + def check_versions + super + unless (supported_version_numbers & Fog::Vcloud::Terremark::Ecloud.supported_versions).length > 0 + raise UnsupportedVersion.new("\nService @ #{@versions_uri} supports: #{supported_version_numbers.join(', ')}\n" + + "Fog::Vcloud::Terremark::Ecloud supports: #{Fog::Vcloud::Terremark::Ecloud.supported_versions.join(', ')}") + end + unless supported_version_numbers.include?(@version) + @version = (supported_version_numbers & Fog::Vcloud::Terremark::Ecloud.supported_versions).sort.first + end end end end