diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go index 32609f8ef7463..b735a1f49fd28 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go @@ -1034,6 +1034,11 @@ func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backend } func getAvailabilitySetNameByID(asID string) (string, error) { + // for standalone VM + if asID == "" { + return "", nil + } + matches := vmasIDRE.FindStringSubmatch(asID) if len(matches) != 2 { return "", fmt.Errorf("getAvailabilitySetNameByID: failed to parse the VMAS ID %s", asID) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go index 3f7642c584d21..f022c2345b836 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard_test.go @@ -1747,3 +1747,25 @@ func TestStandardGetNodeNameByIPConfigurationID(t *testing.T) { assert.Equal(t, "k8s-agentpool1-00000000-0", nodeName) assert.Equal(t, "agentpool1-availabilityset-00000000", asName) } + +func TestGetAvailabilitySetNameByID(t *testing.T) { + t.Run("getAvailabilitySetNameByID should return empty string if the given ID is empty", func(t *testing.T) { + vmasName, err := getAvailabilitySetNameByID("") + assert.Nil(t, err) + assert.Empty(t, vmasName) + }) + + t.Run("getAvailabilitySetNameByID should report an error if the format of the given ID is wrong", func(t *testing.T) { + asID := "illegal-id" + vmasName, err := getAvailabilitySetNameByID(asID) + assert.Equal(t, fmt.Errorf("getAvailabilitySetNameByID: failed to parse the VMAS ID illegal-id"), err) + assert.Empty(t, vmasName) + }) + + t.Run("getAvailabilitySetNameByID should extract the VMAS name from the given ID", func(t *testing.T) { + asID := "/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Compute/availabilitySets/as" + vmasName, err := getAvailabilitySetNameByID(asID) + assert.Nil(t, err) + assert.Equal(t, "as", vmasName) + }) +}