kubernetes-sigs / controller-tools

Tools to use with the controller-runtime libraries
Apache License 2.0
699 stars 405 forks source link

Promote minimized CRD ObjectMeta type to be it's own named type #805

Open jessefeinman opened 1 year ago

jessefeinman commented 1 year ago

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

adusumillipraveen commented 11 months ago

Is there a plan to change this ?

We have a similar issue while using Gitops. Flux controllers use ObjectMeta for the CRDs. As the tool doesn't generate full schema for metadata, few formatting issues escape our CI checks and cause issues. More details in https://github.com/fluxcd/flux2/issues/4038

k8s-triage-robot commented 5 months ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

k8s-triage-robot commented 4 months ago

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle rotten

danielwilsonkainos commented 4 months ago

/remove-lifecycle rotten

k8s-triage-robot commented 1 month ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

k8s-triage-robot commented 1 week ago

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle rotten

timja commented 1 week ago

/remove-lifecycle rotten