Skip to content

Commit be812c3

Browse files
authored
Merge pull request #4415 from shraddhabang/tagsgeneric
Add generic tag processing system for controllers
2 parents 65b2f92 + 2595fa7 commit be812c3

18 files changed

+867
-220
lines changed

pkg/aga/model_build_accelerator.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ type acceleratorBuilder interface {
2323
}
2424

2525
// NewAcceleratorBuilder constructs new acceleratorBuilder
26-
func NewAcceleratorBuilder(trackingProvider tracking.Provider, clusterName string, defaultTags map[string]string, externalManagedTags []string) acceleratorBuilder {
26+
func NewAcceleratorBuilder(trackingProvider tracking.Provider, clusterName string, defaultTags map[string]string, externalManagedTags []string, additionalTagsOverrideDefaultTags bool) acceleratorBuilder {
2727
externalManagedTagsSet := sets.New(externalManagedTags...)
28-
tagHelper := newTagHelper(externalManagedTagsSet, defaultTags)
28+
tagHelper := newTagHelper(externalManagedTagsSet, defaultTags, additionalTagsOverrideDefaultTags)
2929

3030
return &defaultAcceleratorBuilder{
3131
trackingProvider: trackingProvider,
@@ -121,7 +121,7 @@ func (b *defaultAcceleratorBuilder) buildAcceleratorIPAddressType(_ context.Cont
121121

122122
func (b *defaultAcceleratorBuilder) buildAcceleratorTags(_ context.Context, stack core.Stack, ga *agaapi.GlobalAccelerator) (map[string]string, error) {
123123
// Get tags from tag helper (includes default tags and user-specified tags)
124-
tags, err := b.tagHelper.getAcceleratorTags(ga)
124+
tags, err := b.tagHelper.getAcceleratorTags(*ga)
125125
if err != nil {
126126
return nil, err
127127
}

pkg/aga/model_build_accelerator_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,9 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
329329

330330
for _, tt := range tests {
331331
t.Run(tt.name, func(t *testing.T) {
332-
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags)
332+
// Use true for "user tags override default tags" test case
333+
additionalTagsOverrideDefaultTags := tt.name == "user tags override default tags"
334+
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags, additionalTagsOverrideDefaultTags)
333335
b := builder.(*defaultAcceleratorBuilder)
334336

335337
stack := core.NewDefaultStack(core.StackID{Namespace: "test", Name: "test"})
@@ -495,7 +497,7 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
495497

496498
for _, tt := range tests {
497499
t.Run(tt.name, func(t *testing.T) {
498-
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags)
500+
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags, false)
499501

500502
got, err := builder.Build(context.Background(), stack, tt.ga)
501503

pkg/aga/model_builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (b *defaultModelBuilder) Build(ctx context.Context, ga *agaapi.GlobalAccele
5858
stack := core.NewDefaultStack(core.StackID(k8s.NamespacedName(ga)))
5959

6060
// Create fresh builder instances for each reconciliation
61-
acceleratorBuilder := NewAcceleratorBuilder(b.trackingProvider, b.clusterName, b.defaultTags, b.externalManagedTags)
61+
acceleratorBuilder := NewAcceleratorBuilder(b.trackingProvider, b.clusterName, b.defaultTags, b.externalManagedTags, b.featureGates.Enabled(config.EnableDefaultTagsLowPriority))
6262
// TODO
6363
// listenerBuilder := NewListenerBuilder()
6464
// endpointGroupBuilder := NewEndpointGroupBuilder()

pkg/aga/tag_adapters.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package aga
2+
3+
import (
4+
agaapi "sigs.k8s.io/aws-load-balancer-controller/apis/aga/v1beta1"
5+
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_utils"
6+
)
7+
8+
// GlobalAcceleratorTagProvider adapts GlobalAccelerator to implement TagProvider
9+
type GlobalAcceleratorTagProvider struct {
10+
ga agaapi.GlobalAccelerator
11+
}
12+
13+
// NewGlobalAcceleratorTagProvider creates a new GlobalAcceleratorTagProvider
14+
func NewGlobalAcceleratorTagProvider(ga agaapi.GlobalAccelerator) shared_utils.TagProvider {
15+
return &GlobalAcceleratorTagProvider{ga: ga}
16+
}
17+
18+
// GetTags returns the tags from the GlobalAccelerator spec
19+
func (g GlobalAcceleratorTagProvider) GetTags() *map[string]string {
20+
return g.ga.Spec.Tags
21+
}

pkg/aga/tag_helper.go

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,31 @@
11
package aga
22

33
import (
4-
"github.com/pkg/errors"
54
"k8s.io/apimachinery/pkg/util/sets"
65
agaapi "sigs.k8s.io/aws-load-balancer-controller/apis/aga/v1beta1"
7-
"sigs.k8s.io/aws-load-balancer-controller/pkg/algorithm"
6+
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_utils"
87
)
98

109
type tagHelper interface {
11-
getAcceleratorTags(ga *agaapi.GlobalAccelerator) (map[string]string, error)
10+
getAcceleratorTags(ga agaapi.GlobalAccelerator) (map[string]string, error)
1211
}
1312

1413
type tagHelperImpl struct {
15-
externalManagedTags sets.Set[string]
16-
defaultTags map[string]string
14+
sharedHelper shared_utils.TagHelper
1715
}
1816

19-
func newTagHelper(externalManagedTags sets.Set[string], defaultTags map[string]string) tagHelper {
20-
return &tagHelperImpl{
21-
externalManagedTags: externalManagedTags,
22-
defaultTags: defaultTags,
23-
}
24-
}
25-
26-
func (t *tagHelperImpl) getAcceleratorTags(ga *agaapi.GlobalAccelerator) (map[string]string, error) {
27-
gaTags := make(map[string]string)
28-
29-
if ga.Spec.Tags != nil {
30-
for k, v := range *ga.Spec.Tags {
31-
gaTags[k] = v
32-
}
17+
func newTagHelper(externalManagedTags sets.Set[string], defaultTags map[string]string, additionalTagsOverrideDefaultTags bool) tagHelper {
18+
config := shared_utils.TagHelperConfig{
19+
ExternalManagedTags: externalManagedTags,
20+
DefaultTags: defaultTags,
21+
AdditionalTagsOverrideDefaultTags: additionalTagsOverrideDefaultTags,
3322
}
34-
35-
if err := t.validateTagCollisionWithExternalManagedTags(gaTags); err != nil {
36-
return nil, err
23+
return &tagHelperImpl{
24+
sharedHelper: shared_utils.NewTagHelper(config),
3725
}
38-
39-
return algorithm.MergeStringMap(gaTags, t.defaultTags), nil
4026
}
4127

42-
func (t *tagHelperImpl) validateTagCollisionWithExternalManagedTags(tags map[string]string) error {
43-
for tagKey := range tags {
44-
if t.externalManagedTags.Has(tagKey) {
45-
return errors.Errorf("external managed tag key %v cannot be specified", tagKey)
46-
}
47-
}
48-
return nil
28+
func (t *tagHelperImpl) getAcceleratorTags(ga agaapi.GlobalAccelerator) (map[string]string, error) {
29+
provider := NewGlobalAcceleratorTagProvider(ga)
30+
return t.sharedHelper.ProcessTags(provider)
4931
}

0 commit comments

Comments
 (0)