diff --git a/pkg/cloudprovider/providers/azure/BUILD b/pkg/cloudprovider/providers/azure/BUILD index 2fd8479284a..9587610ef8e 100644 --- a/pkg/cloudprovider/providers/azure/BUILD +++ b/pkg/cloudprovider/providers/azure/BUILD @@ -75,6 +75,7 @@ go_test( "azure_storage_test.go", "azure_storageaccount_test.go", "azure_test.go", + "azure_vmss_cache_test.go", "azure_vmss_test.go", "azure_wrap_test.go", ], diff --git a/pkg/cloudprovider/providers/azure/azure_vmss_cache.go b/pkg/cloudprovider/providers/azure/azure_vmss_cache.go index 47b0695f422..c6683f460db 100644 --- a/pkg/cloudprovider/providers/azure/azure_vmss_cache.go +++ b/pkg/cloudprovider/providers/azure/azure_vmss_cache.go @@ -27,6 +27,8 @@ import ( ) var ( + vmssNameSeparator = "_" + nodeNameToScaleSetMappingKey = "k8sNodeNameToScaleSetMappingKey" availabilitySetNodesKey = "k8sAvailabilitySetNodesKey" @@ -41,11 +43,11 @@ var ( type nodeNameToScaleSetMapping map[string]string func (ss *scaleSet) makeVmssVMName(scaleSetName, instanceID string) string { - return fmt.Sprintf("%s_%s", scaleSetName, instanceID) + return fmt.Sprintf("%s%s%s", scaleSetName, vmssNameSeparator, instanceID) } func (ss *scaleSet) extractVmssVMName(name string) (string, string, error) { - ret := strings.Split(name, "_") + ret := strings.Split(name, vmssNameSeparator) if len(ret) != 2 { glog.Errorf("Failed to extract vmssVMName %q", name) return "", "", ErrorNotVmssInstance @@ -88,7 +90,7 @@ func (ss *scaleSet) newNodeNameToScaleSetMappingCache() (*timedCache, error) { for _, vm := range vms { if vm.OsProfile == nil || vm.OsProfile.ComputerName == nil { - glog.Warningf("failed to get computerName for vmssVM (%q)", *vm.Name) + glog.Warningf("failed to get computerName for vmssVM (%q)", vm.Name) continue } diff --git a/pkg/cloudprovider/providers/azure/azure_vmss_cache_test.go b/pkg/cloudprovider/providers/azure/azure_vmss_cache_test.go new file mode 100644 index 00000000000..284a26d340d --- /dev/null +++ b/pkg/cloudprovider/providers/azure/azure_vmss_cache_test.go @@ -0,0 +1,62 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package azure + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestExtractVmssVMName(t *testing.T) { + ss := &scaleSet{} + cases := []struct { + description string + vmName string + expectError bool + expectedScaleSet string + expectedInstanceID string + }{ + { + description: "wrong vmss VM name should report error", + vmName: "vm1234", + expectError: true, + }, + { + description: "wrong VM name separator should report error", + vmName: "vm-1234", + expectError: true, + }, + { + description: "correct vmss VM name should return correct scaleSet and instanceID", + vmName: "vm_1234", + expectedScaleSet: "vm", + expectedInstanceID: "1234", + }, + } + + for _, c := range cases { + ssName, instanceID, err := ss.extractVmssVMName(c.vmName) + if c.expectError { + assert.Error(t, err, c.description) + continue + } + + assert.Equal(t, c.expectedScaleSet, ssName, c.description) + assert.Equal(t, c.expectedInstanceID, instanceID, c.description) + } +}