Skip to content

Commit 15ab39e

Browse files
authored
Merge pull request kubernetes#1769 from feiskyer/cleanup-get-instance-id
Cluster Autoscaler: Cleanup GetInstanceID() interface
2 parents 387818a + 75ea002 commit 15ab39e

19 files changed

+108
-79
lines changed

Diff for: cluster-autoscaler/cloudprovider/alicloud/alicloud_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,6 @@ func (ali *aliCloudProvider) Cleanup() error {
140140
return nil
141141
}
142142

143-
// GetInstanceID gets the instance ID for the specified node.
144-
func (ali *aliCloudProvider) GetInstanceID(node *apiv1.Node) string {
145-
return node.Spec.ProviderID
146-
}
147-
148143
// AliRef contains a reference to ECS instance or .
149144
type AliRef struct {
150145
ID string

Diff for: cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,6 @@ func (aws *awsCloudProvider) Refresh() error {
127127
return aws.awsManager.Refresh()
128128
}
129129

130-
// GetInstanceID gets the instance ID for the specified node.
131-
func (aws *awsCloudProvider) GetInstanceID(node *apiv1.Node) string {
132-
return node.Spec.ProviderID
133-
}
134-
135130
// AwsRef contains a reference to some entity in AWS world.
136131
type AwsRef struct {
137132
Name string

Diff for: cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,11 @@ func (as *AgentPool) GetVMIndexes() ([]int, map[int]string, error) {
133133
}
134134

135135
indexes = append(indexes, index)
136-
indexToVM[index] = "azure://" + strings.ToLower(*instance.ID)
136+
resourceID, err := convertResourceGroupNameToLower("azure://" + *instance.ID)
137+
if err != nil {
138+
return nil, nil, err
139+
}
140+
indexToVM[index] = resourceID
137141
}
138142

139143
sortedIndexes := sort.IntSlice(indexes)
@@ -398,9 +402,13 @@ func (as *AgentPool) Nodes() ([]cloudprovider.Instance, error) {
398402
continue
399403
}
400404

401-
// To keep consistent with providerID from kubernetes cloud provider, do not convert ID to lower case.
402-
name := "azure://" + strings.ToLower(*instance.ID)
403-
nodes = append(nodes, cloudprovider.Instance{Id: name})
405+
// To keep consistent with providerID from kubernetes cloud provider, convert
406+
// resourceGroupName in the ID to lower case.
407+
resourceID, err := convertResourceGroupNameToLower("azure://" + *instance.ID)
408+
if err != nil {
409+
return nil, err
410+
}
411+
nodes = append(nodes, cloudprovider.Instance{Id: resourceID})
404412
}
405413

406414
return nodes, nil

