1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

refactor vm to use vcloud classes

This commit is contained in:
Rodrigo Estebanez 2013-07-09 15:48:44 +02:00
parent 75af68be5a
commit 7b909e3eee
4 changed files with 31 additions and 72 deletions

View file

@ -20,19 +20,7 @@ class VcloudngParser < Fog::Parsers::Base
attributes attributes
end end
def extract_link(attributes_xml)
response = {}
link_attrs = extract_attributes(attributes_xml)
response[:type] = link_attrs["type"]
response[:rel] = link_attrs["rel"]
response[:href] = link_attrs["href"]
if response[:type] && response[:rel]
short_type = response[:type].scan(/.*\.(.*)\+/).first.first
snake_case_short_type = short_type.gsub(/([A-Z])/) { '_' + $1.downcase }
response[:method_name] = response[:rel] + '_' + snake_case_short_type
end
response
end
end end
class NonLoaded class NonLoaded

View file

@ -6,7 +6,7 @@ module Fog
module Compute module Compute
class Vcloudng class Vcloudng
class Vm < Fog::Model class Vm < Model
identity :id identity :id
attribute :vapp_id attribute :vapp_id
@ -18,23 +18,8 @@ module Fog
attribute :ip_address attribute :ip_address
attribute :cpu, :type => :integer attribute :cpu, :type => :integer
attribute :memory attribute :memory
attribute :hard_disks, :aliases => 'disks' attribute :hard_disks, :aliases => :disks
#def links
# attributes["links"]
#end
#
#def generate_methods
# attributes["links"].each do |link|
# next unless link[:method_name]
# self.class.instance_eval do
# define_method(link[:method_name]) do
# puts link[:href]
# service.get_href(link[:href])
# end
# end
# end
#end
def power_on def power_on
response = service.post_vm_poweron(id) response = service.post_vm_poweron(id)

View file

@ -5,36 +5,22 @@ module Fog
module Compute module Compute
class Vcloudng class Vcloudng
class Vms < Fog::Collection class Vms < Collection
model Fog::Compute::Vcloudng::Vm model Fog::Compute::Vcloudng::Vm
attribute :vapp_id attribute :vapp
def index
vm_links.map{ |vm| new(vm)}
end
def all
index
end
def get(vm_id)
vm = vm_links.detect{ |vm| vm['id'] == vm_id}
return nil unless vm
new(vm)
end
def get_by_name(vm_name)
vm = vm_links.detect{ |vm| vm['name'] == vm_name}
return nil unless vm
new(vm)
end
private private
def vm_links def get_by_id(item_id)
data = service.get_vms(vapp_id).body item = item_list.detect{ |vm| vm[:id] == item_id}
data['vms'] item
end
def item_list
data = service.get_vms(vapp.id).body
items = data[:vms]
items
end end
end end

View file

@ -12,7 +12,7 @@ module Fog
@in_operating_system = false @in_operating_system = false
@in_children = false @in_children = false
@resource_type = nil @resource_type = nil
@response = { 'vms' => [] } @response = { :vms => [] }
@links = [] @links = []
end end
@ -23,20 +23,20 @@ module Fog
@in_operating_system = true @in_operating_system = true
when 'VApp' when 'VApp'
vapp = extract_attributes(attributes) vapp = extract_attributes(attributes)
@response.merge!(vapp.reject {|key,value| !['href', 'name', 'size', 'status', 'type'].include?(key)}) @response.merge!(vapp.reject {|key,value| ![:href, :name, :size, :status, :type].include?(key)})
@response['id'] = @response['href'].split('/').last @response[:id] = @response[:href].split('/').last
when 'Vm' when 'Vm'
vapp = extract_attributes(attributes) vapp = extract_attributes(attributes)
@vm.merge!(vapp.reject {|key,value| !['href', 'name', 'status', 'type'].include?(key)}) @vm.merge!(vapp.reject {|key,value| ![:href, :name, :status, :type].include?(key)})
@vm['id'] = @vm['href'].split('/').last @vm[:id] = @vm[:href].split('/').last
@vm['vapp_id'] = @response['id'] @vm[:vapp_id] = @response[:id]
@vm['status'] = human_status(@vm['status']) @vm[:status] = human_status(@vm[:status])
when 'Children' when 'Children'
@in_children = true @in_children = true
when 'HostResource' when 'HostResource'
@current_host_resource = extract_attributes(attributes) @current_host_resource = extract_attributes(attributes)
when 'Link' when 'Link'
@links << extract_link(attributes) @links << extract_attributes(attributes)
end end
end end
@ -44,10 +44,10 @@ module Fog
if @in_children if @in_children
case name case name
when 'IpAddress' when 'IpAddress'
@vm['ip_address'] = value @vm[:ip_address] = value
when 'Description' when 'Description'
if @in_operating_system if @in_operating_system
@vm['operating_system'] = value @vm[:operating_system] = value
@in_operating_system = false @in_operating_system = false
end end
when 'ResourceType' when 'ResourceType'
@ -55,21 +55,21 @@ module Fog
when 'VirtualQuantity' when 'VirtualQuantity'
case @resource_type case @resource_type
when '3' when '3'
@vm['cpu'] = value @vm[:cpu] = value
when '4' when '4'
@vm['memory'] = value @vm[:memory] = value
end end
when 'ElementName' when 'ElementName'
@element_name = value @element_name = value
when 'Item' when 'Item'
if @resource_type == '17' # disk if @resource_type == '17' # disk
@vm['disks'] ||= [] @vm[:disks] ||= []
@vm['disks'] << { @element_name => @current_host_resource["capacity"].to_i } @vm[:disks] << { @element_name => @current_host_resource[:capacity].to_i }
end end
when 'Link' when 'Link'
@vm['links'] = @links @vm[:links] = @links
when 'Vm' when 'Vm'
@response['vms'] << @vm @response[:vms] << @vm
@vm = {} @vm = {}
end end
end end