diff --git a/lib/fog/rackspace.rb b/lib/fog/rackspace.rb index 3fa850d9a..bf307e9f3 100644 --- a/lib/fog/rackspace.rb +++ b/lib/fog/rackspace.rb @@ -4,8 +4,10 @@ module Fog extend Fog::Provider service_path 'fog/rackspace' + service 'compute' service 'files' service 'servers' + service 'storage' def self.authenticate(options) rackspace_auth_url = options[:rackspace_auth_url] || "auth.api.rackspacecloud.com" diff --git a/lib/fog/rackspace/bin.rb b/lib/fog/rackspace/bin.rb index 69685a194..4fc1a5c0f 100644 --- a/lib/fog/rackspace/bin.rb +++ b/lib/fog/rackspace/bin.rb @@ -9,31 +9,31 @@ module Rackspace def [](service) @@connections ||= Hash.new do |hash, key| hash[key] = case key - when :files - Fog::Rackspace::Files.new - when :servers - Fog::Rackspace::Servers.new + when :compute + Fog::Rackspace::Compute.new + when :storage + Fog::Rackspace::Storage.new end end @@connections[service] end def services - [:files, :servers] + [:compute, :storage] end - for collection in Fog::Rackspace::Files.collections + for collection in Fog::Rackspace::Compute.collections module_eval <<-EOS, __FILE__, __LINE__ def #{collection} - self[:files].#{collection} + self[:compute].#{collection} end EOS end - for collection in Fog::Rackspace::Servers.collections + for collection in Fog::Rackspace::Storage.collections module_eval <<-EOS, __FILE__, __LINE__ def #{collection} - self[:servers].#{collection} + self[:storage].#{collection} end EOS end @@ -46,4 +46,4 @@ module Rackspace end end -end \ No newline at end of file +end diff --git a/lib/fog/rackspace/compute.rb b/lib/fog/rackspace/compute.rb new file mode 100644 index 000000000..f0a92857d --- /dev/null +++ b/lib/fog/rackspace/compute.rb @@ -0,0 +1,109 @@ +module Fog + module Rackspace + class Compute < Fog::Service + + requires :rackspace_api_key, :rackspace_username + + 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 :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 :update_server + + class Mock + include Collections + + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + :last_modified => { + :images => {}, + :servers => {} + }, + :images => {}, + :servers => {} + } + end + end + + def self.reset_data(keys=data.keys) + for key in [*keys] + data.delete(key) + end + end + + def initialize(options={}) + @rackspace_username = options[:rackspace_username] + @data = self.class.data[@rackspace_username] + end + + end + + class Real + include Collections + + def initialize(options={}) + credentials = Fog::Rackspace.authenticate(options) + @auth_token = credentials['X-Auth-Token'] + uri = URI.parse(credentials['X-Server-Management-Url']) + @host = uri.host + @path = uri.path + @port = uri.port + @scheme = uri.scheme + @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent]) + end + + def reload + @connection.reset + end + + def request(params) + begin + response = @connection.request(params.merge!({ + :headers => { + 'Content-Type' => 'application/json', + 'X-Auth-Token' => @auth_token + }.merge!(params[:headers] || {}), + :host => @host, + :path => "#{@path}/#{params[:path]}" + })) + rescue Excon::Errors::Error => error + raise case error + when Excon::Errors::NotFound + Fog::Rackspace::Compute::NotFound.slurp(error) + else + error + end + end + unless response.body.empty? + response.body = JSON.parse(response.body) + end + response + end + + end + end + end +end diff --git a/lib/fog/rackspace/files.rb b/lib/fog/rackspace/files.rb index c7d16b519..78bdc56d8 100644 --- a/lib/fog/rackspace/files.rb +++ b/lib/fog/rackspace/files.rb @@ -1,135 +1,15 @@ module Fog module Rackspace - class Files < Fog::Service - - requires :rackspace_api_key, :rackspace_username - - model_path 'fog/rackspace/models/files' - model :directory - collection :directories - model :file - collection :files - - request_path 'fog/rackspace/requests/files' - request :delete_container - request :delete_object - request :get_container - request :get_containers - request :get_object - request :head_container - request :head_containers - request :head_object - request :put_container - request :put_object - - module Utils - - def parse_data(data) - metadata = { - :body => nil, - :headers => {} - } - - if data.is_a?(String) - metadata[:body] = data - metadata[:headers]['Content-Length'] = metadata[:body].size.to_s - else - filename = ::File.basename(data.path) - unless (mime_types = MIME::Types.of(filename)).empty? - metadata[:headers]['Content-Type'] = mime_types.first.content_type - end - metadata[:body] = data.read - metadata[:headers]['Content-Length'] = ::File.size(data.path).to_s - end - # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip - metadata - end + class Files + def self.new(attributes = {}) + location = caller.first + warning = "[yellow][WARN] Fog::Rackspace::Files#new is deprecated, use Fog::Rackspace::Storage#new instead[/]" + warning << " [light_black](" << location << ")[/] " + Formatador.display_line(warning) + Fog::Rackspace::Storage.new(attributes) end - class Mock - include Collections - include Utils - - 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={}) - @rackspace_username = options[:rackspace_username] - @data = self.class.data[@rackspace_username] - end - - end - - class Real - include Collections - include Utils - - def initialize(options={}) - credentials = Fog::Rackspace.authenticate(options) - @auth_token = credentials['X-Auth-Token'] - - if(credentials['X-CDN-Management-Url']) - cdn_uri = URI.parse(credentials['X-CDN-Management-Url']) - @cdn_host = cdn_uri.host - @cdn_path = cdn_uri.path - @cdn_port = cdn_uri.port - @cdn_scheme = cdn_uri.scheme - @cdn_connection = Fog::Connection.new("#{@cdn_scheme}://#{@cdn_host}:#{@cdn_port}", options[:persistent]) - end - - storage_uri = URI.parse(credentials['X-Storage-Url']) - @storage_host = storage_uri.host - @storage_path = storage_uri.path - @storage_port = storage_uri.port - @storage_scheme = storage_uri.scheme - @storage_connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}", options[:persistent]) - end - - def reload - @connection.reset - end - - def cdn_request(params) - response = @cdn_connection.request(params.merge!({ - :headers => { - 'Content-Type' => 'application/json', - 'X-Auth-Token' => @auth_token - }.merge!(params[:headers] || {}), - :host => @cdn_host, - :path => "#{@cdn_path}/#{params[:path]}", - })) - if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} - response.body = JSON.parse(response.body) - end - response - end - - def storage_request(params, parse_json = true, &block) - response = @storage_connection.request(params.merge!({ - :headers => { - 'Content-Type' => 'application/json', - 'X-Auth-Token' => @auth_token - }.merge!(params[:headers] || {}), - :host => @storage_host, - :path => "#{@storage_path}/#{params[:path]}", - }), &block) - if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} - response.body = JSON.parse(response.body) - end - response - end - - end end end -end +end \ No newline at end of file diff --git a/lib/fog/rackspace/models/servers/flavor.rb b/lib/fog/rackspace/models/compute/flavor.rb similarity index 97% rename from lib/fog/rackspace/models/servers/flavor.rb rename to lib/fog/rackspace/models/compute/flavor.rb index 925e1e501..ca2fbcfcf 100644 --- a/lib/fog/rackspace/models/servers/flavor.rb +++ b/lib/fog/rackspace/models/compute/flavor.rb @@ -2,7 +2,7 @@ require 'fog/model' module Fog module Rackspace - class Servers + class Compute class Flavor < Fog::Model diff --git a/lib/fog/rackspace/models/servers/flavors.rb b/lib/fog/rackspace/models/compute/flavors.rb similarity index 79% rename from lib/fog/rackspace/models/servers/flavors.rb rename to lib/fog/rackspace/models/compute/flavors.rb index b9f8f3c81..1416b27f9 100644 --- a/lib/fog/rackspace/models/servers/flavors.rb +++ b/lib/fog/rackspace/models/compute/flavors.rb @@ -3,11 +3,11 @@ require 'fog/rackspace/models/servers/flavor' module Fog module Rackspace - class Servers + class Compute class Flavors < Fog::Collection - model Fog::Rackspace::Servers::Flavor + model Fog::Rackspace::Compute::Flavor def all data = connection.list_flavors_detail.body['flavors'] @@ -17,7 +17,7 @@ module Fog def get(flavor_id) data = connection.get_flavor_details(flavor_id).body['flavor'] new(data) - rescue Fog::Rackspace::Servers::NotFound + rescue Fog::Rackspace::Compute::NotFound nil end diff --git a/lib/fog/rackspace/models/servers/image.rb b/lib/fog/rackspace/models/compute/image.rb similarity index 97% rename from lib/fog/rackspace/models/servers/image.rb rename to lib/fog/rackspace/models/compute/image.rb index ab5d54f77..efa43e004 100644 --- a/lib/fog/rackspace/models/servers/image.rb +++ b/lib/fog/rackspace/models/compute/image.rb @@ -2,7 +2,7 @@ require 'fog/model' module Fog module Rackspace - class Servers + class Compute class Image < Fog::Model diff --git a/lib/fog/rackspace/models/servers/images.rb b/lib/fog/rackspace/models/compute/images.rb similarity index 83% rename from lib/fog/rackspace/models/servers/images.rb rename to lib/fog/rackspace/models/compute/images.rb index 0d25aa349..7633a0405 100644 --- a/lib/fog/rackspace/models/servers/images.rb +++ b/lib/fog/rackspace/models/compute/images.rb @@ -3,11 +3,11 @@ require 'fog/rackspace/models/servers/image' module Fog module Rackspace - class Servers + class Compute class Images < Fog::Collection - model Fog::Rackspace::Servers::Image + model Fog::Rackspace::Compute::Image attribute :server @@ -22,7 +22,7 @@ module Fog def get(image_id) data = connection.get_image_details(image_id).body['image'] new(data) - rescue Fog::Rackspace::Servers::NotFound + rescue Fog::Rackspace::Compute::NotFound nil end diff --git a/lib/fog/rackspace/models/servers/server.rb b/lib/fog/rackspace/models/compute/server.rb similarity index 99% rename from lib/fog/rackspace/models/servers/server.rb rename to lib/fog/rackspace/models/compute/server.rb index c6969e859..61c2f3775 100644 --- a/lib/fog/rackspace/models/servers/server.rb +++ b/lib/fog/rackspace/models/compute/server.rb @@ -2,7 +2,7 @@ require 'fog/model' module Fog module Rackspace - class Servers + class Compute class Server < Fog::Model diff --git a/lib/fog/rackspace/models/servers/servers.rb b/lib/fog/rackspace/models/compute/servers.rb similarity index 84% rename from lib/fog/rackspace/models/servers/servers.rb rename to lib/fog/rackspace/models/compute/servers.rb index f7dd44eff..d963870b1 100644 --- a/lib/fog/rackspace/models/servers/servers.rb +++ b/lib/fog/rackspace/models/compute/servers.rb @@ -3,11 +3,11 @@ require 'fog/rackspace/models/servers/server' module Fog module Rackspace - class Servers + class Compute class Servers < Fog::Collection - model Fog::Rackspace::Servers::Server + model Fog::Rackspace::Compute::Server def all data = connection.list_servers_detail.body['servers'] @@ -25,7 +25,7 @@ module Fog if server = connection.get_server_details(server_id).body['server'] new(server) end - rescue Fog::Rackspace::Servers::NotFound + rescue Fog::Rackspace::Compute::NotFound nil end diff --git a/lib/fog/rackspace/models/files/directories.rb b/lib/fog/rackspace/models/storage/directories.rb similarity index 85% rename from lib/fog/rackspace/models/files/directories.rb rename to lib/fog/rackspace/models/storage/directories.rb index ec4638df7..c6c313059 100644 --- a/lib/fog/rackspace/models/files/directories.rb +++ b/lib/fog/rackspace/models/storage/directories.rb @@ -3,11 +3,11 @@ require 'fog/rackspace/models/files/directory' module Fog module Rackspace - class Files + class Storage class Directories < Fog::Collection - model Fog::Rackspace::Files::Directory + model Fog::Rackspace::Storage::Directory def all data = connection.get_containers.body @@ -23,7 +23,7 @@ module Fog directory.files << directory.files.new(file) end directory - rescue Excon::Errors::NotFound + rescue Fog::Rackspace::Storage::NotFound nil end diff --git a/lib/fog/rackspace/models/files/directory.rb b/lib/fog/rackspace/models/storage/directory.rb similarity index 97% rename from lib/fog/rackspace/models/files/directory.rb rename to lib/fog/rackspace/models/storage/directory.rb index 7dece15bf..51d4e7e14 100644 --- a/lib/fog/rackspace/models/files/directory.rb +++ b/lib/fog/rackspace/models/storage/directory.rb @@ -3,7 +3,7 @@ require 'fog/rackspace/models/files/files' module Fog module Rackspace - class Files + class Storage class Directory < Fog::Model extend Fog::Deprecation diff --git a/lib/fog/rackspace/models/files/file.rb b/lib/fog/rackspace/models/storage/file.rb similarity index 98% rename from lib/fog/rackspace/models/files/file.rb rename to lib/fog/rackspace/models/storage/file.rb index fe139564b..b4d6ac902 100644 --- a/lib/fog/rackspace/models/files/file.rb +++ b/lib/fog/rackspace/models/storage/file.rb @@ -2,7 +2,7 @@ require 'fog/model' module Fog module Rackspace - class Files + class Storage class File < Fog::Model diff --git a/lib/fog/rackspace/models/files/files.rb b/lib/fog/rackspace/models/storage/files.rb similarity index 92% rename from lib/fog/rackspace/models/files/files.rb rename to lib/fog/rackspace/models/storage/files.rb index 91c9c421e..4674bcb20 100644 --- a/lib/fog/rackspace/models/files/files.rb +++ b/lib/fog/rackspace/models/storage/files.rb @@ -3,7 +3,7 @@ require 'fog/rackspace/models/files/file' module Fog module Rackspace - class Files + class Storage class Files < Fog::Collection @@ -13,7 +13,7 @@ module Fog attribute :path attribute :prefix - model Fog::Rackspace::Files::File + model Fog::Rackspace::Storage::File def all(options = {}) requires :directory @@ -48,7 +48,7 @@ module Fog end end new(file_data) - rescue Excon::Errors::NotFound + rescue Fog::Rackspace::Storage::NotFound nil end @@ -67,7 +67,7 @@ module Fog end end new(file_data) - rescue Excon::Errors::NotFound + rescue Fog::Rackspace::Storage::NotFound nil end diff --git a/lib/fog/rackspace/requests/servers/create_image.rb b/lib/fog/rackspace/requests/compute/create_image.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/create_image.rb rename to lib/fog/rackspace/requests/compute/create_image.rb index 1de9bdd4f..6a4fdc4cb 100644 --- a/lib/fog/rackspace/requests/servers/create_image.rb +++ b/lib/fog/rackspace/requests/compute/create_image.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Create an image from a running server diff --git a/lib/fog/rackspace/requests/servers/create_server.rb b/lib/fog/rackspace/requests/compute/create_server.rb similarity index 99% rename from lib/fog/rackspace/requests/servers/create_server.rb rename to lib/fog/rackspace/requests/compute/create_server.rb index 42113eb98..3972a978f 100644 --- a/lib/fog/rackspace/requests/servers/create_server.rb +++ b/lib/fog/rackspace/requests/compute/create_server.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Create a new server diff --git a/lib/fog/rackspace/requests/servers/delete_image.rb b/lib/fog/rackspace/requests/compute/delete_image.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/delete_image.rb rename to lib/fog/rackspace/requests/compute/delete_image.rb index 0ef7d4976..db3c4575f 100644 --- a/lib/fog/rackspace/requests/servers/delete_image.rb +++ b/lib/fog/rackspace/requests/compute/delete_image.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Delete an image diff --git a/lib/fog/rackspace/requests/servers/delete_server.rb b/lib/fog/rackspace/requests/compute/delete_server.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/delete_server.rb rename to lib/fog/rackspace/requests/compute/delete_server.rb index 8579174ba..667a8735c 100644 --- a/lib/fog/rackspace/requests/servers/delete_server.rb +++ b/lib/fog/rackspace/requests/compute/delete_server.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Delete an existing server diff --git a/lib/fog/rackspace/requests/servers/get_flavor_details.rb b/lib/fog/rackspace/requests/compute/get_flavor_details.rb similarity index 97% rename from lib/fog/rackspace/requests/servers/get_flavor_details.rb rename to lib/fog/rackspace/requests/compute/get_flavor_details.rb index 0b6eaaefe..a1848c40e 100644 --- a/lib/fog/rackspace/requests/servers/get_flavor_details.rb +++ b/lib/fog/rackspace/requests/compute/get_flavor_details.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Get details for flavor by id diff --git a/lib/fog/rackspace/requests/servers/get_image_details.rb b/lib/fog/rackspace/requests/compute/get_image_details.rb similarity index 97% rename from lib/fog/rackspace/requests/servers/get_image_details.rb rename to lib/fog/rackspace/requests/compute/get_image_details.rb index d4f4bc973..637b06ef1 100644 --- a/lib/fog/rackspace/requests/servers/get_image_details.rb +++ b/lib/fog/rackspace/requests/compute/get_image_details.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Get details for image by id diff --git a/lib/fog/rackspace/requests/servers/get_server_details.rb b/lib/fog/rackspace/requests/compute/get_server_details.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/get_server_details.rb rename to lib/fog/rackspace/requests/compute/get_server_details.rb index dbcb857e7..a106de83b 100644 --- a/lib/fog/rackspace/requests/servers/get_server_details.rb +++ b/lib/fog/rackspace/requests/compute/get_server_details.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Get details about a server diff --git a/lib/fog/rackspace/requests/servers/list_addresses.rb b/lib/fog/rackspace/requests/compute/list_addresses.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_addresses.rb rename to lib/fog/rackspace/requests/compute/list_addresses.rb index 4299fbf97..7dc52cc4e 100644 --- a/lib/fog/rackspace/requests/servers/list_addresses.rb +++ b/lib/fog/rackspace/requests/compute/list_addresses.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all server addresses diff --git a/lib/fog/rackspace/requests/servers/list_flavors.rb b/lib/fog/rackspace/requests/compute/list_flavors.rb similarity index 97% rename from lib/fog/rackspace/requests/servers/list_flavors.rb rename to lib/fog/rackspace/requests/compute/list_flavors.rb index c8b9cda26..0114f48ba 100644 --- a/lib/fog/rackspace/requests/servers/list_flavors.rb +++ b/lib/fog/rackspace/requests/compute/list_flavors.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all flavors (IDs and names only) diff --git a/lib/fog/rackspace/requests/servers/list_flavors_detail.rb b/lib/fog/rackspace/requests/compute/list_flavors_detail.rb similarity index 97% rename from lib/fog/rackspace/requests/servers/list_flavors_detail.rb rename to lib/fog/rackspace/requests/compute/list_flavors_detail.rb index 1077306f6..45ece3daa 100644 --- a/lib/fog/rackspace/requests/servers/list_flavors_detail.rb +++ b/lib/fog/rackspace/requests/compute/list_flavors_detail.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all flavors diff --git a/lib/fog/rackspace/requests/servers/list_images.rb b/lib/fog/rackspace/requests/compute/list_images.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_images.rb rename to lib/fog/rackspace/requests/compute/list_images.rb index 7d83167e0..4af633330 100644 --- a/lib/fog/rackspace/requests/servers/list_images.rb +++ b/lib/fog/rackspace/requests/compute/list_images.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all images (IDs and names only) diff --git a/lib/fog/rackspace/requests/servers/list_images_detail.rb b/lib/fog/rackspace/requests/compute/list_images_detail.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_images_detail.rb rename to lib/fog/rackspace/requests/compute/list_images_detail.rb index 6c1d2de7f..3ca7f671e 100644 --- a/lib/fog/rackspace/requests/servers/list_images_detail.rb +++ b/lib/fog/rackspace/requests/compute/list_images_detail.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all images diff --git a/lib/fog/rackspace/requests/servers/list_private_addresses.rb b/lib/fog/rackspace/requests/compute/list_private_addresses.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_private_addresses.rb rename to lib/fog/rackspace/requests/compute/list_private_addresses.rb index 1ff5a7d2c..deac8df90 100644 --- a/lib/fog/rackspace/requests/servers/list_private_addresses.rb +++ b/lib/fog/rackspace/requests/compute/list_private_addresses.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List private server addresses diff --git a/lib/fog/rackspace/requests/servers/list_public_addresses.rb b/lib/fog/rackspace/requests/compute/list_public_addresses.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_public_addresses.rb rename to lib/fog/rackspace/requests/compute/list_public_addresses.rb index 94672874e..89cde64ea 100644 --- a/lib/fog/rackspace/requests/servers/list_public_addresses.rb +++ b/lib/fog/rackspace/requests/compute/list_public_addresses.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List public server addresses diff --git a/lib/fog/rackspace/requests/servers/list_servers.rb b/lib/fog/rackspace/requests/compute/list_servers.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_servers.rb rename to lib/fog/rackspace/requests/compute/list_servers.rb index 8aee9c025..0bf2bafc0 100644 --- a/lib/fog/rackspace/requests/servers/list_servers.rb +++ b/lib/fog/rackspace/requests/compute/list_servers.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all servers (IDs and names only) diff --git a/lib/fog/rackspace/requests/servers/list_servers_detail.rb b/lib/fog/rackspace/requests/compute/list_servers_detail.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/list_servers_detail.rb rename to lib/fog/rackspace/requests/compute/list_servers_detail.rb index 953b67d4f..ade93149c 100644 --- a/lib/fog/rackspace/requests/servers/list_servers_detail.rb +++ b/lib/fog/rackspace/requests/compute/list_servers_detail.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # List all servers details diff --git a/lib/fog/rackspace/requests/servers/reboot_server.rb b/lib/fog/rackspace/requests/compute/reboot_server.rb similarity index 97% rename from lib/fog/rackspace/requests/servers/reboot_server.rb rename to lib/fog/rackspace/requests/compute/reboot_server.rb index 8fe76e716..90aea77f8 100644 --- a/lib/fog/rackspace/requests/servers/reboot_server.rb +++ b/lib/fog/rackspace/requests/compute/reboot_server.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Reboot an existing server diff --git a/lib/fog/rackspace/requests/servers/update_server.rb b/lib/fog/rackspace/requests/compute/update_server.rb similarity index 98% rename from lib/fog/rackspace/requests/servers/update_server.rb rename to lib/fog/rackspace/requests/compute/update_server.rb index fefbb84db..4298945a2 100644 --- a/lib/fog/rackspace/requests/servers/update_server.rb +++ b/lib/fog/rackspace/requests/compute/update_server.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Servers + class Compute class Real # Update an existing server diff --git a/lib/fog/rackspace/requests/files/delete_container.rb b/lib/fog/rackspace/requests/storage/delete_container.rb similarity index 96% rename from lib/fog/rackspace/requests/files/delete_container.rb rename to lib/fog/rackspace/requests/storage/delete_container.rb index a4cb58af2..90e6a3076 100644 --- a/lib/fog/rackspace/requests/files/delete_container.rb +++ b/lib/fog/rackspace/requests/storage/delete_container.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Delete an existing container diff --git a/lib/fog/rackspace/requests/files/delete_object.rb b/lib/fog/rackspace/requests/storage/delete_object.rb similarity index 97% rename from lib/fog/rackspace/requests/files/delete_object.rb rename to lib/fog/rackspace/requests/storage/delete_object.rb index 01e918dc8..81da44d91 100644 --- a/lib/fog/rackspace/requests/files/delete_object.rb +++ b/lib/fog/rackspace/requests/storage/delete_object.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Delete an existing container diff --git a/lib/fog/rackspace/requests/files/get_container.rb b/lib/fog/rackspace/requests/storage/get_container.rb similarity index 99% rename from lib/fog/rackspace/requests/files/get_container.rb rename to lib/fog/rackspace/requests/storage/get_container.rb index 90c9d4200..320563d90 100644 --- a/lib/fog/rackspace/requests/files/get_container.rb +++ b/lib/fog/rackspace/requests/storage/get_container.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Get details for container and total bytes stored diff --git a/lib/fog/rackspace/requests/files/get_containers.rb b/lib/fog/rackspace/requests/storage/get_containers.rb similarity index 98% rename from lib/fog/rackspace/requests/files/get_containers.rb rename to lib/fog/rackspace/requests/storage/get_containers.rb index bbdfc7375..479feed5e 100644 --- a/lib/fog/rackspace/requests/files/get_containers.rb +++ b/lib/fog/rackspace/requests/storage/get_containers.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # List existing storage containers diff --git a/lib/fog/rackspace/requests/files/get_object.rb b/lib/fog/rackspace/requests/storage/get_object.rb similarity index 97% rename from lib/fog/rackspace/requests/files/get_object.rb rename to lib/fog/rackspace/requests/storage/get_object.rb index 457deb956..603254283 100644 --- a/lib/fog/rackspace/requests/files/get_object.rb +++ b/lib/fog/rackspace/requests/storage/get_object.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Get details for object diff --git a/lib/fog/rackspace/requests/files/head_container.rb b/lib/fog/rackspace/requests/storage/head_container.rb similarity index 97% rename from lib/fog/rackspace/requests/files/head_container.rb rename to lib/fog/rackspace/requests/storage/head_container.rb index ad7f9f301..271449fd8 100644 --- a/lib/fog/rackspace/requests/files/head_container.rb +++ b/lib/fog/rackspace/requests/storage/head_container.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # List number of objects and total bytes stored diff --git a/lib/fog/rackspace/requests/files/head_containers.rb b/lib/fog/rackspace/requests/storage/head_containers.rb similarity index 97% rename from lib/fog/rackspace/requests/files/head_containers.rb rename to lib/fog/rackspace/requests/storage/head_containers.rb index 346050b52..1a593033c 100644 --- a/lib/fog/rackspace/requests/files/head_containers.rb +++ b/lib/fog/rackspace/requests/storage/head_containers.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # List number of containers and total bytes stored diff --git a/lib/fog/rackspace/requests/files/head_object.rb b/lib/fog/rackspace/requests/storage/head_object.rb similarity index 97% rename from lib/fog/rackspace/requests/files/head_object.rb rename to lib/fog/rackspace/requests/storage/head_object.rb index 1c7ab6a62..b0fec4f1f 100644 --- a/lib/fog/rackspace/requests/files/head_object.rb +++ b/lib/fog/rackspace/requests/storage/head_object.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Get headers for object diff --git a/lib/fog/rackspace/requests/files/put_container.rb b/lib/fog/rackspace/requests/storage/put_container.rb similarity index 97% rename from lib/fog/rackspace/requests/files/put_container.rb rename to lib/fog/rackspace/requests/storage/put_container.rb index e7f58a4c3..340abcb08 100644 --- a/lib/fog/rackspace/requests/files/put_container.rb +++ b/lib/fog/rackspace/requests/storage/put_container.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Create a new container diff --git a/lib/fog/rackspace/requests/files/put_object.rb b/lib/fog/rackspace/requests/storage/put_object.rb similarity index 97% rename from lib/fog/rackspace/requests/files/put_object.rb rename to lib/fog/rackspace/requests/storage/put_object.rb index 45e1d6a7b..f7da63e1e 100644 --- a/lib/fog/rackspace/requests/files/put_object.rb +++ b/lib/fog/rackspace/requests/storage/put_object.rb @@ -1,6 +1,6 @@ module Fog module Rackspace - class Files + class Storage class Real # Create a new object diff --git a/lib/fog/rackspace/servers.rb b/lib/fog/rackspace/servers.rb index 4acc1f215..2e33b6005 100644 --- a/lib/fog/rackspace/servers.rb +++ b/lib/fog/rackspace/servers.rb @@ -1,109 +1,15 @@ module Fog module Rackspace - class Servers < Fog::Service - - requires :rackspace_api_key, :rackspace_username - - model_path 'fog/rackspace/models/servers' - model :flavor - collection :flavors - model :image - collection :images - model :server - collection :servers - - request_path 'fog/rackspace/requests/servers' - 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 :update_server - - class Mock - include Collections - - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - :last_modified => { - :images => {}, - :servers => {} - }, - :images => {}, - :servers => {} - } - end - end - - def self.reset_data(keys=data.keys) - for key in [*keys] - data.delete(key) - end - end - - def initialize(options={}) - @rackspace_username = options[:rackspace_username] - @data = self.class.data[@rackspace_username] - end + class Servers + def self.new(attributes = {}) + location = caller.first + warning = "[yellow][WARN] Fog::Rackspace::Servers#new is deprecated, use Fog::Rackspace::Compute#new instead[/]" + warning << " [light_black](" << location << ")[/] " + Formatador.display_line(warning) + Fog::Rackspace::Compute.new(attributes) end - class Real - include Collections - - def initialize(options={}) - credentials = Fog::Rackspace.authenticate(options) - @auth_token = credentials['X-Auth-Token'] - uri = URI.parse(credentials['X-Server-Management-Url']) - @host = uri.host - @path = uri.path - @port = uri.port - @scheme = uri.scheme - @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent]) - end - - def reload - @connection.reset - end - - def request(params) - begin - response = @connection.request(params.merge!({ - :headers => { - 'Content-Type' => 'application/json', - 'X-Auth-Token' => @auth_token - }.merge!(params[:headers] || {}), - :host => @host, - :path => "#{@path}/#{params[:path]}" - })) - rescue Excon::Errors::Error => error - raise case error - when Excon::Errors::NotFound - Fog::Rackspace::Servers::NotFound.slurp(error) - else - error - end - end - unless response.body.empty? - response.body = JSON.parse(response.body) - end - response - end - - end end end -end +end \ No newline at end of file diff --git a/lib/fog/rackspace/storage.rb b/lib/fog/rackspace/storage.rb new file mode 100644 index 000000000..a7aa93df0 --- /dev/null +++ b/lib/fog/rackspace/storage.rb @@ -0,0 +1,153 @@ +module Fog + module Rackspace + class Storage < Fog::Service + + requires :rackspace_api_key, :rackspace_username + + model_path 'fog/rackspace/models/storage' + model :directory + collection :directories + model :file + collection :files + + request_path 'fog/rackspace/requests/storage' + request :delete_container + request :delete_object + request :get_container + request :get_containers + request :get_object + request :head_container + request :head_containers + request :head_object + request :put_container + request :put_object + + module Utils + + def parse_data(data) + metadata = { + :body => nil, + :headers => {} + } + + if data.is_a?(String) + metadata[:body] = data + metadata[:headers]['Content-Length'] = metadata[:body].size.to_s + else + filename = ::File.basename(data.path) + unless (mime_types = MIME::Types.of(filename)).empty? + metadata[:headers]['Content-Type'] = mime_types.first.content_type + end + metadata[:body] = data.read + metadata[:headers]['Content-Length'] = ::File.size(data.path).to_s + end + # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip + metadata + end + + end + + class Mock + include Collections + include Utils + + 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={}) + @rackspace_username = options[:rackspace_username] + @data = self.class.data[@rackspace_username] + end + + end + + class Real + include Collections + include Utils + + def initialize(options={}) + credentials = Fog::Rackspace.authenticate(options) + @auth_token = credentials['X-Auth-Token'] + + if(credentials['X-CDN-Management-Url']) + cdn_uri = URI.parse(credentials['X-CDN-Management-Url']) + @cdn_host = cdn_uri.host + @cdn_path = cdn_uri.path + @cdn_port = cdn_uri.port + @cdn_scheme = cdn_uri.scheme + @cdn_connection = Fog::Connection.new("#{@cdn_scheme}://#{@cdn_host}:#{@cdn_port}", options[:persistent]) + end + + storage_uri = URI.parse(credentials['X-Storage-Url']) + @storage_host = storage_uri.host + @storage_path = storage_uri.path + @storage_port = storage_uri.port + @storage_scheme = storage_uri.scheme + @storage_connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}", options[:persistent]) + end + + def reload + @connection.reset + end + + def cdn_request(params) + begin + response = @cdn_connection.request(params.merge!({ + :headers => { + 'Content-Type' => 'application/json', + 'X-Auth-Token' => @auth_token + }.merge!(params[:headers] || {}), + :host => @cdn_host, + :path => "#{@cdn_path}/#{params[:path]}", + })) + rescue Excon::Errors::Error => error + raise case error + when Excon::Errors::NotFound + Fog::Rackspace::Storage::NotFound.slurp(error) + else + error + end + end + if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} + response.body = JSON.parse(response.body) + end + response + end + + def storage_request(params, parse_json = true, &block) + begin + response = @storage_connection.request(params.merge!({ + :headers => { + 'Content-Type' => 'application/json', + 'X-Auth-Token' => @auth_token + }.merge!(params[:headers] || {}), + :host => @storage_host, + :path => "#{@storage_path}/#{params[:path]}", + }), &block) + rescue Excon::Errors::Error => error + raise case error + when Excon::Errors::NotFound + Fog::Rackspace::Storage::NotFound.slurp(error) + else + error + end + end + if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} + response.body = JSON.parse(response.body) + end + response + end + + end + end + end +end