Diff for: cluster-autoscaler/cloudprovider/azure/azure_cache.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,11 @@ func (m *asgCache) FindForInstance(instance *azureRef, vmType string) (cloudprov
118118
m.mutex.Lock()
119119
defer m.mutex.Unlock()
120120

121-
inst := azureRef{Name: strings.ToLower(instance.Name)}
121+
resourceID, err := convertResourceGroupNameToLower(instance.Name)
122+
if err != nil {
123+
return nil, err
124+
}
125+
inst := azureRef{Name: resourceID}
122126
if m.notInRegisteredAsg[inst] {
123127
// We already know we don't own this instance. Return early and avoid
124128
// additional calls.

Diff for: cluster-autoscaler/cloudprovider/azure/azure_cloud_provider.go

-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package azure
1919
import (
2020
"io"
2121
"os"
22-
"strings"
2322

2423
"k8s.io/klog"
2524

@@ -111,11 +110,6 @@ func (azure *AzureCloudProvider) Refresh() error {
111110
return azure.azureManager.Refresh()
112111
}
113112

114-
// GetInstanceID gets the instance ID for the specified node.
115-
func (azure *AzureCloudProvider) GetInstanceID(node *apiv1.Node) string {
116-
return strings.ToLower(node.Spec.ProviderID)
117-
}
118-
119113
// azureRef contains a reference to some entity in Azure world.
120114
type azureRef struct {
121115
Name string

Diff for: cluster-autoscaler/cloudprovider/azure/azure_container_service_pool.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ func (agentPool *ContainerServiceAgentPool) SetNodeCount(count int) (err error)
270270
func (agentPool *ContainerServiceAgentPool) GetProviderID(name string) string {
271271
//TODO: come with a generic way to make it work with provider id formats
272272
// in different version of k8s.
273-
return "azure://" + strings.ToLower(name)
273+
return "azure://" + name
274274
}
275275

276276
//GetName extracts the name of the node (a format which underlying cloud service understands)
@@ -419,7 +419,13 @@ func (agentPool *ContainerServiceAgentPool) GetNodes() ([]string, error) {
419419
for _, node := range vmList {
420420
klog.V(5).Infof("Node Name: %s, ID: %s", *node.Name, *node.ID)
421421
if agentPool.IsContainerServiceNode(node.Tags) {
422-
providerID := agentPool.GetProviderID(*node.ID)
422+
providerID, err := convertResourceGroupNameToLower(agentPool.GetProviderID(*node.ID))
423+
if err != nil {
424+
// This shouldn't happen. Log a waring message for tracking.
425+
klog.Warningf("GetNodes.convertResourceGroupNameToLower failed with error: %v", err)
426+
continue
427+
}
428+
423429
klog.V(5).Infof("Returning back the providerID: %s", providerID)
424430
nodeArray = append(nodeArray, providerID)
425431
}

Diff for: cluster-autoscaler/cloudprovider/azure/azure_fakes.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
)
3131

3232
const (
33-
fakeVirtualMachineScaleSetVMID = "/subscriptions/test-subscription-id/resourcegroups/test-asg/providers/microsoft.compute/virtualmachinescalesets/agents/virtualmachines/0"
33+
fakeVirtualMachineScaleSetVMID = "/subscriptions/test-subscription-id/resourceGroups/test-asg/providers/Microsoft.Compute/virtualMachineScaleSets/agents/virtualMachines/0"
3434
)
3535

3636
// VirtualMachineScaleSetsClientMock mocks for VirtualMachineScaleSetsClient.

Diff for: cluster-autoscaler/cloudprovider/azure/azure_scale_set.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,14 @@ func (scaleSet *ScaleSet) GetScaleSetVms() ([]string, error) {
211211
continue
212212
}
213213

214-
allVMs = append(allVMs, *vm.ID)
214+
resourceID, err := convertResourceGroupNameToLower(*vm.ID)
215+
if err != nil {
216+
// This shouldn't happen. Log a waring message for tracking.
217+
klog.Warningf("GetScaleSetVms.convertResourceGroupNameToLower failed with error: %v", err)
218+
continue
219+
}
220+
221+
allVMs = append(allVMs, resourceID)
215222
}
216223

217224
return allVMs, nil
@@ -456,7 +463,7 @@ func (scaleSet *ScaleSet) Nodes() ([]cloudprovider.Instance, error) {
456463

457464
instances := make([]cloudprovider.Instance, 0, len(vms))
458465
for i := range vms {
459-
name := "azure://" + strings.ToLower(vms[i])
466+
name := "azure://" + vms[i]
460467
instances = append(instances, cloudprovider.Instance{Id: name})
461468
}
462469

Diff for: cluster-autoscaler/cloudprovider/azure/azure_util.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,10 @@ const (
7878
)
7979

8080
var (
81-
vmnameLinuxRegexp = regexp.MustCompile(k8sLinuxVMNamingFormat)
82-
vmnameWindowsRegexp = regexp.MustCompile(k8sWindowsVMNamingFormat)
83-
oldvmnameWindowsRegexp = regexp.MustCompile(k8sWindowsOldVMNamingFormat)
81+
vmnameLinuxRegexp = regexp.MustCompile(k8sLinuxVMNamingFormat)
82+
vmnameWindowsRegexp = regexp.MustCompile(k8sWindowsVMNamingFormat)
83+
oldvmnameWindowsRegexp = regexp.MustCompile(k8sWindowsOldVMNamingFormat)
84+
azureResourceGroupNameRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(.+)/providers/(?:.*)`)
8485
)
8586

8687
//AzUtil consists of utility functions which utilizes clients to different services.
@@ -628,3 +629,14 @@ func isSuccessHTTPResponse(resp *http.Response, err error) (isSuccess bool, real
628629
// This shouldn't happen, it only ensures all exceptions are handled.
629630
return false, fmt.Errorf("failed with unknown error")
630631
}
632+
633+
// convertResourceGroupNameToLower converts the resource group name in the resource ID to be lowered.
634+
func convertResourceGroupNameToLower(resourceID string) (string, error) {
635+
matches := azureResourceGroupNameRE.FindStringSubmatch(resourceID)
636+
if len(matches) != 2 {
637+
return "", fmt.Errorf("%q isn't in Azure resource ID format", resourceID)
638+
}
639+
640+
resourceGroup := matches[1]
641+
return strings.Replace(resourceID, resourceGroup, strings.ToLower(resourceGroup), 1), nil
642+
}

Diff for: cluster-autoscaler/cloudprovider/azure/azure_util_test.go

+55
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,58 @@ func TestIsSuccessResponse(t *testing.T) {
189189
assert.Equal(t, test.expectedError, realError, "[%s] expected: %v, saw: %v", test.name, realError, test.expectedError)
190190
}
191191
}
192+
func TestConvertResourceGroupNameToLower(t *testing.T) {
193+
tests := []struct {
194+
desc string
195+
resourceID string
196+
expected string
197+
expectError bool
198+
}{
199+
{
200+
desc: "empty string should report error",
201+
resourceID: "",
202+
expectError: true,
203+
},
204+
{
205+
desc: "resourceID not in Azure format should report error",
206+
resourceID: "invalid-id",
207+
expectError: true,
208+
},
209+
{
210+
desc: "providerID not in Azure format should report error",
211+
resourceID: "azure://invalid-id",
212+
expectError: true,
213+
},
214+
{
215+
desc: "resource group name in VM providerID should be converted",
216+
resourceID: "azure:///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0",
217+
expected: "azure:///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresourcegroupname/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0",
218+
},
219+
{
220+
desc: "resource group name in VM resourceID should be converted",
221+
resourceID: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0",
222+
expected: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresourcegroupname/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0",
223+
},
224+
{
225+
desc: "resource group name in VMSS providerID should be converted",
226+
resourceID: "azure:///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetName/virtualMachines/156",
227+
expected: "azure:///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresourcegroupname/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetName/virtualMachines/156",
228+
},
229+
{
230+
desc: "resource group name in VMSS resourceID should be converted",
231+
resourceID: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetName/virtualMachines/156",
232+
expected: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myresourcegroupname/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetName/virtualMachines/156",
233+
},
234+
}
235+
236+
for _, test := range tests {
237+
real, err := convertResourceGroupNameToLower(test.resourceID)
238+
if test.expectError {
239+
assert.NotNil(t, err, test.desc)
240+
continue
241+
}
242+
243+
assert.Nil(t, err, test.desc)
244+
assert.Equal(t, test.expected, real, test.desc)
245+
}
246+
}

Diff for: cluster-autoscaler/cloudprovider/baiducloud/baiducloud_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,6 @@ func (baiducloud *baiducloudCloudProvider) Refresh() error {
196196
return nil
197197
}
198198

199-
// GetInstanceID gets the instance ID for the specified node.
200-
func (baiducloud *baiducloudCloudProvider) GetInstanceID(node *apiv1.Node) string {
201-
return node.Spec.ProviderID
202-
}
203-
204199
// BaiducloudRef contains a reference to some entity in baiducloud world.
205200
type BaiducloudRef struct {
206201
Name string

Diff for: cluster-autoscaler/cloudprovider/cloud_provider.go

-3
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ type CloudProvider interface {
5656
// GetResourceLimiter returns struct containing limits (max, min) for resources (cores, memory etc.).
5757
GetResourceLimiter() (*ResourceLimiter, error)
5858

59-
// GetInstanceID gets the instance ID for the specified node.
60-
GetInstanceID(node *apiv1.Node) string
61-
6259
// Cleanup cleans up open resources before the cloud provider is destroyed, i.e. go routines etc.
6360
Cleanup() error
6461

Diff for: cluster-autoscaler/cloudprovider/gce/gce_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,6 @@ func (gce *GceCloudProvider) Refresh() error {
114114
return gce.gceManager.Refresh()
115115
}
116116

117-
// GetInstanceID gets the instance ID for the specified node.
118-
func (gce *GceCloudProvider) GetInstanceID(node *apiv1.Node) string {
119-
return node.Spec.ProviderID
120-
}
121-
122117
// GceRef contains s reference to some entity in GCE world.
123118
type GceRef struct {
124119
Project string

Diff for: cluster-autoscaler/cloudprovider/gke/gke_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,6 @@ func (gke *GkeCloudProvider) GetNodeLocations() []string {
213213
return gke.gkeManager.GetNodeLocations()
214214
}
215215

216-
// GetInstanceID gets the instance ID for the specified node.
217-
func (gke *GkeCloudProvider) GetInstanceID(node *apiv1.Node) string {
218-
return node.Spec.ProviderID
219-
}
220-
221216
// MigSpec contains information about what machines in a MIG look like.
222217
type MigSpec struct {
223218
MachineType string

Diff for: cluster-autoscaler/cloudprovider/kubemark/kubemark_linux.go

-5
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,6 @@ func (kubemark *KubemarkCloudProvider) Refresh() error {
135135
return nil
136136
}
137137

138-
// GetInstanceID gets the instance ID for the specified node.
139-
func (kubemark *KubemarkCloudProvider) GetInstanceID(node *apiv1.Node) string {
140-
return node.Spec.ProviderID
141-
}
142-
143138
// Cleanup cleans up all resources before the cloud provider is removed
144139
func (kubemark *KubemarkCloudProvider) Cleanup() error {
145140
return nil

Diff for: cluster-autoscaler/cloudprovider/kubemark/kubemark_other.go

-5
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ func (kubemark *KubemarkCloudProvider) Refresh() error {
8585
return cloudprovider.ErrNotImplemented
8686
}
8787

88-
// GetInstanceID gets the instance ID for the specified node.
89-
func (kubemark *KubemarkCloudProvider) GetInstanceID(node *apiv1.Node) string {
90-
return ""
91-
}
92-
9388
// Cleanup cleans up all resources before the cloud provider is removed
9489
func (kubemark *KubemarkCloudProvider) Cleanup() error {
9590
return cloudprovider.ErrNotImplemented

Diff for: cluster-autoscaler/cloudprovider/mocks/CloudProvider.go

-14
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,3 @@ func (_m *CloudProvider) Refresh() error {
201201

202202
return r0
203203
}
204-
205-
// GetInstanceID gets the instance ID for the specified node.
206-
func (_m *CloudProvider) GetInstanceID(node *v1.Node) string {
207-
ret := _m.Called()
208-
209-
var r0 string
210-
if rf, ok := ret.Get(0).(func() string); ok {
211-
r0 = rf()
212-
} else {
213-
r0 = ret.Get(0).(string)
214-
}
215-
216-
return r0
217-
}

Diff for: cluster-autoscaler/cloudprovider/test/test_cloud_provider.go

-5
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,6 @@ func (tcp *TestCloudProvider) Refresh() error {
224224
return nil
225225
}
226226

227-
// GetInstanceID gets the instance ID for the specified node.
228-
func (tcp *TestCloudProvider) GetInstanceID(node *apiv1.Node) string {
229-
return node.Spec.ProviderID
230-
}
231-
232227
// TestNodeGroup is a node group used by TestCloudProvider.
233228
type TestNodeGroup struct {
234229
sync.Mutex

Diff for: cluster-autoscaler/clusterstate/clusterstate.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ func (csr *ClusterStateRegistry) UpdateNodes(nodes []*apiv1.Node, nodeInfosForGr
281281
if err != nil {
282282
return err
283283
}
284-
notRegistered := getNotRegisteredNodes(csr.cloudProvider, nodes, cloudProviderNodeInstances, currentTime)
284+
notRegistered := getNotRegisteredNodes(nodes, cloudProviderNodeInstances, currentTime)
285285

286286
csr.Lock()
287287
defer csr.Unlock()
@@ -932,10 +932,10 @@ func getCloudProviderNodeInstances(cloudProvider cloudprovider.CloudProvider) (m
932932
}
933933

934934
// Calculates which of the existing cloud provider nodes are not registered in Kubernetes.
935-
func getNotRegisteredNodes(cloudProvider cloudprovider.CloudProvider, allNodes []*apiv1.Node, cloudProviderNodeInstances map[string][]cloudprovider.Instance, time time.Time) []UnregisteredNode {
935+
func getNotRegisteredNodes(allNodes []*apiv1.Node, cloudProviderNodeInstances map[string][]cloudprovider.Instance, time time.Time) []UnregisteredNode {
936936
registered := sets.NewString()
937937
for _, node := range allNodes {
938-
registered.Insert(cloudProvider.GetInstanceID(node))
938+
registered.Insert(node.Spec.ProviderID)
939939
}
940940
notRegistered := make([]UnregisteredNode, 0)
941941
for _, instances := range cloudProviderNodeInstances {

0 commit comments

Comments
 (0)