[bbg] simplify by killing parsers and using json

This commit is contained in:
geemus 2010-06-02 19:38:50 -07:00
parent 08dcd8f05f
commit e01ad95ab2
18 changed files with 35 additions and 266 deletions

View File

@ -1,17 +1,17 @@
module Fog module Fog
module Bluebox 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/models/flavor'
require 'fog/bluebox/requests/get_product' require 'fog/bluebox/models/flavors'
require 'fog/bluebox/models/servers' require 'fog/bluebox/models/images'
require 'fog/bluebox/requests/get_blocks'
require 'fog/bluebox/models/server' 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/create_block'
require 'fog/bluebox/requests/destroy_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' require 'fog/bluebox/requests/reboot_block'
def self.new(options={}) def self.new(options={})
@ -69,14 +69,12 @@ module Fog
params[:headers].merge!({ params[:headers].merge!({
'Authorization' => "Basic #{Base64.encode64([@bluebox_customer_id, @bluebox_api_key].join(':')).delete("\r\n")}" '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
end end

View File

@ -21,7 +21,7 @@ module Fog
model Fog::Bluebox::Flavor model Fog::Bluebox::Flavor
def all def all
data = connection.get_products.body['products'] data = connection.get_products.body
load(data) load(data)
end end

View File

@ -25,7 +25,7 @@ module Fog
model Fog::Bluebox::Image model Fog::Bluebox::Image
def all def all
data = connection.get_templates.body['templates'] data = connection.get_templates.body
load(data) load(data)
end end

View File

@ -21,7 +21,7 @@ module Fog
model Fog::Bluebox::Server model Fog::Bluebox::Server
def all def all
data = connection.get_blocks.body['blocks'] data = connection.get_blocks.body
load(data) load(data)
end end

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -2,13 +2,11 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/create_block'
# Create a new block # Create a new block
# #
# ==== Parameters # ==== Parameters
# * flavor_id<~Integer> - Id of flavor to create block with # * product_id<~Integer> - Id of product to create block with
# * image_id<~Integer> - Id of template to create block with # * template_id<~Integer> - Id of template to create block with
# * name<~String> - Name of block # * name<~String> - Name of block
# * password<~String> - Password for block # * password<~String> - Password for block
# #
@ -16,24 +14,19 @@ module Fog
# * response<~Excon::Response>: # * response<~Excon::Response>:
# * body<~Hash>: # * body<~Hash>:
# TODO # TODO
def create_block(flavor_id, image_id, name, password) def create_block(product_id, template_id, name, password)
data = data = {
<<-DATA 'name' => name,
<?xml version="1.0" encoding="UTF-8"?> 'password' => password,
<block> 'product' => product_id,
<name>#{name}</name> 'template' => template_id
<password>#{password}</password> }
<product type="string">#{flavor_id}</product>
<template type="string">#{image_id}</template>
</block>
DATA
request( request(
:body => data, :body => data.to_json,
:expects => 200, :expects => 200,
:method => 'POST', :method => 'POST',
:parser => Fog::Parsers::Bluebox::CreateBlock.new, :path => '/api/blocks.json'
:path => '/api/blocks.xml'
) )
end end
@ -41,7 +34,7 @@ DATA
class Mock class Mock
def create_block(flavor_id, image_id, name, password) def create_block(product_id, template_id, name, password)
Fog::Mock.not_implemented Fog::Mock.not_implemented
end end

View File

@ -15,7 +15,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'DELETE', :method => 'DELETE',
:path => "api/blocks/#{block_id}.xml" :path => "api/blocks/#{block_id}.json"
) )
end end

View File

@ -2,8 +2,6 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/get_block'
# Get details of a block. # Get details of a block.
# #
# ==== Parameters # ==== Parameters
@ -17,8 +15,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::Bluebox::GetBlock.new, :path => "api/blocks/#{block_id}.json"
:path => "api/blocks/#{block_id}.xml"
) )
end end

View File

@ -2,8 +2,6 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/get_blocks'
# Get list of blocks # Get list of blocks
# #
# ==== Returns # ==== Returns
@ -19,8 +17,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::Bluebox::GetBlocks.new, :path => 'api/blocks.json'
:path => 'api/blocks.xml'
) )
end end

View File

@ -2,8 +2,6 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/get_product'
# Get details of a product # Get details of a product
# #
# ==== Parameters # ==== Parameters
@ -17,8 +15,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::Bluebox::GetFlavor.new, :path => "api/block_products/#{flavor_id}.json"
:path => "api/block_products/#{flavor_id}.xml"
) )
end end

View File

@ -2,8 +2,6 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/get_products'
# Get list of products # Get list of products
# #
# ==== Returns # ==== Returns
@ -16,8 +14,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::Bluebox::GetProducts.new, :path => 'api/block_products.json'
:path => 'api/block_products.xml'
) )
end end

View File

@ -2,8 +2,6 @@ module Fog
module Bluebox module Bluebox
class Real class Real
require 'fog/bluebox/parsers/get_templates'
# Get list of OS templates # Get list of OS templates
# #
# ==== Returns # ==== Returns
@ -17,8 +15,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::Bluebox::GetTemplates.new, :path => 'api/block_templates.json'
:path => 'api/block_templates.xml'
) )
end end

View File

@ -16,7 +16,7 @@ module Fog
request( request(
:expects => 200, :expects => 200,
:method => 'PUT', :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 end