From 084ab0accf9783bda5a855c349ca9c9976abe005 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Fri, 17 Jun 2011 13:49:52 +0200 Subject: [PATCH] feature #476: move all methods handling VM info to the VM class --- src/vnm_mad/OpenNebulaNetwork.rb | 75 ++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/src/vnm_mad/OpenNebulaNetwork.rb b/src/vnm_mad/OpenNebulaNetwork.rb index b84df1019f..73e98af5dd 100644 --- a/src/vnm_mad/OpenNebulaNetwork.rb +++ b/src/vnm_mad/OpenNebulaNetwork.rb @@ -21,6 +21,18 @@ $: << File.dirname(__FILE__) require 'rexml/document' require 'OpenNebulaNic' +def log(msg) + require 'pp' + puts "\n"+"-"*80 + if msg.instance_of? String + puts msg + else + pp msg + end + puts "-"*80 + puts +end + CONF = { :start_vlan => 2 } @@ -38,8 +50,12 @@ COMMANDS = { } class VM - def initialize(vm_root) + attr_accessor :nics, :filtered_nics + + def initialize(vm_root, hypervisor) @vm_root = vm_root + @hypervisor = hypervisor + get_nics end def [](element) @@ -51,38 +67,47 @@ class VM end nil end + + def get_nics + nics = Nics.new(@hypervisor) + + @vm_root.elements.each("TEMPLATE/NIC") do |nic_element| + nic = nics.new_nic + nic_element.elements.each('*') do |nic_attribute| + key = nic_attribute.xpath.split('/')[-1].downcase.to_sym + nic[key] = nic_attribute.text + end + nic.get_info(self) + nic.get_tap + nics << nic + end + + @nics = nics + @filtered_nics = nics + end end class OpenNebulaNetwork - attr_reader :vm_info, :hypervisor, :nics + attr_reader :hypervisor, :vm def initialize(vm_tpl, hypervisor=nil) - @vm_root = REXML::Document.new(vm_tpl).root - @vm = VM.new(@vm_root) - @vm_info = Hash.new - - if !hypervisor - hypervisor = detect_hypervisor - end - @hypervisor = hypervisor - - @nics = get_nics - @filtered_nics = @nics + hypervisor = detect_hypervisor if !hypervisor + @vm = VM.new(REXML::Document.new(vm_tpl).root, hypervisor) end def filter(*filter) - @filtered_nics = @nics.get(*filter) + @vm.filtered_nics = @vm.nics.get(*filter) self end def unfilter - @filtered_nics = @nics + @vm.filtered_nics = @vm.nics self end def process(&block) - if @filtered_nics - @filtered_nics.each do |n| + if @vm.filtered_nics + @vm.filtered_nics.each do |n| yield(n) end end @@ -99,22 +124,6 @@ class OpenNebulaNetwork end end - def get_nics - nics = Nics.new(@hypervisor) - - @vm_root.elements.each("TEMPLATE/NIC") do |nic_element| - nic = nics.new_nic - nic_element.elements.each('*') do |nic_attribute| - key = nic_attribute.xpath.split('/')[-1].downcase.to_sym - nic[key] = nic_attribute.text - end - nic.get_info(@vm) - nic.get_tap - nics << nic - end - nics - end - def get_interfaces bridges = Hash.new brctl_exit =`#{COMMANDS[:brctl]} show`