2012-05-15 14:54:20 -04:00
require 'fog/rackspace'
2011-08-31 15:52:53 -05:00
require 'fog/compute'
2010-09-08 13:50:23 -07:00
module Fog
2011-06-16 16:28:54 -07:00
module Compute
class Rackspace < Fog :: Service
2013-04-15 09:31:13 -05:00
include Fog :: Rackspace :: Errors
2010-09-08 13:50:23 -07:00
2010-12-16 15:31:24 -08:00
requires :rackspace_api_key , :rackspace_username
2011-03-18 00:09:43 -04:00
recognizes :rackspace_auth_url , :rackspace_servicenet , :persistent
2013-03-13 16:01:32 -05:00
recognizes :rackspace_auth_token , :rackspace_management_url , :rackspace_compute_v1_url , :rackspace_region
2010-09-08 13:50:23 -07:00
2011-08-24 20:16:01 -05:00
model_path 'fog/rackspace/models/compute'
2010-09-08 13:50:23 -07:00
model :flavor
collection :flavors
model :image
collection :images
model :server
collection :servers
2011-08-24 20:16:01 -05:00
request_path 'fog/rackspace/requests/compute'
2010-11-29 19:28:14 -08:00
request :confirm_resized_server
2010-09-08 13:50:23 -07:00
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
2010-11-29 10:36:10 -08:00
request :reboot_server
2010-11-29 19:28:14 -08:00
request :revert_resized_server
2010-11-29 10:36:10 -08:00
request :resize_server
2010-11-29 19:28:14 -08:00
request :server_action
request :update_server
2010-09-08 13:50:23 -07:00
2013-03-13 16:01:32 -05:00
class Mock < Fog :: Rackspace :: Service
2010-09-08 13:50:23 -07:00
def self . data
@data || = Hash . new do | hash , key |
hash [ key ] = {
:last_modified = > {
:images = > { } ,
:servers = > { }
} ,
2012-05-08 10:47:36 -07:00
:servers = > { } ,
:images = > {
112 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 112 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-04-21T10:24:01-05:00 " ,
'name' = > " Ubuntu 10.04 LTS " } ,
2012-05-08 10:47:36 -07:00
100 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 100 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-09-12T09:09:23-05:00 " ,
'name' = > " Arch 2011.10 " } ,
2012-05-08 10:47:36 -07:00
31 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 31 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-01-26T12:07:44-06:00 " ,
'name' = > " Windows Server 2008 SP2 x86 " } ,
2012-05-08 10:47:36 -07:00
108 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 108 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-11-01T08:32:30-05:00 " ,
'name' = > " Gentoo 11.0 " } ,
2012-05-08 10:47:36 -07:00
109 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 109 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-11-03T06:28:56-05:00 " ,
'name' = > " openSUSE 12 " } ,
2012-05-08 10:47:36 -07:00
89 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 89 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-10-04T08:39:34-05:00 " ,
'name' = > " Windows Server 2008 R2 x64 - SQL2K8R2 Web " } ,
2012-05-08 10:47:36 -07:00
24 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 24 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-01-26T12:07:04-06:00 " ,
'name' = > " Windows Server 2008 SP2 x64 " } ,
2012-05-08 10:47:36 -07:00
110 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 110 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " Red Hat Enterprise Linux 5.5 " } ,
2012-05-08 10:47:36 -07:00
57 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 57 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-09-17T07:16:25-05:00 " ,
'name' = > " Windows Server 2008 SP2 x64 - MSSQL2K8R2 " } ,
2012-05-08 10:47:36 -07:00
85 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 85 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-01-26T12:07:17-06:00 " ,
'name' = > " Windows Server 2008 R2 x64 " } ,
2012-05-08 10:47:36 -07:00
111 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 111 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-09-12T10:53:12-05:00 " ,
'name' = > " Red Hat Enterprise Linux 6 " } ,
2012-05-08 10:47:36 -07:00
120 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 120 ,
'status' = > " ACTIVE " ,
'updated' = > " 2012-01-03T04:39:05-06:00 " ,
'name' = > " Fedora 16 " } ,
2012-05-08 10:47:36 -07:00
119 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 119 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-11-03T08:55:15-05:00 " ,
'name' = > " Ubuntu 11.10 " } ,
2012-05-08 10:47:36 -07:00
116 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 116 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " Fedora 15 " } ,
2012-05-08 10:47:36 -07:00
56 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 56 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-09-17T07:12:56-05:00 " ,
'name' = > " Windows Server 2008 SP2 x86 - MSSQL2K8R2 " } ,
2012-05-08 10:47:36 -07:00
114 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 114 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " CentOS 5.6 " } ,
2012-05-08 10:47:36 -07:00
86 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 86 ,
'status' = > " ACTIVE " ,
'updated' = > " 2010-09-17T07:19:20-05:00 " ,
'name' = > " Windows Server 2008 R2 x64 - MSSQL2K8R2 " } ,
2012-05-08 10:47:36 -07:00
115 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 115 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " Ubuntu 11.04 " } ,
2012-05-08 10:47:36 -07:00
103 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 103 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " Debian 5 (Lenny) " } ,
2012-05-08 10:47:36 -07:00
104 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 104 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " Debian 6 (Squeeze) " } ,
2012-05-08 10:47:36 -07:00
118 = >
2012-06-23 17:03:00 -05:00
{ 'id' = > 118 ,
'status' = > " ACTIVE " ,
'updated' = > " 2011-08-17T05:11:30-05:00 " ,
'name' = > " CentOS 6.0 " }
2012-05-08 10:47:36 -07:00
}
}
2010-09-08 13:50:23 -07:00
end
end
2011-05-17 22:40:17 -04:00
def self . reset
@data = nil
end
2010-09-08 13:50:23 -07:00
def initialize ( options = { } )
@rackspace_username = options [ :rackspace_username ]
2011-05-19 15:35:33 -07:00
end
def data
self . class . data [ @rackspace_username ]
2011-03-10 11:16:55 -08:00
end
def reset_data
self . class . data . delete ( @rackspace_username )
2010-09-08 13:50:23 -07:00
end
end
2013-03-13 16:01:32 -05:00
class Real < Fog :: Rackspace :: Service
2010-09-08 13:50:23 -07:00
def initialize ( options = { } )
2011-01-27 16:02:04 -08:00
@rackspace_api_key = options [ :rackspace_api_key ]
@rackspace_username = options [ :rackspace_username ]
@rackspace_auth_url = options [ :rackspace_auth_url ]
2011-03-18 00:09:43 -04:00
@rackspace_servicenet = options [ :rackspace_servicenet ]
2011-06-15 14:53:51 -07:00
@rackspace_auth_token = options [ :rackspace_auth_token ]
2013-03-20 13:25:38 -05:00
@rackspace_endpoint = Fog :: Rackspace . normalize_url ( options [ :rackspace_compute_v1_url ] || options [ :rackspace_management_url ] )
2011-06-15 14:53:51 -07:00
@rackspace_must_reauthenticate = false
2011-09-12 10:01:48 -05:00
@connection_options = options [ :connection_options ] || { }
2011-01-27 16:02:04 -08:00
authenticate
2013-03-13 16:01:32 -05:00
Excon . defaults [ :ssl_verify_peer ] = false if service_net?
2011-09-12 10:01:48 -05:00
@persistent = options [ :persistent ] || false
2013-03-13 16:01:32 -05:00
@connection = Fog :: Connection . new ( endpoint_uri . to_s , @persistent , @connection_options )
2010-09-08 13:50:23 -07:00
end
def reload
@connection . reset
end
def request ( params )
begin
2011-07-15 17:16:12 -05:00
response = @connection . request ( params . merge ( {
2010-09-08 13:50:23 -07:00
:headers = > {
'Content-Type' = > 'application/json' ,
2013-03-13 16:01:32 -05:00
'X-Auth-Token' = > auth_token
2010-09-08 13:50:23 -07:00
} . merge! ( params [ :headers ] || { } ) ,
2013-03-13 16:01:32 -05:00
:host = > endpoint_uri . host ,
:path = > " #{ endpoint_uri . path } / #{ params [ :path ] } " ,
2010-09-08 13:50:23 -07:00
} ) )
2011-01-27 16:02:04 -08:00
rescue Excon :: Errors :: Unauthorized = > error
2011-07-15 17:16:12 -05:00
if error . response . body != 'Bad username or password' # token expiration
2011-06-15 14:53:51 -07:00
@rackspace_must_reauthenticate = true
2011-01-27 16:02:04 -08:00
authenticate
retry
2011-07-15 17:16:12 -05:00
else # bad credentials
2011-01-27 16:02:04 -08:00
raise error
end
2010-11-30 12:07:47 +08:00
rescue Excon :: Errors :: HTTPStatusError = > error
2010-09-08 13:50:23 -07:00
raise case error
when Excon :: Errors :: NotFound
2013-04-15 09:31:13 -05:00
NotFound . slurp ( error , region )
2010-09-08 13:50:23 -07:00
else
error
end
end
unless response . body . empty?
2012-04-25 10:31:28 -04:00
response . body = Fog :: JSON . decode ( response . body )
2010-09-08 13:50:23 -07:00
end
response
end
2011-01-27 16:02:04 -08:00
2013-03-13 16:01:32 -05:00
def service_net?
@rackspace_servicenet == true
2011-01-27 16:02:04 -08:00
end
2013-03-13 16:01:32 -05:00
def authenticate
if @rackspace_must_reauthenticate || @rackspace_auth_token . nil?
options = {
:rackspace_api_key = > @rackspace_api_key ,
:rackspace_username = > @rackspace_username ,
2013-05-30 12:52:37 -05:00
:rackspace_auth_url = > @rackspace_auth_url ,
:connection_options = > @connection_options
2013-03-13 16:01:32 -05:00
}
super ( options )
else
@auth_token = @rackspace_auth_token
@uri = URI . parse ( @rackspace_endpoint )
end
end
def service_name
:cloudServers
end
def region
@rackspace_region
end
def endpoint_uri ( service_endpoint_url = nil )
return @uri if @uri
@uri = super ( @rackspace_endpoint || service_endpoint_url , :rackspace_compute_v1_url )
@uri . host = " snet- #{ @uri . host } " if service_net?
@uri
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
2010-09-08 13:50:23 -07:00
end
end
end
end