Skip to content

Commit 55f9a02

Browse files
committed
tag aws resources with v2 style tags to enable migration to v2
1 parent 4bba2f2 commit 55f9a02

File tree

6 files changed

+90
-17
lines changed

6 files changed

+90
-17
lines changed

internal/alb/generator/tag.go

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package generator
22

33
import (
4+
"fmt"
5+
46
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/alb/lb"
57
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/alb/sg"
68
"github.com/kubernetes-sigs/aws-alb-ingress-controller/internal/alb/tg"
@@ -15,6 +17,16 @@ const (
1517
TagKeyServicePort = "kubernetes.io/service-port"
1618
)
1719

20+
// Additional Tags used to be forward-compatible with V2 version.
21+
const (
22+
V2TagKeyClusterID = "ingress.k8s.aws/cluster"
23+
V2TagKeyStackID = "ingress.k8s.aws/stack"
24+
V2TagKeyResourceID = "ingress.k8s.aws/resource"
25+
26+
V2ResourceIDLoadBalancer = "LoadBalancer"
27+
V2ResourceIDManagedLBSecurityGroup = "ManagedLBSecurityGroup"
28+
)
29+
1830
var _ tg.TagGenerator = (*TagGenerator)(nil)
1931
var _ lb.TagGenerator = (*TagGenerator)(nil)
2032
var _ sg.TagGenerator = (*TagGenerator)(nil)
@@ -25,22 +37,29 @@ type TagGenerator struct {
2537
}
2638

2739
func (gen *TagGenerator) TagLB(namespace string, ingressName string) map[string]string {
28-
return gen.tagIngressResources(namespace, ingressName)
40+
resTags := gen.tagIngressResources(namespace, ingressName)
41+
resTags[V2TagKeyResourceID] = V2ResourceIDLoadBalancer
42+
return resTags
2943
}
3044

3145
func (gen *TagGenerator) TagTGGroup(namespace string, ingressName string) map[string]string {
3246
return gen.tagIngressResources(namespace, ingressName)
3347
}
3448

35-
func (gen *TagGenerator) TagTG(serviceName string, servicePort string) map[string]string {
36-
return map[string]string{
49+
func (gen *TagGenerator) TagTG(namespace string, ingressName string, serviceName string, servicePort string) map[string]string {
50+
resTags := map[string]string{
3751
TagKeyServiceName: serviceName,
3852
TagKeyServicePort: servicePort,
3953
}
54+
resID := gen.buildV2TargetGroupID(namespace, ingressName, serviceName, servicePort)
55+
resTags[V2TagKeyResourceID] = resID
56+
return resTags
4057
}
4158

4259
func (gen *TagGenerator) TagLBSG(namespace string, ingressName string) map[string]string {
43-
return gen.tagSGs(namespace, ingressName)
60+
resTags := gen.tagSGs(namespace, ingressName)
61+
resTags[V2TagKeyResourceID] = V2ResourceIDManagedLBSecurityGroup
62+
return resTags
4463
}
4564

4665
func (gen *TagGenerator) TagInstanceSG(namespace string, ingressName string) map[string]string {
@@ -55,6 +74,11 @@ func (gen *TagGenerator) tagIngressResources(namespace string, ingressName strin
5574
m["kubernetes.io/cluster/"+gen.ClusterName] = "owned"
5675
m[TagKeyNamespace] = namespace
5776
m[TagKeyIngressName] = ingressName
77+
78+
v2Tags := gen.tagIngressResourcesV2(namespace, ingressName)
79+
for label, value := range v2Tags {
80+
m[label] = value
81+
}
5882
return m
5983
}
6084

@@ -76,5 +100,29 @@ func (gen *TagGenerator) tagSGs(namespace string, ingressName string) map[string
76100

77101
m[TagKeyNamespace] = namespace
78102
m[TagKeyIngressName] = ingressName
103+
104+
v2Tags := gen.tagIngressResourcesV2(namespace, ingressName)
105+
for label, value := range v2Tags {
106+
m[label] = value
107+
}
108+
79109
return m
80110
}
111+
112+
func (gen *TagGenerator) tagIngressResourcesV2(namespace string, ingressName string) map[string]string {
113+
m := make(map[string]string)
114+
stackID := gen.buildV2StackID(namespace, ingressName)
115+
m[V2TagKeyClusterID] = gen.ClusterName
116+
m[V2TagKeyStackID] = stackID
117+
return m
118+
}
119+
120+
// buildV2StackID returns the stack ID that compatible with V2 version.
121+
func (gen *TagGenerator) buildV2StackID(namespace string, ingressName string) string {
122+
return fmt.Sprintf("%s/%s", namespace, ingressName)
123+
}
124+
125+
// buildV2TargetGroupID returns the targetGroup ResourceID that compatible with V2 version.
126+
func (gen *TagGenerator) buildV2TargetGroupID(namespace string, ingressName string, serviceName string, servicePort string) string {
127+
return fmt.Sprintf("%s/%s-%s:%s", namespace, ingressName, serviceName, servicePort)
128+
}

internal/alb/generator/tag_test.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"github.com/stretchr/testify/assert"
77
)
88

9-
func Test_TagIngress(t *testing.T) {
9+
func Test_TagLB(t *testing.T) {
1010
gen := TagGenerator{
1111
ClusterName: "cluster",
1212
DefaultTags: map[string]string{
@@ -17,17 +17,42 @@ func Test_TagIngress(t *testing.T) {
1717
"kubernetes.io/cluster/cluster": "owned",
1818
TagKeyIngressName: "ingress",
1919
TagKeyNamespace: "namespace",
20-
"key": "value",
20+
21+
"ingress.k8s.aws/cluster": "cluster",
22+
"ingress.k8s.aws/stack": "namespace/ingress",
23+
"ingress.k8s.aws/resource": "LoadBalancer",
24+
"key": "value",
2125
}
26+
2227
assert.Equal(t, gen.TagLB("namespace", "ingress"), expected)
28+
}
29+
30+
func Test_TagTGGroup(t *testing.T) {
31+
gen := TagGenerator{
32+
ClusterName: "cluster",
33+
DefaultTags: map[string]string{
34+
"key": "value",
35+
},
36+
}
37+
expected := map[string]string{
38+
"kubernetes.io/cluster/cluster": "owned",
39+
TagKeyIngressName: "ingress",
40+
TagKeyNamespace: "namespace",
41+
42+
"ingress.k8s.aws/cluster": "cluster",
43+
"ingress.k8s.aws/stack": "namespace/ingress",
44+
"key": "value",
45+
}
46+
2347
assert.Equal(t, gen.TagTGGroup("namespace", "ingress"), expected)
2448
}
2549

2650
func Test_TagTG(t *testing.T) {
2751
gen := TagGenerator{}
2852
expected := map[string]string{
29-
TagKeyServiceName: "service",
30-
TagKeyServicePort: "port",
53+
TagKeyServiceName: "service",
54+
TagKeyServicePort: "port",
55+
"ingress.k8s.aws/resource": "namespace/ingress-service:port",
3156
}
32-
assert.Equal(t, gen.TagTG("service", "port"), expected)
57+
assert.Equal(t, gen.TagTG("namespace", "ingress", "service", "port"), expected)
3358
}

internal/alb/tg/mock_NameTagGenerator.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/alb/tg/targetgroup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ func (controller *defaultController) buildTags(ingress *extensions.Ingress, back
233233
for k, v := range controller.nameTagGen.TagTGGroup(ingress.Namespace, ingress.Name) {
234234
tgTags[k] = v
235235
}
236-
for k, v := range controller.nameTagGen.TagTG(backend.ServiceName, backend.ServicePort.String()) {
236+
for k, v := range controller.nameTagGen.TagTG(ingress.Namespace, ingress.Name, backend.ServiceName, backend.ServicePort.String()) {
237237
tgTags[k] = v
238238
}
239239
for k, v := range ingressAnnos.Tags.LoadBalancer {

internal/alb/tg/targetgroup_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,7 @@ func TestDefaultController_Reconcile(t *testing.T) {
12771277
mockNameTagGen.On("NameTG", tc.NameTGCall.Namespace, tc.NameTGCall.IngressName, tc.NameTGCall.ServiceName, tc.NameTGCall.ServicePort, tc.NameTGCall.TargetType, tc.NameTGCall.Protocol).Return(tc.NameTGCall.TGName)
12781278
}
12791279
if tc.TagTGCall != nil {
1280-
mockNameTagGen.On("TagTG", tc.TagTGCall.ServiceName, tc.TagTGCall.ServicePort).Return(tc.TagTGCall.Tags)
1280+
mockNameTagGen.On("TagTG", tc.TagTGGroupCall.Namespace, tc.TagTGGroupCall.IngressName, tc.TagTGCall.ServiceName, tc.TagTGCall.ServicePort).Return(tc.TagTGCall.Tags)
12811281
}
12821282
if tc.TagTGGroupCall != nil {
12831283
mockNameTagGen.On("TagTGGroup", tc.TagTGGroupCall.Namespace, tc.TagTGGroupCall.IngressName).Return(tc.TagTGGroupCall.Tags)

internal/alb/tg/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type TagGenerator interface {
3333

3434
// TagTG generates tags for a targetGroup inside a TGGroup.
3535
// NOTE: The final set of tags been applied to targetGroup is union of tags generated by TagTGs & TagTG.
36-
TagTG(serviceName string, servicePort string) map[string]string
36+
TagTG(namespace string, ingressName string, serviceName string, servicePort string) map[string]string
3737
}
3838

3939
// NameTagGenerator is combination of NameGenerator and TagGenerator

0 commit comments

Comments
 (0)