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