Skip to content

Commit e2b9d45

Browse files
committed
add aga tags reconciler
1 parent 644a5ad commit e2b9d45

File tree

10 files changed

+827
-60
lines changed

10 files changed

+827
-60
lines changed

pkg/aga/model_build_accelerator.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ type acceleratorBuilder interface {
2323
}
2424

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

3030
return &defaultAcceleratorBuilder{
3131
trackingProvider: trackingProvider,
3232
clusterName: clusterName,
33+
clusterRegion: clusterRegion,
3334
tagHelper: tagHelper,
3435
}
3536
}
@@ -39,6 +40,7 @@ var _ acceleratorBuilder = &defaultAcceleratorBuilder{}
3940
type defaultAcceleratorBuilder struct {
4041
trackingProvider tracking.Provider
4142
clusterName string
43+
clusterRegion string
4244
tagHelper tagHelper
4345
}
4446

@@ -48,7 +50,7 @@ func (b *defaultAcceleratorBuilder) Build(ctx context.Context, stack core.Stack,
4850
return nil, err
4951
}
5052

51-
accelerator := agamodel.NewAccelerator(stack, agamodel.ResourceIDAccelerator, spec)
53+
accelerator := agamodel.NewAccelerator(stack, agamodel.ResourceIDAccelerator, spec, ga)
5254
return accelerator, nil
5355
}
5456

@@ -86,6 +88,7 @@ func (b *defaultAcceleratorBuilder) buildAcceleratorName(_ context.Context, ga *
8688

8789
uuidHash := sha256.New()
8890
_, _ = uuidHash.Write([]byte(b.clusterName))
91+
_, _ = uuidHash.Write([]byte(b.clusterRegion))
8992
_, _ = uuidHash.Write([]byte(gaKey.Namespace))
9093
_, _ = uuidHash.Write([]byte(gaKey.Name))
9194
_, _ = uuidHash.Write([]byte(string(ipAddressType)))
@@ -126,14 +129,5 @@ func (b *defaultAcceleratorBuilder) buildAcceleratorTags(_ context.Context, stac
126129
return nil, err
127130
}
128131

129-
// Add tracking tags (includes cluster tag and stack tag)
130-
trackingTags := b.trackingProvider.StackTags(stack)
131-
for k, v := range trackingTags {
132-
tags[k] = v
133-
}
134-
135-
// Add resource ID tag manually since we don't have the resource object yet
136-
tags[b.trackingProvider.ResourceIDTagKey()] = agamodel.ResourceIDAccelerator
137-
138132
return tags, nil
139133
}

