From fdcc2607bfafb8687d725d53086d82d1df7bafcd Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Fri, 20 Nov 2020 06:42:49 +0200 Subject: [PATCH] Parse TargetGrup names from ARNs --- pkg/model/awsmodel/BUILD.bazel | 1 + pkg/model/awsmodel/autoscalinggroup.go | 17 +++++++++++++---- upup/pkg/fi/cloudup/awstasks/BUILD.bazel | 1 + .../pkg/fi/cloudup/awstasks/autoscalinggroup.go | 11 ++++++++++- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pkg/model/awsmodel/BUILD.bazel b/pkg/model/awsmodel/BUILD.bazel index 23a314a7d8..98543d0dcb 100644 --- a/pkg/model/awsmodel/BUILD.bazel +++ b/pkg/model/awsmodel/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//upup/pkg/fi:go_default_library", "//upup/pkg/fi/cloudup/awstasks:go_default_library", "//upup/pkg/fi/fitasks:go_default_library", + "//vendor/github.com/aws/aws-sdk-go/aws/arn:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index ca4f20415f..91eb4695e8 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -18,8 +18,11 @@ package awsmodel import ( "fmt" + "sort" "strings" + "github.com/aws/aws-sdk-go/aws/arn" + "github.com/aws/aws-sdk-go/service/ec2" "k8s.io/klog/v2" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/featureflag" @@ -28,8 +31,6 @@ import ( "k8s.io/kops/pkg/model/spotinstmodel" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/awstasks" - - "github.com/aws/aws-sdk-go/service/ec2" ) const ( @@ -388,7 +389,7 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil } } - for i, extLB := range ig.Spec.ExternalLoadBalancers { + for _, extLB := range ig.Spec.ExternalLoadBalancers { if extLB.LoadBalancerName != nil { lb := &awstasks.ClassicLoadBalancer{ Name: extLB.LoadBalancerName, @@ -400,8 +401,16 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil } if extLB.TargetGroupARN != nil { + parsed, err := arn.Parse(fi.StringValue(extLB.TargetGroupARN)) + if err != nil { + return nil, fmt.Errorf("error parsing target grup ARN: %v", err) + } + resource := strings.Split(parsed.Resource, "/") + if len(resource) != 3 || resource[0] != "targetgroup" { + return nil, fmt.Errorf("error parsing target grup ARN resource: %q", parsed.Resource) + } tg := &awstasks.TargetGroup{ - Name: fi.String(fmt.Sprintf("external-tg-%d", i)), + Name: fi.String(resource[1]), ARN: extLB.TargetGroupARN, Shared: fi.Bool(true), } diff --git a/upup/pkg/fi/cloudup/awstasks/BUILD.bazel b/upup/pkg/fi/cloudup/awstasks/BUILD.bazel index 076ebbe231..ae1172b9f3 100644 --- a/upup/pkg/fi/cloudup/awstasks/BUILD.bazel +++ b/upup/pkg/fi/cloudup/awstasks/BUILD.bazel @@ -90,6 +90,7 @@ go_library( "//util/pkg/maps:go_default_library", "//util/pkg/slice:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", + "//vendor/github.com/aws/aws-sdk-go/aws/arn:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/autoscaling:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library", diff --git a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go index fd3d156b9b..adf8f37033 100644 --- a/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go +++ b/upup/pkg/fi/cloudup/awstasks/autoscalinggroup.go @@ -23,6 +23,7 @@ import ( "strings" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/service/autoscaling" "k8s.io/klog/v2" "k8s.io/kops/upup/pkg/fi" @@ -163,7 +164,15 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) { if len(g.TargetGroupARNs) > 0 { actualTGs := make([]*TargetGroup, 0) for _, tg := range g.TargetGroupARNs { - actualTGs = append(actualTGs, &TargetGroup{ARN: aws.String(*tg)}) + parsed, err := arn.Parse(fi.StringValue(tg)) + if err != nil { + return nil, fmt.Errorf("error parsing target grup ARN: %v", err) + } + resource := strings.Split(parsed.Resource, "/") + if len(resource) != 3 || resource[0] != "targetgroup" { + return nil, fmt.Errorf("error parsing target grup ARN resource: %q", parsed.Resource) + } + actualTGs = append(actualTGs, &TargetGroup{ARN: aws.String(*tg), Name: aws.String(resource[1])}) } targetGroups, err := ReconcileTargetGroups(c.Cloud.(awsup.AWSCloud), actualTGs, e.TargetGroups) if err != nil {