Skip to content

Commit 09b544f

Browse files
authored
fix(translator): set ListenerSet and listener Accepted:True for InvalidCertificateRef (#8871)
* fix(translator): set ListenerSet and listener Accepted:True for InvalidCertificateRef When a ListenerSet listener has an unresolvable TLS certificate reference (InvalidCertificateRef or RefNotPermitted), Accepted: False was incorrectly set on both the listener and ListenerSet object. The Gateway API spec places InvalidCertificateRef exclusively under ResolvedRefs, not Accepted — a missing certificate is a reference resolution concern, not a structural one. Fixes #8870 Signed-off-by: apkatsikas <apkatsikas@gmail.com> * chore: fix gofumpt formatting in validateListenerConditions Signed-off-by: apkatsikas <apkatsikas@gmail.com> * fix(translator): separate RefNotPermitted from InvalidCertificateRef handling Unlike InvalidCertificateRef, RefNotPermitted should not set Accepted:True. Update unit test fixtures to match. Signed-off-by: apkatsikas <apkatsikas@gmail.com> * fix gen Signed-off-by: zirain <zirain2009@gmail.com> --------- Signed-off-by: apkatsikas <apkatsikas@gmail.com> Signed-off-by: zirain <zirain2009@gmail.com>
1 parent 9236db0 commit 09b544f

24 files changed

Lines changed: 853 additions & 57 deletions

internal/gatewayapi/listenerset.go

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -113,48 +113,69 @@ func (t *Translator) ProcessListenerSetStatus(listenerSets []*gwapiv1.ListenerSe
113113
}
114114

115115
// Calculate status based on listeners
116-
allListenersValid := true
117-
anyListenerValid := false
116+
allListenersAccepted := true
117+
anyListenerAccepted := false
118+
allListenersProgrammed := true
119+
anyListenerProgrammed := false
118120

119121
for _, lStatus := range ls.Status.Listeners {
120122
accepted := false
123+
programmed := false
121124
for _, cond := range lStatus.Conditions {
122125
if cond.Type == string(gwapiv1.ListenerEntryConditionAccepted) && cond.Status == metav1.ConditionTrue {
123126
accepted = true
124-
break
127+
}
128+
if cond.Type == string(gwapiv1.ListenerConditionProgrammed) && cond.Status == metav1.ConditionTrue {
129+
programmed = true
125130
}
126131
}
127-
anyListenerValid = anyListenerValid || accepted
128-
allListenersValid = allListenersValid && accepted
132+
anyListenerAccepted = anyListenerAccepted || accepted
133+
allListenersAccepted = allListenersAccepted && accepted
134+
anyListenerProgrammed = anyListenerProgrammed || programmed
135+
allListenersProgrammed = allListenersProgrammed && programmed
129136
}
130137

131138
var (
132139
lsAccepted bool
133-
lsReason gwapiv1.ListenerSetConditionReason
140+
lsAcceptedReason gwapiv1.ListenerSetConditionReason
141+
lsAcceptedMsg string
142+
lsProgrammed bool
134143
lsProgrammedReason gwapiv1.ListenerSetConditionReason
135-
lsMsg string
144+
lsProgrammedMsg string
136145
)
137146

138147
switch {
139-
case allListenersValid:
148+
case allListenersAccepted:
140149
lsAccepted = true
141-
lsReason = gwapiv1.ListenerSetReasonAccepted
142-
lsProgrammedReason = gwapiv1.ListenerSetReasonProgrammed
143-
lsMsg = "All listeners are valid"
144-
case anyListenerValid: // TODO: implement PartiallyInvalid conditions when Gateway API supports it
150+
lsAcceptedReason = gwapiv1.ListenerSetReasonAccepted
151+
lsAcceptedMsg = "All listeners are accepted"
152+
case anyListenerAccepted: // TODO: implement PartiallyInvalid conditions when Gateway API supports it
145153
lsAccepted = true
146-
lsReason = gwapiv1.ListenerSetReasonListenersNotValid
147-
lsProgrammedReason = gwapiv1.ListenerSetReasonProgrammed
148-
lsMsg = "Some listeners are invalid"
154+
lsAcceptedReason = gwapiv1.ListenerSetReasonListenersNotValid
155+
lsAcceptedMsg = "Some listeners are invalid"
149156
default:
150157
lsAccepted = false
151-
lsReason = gwapiv1.ListenerSetReasonListenersNotValid
158+
lsAcceptedReason = gwapiv1.ListenerSetReasonListenersNotValid
159+
lsAcceptedMsg = "No listeners are accepted"
160+
}
161+
162+
switch {
163+
case allListenersProgrammed:
164+
lsProgrammed = true
165+
lsProgrammedReason = gwapiv1.ListenerSetReasonProgrammed
166+
lsProgrammedMsg = "All listeners are programmed"
167+
case anyListenerProgrammed:
168+
lsProgrammed = true
169+
lsProgrammedReason = gwapiv1.ListenerSetReasonProgrammed
170+
lsProgrammedMsg = "Some listeners are not programmed"
171+
default:
172+
lsProgrammed = false
152173
lsProgrammedReason = gwapiv1.ListenerSetReasonListenersNotValid
153-
lsMsg = "All listeners are invalid"
174+
lsProgrammedMsg = "No listeners are programmed"
154175
}
155176

156-
status.UpdateListenerSetStatusAccepted(ls, lsAccepted, lsReason, lsMsg)
157-
status.UpdateListenerSetStatusProgrammed(ls, lsAccepted, lsProgrammedReason, lsMsg)
177+
status.UpdateListenerSetStatusAccepted(ls, lsAccepted, lsAcceptedReason, lsAcceptedMsg)
178+
status.UpdateListenerSetStatusProgrammed(ls, lsProgrammed, lsProgrammedReason, lsProgrammedMsg)
158179
}
159180
}
160181

