Skip to content

Commit 0c20009

Browse files
authored
Ensure RabbitMQ Broker reaches synced status when using non-default security group (#104)
Issue #, if available: Description of changes: - Add .vscode to .gitignore - Omit unchanged field from update payload - Only set spec fields included in delta in sdkUpdate - late initialize fields to load default values after broker creation - Add delta pre-compare hook to match EngineVersion by prefix instead of exact match - Add e2e test validating creation of RabbitMQ broker with non-default security group becomes synced - Add tests for delta comparison of EngineVersion - Update create/delete e2e test to validate update behavior By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent bbd1041 commit 0c20009

20 files changed

+702
-227
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
*.swp
33
*~
44
.idea
5+
.vscode
56
/docs/site
67
bin
78
build
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ack_generate_info:
2-
build_date: "2025-09-19T17:08:59Z"
3-
build_hash: 6b4211163dcc34776b01da9a18217bac0f4103fd
4-
go_version: go1.24.6
5-
version: v0.52.0
2+
build_date: "2025-09-29T19:41:37Z"
3+
build_hash: ef6e2f362a0f93d4a063b0a2b416f7ab0a156843
4+
go_version: go1.25.0
5+
version: v0.52.0-4-gef6e2f3
66
api_directory_checksum: 524e0af3e7ceea86a3153c12c06091ea924d3410
77
api_version: v1alpha1
88
aws_sdk_go_version: v1.32.6
99
generator_config_info:
10-
file_checksum: 7d89869149ba948467065fc8d5947d9eff039b8b
10+
file_checksum: 72d5fe6ac88d647ed6c67869928f3bc12ea6a566
1111
original_file_name: generator.yaml
1212
last_modification:
1313
reason: API generation

apis/v1alpha1/generator.yaml

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,27 @@ resources:
1717
template_path: hooks/sdk_read_one_post_set_output.go.tpl
1818
sdk_update_pre_set_output:
1919
template_path: hooks/sdk_update_pre_set_output.go.tpl
20+
delta_pre_compare:
21+
template_path: hooks/delta_pre_compare.go.tpl
2022
renames:
2123
operations:
2224
CreateBroker:
2325
input_fields:
2426
BrokerName: Name
27+
28+
update_operation:
29+
omit_unchanged_fields: true
30+
# UpdateBroker API returns nil for values not set in the request.
31+
only_set_unchanged_fields: true
2532
fields:
26-
securityGroups:
33+
SecurityGroups:
34+
late_initialize: {}
2735
references:
2836
service_name: ec2
2937
resource: SecurityGroup
3038
path: Status.ID
3139
SubnetIDs:
40+
late_initialize: {}
3241
references:
3342
service_name: ec2
3443
resource: Subnet
@@ -54,3 +63,27 @@ resources:
5463
is_ignored: true
5564
Users.Password:
5665
is_secret: true
66+
AuthenticationStrategy:
67+
late_initialize: {}
68+
AutoMinorVersionUpgrade:
69+
late_initialize: {}
70+
EngineVersion:
71+
late_initialize: {}
72+
set:
73+
- method: Update
74+
ignore: true
75+
MaintenanceWindowStartTime:
76+
late_initialize: {}
77+
EncryptionOptions:
78+
late_initialize: {}
79+
StorageType:
80+
late_initialize: {}
81+
PubliclyAccessible:
82+
late_initialize: {}
83+
Logs:
84+
late_initialize: {}
85+
LDAPServerMetadata:
86+
late_initialize: {
87+
# LDAP Server Metadata is only available for ActiveMQ brokers
88+
skip_incomplete_check: {}
89+
}

config/crd/bases/mq.services.k8s.aws_brokers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.16.2
6+
controller-gen.kubebuilder.io/version: v0.19.0
77
name: brokers.mq.services.k8s.aws
88
spec:
99
group: mq.services.k8s.aws

generator.yaml

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,27 @@ resources:
1717
template_path: hooks/sdk_read_one_post_set_output.go.tpl
1818
sdk_update_pre_set_output:
1919
template_path: hooks/sdk_update_pre_set_output.go.tpl
20+
delta_pre_compare:
21+
template_path: hooks/delta_pre_compare.go.tpl
2022
renames:
2123
operations:
2224
CreateBroker:
2325
input_fields:
2426
BrokerName: Name
27+
28+
update_operation:
29+
omit_unchanged_fields: true
30+
# UpdateBroker API returns nil for values not set in the request.
31+
only_set_unchanged_fields: true
2532
fields:
26-
securityGroups:
33+
SecurityGroups:
34+
late_initialize: {}
2735
references:
2836
service_name: ec2
2937
resource: SecurityGroup
3038
path: Status.ID
3139
SubnetIDs:
40+
late_initialize: {}
3241
references:
3342
service_name: ec2
3443
resource: Subnet
@@ -54,3 +63,27 @@ resources:
5463
is_ignored: true
5564
Users.Password:
5665
is_secret: true
66+
AuthenticationStrategy:
67+
late_initialize: {}
68+
AutoMinorVersionUpgrade:
69+
late_initialize: {}
70+
EngineVersion:
71+
late_initialize: {}
72+
set:
73+
- method: Update
74+
ignore: true
75+
MaintenanceWindowStartTime:
76+
late_initialize: {}
77+
EncryptionOptions:
78+
late_initialize: {}
79+
StorageType:
80+
late_initialize: {}
81+
PubliclyAccessible:
82+
late_initialize: {}
83+
Logs:
84+
late_initialize: {}
85+
LDAPServerMetadata:
86+
late_initialize: {
87+
# LDAP Server Metadata is only available for ActiveMQ brokers
88+
skip_incomplete_check: {}
89+
}

helm/crds/mq.services.k8s.aws_brokers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.16.2
6+
controller-gen.kubebuilder.io/version: v0.19.0
77
name: brokers.mq.services.k8s.aws
88
spec:
99
group: mq.services.k8s.aws

helm/crds/services.k8s.aws_adoptedresources.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.16.2
6+
controller-gen.kubebuilder.io/version: v0.19.0
77
name: adoptedresources.services.k8s.aws
88
spec:
99
group: services.k8s.aws

helm/crds/services.k8s.aws_fieldexports.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.16.2
6+
controller-gen.kubebuilder.io/version: v0.19.0
77
name: fieldexports.services.k8s.aws
88
spec:
99
group: services.k8s.aws

pkg/resource/broker/delta.go

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

pkg/resource/broker/delta_test.go

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License"). You may
4+
// not use this file except in compliance with the License. A copy of the
5+
// License is located at
6+
//
7+
// http://aws.amazon.com/apache2.0/
8+
//
9+
// or in the "license" file accompanying this file. This file is distributed
10+
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
11+
// express or implied. See the License for the specific language governing
12+
// permissions and limitations under the License.
13+
14+
package broker
15+
16+
import (
17+
"testing"
18+
19+
svcapitypes "github.com/aws-controllers-k8s/mq-controller/apis/v1alpha1"
20+
"github.com/aws/aws-sdk-go-v2/aws"
21+
)
22+
23+
func TestNewResourceDelta_EngineVersionPrefix(t *testing.T) {
24+
tests := []struct {
25+
name string
26+
aEngineVersion *string
27+
bEngineVersion *string
28+
expectDelta bool
29+
}{
30+
{
31+
name: "a is prefix of b - no delta expected",
32+
aEngineVersion: aws.String("3.13"),
33+
bEngineVersion: aws.String("3.13.1"),
34+
expectDelta: false,
35+
},
36+
{
37+
name: "a is prefix of b with patch version - no delta expected",
38+
aEngineVersion: aws.String("5.18"),
39+
bEngineVersion: aws.String("5.18.4"),
40+
expectDelta: false,
41+
},
42+
{
43+
name: "exact match - no delta expected",
44+
aEngineVersion: aws.String("3.13.1"),
45+
bEngineVersion: aws.String("3.13.1"),
46+
expectDelta: false,
47+
},
48+
{
49+
name: "different patch versions - no delta expected",
50+
aEngineVersion: aws.String("3.13.2"),
51+
bEngineVersion: aws.String("3.13.1"),
52+
expectDelta: true,
53+
},
54+
{
55+
name: "different minor versions - delta expected",
56+
aEngineVersion: aws.String("3.13"),
57+
bEngineVersion: aws.String("3.14.1"),
58+
expectDelta: true,
59+
},
60+
{
61+
name: "a is longer than b - delta expected",
62+
aEngineVersion: aws.String("3.13.1"),
63+
bEngineVersion: aws.String("3.13"),
64+
expectDelta: true,
65+
},
66+
{
67+
name: "nil versions - no delta expected",
68+
aEngineVersion: nil,
69+
bEngineVersion: nil,
70+
expectDelta: false,
71+
},
72+
{
73+
name: "a nil, b not nil - delta expected",
74+
aEngineVersion: nil,
75+
bEngineVersion: aws.String("3.13.1"),
76+
expectDelta: true,
77+
},
78+
{
79+
name: "a not nil, b nil - delta expected",
80+
aEngineVersion: aws.String("3.13"),
81+
bEngineVersion: nil,
82+
expectDelta: true,
83+
},
84+
}
85+
86+
for _, tt := range tests {
87+
t.Run(tt.name, func(t *testing.T) {
88+
a := &resource{
89+
ko: &svcapitypes.Broker{
90+
Spec: svcapitypes.BrokerSpec{
91+
EngineVersion: tt.aEngineVersion,
92+
},
93+
},
94+
}
95+
b := &resource{
96+
ko: &svcapitypes.Broker{
97+
Spec: svcapitypes.BrokerSpec{
98+
EngineVersion: tt.bEngineVersion,
99+
},
100+
},
101+
}
102+
103+
delta := newResourceDelta(a, b)
104+
hasDelta := delta.DifferentAt("Spec.EngineVersion")
105+
106+
if tt.expectDelta && !hasDelta {
107+
t.Errorf("Expected delta for EngineVersion but none found")
108+
}
109+
if !tt.expectDelta && hasDelta {
110+
t.Errorf("Expected no delta for EngineVersion but found one")
111+
}
112+
})
113+
}
114+
}

0 commit comments

Comments
 (0)