fog--fog/lib/fog/terremark.rb

81 lines
2.2 KiB
Ruby

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'
module Fog
module Terremark
def self.new(options={})
unless options[:terremark_password]
raise ArgumentError.new('terremark_password is required to access terremark')
end
unless options[:terremark_username]
raise ArgumentError.new('terremark_username is required to access terremark')
end
if Fog.mocking?
Fog::Terremark::Mock.new(options)
else
Fog::Terremark::Real.new(options)
end
end
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
def initialize(options={})
@terremark_username = options[:terremark_username]
@data = self.class.data[@terremark_username]
end
end
class Real
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
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]}"
})
end
end
end
end