Skip to content

Commit 6d72676

Browse files
committed
fix: set predictable and proper server IP addresses order
1 parent e229d23 commit 6d72676

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

pkg/provider/manager.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,8 @@ func (n *nutanixManager) isNodeAddressesSet(node *v1.Node) bool {
379379
}
380380

381381
func (n *nutanixManager) getNodeAddresses(_ context.Context, vm *vmmModels.Vm) ([]v1.NodeAddress, error) {
382-
var addressSet *set.Set[v1.NodeAddress]
383382
var addresses []v1.NodeAddress
383+
uniqueIPs := set.New[string](0)
384384

385385
if vm == nil {
386386
return nil, fmt.Errorf("vm cannot be nil when getting node addresses")
@@ -390,37 +390,45 @@ func (n *nutanixManager) getNodeAddresses(_ context.Context, vm *vmmModels.Vm) (
390390
return nil, fmt.Errorf("unable to determine network interfaces from VM with UUID %s: vm has no nics", *vm.ExtId)
391391
}
392392

393-
addressSet = set.From([]v1.NodeAddress{}) //nolint:typecheck
394393
for _, nic := range vm.Nics {
395394
if nic.NicNetworkInfo == nil {
396395
continue
397396
}
398397

398+
var vmAddresses []v1.NodeAddress
399+
var err error
399400
switch nic.NicNetworkInfo.GetValue().(type) {
400401
case vmmModels.VirtualEthernetNicNetworkInfo:
401402
netInfo := nic.NicNetworkInfo.GetValue().(vmmModels.VirtualEthernetNicNetworkInfo)
402-
vmAddressSet, err := n.getNodeAddressesFromNicNetworkInfo(netInfo.Ipv4Config, netInfo.Ipv4Info)
403+
404+
vmAddresses, err = n.getNodeAddressesFromNicNetworkInfo(netInfo.Ipv4Config, netInfo.Ipv4Info)
403405
if err != nil {
404406
return nil, err
405407
}
406-
addressSet.InsertSlice(vmAddressSet)
407408

408409
case vmmModels.DpOffloadNicNetworkInfo:
409410
netInfo := nic.NicNetworkInfo.GetValue().(vmmModels.DpOffloadNicNetworkInfo)
410-
vmAddressSet, err := n.getNodeAddressesFromNicNetworkInfo(netInfo.Ipv4Config, netInfo.Ipv4Info)
411+
vmAddresses, err = n.getNodeAddressesFromNicNetworkInfo(netInfo.Ipv4Config, netInfo.Ipv4Info)
411412
if err != nil {
412413
return nil, err
413414
}
414-
addressSet.InsertSlice(vmAddressSet)
415415

416416
default:
417417
klog.V(1).Infof("unsupported NIC network info type: %T", nic.NicNetworkInfo.GetValue()) //nolint:typecheck
418418
continue
419419
}
420+
for _, addr := range vmAddresses {
421+
if addr.Type != v1.NodeInternalIP {
422+
addresses = append(addresses, addr)
423+
continue
424+
}
425+
if !uniqueIPs.Contains(addr.Address) {
426+
uniqueIPs.Insert(addr.Address)
427+
addresses = append(addresses, addr)
428+
}
429+
}
420430
}
421431

422-
addresses = append(addresses, addressSet.Slice()...)
423-
424432
if len(addresses) == 0 {
425433
return addresses, fmt.Errorf("unable to determine network interfaces from VM with UUID %s", *vm.ExtId)
426434
}

0 commit comments

Comments
 (0)