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/rackspace/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

260 lines
9.4 KiB
Ruby

require 'fog/rackspace/core'
module Fog
module Compute
class Rackspace < Fog::Service
include Fog::Rackspace::Errors
class ServiceError < Fog::Rackspace::Errors::ServiceError; end
class InternalServerError < Fog::Rackspace::Errors::InternalServerError; end
class BadRequest < Fog::Rackspace::Errors::BadRequest; end
requires :rackspace_api_key, :rackspace_username
recognizes :rackspace_auth_url, :rackspace_servicenet, :persistent
recognizes :rackspace_auth_token, :rackspace_management_url, :rackspace_compute_v1_url, :rackspace_region
model_path 'fog/rackspace/models/compute'
model :flavor
collection :flavors
model :image
collection :images
model :server
collection :servers
request_path 'fog/rackspace/requests/compute'
request :confirm_resized_server
request :create_image
request :create_server
request :delete_image
request :delete_server
request :get_flavor_details
request :get_image_details
request :get_server_details
request :list_addresses
request :list_private_addresses
request :list_public_addresses
request :list_flavors
request :list_flavors_detail
request :list_images
request :list_images_detail
request :list_servers
request :list_servers_detail
request :reboot_server
request :revert_resized_server
request :resize_server
request :server_action
request :update_server
class Mock < Fog::Rackspace::Service
def self.data
@data ||= Hash.new do |hash, key|
hash[key] = {
:last_modified => {
:images => {},
:servers => {}
},
:servers => {},
:images => {
112 =>
{'id' => 112,
'status' => "ACTIVE",
'updated' => "2011-04-21T10:24:01-05:00",
'name' => "Ubuntu 10.04 LTS"},
100 =>
{'id' => 100,
'status' => "ACTIVE",
'updated' => "2011-09-12T09:09:23-05:00",
'name' => "Arch 2011.10"},
31 =>
{'id' => 31,
'status' => "ACTIVE",
'updated' => "2010-01-26T12:07:44-06:00",
'name' => "Windows Server 2008 SP2 x86"},
108 =>
{'id' => 108,
'status' => "ACTIVE",
'updated' => "2011-11-01T08:32:30-05:00",
'name' => "Gentoo 11.0"},
109 =>
{'id' => 109,
'status' => "ACTIVE",
'updated' => "2011-11-03T06:28:56-05:00",
'name' => "openSUSE 12"},
89 =>
{'id' => 89,
'status' => "ACTIVE",
'updated' => "2011-10-04T08:39:34-05:00",
'name' => "Windows Server 2008 R2 x64 - SQL2K8R2 Web"},
24 =>
{'id' => 24,
'status' => "ACTIVE",
'updated' => "2010-01-26T12:07:04-06:00",
'name' => "Windows Server 2008 SP2 x64"},
110 =>
{'id' => 110,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "Red Hat Enterprise Linux 5.5"},
57 =>
{'id' => 57,
'status' => "ACTIVE",
'updated' => "2010-09-17T07:16:25-05:00",
'name' => "Windows Server 2008 SP2 x64 - MSSQL2K8R2"},
85 =>
{'id' => 85,
'status' => "ACTIVE",
'updated' => "2010-01-26T12:07:17-06:00",
'name' => "Windows Server 2008 R2 x64"},
111 =>
{'id' => 111,
'status' => "ACTIVE",
'updated' => "2011-09-12T10:53:12-05:00",
'name' => "Red Hat Enterprise Linux 6"},
120 =>
{'id' => 120,
'status' => "ACTIVE",
'updated' => "2012-01-03T04:39:05-06:00",
'name' => "Fedora 16"},
119 =>
{'id' => 119,
'status' => "ACTIVE",
'updated' => "2011-11-03T08:55:15-05:00",
'name' => "Ubuntu 11.10"},
116 =>
{'id' => 116,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "Fedora 15"},
56 =>
{'id' => 56,
'status' => "ACTIVE",
'updated' => "2010-09-17T07:12:56-05:00",
'name' => "Windows Server 2008 SP2 x86 - MSSQL2K8R2"},
114 =>
{'id' => 114,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "CentOS 5.6"},
86 =>
{'id' => 86,
'status' => "ACTIVE",
'updated' => "2010-09-17T07:19:20-05:00",
'name' => "Windows Server 2008 R2 x64 - MSSQL2K8R2"},
115 =>
{'id' => 115,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "Ubuntu 11.04"},
103 =>
{'id' => 103,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "Debian 5 (Lenny)"},
104 =>
{'id' => 104,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "Debian 6 (Squeeze)"},
118 =>
{'id' => 118,
'status' => "ACTIVE",
'updated' => "2011-08-17T05:11:30-05:00",
'name' => "CentOS 6.0"}
}
}
end
end
def self.reset
@data = nil
end
def initialize(options={})
@rackspace_username = options[:rackspace_username]
end
def data
self.class.data[@rackspace_username]
end
def reset_data
self.class.data.delete(@rackspace_username)
end
end
class Real < Fog::Rackspace::Service
def initialize(options={})
@rackspace_api_key = options[:rackspace_api_key]
@rackspace_username = options[:rackspace_username]
@rackspace_auth_url = options[:rackspace_auth_url]
@rackspace_servicenet = options[:rackspace_servicenet]
@rackspace_auth_token = options[:rackspace_auth_token]
@rackspace_endpoint = Fog::Rackspace.normalize_url(options[:rackspace_compute_v1_url] || options[:rackspace_management_url])
@connection_options = options[:connection_options] || {}
authenticate
Excon.defaults[:ssl_verify_peer] = false if service_net?
@persistent = options[:persistent] || false
@connection = Fog::XML::Connection.new(endpoint_uri.to_s, @persistent, @connection_options)
end
def reload
@connection.reset
end
def request(params, parse_json = true)
super
rescue Excon::Errors::NotFound => error
raise NotFound.slurp(error, self)
rescue Excon::Errors::BadRequest => error
raise BadRequest.slurp(error, self)
rescue Excon::Errors::InternalServerError => error
raise InternalServerError.slurp(error, self)
rescue Excon::Errors::HTTPStatusError => error
raise ServiceError.slurp(error, self)
end
def service_net?
@rackspace_servicenet == true
end
def authenticate(options={})
super({
:rackspace_api_key => @rackspace_api_key,
:rackspace_username => @rackspace_username,
:rackspace_auth_url => @rackspace_auth_url,
:connection_options => @connection_options
})
end
def service_name
:cloudServers
end
def region
@rackspace_region
end
def endpoint_uri(service_endpoint_url=nil)
return @uri if @uri
super(@rackspace_endpoint || service_endpoint_url, :rackspace_compute_v1_url)
end
private
def deprecation_warnings(options)
Fog::Logger.deprecation("The :rackspace_management_url option is deprecated. Please use :rackspace_compute_v1_url for custom endpoints") if options[:rackspace_management_url]
end
def authenticate_v1(options)
credentials = Fog::Rackspace.authenticate(options, @connection_options)
endpoint_uri credentials['X-Server-Management-Url']
@auth_token = credentials['X-Auth-Token']
end
end
end
end
end