drivers/kvm: Use ARP for retrieving interface ip addresses
On platforms where dhcp lease status is not updated immediately after domain creation it fails to list ip addresses until next refresh happens resulting in the following error: 8<----------8<----------8<----------8<----------8<----------8<---------- Creating kvm2 VM (CPUs=2, Memory=4096MB, Disk=20480MB) ... Failed to start kvm2 VM. Running "minikube delete" may fix it: creating host: create: Error creating machine: Error in driver during machine creation: IP not available after waiting: machine minikube didn't return IP after 1 minute Exiting due to GUEST_PROVISION: Failed to start host: creating host: create: Error creating machine: Error in driver during machine creation: IP not available after waiting: machine minikube didn't return IP after 1 minute 8<----------8<----------8<----------8<----------8<----------8<---------- Using ARP instead of LEASE for ip address query is justifiable as listing is done following the domain creation. In case of failure we fallback to listing via LEASE source. Signed-off-by: Anoop C S <anoopcs@cryptolab.net>pull/13482/head
parent
327b1b959e
commit
061fd88d2e
|
@ -478,9 +478,19 @@ func ifListFromAPI(conn *libvirt.Connect, domain string) ([]libvirt.DomainInterf
|
|||
}
|
||||
defer func() { _ = dom.Free() }()
|
||||
|
||||
ifs, err := dom.ListAllInterfaceAddresses(libvirt.DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed listing network interface addresses of domain %s: %w", domain, err)
|
||||
ifs, err := dom.ListAllInterfaceAddresses(libvirt.DOMAIN_INTERFACE_ADDRESSES_SRC_ARP)
|
||||
if ifs == nil {
|
||||
if err != nil {
|
||||
log.Debugf("failed listing network interface addresses of domain %s(source=arp): %w", domain, err)
|
||||
} else {
|
||||
log.Debugf("No network interface addresses found for domain %s(source=arp)", domain)
|
||||
}
|
||||
log.Debugf("trying to list again with source=lease")
|
||||
|
||||
ifs, err = dom.ListAllInterfaceAddresses(libvirt.DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed listing network interface addresses of domain %s(source=lease): %w", domain, err)
|
||||
}
|
||||
}
|
||||
|
||||
return ifs, nil
|
||||
|
|
Loading…
Reference in New Issue