Skip to content

Commit 4f1f027

Browse files
authored
fix(VPCPeeringConnection): Fix update code path (#163)
- aws-controllers-k8s/community#1943 Description of changes: - Fixes a bug where the the values of subfields under `AccepterPeeringConnectionOptions` and `RequesterPeeringConnectionOptions` are not set properly. - Improves robustness of e2e tests for this resource - Adds an additional e2e test that uses boto3 to verify that Peering Options function normally By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 0271c52 commit 4f1f027

File tree

11 files changed

+418
-106
lines changed

11 files changed

+418
-106
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ack_generate_info:
2-
build_date: "2023-12-06T21:43:43Z"
3-
build_hash: 892f29d00a4c4ad21a2fa32919921de18190979d
4-
go_version: go1.21.1
5-
version: v0.27.1
6-
api_directory_checksum: 6e2d850d97f2f72db31c9bef522eca4ab95b3fcd
2+
build_date: "2023-12-12T12:34:35Z"
3+
build_hash: 3653329ceeb20015851b8776a6061a3fb0ec2935
4+
go_version: go1.21.0
5+
version: "3653329"
6+
api_directory_checksum: d452bf19bfd1496aacdc215bf7cc9ea86c55c122
77
api_version: v1alpha1
88
aws_sdk_go_version: v1.44.93
99
generator_config_info:
10-
file_checksum: d10a62517f87bacf988184f8c454b90b42dee732
10+
file_checksum: df1057de840147701c11acfdbed0e28e9b0ddd96
1111
original_file_name: generator.yaml
1212
last_modification:
1313
reason: API generation

apis/v1alpha1/generator.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,8 +818,6 @@ resources:
818818
path: Tags
819819
compare:
820820
is_ignored: True
821-
update_operation:
822-
omit_unchanged_fields: true
823821
hooks:
824822
delta_pre_compare:
825823
code: compareTags(delta, a, b)

generator.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,8 +818,6 @@ resources:
818818
path: Tags
819819
compare:
820820
is_ignored: True
821-
update_operation:
822-
omit_unchanged_fields: true
823821
hooks:
824822
delta_pre_compare:
825823
code: compareTags(delta, a, b)

pkg/resource/vpc_peering_connection/hooks.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ import (
2727

2828
var (
2929
ErrVPCPeeringConnectionCreating = fmt.Errorf(
30-
"VPCPerringConnection in '%v' state, cannot be modified or deleted",
30+
"VPCPeeringConnection in '%v' state, cannot be modified or deleted",
3131
"creating",
3232
)
3333
ErrVPCPeeringConnectionProvisioning = fmt.Errorf(
34-
"VPCPerringConnection in '%v' state, cannot be modified or deleted",
34+
"VPCPeeringConnection in '%v' state, cannot be modified or deleted",
3535
svcsdk.VpcPeeringConnectionStateReasonCodeProvisioning,
3636
)
3737
ErrVPCPeeringConnectionDeleting = fmt.Errorf(
38-
"VPCPerringConnection in '%v' state, cannot be modified or deleted",
38+
"VPCPeeringConnection in '%v' state, cannot be modified or deleted",
3939
svcsdk.VpcPeeringConnectionStateReasonCodeDeleting,
4040
)
4141
)

pkg/resource/vpc_peering_connection/sdk.go

Lines changed: 94 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11

2+
3+
if r.ko.Spec.AccepterPeeringConnectionOptions != nil {
4+
f0 := &svcapitypes.PeeringConnectionOptionsRequest{}
5+
if r.ko.Spec.AccepterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC != nil {
6+
f0.AllowEgressFromLocalClassicLinkToRemoteVPC = r.ko.Spec.AccepterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC
7+
}
8+
if r.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC != nil {
9+
f0.AllowEgressFromLocalClassicLinkToRemoteVPC = r.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC
10+
}
11+
if r.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink != nil {
12+
f0.AllowEgressFromLocalVPCToRemoteClassicLink = r.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink
13+
}
14+
ko.Spec.AccepterPeeringConnectionOptions = f0
15+
} else {
16+
ko.Spec.AccepterPeeringConnectionOptions = nil
17+
}
18+
if r.ko.Spec.RequesterPeeringConnectionOptions != nil {
19+
f1 := &svcapitypes.PeeringConnectionOptionsRequest{}
20+
if r.ko.Spec.RequesterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC != nil {
21+
f1.AllowDNSResolutionFromRemoteVPC = r.ko.Spec.RequesterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC
22+
}
23+
if r.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC != nil {
24+
f1.AllowEgressFromLocalClassicLinkToRemoteVPC = r.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC
25+
}
26+
if r.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink != nil {
27+
f1.AllowEgressFromLocalVPCToRemoteClassicLink = r.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink
28+
}
29+
ko.Spec.RequesterPeeringConnectionOptions = f1
30+
} else {
31+
ko.Spec.RequesterPeeringConnectionOptions = nil
32+
}
33+
234
// Artificially trigger detection by delta.DifferentAt("Spec.AcceptRequest")
335
res := &resource{ko}
436
if isVPCPeeringConnectionPendingAcceptance(res) {
537
res.ko.Spec.AcceptRequest = aws.Bool(false)
638
} else if isVPCPeeringConnectionActive(res) || isVPCPeeringConnectionProvisioning(res) {
739
res.ko.Spec.AcceptRequest = aws.Bool(true)
840
} else if isVPCPeeringConnectionCreating(res) {
9-
return nil, requeueWaitWhileCreating
10-
}
41+
return res, requeueWaitWhileCreating
42+
}

templates/hooks/vpc_peering_connection/sdk_update_pre_build_request.go.tpl

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11

2-
if isVPCPeeringConnectionCreating(desired) {
2+
if isVPCPeeringConnectionCreating(latest) {
33
return desired, requeueWaitWhileCreating
44
}
5-
if isVPCPeeringConnectionProvisioning(desired) {
5+
if isVPCPeeringConnectionProvisioning(latest) {
66
return desired, requeueWaitWhileProvisioning
77
}
8-
if isVPCPeeringConnectionDeleting(desired) {
8+
if isVPCPeeringConnectionDeleting(latest) {
99
return desired, requeueWaitWhileDeleting
1010
}
11-
12-
// in case of pending acceptance or accepted state we make the updates.
11+
// If the VPC Peering Connection is Pending Acceptance or Active, continue
12+
1313
if delta.DifferentAt("Spec.Tags") {
1414
if err := rm.syncTags(ctx, desired, latest); err != nil {
15-
return nil, err
15+
// This causes a requeue and the rest of the fields will be synced on the next reconciliation loop
16+
ackcondition.SetSynced(desired, corev1.ConditionFalse, nil, nil)
17+
return desired, err
1618
}
1719
}
1820

@@ -44,8 +46,38 @@
4446
}
4547
}
4648

49+
// Only continue if something other than Tags or certain fields has changed in the Spec
50+
if !delta.DifferentExcept("Spec.Tags", "Spec.AcceptRequest") {
51+
return desired, nil
52+
}
4753

48-
// Only continue if something other than Tags or certain fields has changed in the Spec
49-
if !delta.DifferentExcept("Spec.Tags", "Spec.AcceptRequest") {
50-
return desired, nil
51-
}
54+
if desired.ko.Spec.AccepterPeeringConnectionOptions != nil {
55+
f0 := &svcapitypes.PeeringConnectionOptionsRequest{}
56+
if desired.ko.Spec.AccepterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC != nil {
57+
f0.AllowDNSResolutionFromRemoteVPC = desired.ko.Spec.AccepterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC
58+
}
59+
if desired.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC != nil {
60+
f0.AllowEgressFromLocalClassicLinkToRemoteVPC = desired.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC
61+
}
62+
if desired.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink != nil {
63+
f0.AllowEgressFromLocalVPCToRemoteClassicLink = desired.ko.Spec.AccepterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink
64+
}
65+
desired.ko.Spec.AccepterPeeringConnectionOptions = f0
66+
} else {
67+
desired.ko.Spec.AccepterPeeringConnectionOptions = nil
68+
}
69+
if desired.ko.Spec.RequesterPeeringConnectionOptions != nil {
70+
f1 := &svcapitypes.PeeringConnectionOptionsRequest{}
71+
if desired.ko.Spec.RequesterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC != nil {
72+
f1.AllowDNSResolutionFromRemoteVPC = desired.ko.Spec.RequesterPeeringConnectionOptions.AllowDNSResolutionFromRemoteVPC
73+
}
74+
if desired.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC != nil {
75+
f1.AllowEgressFromLocalClassicLinkToRemoteVPC = desired.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalClassicLinkToRemoteVPC
76+
}
77+
if desired.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink != nil {
78+
f1.AllowEgressFromLocalVPCToRemoteClassicLink = desired.ko.Spec.RequesterPeeringConnectionOptions.AllowEgressFromLocalVPCToRemoteClassicLink
79+
}
80+
desired.ko.Spec.RequesterPeeringConnectionOptions = f1
81+
} else {
82+
desired.ko.Spec.RequesterPeeringConnectionOptions = nil
83+
}

test/e2e/resources/vpc_peering_connection.yaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@ spec:
66
vpcID: $VPC_ID
77
peerVPCID: $PEER_VPC_ID
88
acceptRequest: true
9-
requesterPeeringConnectionOptions:
10-
allowDNSResolutionFromRemoteVPC: true
11-
allowEgressFromLocalClassicLinkToRemoteVPC: true
12-
allowEgressFromLocalVPCToRemoteClassicLink: true
13-
accepterPeeringConnectionOptions:
14-
allowDNSResolutionFromRemoteVPC: true
15-
allowEgressFromLocalClassicLinkToRemoteVPC: true
16-
allowEgressFromLocalVPCToRemoteClassicLink: true
179
tags:
1810
- key: $TAG_KEY
1911
value: $TAG_VALUE
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: ec2.services.k8s.aws/v1alpha1
2+
kind: VPCPeeringConnection
3+
metadata:
4+
name: $VPC_PEERING_CONNECTION_NAME
5+
spec:
6+
vpcID: $VPC_ID
7+
peerVPCID: $PEER_VPC_ID
8+
acceptRequest: true
9+
requesterPeeringConnectionOptions:
10+
allowDNSResolutionFromRemoteVPC: true
11+
accepterPeeringConnectionOptions:
12+
allowDNSResolutionFromRemoteVPC: true

0 commit comments

Comments
 (0)