1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/terremark/vcloud.rb
Paul Thornthwaite 0e1daf3ddd [GH-2711] Replace Fog::Connection with XML shim
Unlike last attempt this replaces Fog::Connection with
Fog::XML::Connection which should be directly compatible.

Fog::Connection is there for old PRs but should be removed real soon.

Providers using JSON should be able to replace "XML" with "Core" within
their code to cut down on the dependency.

If I get the time I may attempt to clean up some but testing with Mock
will mean that is mostly educated guesswork.
2014-02-27 00:54:17 +00:00

135 lines
3.8 KiB
Ruby

module Fog
module Terremark
module Vcloud
module Bin
end
module Defaults
HOST = 'services.vcloudexpress.terremark.com'
PATH = '/api/v0.8a-ext1.6'
#PATH = '/api/'
PORT = 443
SCHEME = 'https'
end
extend Fog::Terremark::Shared
def self.new(options={})
Fog::Logger.deprecation("Fog::Terremark::Vcloud is deprecated, to be replaced with Vcloud 1.0 someday/maybe [light_black](#{caller.first})[/]")
unless @required
shared_requires
@required = true
end
check_shared_options(options)
if Fog.mocking?
Fog::Terremark::Vcloud::Mock.new(options)
else
Fog::Terremark::Vcloud::Real.new(options)
end
end
class Real
include Fog::Terremark::Shared::Real
include Fog::Terremark::Shared::Parser
def initialize(options={})
@terremark_password = options[:terremark_vcloud_password]
@terremark_username = options[:terremark_vcloud_username]
@connection_options = options[:connection_options] || {}
@host = options[:host] || Fog::Terremark::Vcloud::Defaults::HOST
@path = options[:path] || Fog::Terremark::Vcloud::Defaults::PATH
@persistent = options[:persistent] || false
@port = options[:port] || Fog::Terremark::Vcloud::Defaults::PORT
@scheme = options[:scheme] || Fog::Terremark::Vcloud::Defaults::SCHEME
@connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
end
def default_vdc_id
if default_organization_id
@default_vdc_id ||= begin
vdcs = get_organization(default_organization_id).body['Links'].select {|link|
link['type'] == 'application/vnd.vmware.vcloud.vdc+xml'
}
if vdcs.length == 1
vdcs.first['href'].split('/').last.to_i
else
nil
end
end
else
nil
end
end
def default_network_id
if default_vdc_id
@default_network_id ||= begin
networks = get_vdc(default_vdc_id).body['AvailableNetworks']
if networks.length == 1
networks.first['href'].split('/').last.to_i
else
nil
end
end
else
nil
end
end
def default_public_ip_id
if default_vdc_id
@default_public_ip_id ||= begin
ips = get_public_ips(default_vdc_id).body['PublicIpAddresses']
if ips.length == 1
ips.first['href'].split('/').last.to_i
else
nil
end
end
else
nil
end
end
end
def default_ssh_key
if default_ssh_key
@default_ssh_key ||= begin
keys = get_keys_list(default_organization_id).body["Keys"]
keys.find { |item| item["IsDefault"] == "true" }
end
end
end
class Mock
include Fog::Terremark::Shared::Mock
include Fog::Terremark::Shared::Parser
def initialize(option = {})
super
@base_url = Fog::Terremark::Vcloud::Defaults::SCHEME + "://" +
Fog::Terremark::Vcloud::Defaults::HOST +
Fog::Terremark::Vcloud::Defaults::PATH
@terremark_username = options[:terremark_vcloud_username]
end
def data
self.class.data[@terremark_username]
end
def reset_data
self.class.data.delete(@terremark_username)
end
end
end
end
end