From bdce3fdeb7c2801b1096ab3ab1a750c2d5c40aaa Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Wed, 1 Apr 2020 08:19:39 +0000 Subject: [PATCH] Ensure Azure availability zone is always in lower cases --- .../azure/azure_standard.go | 4 ++-- .../azure/azure_vmss.go | 4 ++-- .../azure/azure_vmss_test.go | 21 ++++++++++++++++++- .../azure/azure_zones.go | 4 ++-- .../azure/azure_zones_test.go | 12 ++++++++++- 5 files changed, 37 insertions(+), 8 deletions(-) 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 f5d409bbea4..7b3341dc6db 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 @@ -490,8 +490,8 @@ func (as *availabilitySet) GetZoneByNodeName(name string) (cloudprovider.Zone, e } zone := cloudprovider.Zone{ - FailureDomain: failureDomain, - Region: to.String(vm.Location), + FailureDomain: strings.ToLower(failureDomain), + Region: strings.ToLower(to.String(vm.Location)), } return zone, nil } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go index 40962d97d69..d4e195a6827 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go @@ -380,8 +380,8 @@ func (ss *scaleSet) GetZoneByNodeName(name string) (cloudprovider.Zone, error) { } return cloudprovider.Zone{ - FailureDomain: failureDomain, - Region: to.String(vm.Location), + FailureDomain: strings.ToLower(failureDomain), + Region: strings.ToLower(to.String(vm.Location)), }, nil } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go index 6c3311fc43d..24c63d5596d 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss_test.go @@ -20,6 +20,7 @@ package azure import ( "fmt" + "strings" "testing" "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute" @@ -253,6 +254,7 @@ func TestGetZoneByNodeName(t *testing.T) { scaleSet string vmList []string nodeName string + location string zone string faultDomain int32 expected string @@ -275,6 +277,16 @@ func TestGetZoneByNodeName(t *testing.T) { faultDomain: 3, expected: "westus-2", }, + { + description: "scaleSet should get availability zone in lower cases", + scaleSet: "ss", + vmList: []string{"vmssee6c2000000", "vmssee6c2000001"}, + nodeName: "vmssee6c2000000", + location: "WestUS", + zone: "2", + faultDomain: 3, + expected: "westus-2", + }, { description: "scaleSet should return error for non-exist nodes", scaleSet: "ss", @@ -286,8 +298,14 @@ func TestGetZoneByNodeName(t *testing.T) { } for _, test := range testCases { - ss, err := newTestScaleSet(ctrl, test.scaleSet, test.zone, test.faultDomain, test.vmList) + cloud := GetTestCloud(ctrl) + if test.location != "" { + cloud.Location = test.location + } + setTestVirtualMachineCloud(cloud, test.scaleSet, test.zone, test.faultDomain, test.vmList, "Running") + scaleset, err := newScaleSet(cloud) assert.NoError(t, err, test.description) + ss := scaleset.(*scaleSet) real, err := ss.GetZoneByNodeName(test.nodeName) if test.expectError { @@ -297,6 +315,7 @@ func TestGetZoneByNodeName(t *testing.T) { assert.NoError(t, err, test.description) assert.Equal(t, test.expected, real.FailureDomain, test.description) + assert.Equal(t, strings.ToLower(cloud.Location), real.Region, test.description) } } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones.go index a4f9c30e619..c6a5e96a418 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones.go @@ -78,8 +78,8 @@ func (az *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) { } return cloudprovider.Zone{ - FailureDomain: zone, - Region: location, + FailureDomain: strings.ToLower(zone), + Region: strings.ToLower(location), }, nil } // if UseInstanceMetadata is false, get Zone name by calling ARM diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones_test.go index 04ebda118b0..fac4a33f22a 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_zones_test.go @@ -88,25 +88,35 @@ func TestGetZone(t *testing.T) { testcases := []struct { name string zone string + location string faultDomain string expected string }{ { name: "GetZone should get real zone if only node's zone is set", zone: "1", + location: "eastus", expected: "eastus-1", }, { name: "GetZone should get real zone if both node's zone and FD are set", zone: "1", + location: "eastus", faultDomain: "99", expected: "eastus-1", }, { name: "GetZone should get faultDomain if node's zone isn't set", + location: "eastus", faultDomain: "99", expected: "99", }, + { + name: "GetZone should get availability zone in lower cases", + location: "EastUS", + zone: "1", + expected: "eastus-1", + }, } for _, test := range testcases { @@ -117,7 +127,7 @@ func TestGetZone(t *testing.T) { mux := http.NewServeMux() mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, fmt.Sprintf(`{"compute":{"zone":"%s", "platformFaultDomain":"%s", "location":"eastus"}}`, test.zone, test.faultDomain)) + fmt.Fprint(w, fmt.Sprintf(`{"compute":{"zone":"%s", "platformFaultDomain":"%s", "location":"%s"}}`, test.zone, test.faultDomain, test.location)) })) go func() { http.Serve(listener, mux)