Unverified Commit a4222bd8 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #60186 from feiskyer/vmss-check

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Cleanup node type checking for azure nodes **What this PR does / why we need it**: This PR cleanup node type checking for azure nodes. It also fixes a problem of `instance not found` error for VMAS nodes in vmss cluster (vmType set to vmss): ``` ss.GetPrimaryInterface(k8s-master), ss.getCachedVirtualMachine(k8s-master), err=instance not found ``` **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #60185 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
parents aded0d92 2e9afe2c
......@@ -140,14 +140,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) {
_, _, vm, err := ss.getVmssVM(name)
managedByAS, err := ss.isNodeManagedByAvailabilitySet(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)
}
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 {
return "", err
}
......@@ -184,14 +188,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) {
_, _, vm, err := ss.getVmssVM(name)
managedByAS, err := ss.isNodeManagedByAvailabilitySet(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)
}
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 {
return "", err
}
......@@ -204,14 +212,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) {
_, _, vm, err := ss.getVmssVM(name)
managedByAS, err := ss.isNodeManagedByAvailabilitySet(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)
}
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 {
return cloudprovider.Zone{}, err
}
......@@ -404,15 +416,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) {
ssName, instanceID, vm, err := ss.getVmssVM(nodeName)
managedByAS, err := ss.isNodeManagedByAvailabilitySet(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("Failed to check isNodeManagedByAvailabilitySet: %v", err)
return network.Interface{}, err
}
if managedByAS {
// vm is managed by availability set.
return ss.availabilitySet.GetPrimaryInterface(nodeName, "")
}
glog.Errorf("error: ss.GetPrimaryInterface(%s), ss.getCachedVirtualMachine(%s), err=%v", nodeName, nodeName, err)
ssName, instanceID, vm, err := ss.getVmssVM(nodeName)
if err != nil {
glog.Errorf("error: ss.GetPrimaryInterface(%s), ss.getVmssVM(%s), err=%v", nodeName, nodeName, err)
return network.Interface{}, err
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment