Skip to content

Commit 04e6d44

Browse files
committed
feat(crdvalidation): add messageExpression support to XValidation marker
1 parent e159968 commit 04e6d44

10 files changed

+125
-101
lines changed

pkg/crd/markers/validation.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,9 @@ func isIntegral(value float64) bool {
309309
// This marker may be repeated to specify multiple expressions, all of
310310
// which must evaluate to true.
311311
type XValidation struct {
312-
Rule string
313-
Message string `marker:",optional"`
312+
Rule string
313+
Message string `marker:",optional"`
314+
MessageExpression string `marker:"messageExpression,optional"`
314315
}
315316

316317
func (m Maximum) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
@@ -534,8 +535,9 @@ func (m XIntOrString) ApplyPriority() ApplyPriority {
534535

535536
func (m XValidation) ApplyToSchema(schema *apiext.JSONSchemaProps) error {
536537
schema.XValidations = append(schema.XValidations, apiext.ValidationRule{
537-
Rule: m.Rule,
538-
Message: m.Message,
538+
Rule: m.Rule,
539+
Message: m.Message,
540+
MessageExpression: m.MessageExpression,
539541
})
540542
return nil
541543
}

pkg/crd/markers/zz_generated.markerhelp.go

Lines changed: 55 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/crd/testdata/cronjob_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,10 @@ type CronJobSpec struct {
247247
// +kubebuilder:validation:XValidation:rule="true"
248248
StringWithEvenLength string `json:"stringWithEvenLength,omitempty"`
249249

250+
// Test of the expression-based validation with messageExpression marker.
251+
// +kubebuilder:validation:XValidation:rule="self.size() % 2 == 0",messageExpression="'Length has to be even but is ' + len(self.stringWithEvenLengthAndMessageExpression) + ' instead'"
252+
StringWithEvenLengthAndMessageExpression string `json:"stringWithEvenLengthAndMessageExpression,omitempty"`
253+
250254
// Checks that fixed-length arrays work
251255
Array [3]int `json:"array,omitempty"`
252256

@@ -336,7 +340,6 @@ type MinMaxObject struct {
336340
}
337341

338342
type EmpiableObject struct {
339-
340343
// +kubebuilder:default=forty-two
341344
Foo string `json:"foo,omitempty"`
342345
Bar string `json:"bar,omitempty"`

pkg/crd/testdata/testdata.kubebuilder.io_cronjobs.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6805,6 +6805,13 @@ spec:
68056805
- message: must have even length
68066806
rule: self.size() % 2 == 0
68076807
- rule: "true"
6808+
stringWithEvenLengthAndMessageExpression:
6809+
description: Test of the expression-based validation with
6810+
messageExpression marker.
6811+
type: string
6812+
x-kubernetes-validations:
6813+
- messageExpression: "'Length has to be even but is ' + len(self.stringWithEvenLengthAndMessageExpression) + ' instead'"
6814+
rule: self.size() % 2 == 0
68086815
structWithSeveralFields:
68096816
description: A struct that can only be entirely replaced
68106817
properties:

pkg/crd/zz_generated.markerhelp.go

Lines changed: 11 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/deepcopy/zz_generated.markerhelp.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/genall/zz_generated.markerhelp.go

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/rbac/zz_generated.markerhelp.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/schemapatcher/zz_generated.markerhelp.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/webhook/zz_generated.markerhelp.go

Lines changed: 26 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)