From e01ad95ab2d9edbc8c62f3ca6dd1176edaf5820b Mon Sep 17 00:00:00 2001 From: geemus Date: Wed, 2 Jun 2010 19:38:50 -0700 Subject: [PATCH] [bbg] simplify by killing parsers and using json --- lib/fog/bluebox.rb | 28 +++++++------- lib/fog/bluebox/models/flavors.rb | 2 +- lib/fog/bluebox/models/images.rb | 2 +- lib/fog/bluebox/models/servers.rb | 2 +- lib/fog/bluebox/parsers/create_block.rb | 45 ---------------------- lib/fog/bluebox/parsers/get_block.rb | 47 ----------------------- lib/fog/bluebox/parsers/get_blocks.rb | 33 ---------------- lib/fog/bluebox/parsers/get_product.rb | 24 ------------ lib/fog/bluebox/parsers/get_products.rb | 28 -------------- lib/fog/bluebox/parsers/get_templates.rb | 30 --------------- lib/fog/bluebox/requests/create_block.rb | 31 ++++++--------- lib/fog/bluebox/requests/destroy_block.rb | 2 +- lib/fog/bluebox/requests/get_block.rb | 5 +-- lib/fog/bluebox/requests/get_blocks.rb | 5 +-- lib/fog/bluebox/requests/get_product.rb | 5 +-- lib/fog/bluebox/requests/get_products.rb | 5 +-- lib/fog/bluebox/requests/get_templates.rb | 5 +-- lib/fog/bluebox/requests/reboot_block.rb | 2 +- 18 files changed, 35 insertions(+), 266 deletions(-) delete mode 100644 lib/fog/bluebox/parsers/create_block.rb delete mode 100644 lib/fog/bluebox/parsers/get_block.rb delete mode 100644 lib/fog/bluebox/parsers/get_blocks.rb delete mode 100644 lib/fog/bluebox/parsers/get_product.rb delete mode 100644 lib/fog/bluebox/parsers/get_products.rb delete mode 100644 lib/fog/bluebox/parsers/get_templates.rb diff --git a/lib/fog/bluebox.rb b/lib/fog/bluebox.rb index e4ced4ae8..ed3d3e72f 100644 --- a/lib/fog/bluebox.rb +++ b/lib/fog/bluebox.rb @@ -1,17 +1,17 @@ module Fog module Bluebox - require 'fog/bluebox/models/images' - require 'fog/bluebox/requests/get_templates' - require 'fog/bluebox/models/flavors' - require 'fog/bluebox/requests/get_products' require 'fog/bluebox/models/flavor' - require 'fog/bluebox/requests/get_product' - require 'fog/bluebox/models/servers' - require 'fog/bluebox/requests/get_blocks' + require 'fog/bluebox/models/flavors' + require 'fog/bluebox/models/images' require 'fog/bluebox/models/server' - require 'fog/bluebox/requests/get_block' + require 'fog/bluebox/models/servers' require 'fog/bluebox/requests/create_block' require 'fog/bluebox/requests/destroy_block' + require 'fog/bluebox/requests/get_block' + require 'fog/bluebox/requests/get_blocks' + require 'fog/bluebox/requests/get_product' + require 'fog/bluebox/requests/get_products' + require 'fog/bluebox/requests/get_templates' require 'fog/bluebox/requests/reboot_block' def self.new(options={}) @@ -69,14 +69,12 @@ module Fog params[:headers].merge!({ 'Authorization' => "Basic #{Base64.encode64([@bluebox_customer_id, @bluebox_api_key].join(':')).delete("\r\n")}" }) - case params[:method] - when 'DELETE', 'GET', 'HEAD' - params[:headers]['Accept'] = 'application/xml' - when 'POST', 'PUT' - params[:headers]['Content-Type'] = 'application/xml' - end - @connection.request({:host => @host}.merge!(params)) + response = @connection.request({:host => @host}.merge!(params)) + unless response.body.empty? + response.body = JSON.parse(response.body) + end + response end end diff --git a/lib/fog/bluebox/models/flavors.rb b/lib/fog/bluebox/models/flavors.rb index 6db9dc95e..0dc0c2cc1 100644 --- a/lib/fog/bluebox/models/flavors.rb +++ b/lib/fog/bluebox/models/flavors.rb @@ -21,7 +21,7 @@ module Fog model Fog::Bluebox::Flavor def all - data = connection.get_products.body['products'] + data = connection.get_products.body load(data) end diff --git a/lib/fog/bluebox/models/images.rb b/lib/fog/bluebox/models/images.rb index 9b11d63ea..6bfcb10d0 100644 --- a/lib/fog/bluebox/models/images.rb +++ b/lib/fog/bluebox/models/images.rb @@ -25,7 +25,7 @@ module Fog model Fog::Bluebox::Image def all - data = connection.get_templates.body['templates'] + data = connection.get_templates.body load(data) end diff --git a/lib/fog/bluebox/models/servers.rb b/lib/fog/bluebox/models/servers.rb index d01ad6c37..636f40bc4 100644 --- a/lib/fog/bluebox/models/servers.rb +++ b/lib/fog/bluebox/models/servers.rb @@ -21,7 +21,7 @@ module Fog model Fog::Bluebox::Server def all - data = connection.get_blocks.body['blocks'] + data = connection.get_blocks.body load(data) end diff --git a/lib/fog/bluebox/parsers/create_block.rb b/lib/fog/bluebox/parsers/create_block.rb deleted file mode 100644 index 014333ef5..000000000 --- a/lib/fog/bluebox/parsers/create_block.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class CreateBlock < Fog::Parsers::Base - - def reset - @response = {} - end - - def end_element(name) - case name - when 'address' - @response['ips'] ||= [] - @response['ips'] << @value - when 'memory', 'storage' - @response[name] = @value.to_i - when 'cpu' - @response[name] = @value.to_f - when 'id' - if @scope == 'product' - @response['flavor_id'] = @value - else - @response[name] = @value - end - when 'name', 'hostname', 'status', 'text', 'hash' - @response[name] = @value - when 'template' - @response['image_id'] = @value - when 'product' - @scope = nil - end - end - - def start_element(name, attrs=[]) - super - case name - when 'product' - @scope = name - end - end - end - end - end -end diff --git a/lib/fog/bluebox/parsers/get_block.rb b/lib/fog/bluebox/parsers/get_block.rb deleted file mode 100644 index 3fd697b4e..000000000 --- a/lib/fog/bluebox/parsers/get_block.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class GetBlock < Fog::Parsers::Base - - def reset - @response = {} - end - - def end_element(name) - case name - when 'address' - @response['ips'] ||= [] - @response['ips'] << @value - when 'memory', 'storage' - @response[name] = @value.to_i - when 'cpu' - @response[name] = @value.to_f - when 'hostname', 'status' - @response[name] = @value - when 'id' - if @scope == 'product' - @response['flavor_id'] = @value - else - @response[name] = @value - end - when 'template' - @response['image_id'] = @value - when 'product' - @scope = nil - end - end - - def start_element(name, attrs=[]) - super - case name - when 'product' - @scope = name - end - end - - end - - end - end -end diff --git a/lib/fog/bluebox/parsers/get_blocks.rb b/lib/fog/bluebox/parsers/get_blocks.rb deleted file mode 100644 index f78ed8aae..000000000 --- a/lib/fog/bluebox/parsers/get_blocks.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class GetBlocks < Fog::Parsers::Base - - def reset - @block = {} - @response = { 'blocks' => [] } - end - - def end_element(name) - case name - when 'ip' - @block['ips'] ||= [] - @block['ips'] << @value - when 'memory', 'storage' - @block[name] = @value.to_i - when 'cpu' - @block[name] = @value.to_f - when 'hostname', 'id' - @block[name] = @value - when 'record' - @response['blocks'] << @block - @block = {} - end - end - - end - - end - end -end diff --git a/lib/fog/bluebox/parsers/get_product.rb b/lib/fog/bluebox/parsers/get_product.rb deleted file mode 100644 index c5ad442ab..000000000 --- a/lib/fog/bluebox/parsers/get_product.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class GetProduct < Fog::Parsers::Base - - def reset - @response = {} - end - - def end_element(name) - case name - when 'cost' - @response[name] = @value.to_f - when 'description', 'id' - @response[name] = @value - end - end - - end - - end - end -end diff --git a/lib/fog/bluebox/parsers/get_products.rb b/lib/fog/bluebox/parsers/get_products.rb deleted file mode 100644 index e68077a1e..000000000 --- a/lib/fog/bluebox/parsers/get_products.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class GetProducts < Fog::Parsers::Base - - def reset - @product = {} - @response = { 'products' => [] } - end - - def end_element(name) - case name - when 'record' - @response['products'] << @product - @product = {} - when 'cost' - @product[name] = @value.to_f - when 'description', 'id' - @product[name] = @value - end - end - - end - - end - end -end diff --git a/lib/fog/bluebox/parsers/get_templates.rb b/lib/fog/bluebox/parsers/get_templates.rb deleted file mode 100644 index fa6df84cb..000000000 --- a/lib/fog/bluebox/parsers/get_templates.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Parsers - module Bluebox - - class GetTemplates < Fog::Parsers::Base - - def reset - @template = {} - @response = { 'templates' => [] } - end - - def end_element(name) - case name - when 'public' - @template[name] = @value - when 'id' - @template[name] = @value - when 'description' - @template[name] = @value - when 'record' - @response['templates'] << @template - @template = {} - end - end - - end - - end - end -end diff --git a/lib/fog/bluebox/requests/create_block.rb b/lib/fog/bluebox/requests/create_block.rb index 5fe560c1c..5c94839d2 100644 --- a/lib/fog/bluebox/requests/create_block.rb +++ b/lib/fog/bluebox/requests/create_block.rb @@ -2,13 +2,11 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/create_block' - # Create a new block # # ==== Parameters - # * flavor_id<~Integer> - Id of flavor to create block with - # * image_id<~Integer> - Id of template to create block with + # * product_id<~Integer> - Id of product to create block with + # * template_id<~Integer> - Id of template to create block with # * name<~String> - Name of block # * password<~String> - Password for block # @@ -16,24 +14,19 @@ module Fog # * response<~Excon::Response>: # * body<~Hash>: # TODO - def create_block(flavor_id, image_id, name, password) - data = -<<-DATA - - - #{name} - #{password} - #{flavor_id} - - -DATA + def create_block(product_id, template_id, name, password) + data = { + 'name' => name, + 'password' => password, + 'product' => product_id, + 'template' => template_id + } request( - :body => data, + :body => data.to_json, :expects => 200, :method => 'POST', - :parser => Fog::Parsers::Bluebox::CreateBlock.new, - :path => '/api/blocks.xml' + :path => '/api/blocks.json' ) end @@ -41,7 +34,7 @@ DATA class Mock - def create_block(flavor_id, image_id, name, password) + def create_block(product_id, template_id, name, password) Fog::Mock.not_implemented end diff --git a/lib/fog/bluebox/requests/destroy_block.rb b/lib/fog/bluebox/requests/destroy_block.rb index 95767c655..6abc0ddda 100644 --- a/lib/fog/bluebox/requests/destroy_block.rb +++ b/lib/fog/bluebox/requests/destroy_block.rb @@ -15,7 +15,7 @@ module Fog request( :expects => 200, :method => 'DELETE', - :path => "api/blocks/#{block_id}.xml" + :path => "api/blocks/#{block_id}.json" ) end diff --git a/lib/fog/bluebox/requests/get_block.rb b/lib/fog/bluebox/requests/get_block.rb index 9c62c5818..96c2cdb22 100644 --- a/lib/fog/bluebox/requests/get_block.rb +++ b/lib/fog/bluebox/requests/get_block.rb @@ -2,8 +2,6 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/get_block' - # Get details of a block. # # ==== Parameters @@ -17,8 +15,7 @@ module Fog request( :expects => 200, :method => 'GET', - :parser => Fog::Parsers::Bluebox::GetBlock.new, - :path => "api/blocks/#{block_id}.xml" + :path => "api/blocks/#{block_id}.json" ) end diff --git a/lib/fog/bluebox/requests/get_blocks.rb b/lib/fog/bluebox/requests/get_blocks.rb index 4b6043d28..285cd08e9 100644 --- a/lib/fog/bluebox/requests/get_blocks.rb +++ b/lib/fog/bluebox/requests/get_blocks.rb @@ -2,8 +2,6 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/get_blocks' - # Get list of blocks # # ==== Returns @@ -19,8 +17,7 @@ module Fog request( :expects => 200, :method => 'GET', - :parser => Fog::Parsers::Bluebox::GetBlocks.new, - :path => 'api/blocks.xml' + :path => 'api/blocks.json' ) end diff --git a/lib/fog/bluebox/requests/get_product.rb b/lib/fog/bluebox/requests/get_product.rb index 6c1a499e2..5ed12f662 100644 --- a/lib/fog/bluebox/requests/get_product.rb +++ b/lib/fog/bluebox/requests/get_product.rb @@ -2,8 +2,6 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/get_product' - # Get details of a product # # ==== Parameters @@ -17,8 +15,7 @@ module Fog request( :expects => 200, :method => 'GET', - :parser => Fog::Parsers::Bluebox::GetFlavor.new, - :path => "api/block_products/#{flavor_id}.xml" + :path => "api/block_products/#{flavor_id}.json" ) end diff --git a/lib/fog/bluebox/requests/get_products.rb b/lib/fog/bluebox/requests/get_products.rb index 40a6c1ed6..4ba3332c3 100644 --- a/lib/fog/bluebox/requests/get_products.rb +++ b/lib/fog/bluebox/requests/get_products.rb @@ -2,8 +2,6 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/get_products' - # Get list of products # # ==== Returns @@ -16,8 +14,7 @@ module Fog request( :expects => 200, :method => 'GET', - :parser => Fog::Parsers::Bluebox::GetProducts.new, - :path => 'api/block_products.xml' + :path => 'api/block_products.json' ) end diff --git a/lib/fog/bluebox/requests/get_templates.rb b/lib/fog/bluebox/requests/get_templates.rb index 58ccd2eb1..616bfb57d 100644 --- a/lib/fog/bluebox/requests/get_templates.rb +++ b/lib/fog/bluebox/requests/get_templates.rb @@ -2,8 +2,6 @@ module Fog module Bluebox class Real - require 'fog/bluebox/parsers/get_templates' - # Get list of OS templates # # ==== Returns @@ -17,8 +15,7 @@ module Fog request( :expects => 200, :method => 'GET', - :parser => Fog::Parsers::Bluebox::GetTemplates.new, - :path => 'api/block_templates.xml' + :path => 'api/block_templates.json' ) end diff --git a/lib/fog/bluebox/requests/reboot_block.rb b/lib/fog/bluebox/requests/reboot_block.rb index 07c933afe..32ff1bd4e 100644 --- a/lib/fog/bluebox/requests/reboot_block.rb +++ b/lib/fog/bluebox/requests/reboot_block.rb @@ -16,7 +16,7 @@ module Fog request( :expects => 200, :method => 'PUT', - :path => "api/blocks/#{block_id}/#{'soft_' if type == 'SOFT'}reboot.xml" + :path => "api/blocks/#{block_id}/#{'soft_' if type == 'SOFT'}reboot.json" ) end