-
Notifications
You must be signed in to change notification settings - Fork 425
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🐛 Add support for empty maps or lists #863
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -120,6 +120,18 @@ type CronJobSpec struct { | |
// +kubebuilder:example={{nested: {foo: "baz", bar: true}},{nested: {bar: false}}} | ||
DefaultedObject []RootObject `json:"defaultedObject"` | ||
|
||
// This tests that empty slice defaulting can be performed. | ||
// +kubebuilder:default={} | ||
DefaultedEmptySlice []string `json:"defaultedEmptySlice"` | ||
|
||
// This tests that an empty object defaulting can be performed on a map. | ||
// +kubebuilder:default={} | ||
DefaultedEmptyMap map[string]string `json:"defaultedEmptyMap"` | ||
|
||
// This tests that an empty object defaulting can be performed on an object. | ||
// +kubebuilder:default={} | ||
DefaultedEmptyObject EmpiableObject `json:"defaultedEmptyObject"` | ||
|
||
// This tests that pattern validator is properly applied. | ||
// +kubebuilder:validation:Pattern=`^$|^((https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$` | ||
PatternObject string `json:"patternObject"` | ||
|
@@ -297,6 +309,13 @@ type MinMaxObject struct { | |
Baz string `json:"baz,omitempty"` | ||
} | ||
|
||
type EmpiableObject struct { | ||
|
||
// +kubebuilder:default=forty-two | ||
Foo string `json:"foo,omitempty"` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you add a default to the field so that we can prove that the empty default on the parent triggers the inner field to be defaulted. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So with a modified version of CRD, where only these 2 new fields are present, this is how the applied CR looks like: kind: CronJob
apiVersion: testdata.kubebuilder.io/v1
metadata:
name: test
namespace: default
spec: {} results in apiVersion: testdata.kubebuilder.io/v1
kind: CronJob
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"testdata.kubebuilder.io/v1","kind":"CronJob","metadata":{"annotations":{},"name":"test","namespace":"default"},"spec":{}}
creationTimestamp: "2023-11-24T16:21:31Z"
generation: 1
name: test
namespace: default
resourceVersion: "23165"
uid: d86f95e1-54be-4e04-b789-cb997bc3dd17
spec:
defaultedEmptyObject:
foo: forty-two
defaultedEmptySlice: [] There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @JoelSpeed Do you think all the comments are addressed? This is quite useful functionality, and it would be best to avoid manually patching resource, and rely on the annotation instead. |
||
Bar string `json:"bar,omitempty"` | ||
} | ||
|
||
type unexportedStruct struct { | ||
// This tests that exported fields are not skipped in the schema generation | ||
Foo string `json:"foo"` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is
{}
a valid default for slice?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question, this needs to be fixed. CRD does not complain for deafult: [] though
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Everything is fixed in the current commit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems like
{}
is the correct syntax for an empty array.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is strange. But I guess fine given it's not JSON but our custom syntax (?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree it's strange, but too late to change it now? Probably a reason for not using the obvious
[]
for arrays in marker syntax?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup seems definitely too late to change it now. Given that non-empty arrays worked already in the past :)