diff --git a/pkg/cloudprovider/providers/azure/azure_vmss.go b/pkg/cloudprovider/providers/azure/azure_vmss.go index de770f5db33..d51143b6b10 100644 --- a/pkg/cloudprovider/providers/azure/azure_vmss.go +++ b/pkg/cloudprovider/providers/azure/azure_vmss.go @@ -139,14 +139,18 @@ func (ss *scaleSet) getVmssVMByInstanceID(scaleSetName, instanceID string) (vm c // It must return ("", cloudprovider.InstanceNotFound) if the instance does // not exist or is no longer running. func (ss *scaleSet) GetInstanceIDByNodeName(name string) (string, error) { + managedByAS, err := ss.isNodeManagedByAvailabilitySet(name) + if err != nil { + glog.Errorf("Failed to check isNodeManagedByAvailabilitySet: %v", err) + return "", err + } + if managedByAS { + // vm is managed by availability set. + return ss.availabilitySet.GetInstanceIDByNodeName(name) + } + _, _, vm, err := ss.getVmssVM(name) if err != nil { - if err == ErrorNotVmssInstance { - glog.V(4).Infof("GetInstanceIDByNodeName: node %q is managed by availability set", name) - // Retry with standard type because nodes are not managed by vmss. - return ss.availabilitySet.GetInstanceIDByNodeName(name) - } - return "", err } @@ -183,14 +187,18 @@ func (ss *scaleSet) GetNodeNameByProviderID(providerID string) (types.NodeName, // GetInstanceTypeByNodeName gets the instance type by node name. func (ss *scaleSet) GetInstanceTypeByNodeName(name string) (string, error) { + managedByAS, err := ss.isNodeManagedByAvailabilitySet(name) + if err != nil { + glog.Errorf("Failed to check isNodeManagedByAvailabilitySet: %v", err) + return "", err + } + if managedByAS { + // vm is managed by availability set. + return ss.availabilitySet.GetInstanceTypeByNodeName(name) + } + _, _, vm, err := ss.getVmssVM(name) if err != nil { - if err == ErrorNotVmssInstance { - glog.V(4).Infof("GetInstanceTypeByNodeName: node %q is managed by availability set", name) - // Retry with standard type because nodes are not managed by vmss. - return ss.availabilitySet.GetInstanceTypeByNodeName(name) - } - return "", err } @@ -203,14 +211,18 @@ func (ss *scaleSet) GetInstanceTypeByNodeName(name string) (string, error) { // GetZoneByNodeName gets cloudprovider.Zone by node name. func (ss *scaleSet) GetZoneByNodeName(name string) (cloudprovider.Zone, error) { + managedByAS, err := ss.isNodeManagedByAvailabilitySet(name) + if err != nil { + glog.Errorf("Failed to check isNodeManagedByAvailabilitySet: %v", err) + return cloudprovider.Zone{}, err + } + if managedByAS { + // vm is managed by availability set. + return ss.availabilitySet.GetZoneByNodeName(name) + } + _, _, vm, err := ss.getVmssVM(name) if err != nil { - if err == ErrorNotVmssInstance { - glog.V(4).Infof("GetZoneByNodeName: node %q is managed by availability set", name) - // Retry with standard type because nodes are not managed by vmss. - return ss.availabilitySet.GetZoneByNodeName(name) - } - return cloudprovider.Zone{}, err } @@ -403,15 +415,19 @@ func (ss *scaleSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (vmSetN // GetPrimaryInterface gets machine primary network interface by node name and vmSet. func (ss *scaleSet) GetPrimaryInterface(nodeName, vmSetName string) (network.Interface, error) { + managedByAS, err := ss.isNodeManagedByAvailabilitySet(nodeName) + if err != nil { + glog.Errorf("Failed to check isNodeManagedByAvailabilitySet: %v", err) + return network.Interface{}, err + } + if managedByAS { + // vm is managed by availability set. + return ss.availabilitySet.GetPrimaryInterface(nodeName, "") + } + ssName, instanceID, vm, err := ss.getVmssVM(nodeName) if err != nil { - if err == ErrorNotVmssInstance { - glog.V(4).Infof("GetPrimaryInterface: node %q is managed by availability set", nodeName) - // Retry with standard type because nodes are not managed by vmss. - return ss.availabilitySet.GetPrimaryInterface(nodeName, "") - } - - glog.Errorf("error: ss.GetPrimaryInterface(%s), ss.getCachedVirtualMachine(%s), err=%v", nodeName, nodeName, err) + glog.Errorf("error: ss.GetPrimaryInterface(%s), ss.getVmssVM(%s), err=%v", nodeName, nodeName, err) return network.Interface{}, err }