From 7b909e3eee605803046de4ad85ea3199d28368f2 Mon Sep 17 00:00:00 2001 From: Rodrigo Estebanez Date: Tue, 9 Jul 2013 15:48:44 +0200 Subject: [PATCH] refactor vm to use vcloud classes --- lib/fog/vcloudng/compute.rb | 14 +--------- lib/fog/vcloudng/models/compute/vm.rb | 19 ++----------- lib/fog/vcloudng/models/compute/vms.rb | 38 ++++++++------------------ lib/fog/vcloudng/parsers/compute/vm.rb | 32 +++++++++++----------- 4 files changed, 31 insertions(+), 72 deletions(-) diff --git a/lib/fog/vcloudng/compute.rb b/lib/fog/vcloudng/compute.rb index c39531678..9843f4532 100644 --- a/lib/fog/vcloudng/compute.rb +++ b/lib/fog/vcloudng/compute.rb @@ -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 diff --git a/lib/fog/vcloudng/models/compute/vm.rb b/lib/fog/vcloudng/models/compute/vm.rb index 9f3d0170d..38207f4dd 100644 --- a/lib/fog/vcloudng/models/compute/vm.rb +++ b/lib/fog/vcloudng/models/compute/vm.rb @@ -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) diff --git a/lib/fog/vcloudng/models/compute/vms.rb b/lib/fog/vcloudng/models/compute/vms.rb index 47a2f743e..087104ac1 100644 --- a/lib/fog/vcloudng/models/compute/vms.rb +++ b/lib/fog/vcloudng/models/compute/vms.rb @@ -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 diff --git a/lib/fog/vcloudng/parsers/compute/vm.rb b/lib/fog/vcloudng/parsers/compute/vm.rb index c0b7ee12e..58a2ea579 100644 --- a/lib/fog/vcloudng/parsers/compute/vm.rb +++ b/lib/fog/vcloudng/parsers/compute/vm.rb @@ -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