Skip to content

Commit

Permalink
Merge pull request #2671 from zmyzheng/vmssflex-ipconfig-fix
Browse files Browse the repository at this point in the history
VMSS Flex: GetNodeNameByIPConfigurationID should use InterfacesClient to query vmName
  • Loading branch information
k8s-ci-robot committed Nov 2, 2022
2 parents 4dea2db + c2c35e3 commit ba8cbaa
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 16 deletions.
18 changes: 17 additions & 1 deletion pkg/provider/azure_vmssflex.go
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,23 @@ func (fs *FlexScaleSet) getNodeInformationByIPConfigurationID(ipConfigurationID
return "", "", "", fmt.Errorf("invalid ip config ID %s", ipConfigurationID)
}

vmName := strings.Replace(nicName, "-nic", "", 1)
// get vmName by nic name
ctx, cancel := getContextWithCancel()
defer cancel()
nic, rerr := fs.InterfacesClient.Get(ctx, nicResourceGroup, nicName, "")
if rerr != nil {
return "", "", "", fmt.Errorf("getNodeInformationByIPConfigurationID(%s): failed to get interface of name %s: %w", ipConfigurationID, nicName, rerr.Error())
}
if nic.InterfacePropertiesFormat == nil || nic.InterfacePropertiesFormat.VirtualMachine == nil || nic.InterfacePropertiesFormat.VirtualMachine.ID == nil {
return "", "", "", fmt.Errorf("failed to get vm ID of ip config ID %s", ipConfigurationID)
}
vmID := to.String(nic.InterfacePropertiesFormat.VirtualMachine.ID)
matches = vmIDRE.FindStringSubmatch(vmID)
if len(matches) != 2 {
return "", "", "", fmt.Errorf("invalid virtual machine ID %s", vmID)
}
vmName := matches[1]

nodeName, err := fs.getNodeNameByVMName(vmName)
if err != nil {
return "", "", "", fmt.Errorf("failed to map VM Name to NodeName: VM Name %s", vmName)
Expand Down
39 changes: 24 additions & 15 deletions pkg/provider/azure_vmssflex_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ var (
},
}

testNic1 = generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded)
testNic1 = generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1")

testNic2 = generateTestNic("testvm2-nic", true, network.ProvisioningStateSucceeded)
testNic2 = generateTestNic("testvm2-nic", true, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm2")
)

