diff --git a/pkg/webhook/admission/response.go b/pkg/webhook/admission/response.go index 44ebe52308..38c57eee69 100644 --- a/pkg/webhook/admission/response.go +++ b/pkg/webhook/admission/response.go @@ -107,3 +107,10 @@ func validationResponseFromStatus(allowed bool, status metav1.Status) Response { } return resp } + +// WithWarnings adds the given warnings to the Response. +// If any warnings were already given, they will not be overwritten. +func (r Response) WithWarnings(warnings ...string) Response { + r.AdmissionResponse.Warnings = append(r.AdmissionResponse.Warnings, warnings...) + return r +} diff --git a/pkg/webhook/admission/response_test.go b/pkg/webhook/admission/response_test.go index accf3d6b26..c3af90e264 100644 --- a/pkg/webhook/admission/response_test.go +++ b/pkg/webhook/admission/response_test.go @@ -216,4 +216,30 @@ var _ = Describe("Admission Webhook Response Helpers", func() { Expect(resp).To(Equal(expected)) }) }) + + Describe("WithWarnings", func() { + It("should add the warnings to the existing response without removing any existing warnings", func() { + initialResponse := Response{ + AdmissionResponse: admissionv1beta1.AdmissionResponse{ + Allowed: true, + Result: &metav1.Status{ + Code: http.StatusOK, + }, + Warnings: []string{"existing-warning"}, + }, + } + warnings := []string{"additional-warning-1", "additional-warning-2"} + expectedResponse := Response{ + AdmissionResponse: admissionv1beta1.AdmissionResponse{ + Allowed: true, + Result: &metav1.Status{ + Code: http.StatusOK, + }, + Warnings: []string{"existing-warning", "additional-warning-1", "additional-warning-2"}, + }, + } + + Expect(initialResponse.WithWarnings(warnings...)).To(Equal(expectedResponse)) + }) + }) })