mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
![Paul Thornthwaite](/assets/img/avatar_default.png)
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.
135 lines
3.8 KiB
Ruby
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
|
|
|
|
|