pkg/aga/model_build_accelerator_test.go

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,7 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
227227
externalManagedTags: []string{},
228228
clusterName: "test-cluster",
229229
want: map[string]string{
230-
"Environment": "test",
231-
"elbv2.k8s.aws/cluster": "test-cluster",
232-
"aga.k8s.aws/stack": "test/test",
233-
"aga.k8s.aws/resource": "GlobalAccelerator",
230+
"Environment": "test",
234231
},
235232
wantErr: false,
236233
},
@@ -250,12 +247,9 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
250247
externalManagedTags: []string{},
251248
clusterName: "test-cluster",
252249
want: map[string]string{
253-
"Environment": "test",
254-
"elbv2.k8s.aws/cluster": "test-cluster",
255-
"aga.k8s.aws/stack": "test/test",
256-
"aga.k8s.aws/resource": "GlobalAccelerator",
257-
"Application": "my-app",
258-
"Owner": "team-a",
250+
"Environment": "test",
251+
"Application": "my-app",
252+
"Owner": "team-a",
259253
},
260254
wantErr: false,
261255
},
@@ -274,10 +268,7 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
274268
externalManagedTags: []string{},
275269
clusterName: "test-cluster",
276270
want: map[string]string{
277-
"Environment": "production", // User tag overrides default
278-
"elbv2.k8s.aws/cluster": "test-cluster",
279-
"aga.k8s.aws/stack": "test/test",
280-
"aga.k8s.aws/resource": "GlobalAccelerator",
271+
"Environment": "production", // User tag overrides default
281272
},
282273
wantErr: false,
283274
},
@@ -297,12 +288,9 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
297288
externalManagedTags: []string{"ExternalTag", "ManagedByTeam"},
298289
clusterName: "test-cluster",
299290
want: map[string]string{
300-
"Environment": "test",
301-
"elbv2.k8s.aws/cluster": "test-cluster",
302-
"aga.k8s.aws/stack": "test/test",
303-
"aga.k8s.aws/resource": "GlobalAccelerator",
304-
"Application": "my-app",
305-
"Owner": "team-a",
291+
"Environment": "test",
292+
"Application": "my-app",
293+
"Owner": "team-a",
306294
},
307295
wantErr: false,
308296
},
@@ -331,7 +319,7 @@ func Test_defaultAcceleratorBuilder_buildAcceleratorTags(t *testing.T) {
331319
t.Run(tt.name, func(t *testing.T) {
332320
// Use true for "user tags override default tags" test case
333321
additionalTagsOverrideDefaultTags := tt.name == "user tags override default tags"
334-
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags, additionalTagsOverrideDefaultTags)
322+
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, "us-west-2", tt.defaultTags, tt.externalManagedTags, additionalTagsOverrideDefaultTags)
335323
b := builder.(*defaultAcceleratorBuilder)
336324

337325
stack := core.NewDefaultStack(core.StackID{Namespace: "test", Name: "test"})
@@ -382,11 +370,7 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
382370
Enabled: aws.Bool(true),
383371
IPAddressType: agamodel.IPAddressTypeIPV4,
384372
IpAddresses: nil,
385-
Tags: map[string]string{
386-
"elbv2.k8s.aws/cluster": "test-cluster",
387-
"aga.k8s.aws/stack": "test/test",
388-
"aga.k8s.aws/resource": "GlobalAccelerator",
389-
},
373+
Tags: map[string]string{},
390374
},
391375
},
392376
wantErr: false,
@@ -420,11 +404,8 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
420404
IPAddressType: agamodel.IPAddressTypeDualStack,
421405
IpAddresses: []string{"1.2.3.4"},
422406
Tags: map[string]string{
423-
"Environment": "test",
424-
"elbv2.k8s.aws/cluster": "test-cluster",
425-
"aga.k8s.aws/stack": "test/test",
426-
"aga.k8s.aws/resource": "GlobalAccelerator",
427-
"Application": "my-app",
407+
"Environment": "test",
408+
"Application": "my-app",
428409
},
429410
},
430411
},
@@ -458,12 +439,9 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
458439
IPAddressType: agamodel.IPAddressTypeIPV4,
459440
IpAddresses: nil,
460441
Tags: map[string]string{
461-
"Environment": "test",
462-
"elbv2.k8s.aws/cluster": "test-cluster",
463-
"aga.k8s.aws/stack": "test/test",
464-
"aga.k8s.aws/resource": "GlobalAccelerator",
465-
"Application": "my-app",
466-
"Owner": "team-a",
442+
"Environment": "test",
443+
"Application": "my-app",
444+
"Owner": "team-a",
467445
},
468446
},
469447
},
@@ -497,7 +475,7 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
497475

