(POOLER-166) Vmpooler should check DNS to ensure a record does not exist before VM creation

initial draft
This commit is contained in:
Samuel Beaulieu 2020-05-27 17:59:06 -05:00
parent 46af69f67b
commit 616db575f8
5 changed files with 65 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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