internal/gatewayapi/testdata/backendtrafficpolicy-with-routing-type-listener.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ gateways:
126126
reason: InvalidCertificateRef
127127
status: "False"
128128
type: ResolvedRefs
129+
- lastTransitionTime: null
130+
message: Listener has been successfully translated
131+
reason: Accepted
132+
status: "True"
133+
type: Accepted
129134
- lastTransitionTime: null
130135
message: Listener is invalid, see other Conditions for details.
131136
reason: Invalid

internal/gatewayapi/testdata/gateway-with-attached-routes.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ gateways:
108108
reason: InvalidCertificateRef
109109
status: "False"
110110
type: ResolvedRefs
111+
- lastTransitionTime: null
112+
message: Listener has been successfully translated
113+
reason: Accepted
114+
status: "True"
115+
type: Accepted
111116
- lastTransitionTime: null
112117
message: Listener is invalid, see other Conditions for details.
113118
reason: Invalid

internal/gatewayapi/testdata/gateway-with-conflicting-listeners-one-invalid-ref.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ gateways:
3939
reason: InvalidCertificateRef
4040
status: "False"
4141
type: ResolvedRefs
42+
- lastTransitionTime: null
43+
message: Listener has been successfully translated
44+
reason: Accepted
45+
status: "True"
46+
type: Accepted
4247
- lastTransitionTime: null
4348
message: Listener is invalid, see other Conditions for details.
4449
reason: Invalid

internal/gatewayapi/testdata/gateway-with-listener-with-invalid-multiple-tls-configuration.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ gateways:
9797
reason: InvalidCertificateRef
9898
status: "False"
9999
type: ResolvedRefs
100+
- lastTransitionTime: null
101+
message: Listener has been successfully translated
102+
reason: Accepted
103+
status: "True"
104+
type: Accepted
100105
- lastTransitionTime: null
101106
message: Listener is invalid, see other Conditions for details.
102107
reason: Invalid