498476
for _, tt := range tests {
499477
t.Run(tt.name, func(t *testing.T) {
500-
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, tt.defaultTags, tt.externalManagedTags, false)
478+
builder := NewAcceleratorBuilder(trackingProvider, tt.clusterName, "us-west-2", tt.defaultTags, tt.externalManagedTags, false)
501479

502480
got, err := builder.Build(context.Background(), stack, tt.ga)
503481

@@ -510,8 +488,22 @@ func Test_defaultAcceleratorBuilder_Build(t *testing.T) {
510488
assert.NoError(t, err)
511489
assert.NotNil(t, got)
512490

513-
// Deep compare the entire object
514-
assert.Equal(t, tt.want, got)
491+
// Verify important fields instead of deep comparing the entire object
492+
// ResourceMeta fields
493+
494+
// Spec fields
495+
assert.Equal(t, tt.want.Spec.Name, got.Spec.Name, "Name should match")
496+
assert.Equal(t, *tt.want.Spec.Enabled, *got.Spec.Enabled, "Enabled should match")
497+
assert.Equal(t, tt.want.Spec.IPAddressType, got.Spec.IPAddressType, "IPAddressType should match")
498+
assert.Equal(t, tt.want.Spec.IpAddresses, got.Spec.IpAddresses, "IpAddresses should match")
499+
500+
// Tags verification
501+
assert.Equal(t, len(tt.want.Spec.Tags), len(got.Spec.Tags), "Tags count should match")
502+
for key, expectedValue := range tt.want.Spec.Tags {
503+
actualValue, exists := got.Spec.Tags[key]
504+
assert.True(t, exists, "Tag %s should exist", key)
505+
assert.Equal(t, expectedValue, actualValue, "Tag %s value should match", key)
506+
}
515507
})
516508
}
517509
}

pkg/aga/model_builder.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ type ModelBuilder interface {
2323
// NewDefaultModelBuilder constructs new defaultModelBuilder.
2424
func NewDefaultModelBuilder(k8sClient client.Client, eventRecorder record.EventRecorder,
2525
trackingProvider tracking.Provider, featureGates config.FeatureGates,
26-
clusterName string, defaultTags map[string]string, externalManagedTags []string, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector) *defaultModelBuilder {
26+
clusterName string, clusterRegion string, defaultTags map[string]string, externalManagedTags []string, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector) *defaultModelBuilder {
2727

2828
return &defaultModelBuilder{
2929
k8sClient: k8sClient,
3030
eventRecorder: eventRecorder,
3131
trackingProvider: trackingProvider,
3232
featureGates: featureGates,
3333
clusterName: clusterName,
34+
clusterRegion: clusterRegion,
3435
defaultTags: defaultTags,
3536
externalManagedTags: externalManagedTags,
3637
logger: logger,
@@ -47,6 +48,7 @@ type defaultModelBuilder struct {
4748
trackingProvider tracking.Provider
4849
featureGates config.FeatureGates
4950
clusterName string
51+
clusterRegion string
5052
defaultTags map[string]string
5153
externalManagedTags []string
5254
logger logr.Logger
@@ -58,7 +60,7 @@ func (b *defaultModelBuilder) Build(ctx context.Context, ga *agaapi.GlobalAccele
5860
stack := core.NewDefaultStack(core.StackID(k8s.NamespacedName(ga)))
5961

6062
// Create fresh builder instances for each reconciliation
61-
acceleratorBuilder := NewAcceleratorBuilder(b.trackingProvider, b.clusterName, b.defaultTags, b.externalManagedTags, b.featureGates.Enabled(config.EnableDefaultTagsLowPriority))
63+
acceleratorBuilder := NewAcceleratorBuilder(b.trackingProvider, b.clusterName, b.clusterRegion, b.defaultTags, b.externalManagedTags, b.featureGates.Enabled(config.EnableDefaultTagsLowPriority))
6264
// TODO
6365
// listenerBuilder := NewListenerBuilder()
6466
// endpointGroupBuilder := NewEndpointGroupBuilder()

pkg/aws/services/rgt.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import (
99
)
1010

1111
const (
12-
ResourceTypeELBTargetGroup = "elasticloadbalancing:targetgroup"
13-
ResourceTypeELBLoadBalancer = "elasticloadbalancing:loadbalancer"
12+
ResourceTypeELBTargetGroup = "elasticloadbalancing:targetgroup"
13+
ResourceTypeELBLoadBalancer = "elasticloadbalancing:loadbalancer"
14+
ResourceTypeGlobalAccelerator = "globalaccelerator:accelerator"
1415
)
1516

1617
type RGT interface {

0 commit comments

Comments
 (0)