Parse TargetGrup names from ARNs

This commit is contained in:
Ciprian Hacman 2020-11-20 06:42:49 +02:00
parent 01a261cd35
commit fdcc2607bf
4 changed files with 25 additions and 5 deletions

View File

@ -21,6 +21,7 @@ go_library(
"//upup/pkg/fi:go_default_library", "//upup/pkg/fi:go_default_library",
"//upup/pkg/fi/cloudup/awstasks:go_default_library", "//upup/pkg/fi/cloudup/awstasks:go_default_library",
"//upup/pkg/fi/fitasks: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/github.com/aws/aws-sdk-go/service/ec2:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/k8s.io/klog/v2:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library",

View File

@ -18,8 +18,11 @@ package awsmodel
import ( import (
"fmt" "fmt"
"sort"
"strings" "strings"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/ec2"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/featureflag" "k8s.io/kops/pkg/featureflag"
@ -28,8 +31,6 @@ import (
"k8s.io/kops/pkg/model/spotinstmodel" "k8s.io/kops/pkg/model/spotinstmodel"
"k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks" "k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
"github.com/aws/aws-sdk-go/service/ec2"
) )
const ( 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 { if extLB.LoadBalancerName != nil {
lb := &awstasks.ClassicLoadBalancer{ lb := &awstasks.ClassicLoadBalancer{
Name: extLB.LoadBalancerName, Name: extLB.LoadBalancerName,
@ -400,8 +401,16 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil
} }
if extLB.TargetGroupARN != nil { 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{ tg := &awstasks.TargetGroup{
Name: fi.String(fmt.Sprintf("external-tg-%d", i)), Name: fi.String(resource[1]),
ARN: extLB.TargetGroupARN, ARN: extLB.TargetGroupARN,
Shared: fi.Bool(true), Shared: fi.Bool(true),
} }

View File

@ -90,6 +90,7 @@ go_library(
"//util/pkg/maps:go_default_library", "//util/pkg/maps:go_default_library",
"//util/pkg/slice: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: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/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/autoscaling:go_default_library",
"//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library",

View File

@ -23,6 +23,7 @@ import (
"strings" "strings"
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/autoscaling" "github.com/aws/aws-sdk-go/service/autoscaling"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi"
@ -163,7 +164,15 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) {
if len(g.TargetGroupARNs) > 0 { if len(g.TargetGroupARNs) > 0 {
actualTGs := make([]*TargetGroup, 0) actualTGs := make([]*TargetGroup, 0)
for _, tg := range g.TargetGroupARNs { 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) targetGroups, err := ReconcileTargetGroups(c.Cloud.(awsup.AWSCloud), actualTGs, e.TargetGroups)
if err != nil { if err != nil {