diff --git a/lib/vmpooler/api/helpers.rb b/lib/vmpooler/api/helpers.rb index f696e52..54e12e0 100644 --- a/lib/vmpooler/api/helpers.rb +++ b/lib/vmpooler/api/helpers.rb @@ -498,6 +498,19 @@ module Vmpooler true end + + def dns_live?(vn_name, domain = nil) + require 'resolv' #ruby standard lib + fqdn = vm_name + fqdn = "#{fqdn}.#{domain}" if domain + begin + dnsip = Resolv.getaddress(fqdn) + rescue + dnsip = "N/A" + end + dnsip + end + end end end diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index 6168414..ca8ce01 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -105,6 +105,7 @@ module Vmpooler end def fetch_single_vm(template) + require 'vmpooler/providers/vsphere' template_backends = [template] aliases = Vmpooler::API.settings.config[:alias] if aliases @@ -144,6 +145,8 @@ module Vmpooler vms.reverse.each do |vm| ready = vm_ready?(vm, config['domain']) + dnsip = dns_live?(vm, config['domain']) + ips = get_all_ip_for_nics(template_backend, vm) if ready smoved = backend.smove("vmpooler__ready__#{template_backend}", "vmpooler__running__#{template_backend}", vm) if smoved diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index 386d07e..d26acb7 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -1093,6 +1093,27 @@ module Vmpooler return true if pool['create_linked_clone'] return true if @config[:config]['create_linked_clones'] end + + def _get_all_ip_for_nics(pool_name, vm_name, connection) + result = [] + vm_object = find_vm(pool_name, vm_name, connection) + vm_object.guest.net.each do |nic| + addresses = nic.ipAddress + + addresses.each do |adr| + puts adr + result << adr + end + end + result + end + + def get_all_ip_for_nics(pool_name, vm_name) + @connection_pool.with_metrics do |pool_object| + connection = ensured_vsphere_connection(pool_object) + _get_all_ip_for_nics(pool_name, vm_name, connection) + end + end end end end diff --git a/spec/rbvmomi_helper.rb b/spec/rbvmomi_helper.rb index 05754d9..88f918d 100644 --- a/spec/rbvmomi_helper.rb +++ b/spec/rbvmomi_helper.rb @@ -189,7 +189,10 @@ MockVirtualMachine = Struct.new( :name, # From RbVmomi::VIM::ManagedEntity # https://github.com/vmware/rbvmomi/blob/master/lib/rbvmomi/vim/ManagedEntity.rb - :path + :path, + # https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.GuestInfo.html + # From GuestInfo + :guest ) MockVirtualMachineSnapshot = Struct.new( @@ -288,6 +291,18 @@ MockVirtualHardware = Struct.new( :device ) +MockGuestInfo = Struct.new( + # https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.GuestInfo.html + # From GuestInfo + :hostName, :ipAddress, :net +) + +MockGuestNicInfo = Struct.new( + # https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.GuestInfo.NicInfo.html + # From GuestNicInfo + :connected, :ipAddress, :macAddress +) + MockVirtualMachineConfigInfo = Struct.new( # https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.ConfigInfo.html # From VirtualMachineConfigInfo @@ -691,6 +706,8 @@ def mock_RbVmomi_VIM_VirtualMachine(options = {}) mock = MockVirtualMachine.new() mock.config = MockVirtualMachineConfigInfo.new() mock.config.hardware = MockVirtualHardware.new([]) + mock.guest = MockGuestInfo.new() + mock.guest.net = MockGuestNicInfo.new([]) mock.summary = MockVirtualMachineSummary.new() mock.summary.runtime = MockVirtualMachineRuntimeInfo.new() mock.summary.guest = MockVirtualMachineGuestSummary.new() diff --git a/spec/unit/providers/vsphere_spec.rb b/spec/unit/providers/vsphere_spec.rb index a613051..1bab58b 100644 --- a/spec/unit/providers/vsphere_spec.rb +++ b/spec/unit/providers/vsphere_spec.rb @@ -3312,6 +3312,16 @@ EOT expect(subject.find_vm(poolname,missing_vm,connection)).to be_nil end + + it 'new test' do + expect(connection.searchIndex).to receive(:FindByInventoryPath).and_return(vm_object) + nic_a = MockGuestNicInfo.new() + nic_b = MockGuestNicInfo.new() + expect(vm_object.guest).to receive(:net).and_return([nic_a,nic_b]) + expect(nic_a).to receive(:ipAddress).and_return(["192.168.0.1", "192.168.0.2"]) + expect(nic_b).to receive(:ipAddress).and_return(["192.167.0.1"]) + subject.get_all_ip_for_nics(poolname,missing_vm,connection) + end end describe '#get_base_vm_container_from' do