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

View File

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

View File

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

View File

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

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
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
<?xml version="1.0" encoding="UTF-8"?>
<block>
<name>#{name}</name>
<password>#{password}</password>
<product type="string">#{flavor_id}</product>
<template type="string">#{image_id}</template>
</block>
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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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