func generateTestNic(nicName string, isIPConfigurationsNil bool, provisioningState network.ProvisioningState) network.Interface {
func generateTestNic(nicName string, isIPConfigurationsNil bool, provisioningState network.ProvisioningState, vmID string) network.Interface {
result := network.Interface{
ID: to.StringPtr("/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Network/networkInterfaces/" + nicName),
Name: to.StringPtr(nicName),
Expand All @@ -96,6 +96,9 @@ func generateTestNic(nicName string, isIPConfigurationsNil bool, provisioningSta
},
},
ProvisioningState: provisioningState,
VirtualMachine: &network.SubResource{
ID: to.StringPtr(vmID),
},
},
}
if isIPConfigurationsNil {
Expand Down Expand Up @@ -771,6 +774,7 @@ func TestGetNodeNameByIPConfigurationIDVmssFlex(t *testing.T) {
testVMListWithoutInstanceView []compute.VirtualMachine
testVMListWithOnlyInstanceView []compute.VirtualMachine
vmListErr error
nic network.Interface
expectedNodeName string
expectedVMSetName string
expectedErr error
Expand All @@ -781,6 +785,7 @@ func TestGetNodeNameByIPConfigurationIDVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
expectedNodeName: "vmssflex1000001",
expectedVMSetName: "vmssflex1",
expectedErr: nil,
Expand All @@ -791,6 +796,7 @@ func TestGetNodeNameByIPConfigurationIDVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, fmt.Sprintf("/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/%s", nonExistingNodeName)),
expectedNodeName: "",
expectedVMSetName: "",
expectedErr: fmt.Errorf("failed to map VM Name to NodeName: VM Name NonExistingNodeName"),
Expand Down Expand Up @@ -818,6 +824,9 @@ func TestGetNodeNameByIPConfigurationIDVmssFlex(t *testing.T) {
mockVMClient.EXPECT().ListVmssFlexVMsWithoutInstanceView(gomock.Any(), gomock.Any()).Return(tc.testVMListWithoutInstanceView, tc.vmListErr).AnyTimes()
mockVMClient.EXPECT().ListVmssFlexVMsWithOnlyInstanceView(gomock.Any(), gomock.Any()).Return(tc.testVMListWithOnlyInstanceView, tc.vmListErr).AnyTimes()

mockInterfacesClient := fs.InterfacesClient.(*mockinterfaceclient.MockInterface)
mockInterfacesClient.EXPECT().Get(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(tc.nic, nil).AnyTimes()

nodeName, vmSetName, err := fs.GetNodeNameByIPConfigurationID(tc.ipConfigurationID)
assert.Equal(t, tc.expectedNodeName, nodeName)
assert.Equal(t, tc.expectedVMSetName, vmSetName)
Expand Down Expand Up @@ -1030,7 +1039,7 @@ func TestEnsureHostInPoolVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedNodeResourceGroup: "rg",
expectedVMSetName: "vmssflex1",
Expand Down Expand Up @@ -1084,7 +1093,7 @@ func TestEnsureHostInPoolVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
nicPutErr: &retry.Error{RawError: fmt.Errorf("failed to update nic")},
expectedNodeResourceGroup: "",
Expand All @@ -1103,7 +1112,7 @@ func TestEnsureHostInPoolVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateFailed),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateFailed, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
nicPutErr: nil,
expectedNodeResourceGroup: "",
Expand Down Expand Up @@ -1700,7 +1709,7 @@ func TestEnsureBackendPoolDeletedFromNodeVmssFlex(t *testing.T) {
"vmssflex1000001": "testvm1-nic",
},
backendPoolID: "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Network/loadBalancers/lb/backendAddressPools/backendpool-0",
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1710,7 +1719,7 @@ func TestEnsureBackendPoolDeletedFromNodeVmssFlex(t *testing.T) {
"vmssflex1000001": "testvm1-nic",
},
backendPoolID: "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Network/loadBalancers/lb/backendAddressPools/backendpool-0",
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: &retry.Error{RawError: fmt.Errorf("failed to get nic")},
expectedErr: fmt.Errorf("ensureBackendPoolDeletedFromNode: failed to get interface of name testvm1-nic: Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: failed to get nic"),
},
Expand All @@ -1720,7 +1729,7 @@ func TestEnsureBackendPoolDeletedFromNodeVmssFlex(t *testing.T) {
"vmssflex1000001": "testvm1-nic",
},
backendPoolID: "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Network/loadBalancers/lb/backendAddressPools/backendpool-0",
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateFailed),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateFailed, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1730,7 +1739,7 @@ func TestEnsureBackendPoolDeletedFromNodeVmssFlex(t *testing.T) {
"vmssflex1000001": "testvm1-nic",
},
backendPoolID: "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Network/loadBalancers/lb/backendAddressPools/backendpool-0",
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
nicPutErr: &retry.Error{RawError: fmt.Errorf("failed to update nic")},
expectedErr: fmt.Errorf("Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: failed to update nic"),
Expand Down Expand Up @@ -1793,7 +1802,7 @@ func TestEnsureBackendPoolDeletedVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1809,7 +1818,7 @@ func TestEnsureBackendPoolDeletedVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1825,7 +1834,7 @@ func TestEnsureBackendPoolDeletedVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1841,7 +1850,7 @@ func TestEnsureBackendPoolDeletedVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
expectedErr: nil,
},
Expand All @@ -1857,7 +1866,7 @@ func TestEnsureBackendPoolDeletedVmssFlex(t *testing.T) {
testVMListWithoutInstanceView: testVMListWithoutInstanceView,
testVMListWithOnlyInstanceView: testVMListWithOnlyInstanceView,
vmListErr: nil,
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded),
nic: generateTestNic("testvm1-nic", false, network.ProvisioningStateSucceeded, "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/testvm1"),
nicGetErr: nil,
nicPutErr: &retry.Error{RawError: fmt.Errorf("failed to update nic")},
expectedErr: fmt.Errorf("Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: failed to update nic"),
Expand Down

0 comments on commit ba8cbaa

Please sign in to comment.