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
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
class NonLoaded

View file

@ -6,7 +6,7 @@ module Fog
module Compute
class Vcloudng
class Vm < Fog::Model
class Vm < Model
identity :id
attribute :vapp_id
@ -18,23 +18,8 @@ module Fog
attribute :ip_address
attribute :cpu, :type => :integer
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
response = service.post_vm_poweron(id)

View file

@ -5,36 +5,22 @@ module Fog
module Compute
class Vcloudng
class Vms < Fog::Collection
class Vms < Collection
model Fog::Compute::Vcloudng::Vm
attribute :vapp_id
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
attribute :vapp
private
def vm_links
data = service.get_vms(vapp_id).body
data['vms']
def get_by_id(item_id)
item = item_list.detect{ |vm| vm[:id] == item_id}
item
end
def item_list
data = service.get_vms(vapp.id).body
items = data[:vms]
items
end
end

View file

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