Skip to content

Commit 5eb6d26

Browse files
committed
fixup! feat: Add preflight checks framework
Derive cause type from name in the check result
1 parent 3211e7a commit 5eb6d26

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

pkg/webhook/preflight/preflight.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package preflight
44

55
import (
66
"context"
7+
"fmt"
78
"net/http"
89
"sync"
910

@@ -14,11 +15,18 @@ import (
1415
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
1516
)
1617

18+
type Cause struct {
19+
Message string
20+
Field string
21+
}
22+
1723
type CheckResult struct {
24+
Name string
25+
1826
Allowed bool
1927
Error bool
2028

21-
Causes []metav1.StatusCause
29+
Causes []Cause
2230
Warnings []string
2331
}
2432

@@ -117,7 +125,14 @@ func (h *WebhookHandler) Handle(ctx context.Context, req admission.Request) admi
117125
resp.Allowed = false
118126
}
119127

120-
resp.Result.Details.Causes = append(resp.Result.Details.Causes, result.Causes...)
128+
for _, cause := range result.Causes {
129+
resp.Result.Details.Causes = append(resp.Result.Details.Causes, metav1.StatusCause{
130+
Type: metav1.CauseType(fmt.Sprintf("FailedPreflight%s", result.Name)),
131+
Message: cause.Message,
132+
Field: cause.Field,
133+
})
134+
}
135+
121136
resp.Warnings = append(resp.Warnings, result.Warnings...)
122137
}
123138

pkg/webhook/preflight/preflight_test.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,10 @@ func TestHandle(t *testing.T) {
193193
checks: []Check{
194194
func(ctx context.Context) CheckResult {
195195
return CheckResult{
196+
Name: "Test1",
196197
Allowed: false,
197-
Causes: []metav1.StatusCause{
198+
Causes: []Cause{
198199
{
199-
Type: metav1.CauseTypeFieldValueInvalid,
200200
Field: "spec.test",
201201
Message: "test failed",
202202
},
@@ -215,7 +215,7 @@ func TestHandle(t *testing.T) {
215215
Details: &metav1.StatusDetails{
216216
Causes: []metav1.StatusCause{
217217
{
218-
Type: metav1.CauseTypeFieldValueInvalid,
218+
Type: "FailedPreflightTest1",
219219
Field: "spec.test",
220220
Message: "test failed",
221221
},
@@ -280,12 +280,12 @@ func TestHandle(t *testing.T) {
280280
checks: []Check{
281281
func(ctx context.Context) CheckResult {
282282
return CheckResult{
283+
Name: "Test1",
283284
Allowed: false,
284285
Error: true,
285286

286-
Causes: []metav1.StatusCause{
287+
Causes: []Cause{
287288
{
288-
Type: metav1.CauseTypeInternal,
289289
Message: "internal error",
290290
},
291291
},
@@ -297,10 +297,10 @@ func TestHandle(t *testing.T) {
297297
checks: []Check{
298298
func(ctx context.Context) CheckResult {
299299
return CheckResult{
300+
Name: "Test2",
300301
Allowed: false,
301-
Causes: []metav1.StatusCause{
302+
Causes: []Cause{
302303
{
303-
Type: metav1.CauseTypeFieldValueInvalid,
304304
Message: "check failed",
305305
},
306306
},
@@ -312,6 +312,7 @@ func TestHandle(t *testing.T) {
312312
checks: []Check{
313313
func(ctx context.Context) CheckResult {
314314
return CheckResult{
315+
Name: "Test3",
315316
Allowed: true,
316317
}
317318
},
@@ -328,11 +329,11 @@ func TestHandle(t *testing.T) {
328329
Details: &metav1.StatusDetails{
329330
Causes: []metav1.StatusCause{
330331
{
331-
Type: metav1.CauseTypeFieldValueInvalid,
332+
Type: "FailedPreflightTest2",
332333
Message: "check failed",
333334
},
334335
{
335-
Type: metav1.CauseTypeInternal,
336+
Type: "FailedPreflightTest1",
336337
Message: "internal error",
337338
},
338339
},
@@ -417,11 +418,11 @@ func TestHandleCancelledContext(t *testing.T) {
417418
select {
418419
case <-ctx.Done():
419420
return CheckResult{
421+
Name: "Test1",
420422
Allowed: false,
421423
Error: true,
422-
Causes: []metav1.StatusCause{
424+
Causes: []Cause{
423425
{
424-
Type: metav1.CauseTypeInternal,
425426
Message: "context cancelled",
426427
},
427428
},
@@ -434,11 +435,11 @@ func TestHandleCancelledContext(t *testing.T) {
434435
select {
435436
case <-ctx.Done():
436437
return CheckResult{
438+
Name: "Test2",
437439
Allowed: false,
438440
Error: true,
439-
Causes: []metav1.StatusCause{
441+
Causes: []Cause{
440442
{
441-
Type: metav1.CauseTypeInternal,
442443
Message: "context cancelled",
443444
},
444445
},
@@ -462,11 +463,11 @@ func TestHandleCancelledContext(t *testing.T) {
462463
Details: &metav1.StatusDetails{
463464
Causes: []metav1.StatusCause{
464465
{
465-
Type: metav1.CauseTypeInternal,
466+
Type: "FailedPreflightTest1",
466467
Message: "context cancelled",
467468
},
468469
{
469-
Type: metav1.CauseTypeInternal,
470+
Type: "FailedPreflightTest2",
470471
Message: "context cancelled",
471472
},
472473
},

0 commit comments

Comments
 (0)