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