2010-03-17 21:00:23 -07:00
|
|
|
require 'fog/terremark/requests/get_catalog'
|
|
|
|
require 'fog/terremark/requests/get_catalog_item'
|
|
|
|
require 'fog/terremark/requests/get_organization'
|
|
|
|
require 'fog/terremark/requests/get_organizations'
|
|
|
|
require 'fog/terremark/requests/get_vapp_template'
|
|
|
|
require 'fog/terremark/requests/get_vdc'
|
2010-02-11 23:41:40 -08:00
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
module Fog
|
|
|
|
module Terremark
|
2010-02-11 21:34:44 -08:00
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
def self.new(options={})
|
|
|
|
unless options[:terremark_password]
|
2010-02-11 21:34:44 -08:00
|
|
|
raise ArgumentError.new('terremark_password is required to access terremark')
|
|
|
|
end
|
2010-03-17 21:00:23 -07:00
|
|
|
unless options[:terremark_username]
|
2010-02-11 21:34:44 -08:00
|
|
|
raise ArgumentError.new('terremark_username is required to access terremark')
|
|
|
|
end
|
2010-03-17 21:00:23 -07:00
|
|
|
if Fog.mocking?
|
2010-03-17 21:12:27 -07:00
|
|
|
Fog::Terremark::Mock.new(options)
|
2010-03-17 21:00:23 -07:00
|
|
|
else
|
2010-03-17 21:12:27 -07:00
|
|
|
Fog::Terremark::Real.new(options)
|
2010-03-17 21:00:23 -07:00
|
|
|
end
|
2010-02-11 21:34:44 -08:00
|
|
|
end
|
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
class Mock
|
|
|
|
|
|
|
|
def self.data
|
|
|
|
@data ||= Hash.new do |hash, key|
|
|
|
|
hash[key] = {}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.reset_data(keys=data.keys)
|
|
|
|
for key in [*keys]
|
|
|
|
data.delete(key)
|
|
|
|
end
|
|
|
|
end
|
2010-02-11 21:34:44 -08:00
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
def initialize(options={})
|
|
|
|
@terremark_username = options[:terremark_username]
|
|
|
|
@data = self.class.data[@terremark_username]
|
2010-02-11 21:34:44 -08:00
|
|
|
end
|
2010-03-17 21:00:23 -07:00
|
|
|
|
2010-02-11 21:34:44 -08:00
|
|
|
end
|
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
class Real
|
2010-02-11 21:34:44 -08:00
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
def initialize(options={})
|
|
|
|
@terremark_password = options[:terremark_password]
|
|
|
|
@terremark_username = options[:terremark_username]
|
|
|
|
@host = options[:host] || "services.vcloudexpress.terremark.com"
|
|
|
|
@path = options[:path] || "/api/v0.8"
|
|
|
|
@port = options[:port] || 443
|
|
|
|
@scheme = options[:scheme] || 'https'
|
|
|
|
@cookie = get_organizations.headers['Set-Cookie']
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
2010-02-11 21:34:44 -08:00
|
|
|
|
2010-03-17 21:00:23 -07:00
|
|
|
def request(params)
|
|
|
|
@connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
|
|
|
|
headers = {}
|
|
|
|
if @cookie
|
|
|
|
headers.merge!('Cookie' => @cookie)
|
|
|
|
end
|
|
|
|
response = @connection.request({
|
|
|
|
:body => params[:body],
|
|
|
|
:expects => params[:expects],
|
|
|
|
:headers => headers.merge!(params[:headers] || {}),
|
|
|
|
:host => @host,
|
|
|
|
:method => params[:method],
|
|
|
|
:parser => params[:parser],
|
|
|
|
:path => "#{@path}/#{params[:path]}"
|
|
|
|
})
|
2010-02-11 21:34:44 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|