From daa49dd1c986556e4f09db64a265d9a65a0e4076 Mon Sep 17 00:00:00 2001 From: Jake Spain Date: Wed, 15 Feb 2023 09:52:04 -0500 Subject: [PATCH] Collect the ip address of created VM for use with dns plugins --- lib/vmpooler/providers/vsphere.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/vmpooler/providers/vsphere.rb b/lib/vmpooler/providers/vsphere.rb index e76e972..6a25053 100644 --- a/lib/vmpooler/providers/vsphere.rb +++ b/lib/vmpooler/providers/vsphere.rb @@ -382,11 +382,34 @@ module Vmpooler spec: clone_spec ).wait_for_completion + # Make optional? + ip = get_vm_ip_address(new_vm_object) + + @redis.with_metrics do |redis| + redis.hset("vmpooler__vm__#{new_vmname}", 'ip', ip) + end + vm_hash = generate_vm_hash(new_vm_object, pool_name) end vm_hash end + # The inner method requires vmware tools running in the guest os + def get_vm_ip_address(vm_object, maxloop = 0, loop_delay = 1, max_age = 60) + loop_count = 1 + ip = nil + while ip.nil? + sleep(loop_delay) + ip = vm_object.guest_ip + unless maxloop == 0 + break if loop_count >= maxloop + + loop_count += 1 + end + end + return ip + end + def create_config_spec(vm_name, template_name, extra_config) RbVmomi::VIM.VirtualMachineConfigSpec( annotation: JSON.pretty_generate(