kubernetes-sigs / kubernetes-sigs/controller-tools
Promote minimized CRD ObjectMeta type to be it's own named type
- Dominant language
- Go
- Stars
- 868
- Forks
- 482
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 8
Description
When building tooling that looks at CRDs or works with k8s yaml, understanding the types that are are being used is helpful for custom validations, rewrites, generation, and other rules.
In CRDs when someone references `ObjectMeta`, rather than getting all of `ObjectMeta` the CRD has a minimal representation, this was done in https://github.com/kubernetes-sigs/controller-tools/pull/557#discussion_r1179261104 which causes issues for our tooling when, specifically, `PodTemplateSpec` which contains `ObjectMeta` in it is used in some CRDs, this results in only parts of `ObjectMeta` being present in the resulting schema.
While we have a work around to look for the minimized structure of `ObjectMeta` that is written in CRDs, it's essentially a fuzzy match dependent on however the `code-generator` behaves, which isn't a reliable way to make tooling.
Rather than writing a minimized version of `ObjectMeta`, instead I propose adding a new type to the k8s schema that represents an embedded `ObjectMeta` that has a stronger guarantee of stability. For example `MinimalObjectMeta` or something which would be what is currently written in CRDs. This would allow for some level of stability for what we can expect in a schema where that occurs instead of needing to guess what fields the `code-generator` us using today if we want to apply custom tooling to `ObjectMeta` types.
This came up in part because the fields that are added are a mix of the fields from various sections in the docs about `ObjectMeta` https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/object-meta/ where initial thinking may be the non-service and writable fields would be available in CRDs but instead the mix leads to confusion which a named type would solve.
Related
https://github.com/kubernetes-sigs/controller-tools/pull/557/files#diff-d44a1fc23240ca1bdc8c22b4e23fe14ce4366bb1624542b417de0008d68a8e9aL115
https://github.com/kubernetes/kubernetes/issues/103739
Contributor guide
Assessment
This issue has not been assessed yet.