diff --git a/lib/fog/go_grid.rb b/lib/fog/go_grid.rb index 30cb6e29b..b35cd2309 100644 --- a/lib/fog/go_grid.rb +++ b/lib/fog/go_grid.rb @@ -1,96 +1,18 @@ module Fog - class GoGrid < Fog::Service + module GoGrid - requires :go_grid_api_key - requires :go_grid_shared_secret + extend Fog::Provider - model_path 'fog/go_grid/models' - - request_path 'fog/go_grid/requests' - request :common_lookup_list - request :grid_image_list - request :grid_ip_list - request :grid_loadbalancer_list - request :grid_server_add - request :grid_server_delete - request :grid_server_get - request :grid_server_list - request :grid_server_power - - class Mock - include Collections - - 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={}) - @go_grid_api_key = options[:go_grid_api_key] - @go_grid_shared_secret = options[:go_grid_shared_secret] - @data = self.class.data[@go_grid_api_key] - end + service_path 'fog/go_grid' + service 'servers' + def self.new(attributes = {}) + location = caller.first + warning = "[yellow][WARN] Fog::GoGrid#new is deprecated, use Fog::GoGrid::Servers#new instead[/]" + warning << " [light_black](" << location << ")[/] " + Formatador.display_line(warning) + Fog::Bluebox::Blocks.new(attributes) end - class Real - include Collections - - def initialize(options={}) - @go_grid_api_key = options[:go_grid_api_key] - @go_grid_shared_secret = options[:go_grid_shared_secret] - @host = options[:host] || "api.gogrid.com" - @path = options[:path] || "/api" - @port = options[:port] || 443 - @scheme = options[:scheme] || 'https' - @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent]) - end - - def reload - @connection.reset - end - - def request(params) - params = { - :expects => 200, - :method => 'GET' - }.merge!(params) - - params[:query] ||= {} - params[:query].merge!({ - 'api_key' => @go_grid_api_key, - 'format' => 'json', - 'sig' => Digest::MD5.hexdigest("#{@go_grid_api_key}#{@go_grid_shared_secret}#{Time.now.to_i}"), - 'v' => '1.4' - }) - - begin - response = @connection.request( - params.merge!(:path => "#{@path}/#{params[:path]}") - ) - rescue Excon::Errors::Error => error - raise case error - when Excon::Errors::NotFound - Fog::Go_Grid::NotFound.slurp(error) - else - error - end - end - - unless response.body.empty? - response.body = JSON.parse(response.body) - end - - response - end - - end end end diff --git a/lib/fog/go_grid/bin.rb b/lib/fog/go_grid/bin.rb index a0cd68005..e4b66ae53 100644 --- a/lib/fog/go_grid/bin.rb +++ b/lib/fog/go_grid/bin.rb @@ -9,15 +9,15 @@ module GoGrid def [](service) @@connections ||= Hash.new do |hash, key| hash[key] = case key - when :go_grid - Fog::GoGrid.new + when :servers + Fog::GoGrid::Servers.new end end @@connections[service] end def services - [:go_grid] + [:servers] end else diff --git a/lib/fog/go_grid/requests/common_lookup_list.rb b/lib/fog/go_grid/requests/common_lookup_list.rb deleted file mode 100644 index 3386ef558..000000000 --- a/lib/fog/go_grid/requests/common_lookup_list.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - class GoGrid - class Real - - # List options and lookups - # - # ==== Parameters - # * 'lookup'<~String> - the lookup to be listed - # * options<~Hash>: - # * 'sort'<~String> - column to sort result by in ['description', 'id', 'name'] - # * 'asc'<~String> - order to sort in ['true','false'] - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def common_lookup_list(lookup, options={}) - request( - :path => 'common/lookup/list', - :query => {'lookup' => lookup}.merge!(options) - ) - end - - end - - class Mock - - def common_lookup_list(lookup, options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_image_list.rb b/lib/fog/go_grid/requests/grid_image_list.rb deleted file mode 100644 index b442aeeda..000000000 --- a/lib/fog/go_grid/requests/grid_image_list.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - class GoGrid - class Real - - # List images - # - # ==== Parameters - # * options<~Hash>: - # * 'datacenter'<~String> - datacenter to limit results to - # * 'isPublic'<~String> - If true only returns public images, in ['false', 'true'] - # * 'num_items'<~Integer> - Number of items to return - # * 'page'<~Integer> - Page index for paginated results - # * 'state'<~String> - state to limit results to, in ['Saving', 'Available'] - # * 'type'<~String> - image type to limit results to - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_image_list(options={}) - request( - :path => 'grid/image/list', - :query => options - ) - end - - end - - class Mock - - def grid_image_list(options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_ip_list.rb b/lib/fog/go_grid/requests/grid_ip_list.rb deleted file mode 100644 index 721f167ca..000000000 --- a/lib/fog/go_grid/requests/grid_ip_list.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Fog - class GoGrid - class Real - - # List ips - # - # ==== Parameters - # * options<~Hash>: - # * 'datacenter'<~String> - datacenter to limit results to - # * 'ip.state'<~String> - state to limit results to in ip.state - # * 'ip.type'<~String> - type to limit results to in ip.type - # * 'num_items'<~Integer> - Number of items to return - # * 'page'<~Integer> - Page index for paginated results - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_ip_list(options={}) - request( - :path => 'grid/ip/list', - :query => options - ) - end - - end - - class Mock - - def grid_ip_list(options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_loadbalancer_list.rb b/lib/fog/go_grid/requests/grid_loadbalancer_list.rb deleted file mode 100644 index 5ae14c76a..000000000 --- a/lib/fog/go_grid/requests/grid_loadbalancer_list.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - class GoGrid - class Real - - # List load balancers - # - # ==== Parameters - # * options<~Hash>: - # * 'datacenter'<~String> - datacenter to limit results to - # * 'num_items'<~Integer> - Number of items to return - # * 'page'<~Integer> - Page index for paginated results - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_loadbalancer_list(options={}) - request( - :path => 'grid/loadbalancer/list', - :query => options - ) - end - - end - - class Mock - - def grid_loadbalancer_list(options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_server_add.rb b/lib/fog/go_grid/requests/grid_server_add.rb deleted file mode 100644 index 0f5d20086..000000000 --- a/lib/fog/go_grid/requests/grid_server_add.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - class GoGrid - class Real - - # Create a new server - # - # ==== Parameters - # * 'image'<~String> - image to use, in grid_image_list - # * 'ip'<~String> - initial public ip for this server - # * 'name'<~String> - name of the server, 20 or fewer characters - # * 'server_ram'<~String> - flavor to use, in common_lookup_list('server.ram') - # * 'options'<~Hash>: - # * 'description'<~String> - description of this server - # * 'isSandbox'<~String> - treat this server as image sandbox? in ['true', 'false'] - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_server_add(image, ip, name, server_ram, options={}) - request( - :path => 'grid/server/add', - :query => { - 'image' => image, - 'ip' => ip, - 'name' => name, - 'server.ram' => server_ram - }.merge!(options) - ) - end - - end - - class Mock - - def grid_server_add(image, ip, name, server_ram, options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_server_delete.rb b/lib/fog/go_grid/requests/grid_server_delete.rb deleted file mode 100644 index 30bd641bc..000000000 --- a/lib/fog/go_grid/requests/grid_server_delete.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - class GoGrid - class Real - - # Delete a server - # - # ==== Parameters - # * 'server'<~String> - id or name of server to delete - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_server_delete(server) - request( - :path => 'grid/server/delete', - :query => {'server' => server} - ) - end - - end - - class Mock - - def grid_server_delete(server) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_server_get.rb b/lib/fog/go_grid/requests/grid_server_get.rb deleted file mode 100644 index cadacae20..000000000 --- a/lib/fog/go_grid/requests/grid_server_get.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - class GoGrid - class Real - - # Get one or more servers by name - # - # ==== Parameters - # * 'server'<~String> - id or name of server(s) to lookup - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_server_get(servers) - request( - :path => 'grid/server/get', - :query => {'server' => [*servers]} - ) - end - - end - - class Mock - - def grid_server_get(servers) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_server_list.rb b/lib/fog/go_grid/requests/grid_server_list.rb deleted file mode 100644 index 459e7885f..000000000 --- a/lib/fog/go_grid/requests/grid_server_list.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Fog - class GoGrid - class Real - - # List servers - # - # ==== Parameters - # * options<~Hash>: - # * 'datacenter'<~String> - datacenter to limit results to - # * 'isSandbox'<~String> - If true only returns Image Sandbox servers, in ['false', 'true'] - # * 'num_items'<~Integer> - Number of items to return - # * 'page'<~Integer> - Page index for paginated results - # * 'server.type'<~String> - server type to limit results to - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_server_list(options={}) - request( - :path => 'grid/server/list', - :query => options - ) - end - - end - - class Mock - - def grid_server_list(options={}) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/grid_server_power.rb b/lib/fog/go_grid/requests/grid_server_power.rb deleted file mode 100644 index 9361566af..000000000 --- a/lib/fog/go_grid/requests/grid_server_power.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - class GoGrid - class Real - - # Start, Stop or Restart a server - # - # ==== Parameters - # * 'server'<~String> - id or name of server to power - # * 'power'<~String> - power operation, in ['restart', 'start', 'stop'] - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Array>: - # TODO: docs - def grid_server_delete(server, power) - request( - :path => 'grid/server/power', - :query => {'server' => server} - ) - end - - end - - class Mock - - def grid_server_delete(server) - Fog::Mock.not_implemented - end - - end - end -end diff --git a/lib/fog/go_grid/requests/servers/common_lookup_list.rb b/lib/fog/go_grid/requests/servers/common_lookup_list.rb new file mode 100644 index 000000000..b1b477ae2 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/common_lookup_list.rb @@ -0,0 +1,36 @@ +module Fog + module GoGrid + class Servers + class Real + + # List options and lookups + # + # ==== Parameters + # * 'lookup'<~String> - the lookup to be listed + # * options<~Hash>: + # * 'sort'<~String> - column to sort result by in ['description', 'id', 'name'] + # * 'asc'<~String> - order to sort in ['true','false'] + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def common_lookup_list(lookup, options={}) + request( + :path => 'common/lookup/list', + :query => {'lookup' => lookup}.merge!(options) + ) + end + + end + + class Mock + + def common_lookup_list(lookup, options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_image_list.rb b/lib/fog/go_grid/requests/servers/grid_image_list.rb new file mode 100644 index 000000000..2edbaa993 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_image_list.rb @@ -0,0 +1,39 @@ +module Fog + module GoGrid + class Servers + class Real + + # List images + # + # ==== Parameters + # * options<~Hash>: + # * 'datacenter'<~String> - datacenter to limit results to + # * 'isPublic'<~String> - If true only returns public images, in ['false', 'true'] + # * 'num_items'<~Integer> - Number of items to return + # * 'page'<~Integer> - Page index for paginated results + # * 'state'<~String> - state to limit results to, in ['Saving', 'Available'] + # * 'type'<~String> - image type to limit results to + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_image_list(options={}) + request( + :path => 'grid/image/list', + :query => options + ) + end + + end + + class Mock + + def grid_image_list(options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_ip_list.rb b/lib/fog/go_grid/requests/servers/grid_ip_list.rb new file mode 100644 index 000000000..af38ede52 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_ip_list.rb @@ -0,0 +1,38 @@ +module Fog + module GoGrid + class Servers + class Real + + # List ips + # + # ==== Parameters + # * options<~Hash>: + # * 'datacenter'<~String> - datacenter to limit results to + # * 'ip.state'<~String> - state to limit results to in ip.state + # * 'ip.type'<~String> - type to limit results to in ip.type + # * 'num_items'<~Integer> - Number of items to return + # * 'page'<~Integer> - Page index for paginated results + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_ip_list(options={}) + request( + :path => 'grid/ip/list', + :query => options + ) + end + + end + + class Mock + + def grid_ip_list(options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_loadbalancer_list.rb b/lib/fog/go_grid/requests/servers/grid_loadbalancer_list.rb new file mode 100644 index 000000000..d705e2d3b --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_loadbalancer_list.rb @@ -0,0 +1,36 @@ +module Fog + module GoGrid + class Servers + class Real + + # List load balancers + # + # ==== Parameters + # * options<~Hash>: + # * 'datacenter'<~String> - datacenter to limit results to + # * 'num_items'<~Integer> - Number of items to return + # * 'page'<~Integer> - Page index for paginated results + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_loadbalancer_list(options={}) + request( + :path => 'grid/loadbalancer/list', + :query => options + ) + end + + end + + class Mock + + def grid_loadbalancer_list(options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_server_add.rb b/lib/fog/go_grid/requests/servers/grid_server_add.rb new file mode 100644 index 000000000..6613d0369 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_server_add.rb @@ -0,0 +1,44 @@ +module Fog + module GoGrid + class Servers + class Real + + # Create a new server + # + # ==== Parameters + # * 'image'<~String> - image to use, in grid_image_list + # * 'ip'<~String> - initial public ip for this server + # * 'name'<~String> - name of the server, 20 or fewer characters + # * 'server_ram'<~String> - flavor to use, in common_lookup_list('server.ram') + # * 'options'<~Hash>: + # * 'description'<~String> - description of this server + # * 'isSandbox'<~String> - treat this server as image sandbox? in ['true', 'false'] + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_server_add(image, ip, name, server_ram, options={}) + request( + :path => 'grid/server/add', + :query => { + 'image' => image, + 'ip' => ip, + 'name' => name, + 'server.ram' => server_ram + }.merge!(options) + ) + end + + end + + class Mock + + def grid_server_add(image, ip, name, server_ram, options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_server_delete.rb b/lib/fog/go_grid/requests/servers/grid_server_delete.rb new file mode 100644 index 000000000..7c86b9a7e --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_server_delete.rb @@ -0,0 +1,33 @@ +module Fog + module GoGrid + class Servers + class Real + + # Delete a server + # + # ==== Parameters + # * 'server'<~String> - id or name of server to delete + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_server_delete(server) + request( + :path => 'grid/server/delete', + :query => {'server' => server} + ) + end + + end + + class Mock + + def grid_server_delete(server) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_server_get.rb b/lib/fog/go_grid/requests/servers/grid_server_get.rb new file mode 100644 index 000000000..7a069e279 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_server_get.rb @@ -0,0 +1,33 @@ +module Fog + module GoGrid + class Servers + class Real + + # Get one or more servers by name + # + # ==== Parameters + # * 'server'<~String> - id or name of server(s) to lookup + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_server_get(servers) + request( + :path => 'grid/server/get', + :query => {'server' => [*servers]} + ) + end + + end + + class Mock + + def grid_server_get(servers) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_server_list.rb b/lib/fog/go_grid/requests/servers/grid_server_list.rb new file mode 100644 index 000000000..3912b6b2d --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_server_list.rb @@ -0,0 +1,38 @@ +module Fog + module GoGrid + class Servers + class Real + + # List servers + # + # ==== Parameters + # * options<~Hash>: + # * 'datacenter'<~String> - datacenter to limit results to + # * 'isSandbox'<~String> - If true only returns Image Sandbox servers, in ['false', 'true'] + # * 'num_items'<~Integer> - Number of items to return + # * 'page'<~Integer> - Page index for paginated results + # * 'server.type'<~String> - server type to limit results to + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_server_list(options={}) + request( + :path => 'grid/server/list', + :query => options + ) + end + + end + + class Mock + + def grid_server_list(options={}) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/requests/servers/grid_server_power.rb b/lib/fog/go_grid/requests/servers/grid_server_power.rb new file mode 100644 index 000000000..f627865d2 --- /dev/null +++ b/lib/fog/go_grid/requests/servers/grid_server_power.rb @@ -0,0 +1,34 @@ +module Fog + module GoGrid + class Servers + class Real + + # Start, Stop or Restart a server + # + # ==== Parameters + # * 'server'<~String> - id or name of server to power + # * 'power'<~String> - power operation, in ['restart', 'start', 'stop'] + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Array>: + # TODO: docs + def grid_server_delete(server, power) + request( + :path => 'grid/server/power', + :query => {'server' => server} + ) + end + + end + + class Mock + + def grid_server_delete(server) + Fog::Mock.not_implemented + end + + end + end + end +end diff --git a/lib/fog/go_grid/servers.rb b/lib/fog/go_grid/servers.rb new file mode 100644 index 000000000..d7b9b0ad8 --- /dev/null +++ b/lib/fog/go_grid/servers.rb @@ -0,0 +1,98 @@ +module Fog + module GoGrid + class Servers < Fog::Service + + requires :go_grid_api_key + requires :go_grid_shared_secret + + model_path 'fog/go_grid/models' + + request_path 'fog/go_grid/requests' + request :common_lookup_list + request :grid_image_list + request :grid_ip_list + request :grid_loadbalancer_list + request :grid_server_add + request :grid_server_delete + request :grid_server_get + request :grid_server_list + request :grid_server_power + + class Mock + include Collections + + 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={}) + @go_grid_api_key = options[:go_grid_api_key] + @go_grid_shared_secret = options[:go_grid_shared_secret] + @data = self.class.data[@go_grid_api_key] + end + + end + + class Real + include Collections + + def initialize(options={}) + @go_grid_api_key = options[:go_grid_api_key] + @go_grid_shared_secret = options[:go_grid_shared_secret] + @host = options[:host] || "api.gogrid.com" + @path = options[:path] || "/api" + @port = options[:port] || 443 + @scheme = options[:scheme] || 'https' + @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent]) + end + + def reload + @connection.reset + end + + def request(params) + params = { + :expects => 200, + :method => 'GET' + }.merge!(params) + + params[:query] ||= {} + params[:query].merge!({ + 'api_key' => @go_grid_api_key, + 'format' => 'json', + 'sig' => Digest::MD5.hexdigest("#{@go_grid_api_key}#{@go_grid_shared_secret}#{Time.now.to_i}"), + 'v' => '1.4' + }) + + begin + response = @connection.request( + params.merge!(:path => "#{@path}/#{params[:path]}") + ) + rescue Excon::Errors::Error => error + raise case error + when Excon::Errors::NotFound + Fog::Go_Grid::NotFound.slurp(error) + else + error + end + end + + unless response.body.empty? + response.body = JSON.parse(response.body) + end + + response + end + + end + end + end +end