internal/gatewayapi/testdata/gateway-with-listener-with-invalid-tls-configuration-secret-does-not-exist.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ gateways:
2727
reason: InvalidCertificateRef
2828
status: "False"
2929
type: ResolvedRefs
30+
- lastTransitionTime: null
31+
message: Listener has been successfully translated
32+
reason: Accepted
33+
status: "True"
34+
type: Accepted
3035
- lastTransitionTime: null
3136
message: Listener is invalid, see other Conditions for details.
3237
reason: Invalid

internal/gatewayapi/testdata/gateway-with-listener-with-invalid-tls-configuration-secret-is-not-valid.out.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ gateways:
2727
reason: InvalidCertificateRef
2828
status: "False"
2929
type: ResolvedRefs
30+
- lastTransitionTime: null
31+
message: Listener has been successfully translated
32+
reason: Accepted
33+
status: "True"
34+
type: Accepted
3035
- lastTransitionTime: null
3136
message: Listener is invalid, see other Conditions for details.
3237
reason: Invalid

internal/gatewayapi/testdata/listenerset-conflict-listeners.out.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ listenerSets:
130130
status:
131131
conditions:
132132
- lastTransitionTime: null
133-
message: All listeners are invalid
133+
message: No listeners are accepted
134134
reason: ListenersNotValid
135135
status: "False"
136136
type: Accepted
137137
- lastTransitionTime: null
138-
message: All listeners are invalid
138+
message: No listeners are programmed
139139
reason: ListenersNotValid
140140
status: "False"
141141
type: Programmed
@@ -215,7 +215,7 @@ listenerSets:
215215
status: "True"
216216
type: Accepted
217217
- lastTransitionTime: null
218-
message: Some listeners are invalid
218+
message: Some listeners are not programmed
219219
reason: Programmed
220220
status: "True"
221221
type: Programmed
@@ -300,7 +300,7 @@ listenerSets:
300300
status: "True"
301301
type: Accepted
302302
- lastTransitionTime: null
303-
message: Some listeners are invalid
303+
message: Some listeners are not programmed
304304
reason: Programmed
305305
status: "True"
306306
type: Programmed

internal/gatewayapi/testdata/listenerset-cross-namespace.out.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ listenerSets:
170170
status:
171171
conditions:
172172
- lastTransitionTime: null
173-
message: All listeners are valid
173+
message: All listeners are accepted
174174
reason: Accepted
175175
status: "True"
176176
type: Accepted
177177
- lastTransitionTime: null
178-
message: All listeners are valid
178+
message: All listeners are programmed
179179
reason: Programmed
180180
status: "True"
181181
type: Programmed
@@ -227,12 +227,12 @@ listenerSets:
227227
status:
228228
conditions:
229229
- lastTransitionTime: null
230-
message: All listeners are valid
230+
message: All listeners are accepted
231231
reason: Accepted
232232
status: "True"
233233
type: Accepted
234234
- lastTransitionTime: null
235-
message: All listeners are valid
235+
message: All listeners are programmed
236236
reason: Programmed
237237
status: "True"
238238
type: Programmed

internal/gatewayapi/testdata/listenerset-grpcroute.out.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,12 @@ listenerSets:
198198
status:
199199
conditions:
200200
- lastTransitionTime: null
201-
message: All listeners are valid
201+
message: All listeners are accepted
202202
reason: Accepted
203203
status: "True"
204204
type: Accepted
205205
- lastTransitionTime: null
206-
message: All listeners are valid
206+
message: All listeners are programmed
207207
reason: Programmed
208208
status: "True"
209209
type: Programmed
@@ -254,12 +254,12 @@ listenerSets:
254254
status:
255255
conditions:
256256
- lastTransitionTime: null
257-
message: All listeners are valid
257+
message: All listeners are accepted
258258
reason: Accepted
259259
status: "True"
260260
type: Accepted
261261
- lastTransitionTime: null
262-
message: All listeners are valid
262+
message: All listeners are programmed
263263
reason: Programmed
264264
status: "True"
265265
type: Programmed

0 commit comments

Comments
 (0)