@@ -586,21 +586,20 @@ func (d *Driver) getMAC() (string, error) {
586
586
}
587
587
588
588
func (d * Driver ) getIPByMACFromAPI (mac string ) (string , error ) {
589
- network , err := d .conn . LookupNetworkByName ( d . PrivateNetwork )
589
+ interfaces , err := d .VM . ListAllInterfaceAddresses ( uint ( libvirt . DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE ) )
590
590
if err != nil {
591
- log .Errorf ("Failed to lookup network %s" , d .PrivateNetwork )
592
591
return "" , err
593
592
}
594
- leases , err := network .GetDHCPLeases ()
595
- if err != nil {
596
- log .Warnf ("Failed to retrieve DHCP leases from libvirt: %v" , err )
597
- return "" , err
598
- }
599
- for _ , lease := range leases {
600
- if strings .ToLower (mac ) == strings .ToLower (lease .GetMACAddress ()) {
601
- return lease .GetIPAddress (), nil
593
+ for _ , domainInterface := range interfaces {
594
+ if strings .ToUpper (domainInterface .Hwaddr ) == strings .ToUpper (mac ) {
595
+ // An interface can have multiple addresses (eg: ipv4 and ipv6)
596
+ // Just returns the first one right now...
597
+ for _ , addr := range domainInterface .Addrs {
598
+ return addr .Addr , nil
599
+ }
602
600
}
603
601
}
602
+
604
603
return "" , errors .New ("failed to match IP for MAC address" )
605
604
}
606
605
@@ -686,9 +685,9 @@ func (d *Driver) GetIP() (string, error) {
686
685
}
687
686
688
687
methods := []ipLookupFunc {
688
+ d .getIPByMACFromAPI ,
689
689
d .getIPByMACFromLeaseFile ,
690
690
d .getIPByMacFromSettings ,
691
- d .getIPByMACFromAPI ,
692
691
}
693
692
for _ , method := range methods {
694
693
ip , err := method (mac )
0 commit comments