Skip to content

Commit fe4d056

Browse files
committed
fix: bad webhook rules
1 parent e6edfdb commit fe4d056

File tree

2 files changed

+39
-9
lines changed

2 files changed

+39
-9
lines changed

operator/internal/controller/webhook_controller.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ func (r *WebhookController) CheckOrUpdateWebhookConfigurations(ctx context.Conte
232232
}
233233

234234
needUpdate := false
235-
expectedRules := webhookRule()
235+
expectedRules := validatingWebhookRules()
236236
for i := range existingValidating.Webhooks {
237237
if validatingWebhookNeedsUpdate(&existingValidating.Webhooks[i], caBundle, expectedRules) {
238238
needUpdate = true
@@ -257,8 +257,9 @@ func (r *WebhookController) CheckOrUpdateWebhookConfigurations(ctx context.Conte
257257
}
258258

259259
needUpdate = false
260+
mutatingRules := mutatingWebhookRules()
260261
for i := range existingMutating.Webhooks {
261-
if mutatingWebhookNeedsUpdate(&existingMutating.Webhooks[i], caBundle, expectedRules) {
262+
if mutatingWebhookNeedsUpdate(&existingMutating.Webhooks[i], caBundle, mutatingRules) {
262263
needUpdate = true
263264
}
264265
}
@@ -284,7 +285,15 @@ func webhookValidatingWebhookConfiguration(namespace, serviceName string, secret
284285
Name: "validate-skyhook.nvidia.com",
285286
ClientConfig: webhookClient(serviceName, namespace, "/validate-skyhook-nvidia-com-v1alpha1-skyhook", secret),
286287
FailurePolicy: ptr(admissionregistrationv1.Fail),
287-
Rules: webhookRule(),
288+
Rules: validatingWebhookRules(),
289+
SideEffects: ptr(admissionregistrationv1.SideEffectClassNone),
290+
AdmissionReviewVersions: []string{"v1"},
291+
},
292+
{
293+
Name: "validate-deploymentpolicy.nvidia.com",
294+
ClientConfig: webhookClient(serviceName, namespace, "/validate-skyhook-nvidia-com-v1alpha1-deploymentpolicy", secret),
295+
FailurePolicy: ptr(admissionregistrationv1.Fail),
296+
Rules: validatingWebhookRules(),
288297
SideEffects: ptr(admissionregistrationv1.SideEffectClassNone),
289298
AdmissionReviewVersions: []string{"v1"},
290299
},
@@ -305,15 +314,15 @@ func webhookMutatingWebhookConfiguration(namespace, serviceName string, secret *
305314
Name: "mutate-skyhook.nvidia.com",
306315
ClientConfig: webhookClient(serviceName, namespace, "/mutate-skyhook-nvidia-com-v1alpha1-skyhook", secret),
307316
FailurePolicy: ptr(admissionregistrationv1.Fail),
308-
Rules: webhookRule(),
317+
Rules: mutatingWebhookRules(),
309318
SideEffects: ptr(admissionregistrationv1.SideEffectClassNone),
310319
AdmissionReviewVersions: []string{"v1"},
311320
},
312321
{
313322
Name: "mutate-deploymentpolicy.nvidia.com",
314323
ClientConfig: webhookClient(serviceName, namespace, "/mutate-skyhook-nvidia-com-v1alpha1-deploymentpolicy", secret),
315324
FailurePolicy: ptr(admissionregistrationv1.Fail),
316-
Rules: webhookRule(),
325+
Rules: mutatingWebhookRules(),
317326
SideEffects: ptr(admissionregistrationv1.SideEffectClassNone),
318327
AdmissionReviewVersions: []string{"v1"},
319328
},
@@ -358,7 +367,7 @@ func webhookClient(serviceName, namespace, path string, secret *corev1.Secret) a
358367
}
359368
}
360369

361-
func webhookRule() []admissionregistrationv1.RuleWithOperations {
370+
func validatingWebhookRules() []admissionregistrationv1.RuleWithOperations {
362371
return []admissionregistrationv1.RuleWithOperations{
363372
{
364373
Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.Create, admissionregistrationv1.Update},
@@ -379,6 +388,27 @@ func webhookRule() []admissionregistrationv1.RuleWithOperations {
379388
}
380389
}
381390

391+
func mutatingWebhookRules() []admissionregistrationv1.RuleWithOperations {
392+
return []admissionregistrationv1.RuleWithOperations{
393+
{
394+
Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.Create, admissionregistrationv1.Update},
395+
Rule: admissionregistrationv1.Rule{
396+
APIGroups: []string{v1alpha1.GroupVersion.Group},
397+
APIVersions: []string{v1alpha1.GroupVersion.Version},
398+
Resources: []string{"skyhooks"},
399+
},
400+
},
401+
{
402+
Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.Create, admissionregistrationv1.Update},
403+
Rule: admissionregistrationv1.Rule{
404+
APIGroups: []string{v1alpha1.GroupVersion.Group},
405+
APIVersions: []string{v1alpha1.GroupVersion.Version},
406+
Resources: []string{"deploymentpolicies"},
407+
},
408+
},
409+
}
410+
}
411+
382412
// validatingWebhookNeedsUpdate checks if a validating webhook needs to be updated with new CABundle or Rules
383413
// Returns true if updates were made to the webhook
384414
func validatingWebhookNeedsUpdate(webhook *admissionregistrationv1.ValidatingWebhook, caBundle []byte, expectedRules []admissionregistrationv1.RuleWithOperations) bool {

operator/internal/controller/webhook_controller_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,15 +254,15 @@ var _ = Describe("WebhookController", Ordered, func() {
254254
}
255255

256256
caBundle := []byte("new-ca")
257-
expectedRules := webhookRule()
257+
expectedRules := validatingWebhookRules()
258258

259259
needsUpdate := validatingWebhookNeedsUpdate(&webhook, caBundle, expectedRules)
260260
Expect(needsUpdate).To(BeTrue(), "should detect rules mismatch")
261261
Expect(webhook.Rules).To(Equal(expectedRules), "rules should be updated")
262262
})
263263

264264
It("should not update when rules are identical", func() {
265-
expectedRules := webhookRule()
265+
expectedRules := validatingWebhookRules()
266266

267267
webhook := admissionregistrationv1.ValidatingWebhook{
268268
ClientConfig: admissionregistrationv1.WebhookClientConfig{
@@ -278,7 +278,7 @@ var _ = Describe("WebhookController", Ordered, func() {
278278
})
279279

280280
It("should update CABundle when empty", func() {
281-
expectedRules := webhookRule()
281+
expectedRules := mutatingWebhookRules()
282282

283283
webhook := admissionregistrationv1.MutatingWebhook{
284284
ClientConfig: admissionregistrationv1.WebhookClientConfig{

0 commit comments

Comments
 (0)