Skip to content

Commit f01c140

Browse files
authored
Merge pull request kubernetes#77179 from feiskyer/vmss-reus
Reuse vmssIPConfigurationRE for getting the NIC's resource group
2 parents 2dc3509 + 1a6c283 commit f01c140

File tree

2 files changed

+49
-13
lines changed

2 files changed

+49
-13
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ var (
3939
// ErrorNotVmssInstance indicates an instance is not belongint to any vmss.
4040
ErrorNotVmssInstance = errors.New("not a vmss instance")
4141

42-
scaleSetNameRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/Microsoft.Compute/virtualMachineScaleSets/(.+)/virtualMachines(?:.*)`)
43-
resourceGroupRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/Microsoft.Compute/virtualMachineScaleSets/(?:.*)/virtualMachines(?:.*)`)
44-
vmssNicResourceGroupRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/Microsoft.Compute/virtualMachineScaleSets/(?:.*)/virtualMachines/(?:.*)/networkInterfaces/(?:.*)`)
45-
vmssMachineIDTemplate = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachineScaleSets/%s/virtualMachines/%s"
46-
vmssIPConfigurationRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/Microsoft.Compute/virtualMachineScaleSets/(.+)/virtualMachines/(.+)/networkInterfaces(?:.*)`)
42+
scaleSetNameRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/Microsoft.Compute/virtualMachineScaleSets/(.+)/virtualMachines(?:.*)`)
43+
resourceGroupRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/Microsoft.Compute/virtualMachineScaleSets/(?:.*)/virtualMachines(?:.*)`)
44+
vmssMachineIDTemplate = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachineScaleSets/%s/virtualMachines/%s"
45+
vmssIPConfigurationRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/Microsoft.Compute/virtualMachineScaleSets/(.+)/virtualMachines/(.+)/networkInterfaces(?:.*)`)
4746
)
4847

4948
// scaleSet implements VMSet interface for Azure scale set.
@@ -515,8 +514,8 @@ func (ss *scaleSet) GetVMSetNames(service *v1.Service, nodes []*v1.Node) (vmSetN
515514

516515
// extractResourceGroupByVMSSNicID extracts the resource group name by vmss nicID.
517516
func extractResourceGroupByVMSSNicID(nicID string) (string, error) {
518-
matches := vmssNicResourceGroupRE.FindStringSubmatch(nicID)
519-
if len(matches) != 2 {
517+
matches := vmssIPConfigurationRE.FindStringSubmatch(nicID)
518+
if len(matches) != 4 {
520519
return "", fmt.Errorf("error of extracting resourceGroup from nicID %q", nicID)
521520
}
522521

@@ -579,8 +578,8 @@ func (ss *scaleSet) GetPrimaryInterface(nodeName string) (network.Interface, err
579578
return nic, nil
580579
}
581580

582-
// getPrimarynetworkInterfaceConfiguration gets primary network interface configuration for scale set virtual machine.
583-
func (ss *scaleSet) getPrimarynetworkInterfaceConfiguration(networkConfigurations []compute.VirtualMachineScaleSetNetworkConfiguration, nodeName string) (*compute.VirtualMachineScaleSetNetworkConfiguration, error) {
581+
// getPrimaryNetworkInterfaceConfiguration gets primary network interface configuration for scale set virtual machine.
582+
func (ss *scaleSet) getPrimaryNetworkInterfaceConfiguration(networkConfigurations []compute.VirtualMachineScaleSetNetworkConfiguration, nodeName string) (*compute.VirtualMachineScaleSetNetworkConfiguration, error) {
584583
if len(networkConfigurations) == 1 {
585584
return &networkConfigurations[0], nil
586585
}
@@ -622,8 +621,7 @@ func (ss *scaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeNam
622621
}
623622

624623
// Check scale set name:
625-
// - For basic SKU load balancer, errNotInVMSet should be returned if the node's
626-
// scale set is mismatched with vmSetName.
624+
// - For basic SKU load balancer, return nil if the node's scale set is mismatched with vmSetName.
627625
// - For standard SKU load balancer, backend could belong to multiple VMSS, so we
628626
// don't check vmSet for it.
629627
if vmSetName != "" && !ss.useStandardLoadBalancer() && !strings.EqualFold(vmSetName, ssName) {
@@ -633,7 +631,7 @@ func (ss *scaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeNam
633631

634632
// Find primary network interface configuration.
635633
networkInterfaceConfigurations := *vm.NetworkProfileConfiguration.NetworkInterfaceConfigurations
636-
primaryNetworkInterfaceConfiguration, err := ss.getPrimarynetworkInterfaceConfiguration(networkInterfaceConfigurations, vmName)
634+
primaryNetworkInterfaceConfiguration, err := ss.getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, vmName)
637635
if err != nil {
638636
return err
639637
}
@@ -784,7 +782,7 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromNode(service *v1.Service, nodeNa
784782

785783
// Find primary network interface configuration.
786784
networkInterfaceConfigurations := *vm.NetworkProfileConfiguration.NetworkInterfaceConfigurations
787-
primaryNetworkInterfaceConfiguration, err := ss.getPrimarynetworkInterfaceConfiguration(networkInterfaceConfigurations, nodeName)
785+
primaryNetworkInterfaceConfiguration, err := ss.getPrimaryNetworkInterfaceConfiguration(networkInterfaceConfigurations, nodeName)
788786
if err != nil {
789787
return err
790788
}

staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,41 @@ func TestGetNodeNameByIPConfigurationID(t *testing.T) {
374374
assert.Equal(t, test.expected, nodeName, test.description)
375375
}
376376
}
377+
378+
func TestExtractResourceGroupByVMSSNicID(t *testing.T) {
379+
vmssNicIDTemplate := "/subscriptions/script/resourceGroups/%s/providers/Microsoft.Compute/virtualMachineScaleSets/%s/virtualMachines/%s/networkInterfaces/nic-0"
380+
381+
testCases := []struct {
382+
description string
383+
vmssNicID string
384+
expected string
385+
expectError bool
386+
}{
387+
{
388+
description: "extractResourceGroupByVMSSNicID should get resource group name for vmss nic ID",
389+
vmssNicID: fmt.Sprintf(vmssNicIDTemplate, "rg1", "vmss1", "0"),
390+
expected: "rg1",
391+
},
392+
{
393+
description: "extractResourceGroupByVMSSNicID should return error for VM nic ID",
394+
vmssNicID: "/subscriptions/script/resourceGroups/rg2/providers/Microsoft.Network/networkInterfaces/nic-0",
395+
expectError: true,
396+
},
397+
{
398+
description: "extractResourceGroupByVMSSNicID should return error for wrong vmss nic ID",
399+
vmssNicID: "wrong-nic-id",
400+
expectError: true,
401+
},
402+
}
403+
404+
for _, test := range testCases {
405+
resourceGroup, err := extractResourceGroupByVMSSNicID(test.vmssNicID)
406+
if test.expectError {
407+
assert.Error(t, err, test.description)
408+
continue
409+
}
410+
411+
assert.NoError(t, err, test.description)
412+
assert.Equal(t, test.expected, resourceGroup, test.description)
413+
}
414+
}

0 commit comments

Comments
 (0)