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/serverlove/compute.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

102 lines
2.5 KiB
Ruby

require 'fog/serverlove/core'
module Fog
module Compute
class Serverlove < Fog::Service
API_HOST = "api.z1-man.serverlove.com"
requires :serverlove_uuid, :serverlove_api_key
recognizes :serverlove_api_url
request_path 'fog/serverlove/requests/compute'
# Image
request :get_image
request :get_images
request :destroy_image
request :create_image
request :update_image
request :load_standard_image
# Server
request :get_servers
request :get_server
request :destroy_server
request :create_server
request :update_server
request :start_server
request :stop_server
request :shutdown_server
request :reset_server
model_path 'fog/serverlove/models/compute'
model :image
collection :images
model :server
collection :servers
class Mock
def initialize(options)
@serverlove_uuid = options[:serverlove_uuid] || Fog.credentials[:serverlove_uuid]
@serverlove_api_key = options[:serverlove_api_key] || Fog.credentials[:serverlove_api_key]
end
def request(options)
raise "Not implemented"
end
end
class Real
def initialize(options)
@api_uuid = options[:serverlove_uuid] || Fog.credentials[:serverlove_uuid]
@api_key = options[:serverlove_api_key] || Fog.credentials[:serverlove_api_key]
@api_host = options[:serverlove_api_url] || Fog.credentials[:serverlove_api_url] || API_HOST
@connection = Fog::XML::Connection.new("https://#{@api_uuid}:#{@api_key}@#{@api_host}")
end
def request(params)
params = params.merge!(
:headers => {
"Accept" => "application/json"
}
)
unless params[:options].nil?
params[:body] = encode_pairs(params[:options])
params.delete(:options)
end
response = @connection.request(params)
raise_if_error!(response)
response.body = Fog::JSON.decode(response.body) if response.body && response.body.length > 0
response
end
def encode_pairs(params)
params.keys.collect do |key|
"#{key} #{params[key]}"
end.join("\n")
end
# TODO
def raise_if_error!(response)
case response.status
when 400 then
raise 'omg'
end
end
end
end
end
end