diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go index 3117b1c73654..11a3aca4e713 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go @@ -204,18 +204,26 @@ type AwsInstanceRef struct { Name string } -var validAwsRefIdRegex = regexp.MustCompile(fmt.Sprintf(`^aws\:\/\/\/[-0-9a-z]*\/[-0-9a-z]*(\/[-0-9a-z\.]*)?$|aws\:\/\/\/[-0-9a-z]*\/%s.*$`, placeholderInstanceNamePrefix)) +var validAwsRefIdRegex = regexp.MustCompile(fmt.Sprintf(`^aws\:\/\/\/[-0-9a-z]*\/(%s.*)$|aws\:\/\/\/[-0-9a-z]*\/([-0-9a-z]*)(\/[-0-9a-z\.]*)?$`, placeholderInstanceNamePrefix)) // AwsRefFromProviderId creates AwsInstanceRef object from provider id which // must be in format: aws:///zone/name func AwsRefFromProviderId(id string) (*AwsInstanceRef, error) { - if validAwsRefIdRegex.FindStringSubmatch(id) == nil { + matches := validAwsRefIdRegex.FindStringSubmatch(id) + if matches == nil || len(matches) != 4 { return nil, fmt.Errorf("wrong id: expected format aws:////, got %v", id) } - splitted := strings.Split(id[7:], "/") + + var name string + if strings.Contains(id, placeholderInstanceNamePrefix) { + name = matches[1] + } else { + name = matches[2] + } + return &AwsInstanceRef{ ProviderID: id, - Name: splitted[1], + Name: name, }, nil } diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index 1910f8752fd5..1f843d8af8be 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -306,6 +306,15 @@ func TestAwsRefFromProviderId(t *testing.T) { ProviderID: "aws:///eu-central-1c/i-placeholder-K3-EKS-spotr5xlasgsubnet02af43b02922e710f-10QH9H0C8PG7O-14", }, }, + { + // ref: https://github.com/kubernetes/autoscaler/issues/8305 + provID: "aws:///us-east-1a/i-placeholder-some/arbitrary/cluster/local", + expErr: false, + expRef: &AwsInstanceRef{ + Name: "i-placeholder-some/arbitrary/cluster/local", + ProviderID: "aws:///us-east-1a/i-placeholder-some/arbitrary/cluster/local", + }, + }, } for _, test := range tests {