Skip to content
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

[WIP] switch from apiextensionsv1beta1 to apiextensionsv1 #321

Closed
wants to merge 4 commits into from

Conversation

abdulmi
Copy link

@abdulmi abdulmi commented Jun 6, 2022

Issue: #323

Switching from apiextensionsv1beta1 to apiextensionsv1 to make m3db-operator compatible with kubernetes 1.22 (kubernetes 1.21 has EOL in July 2022 in AKS :()

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@abdulmi abdulmi changed the title switch from apiextensionsv1beta1 to apiextensionsv1 [WIP] switch from apiextensionsv1beta1 to apiextensionsv1 Jun 8, 2022
@abdulmi
Copy link
Author

abdulmi commented Jun 13, 2022

Hi @schallert, it seems that you worked on the validation stuff for m3db-operator. It would be great if you can give some pointers here. I tried to upgrade the apiextensions api to from v1beta to v1, also forked the dependency github.com/ant31/crd-validation to update the api there. However, after doing this and making the changes in this PR, the operator dies with the following schema validation errors:

{"level":"fatal","ts":"2022-06-13T17:26:17.230Z","msg":"error running controller","error":"could not create or update CRD: error creating CRD 'm3dbclusters.operator.m3db.io': CustomResourceDefinition.apiextensions.k8s.io \"m3dbclusters.operator.m3db.io\" is invalid: [spec.validation.openAPIV3Schema.properties[spec].properties[envVars].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[externalCoordinator].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[env].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[emptyDir].properties[sizeLimit].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[projected].properties[sources].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[namespaces].items.type: Required value: must not be empty for specified array items, spec.validation.openAPIV3Schema.properties[spec].properties[podIdentityConfig].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[env].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[emptyDir].properties[sizeLimit].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[projected].properties[sources].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields]","errorVerbose":"CustomResourceDefinition.apiextensions.k8s.io \"m3dbclusters.operator.m3db.io\" is invalid: [spec.validation.openAPIV3Schema.properties[spec].properties[envVars].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[externalCoordinator].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[env].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[initContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[emptyDir].properties[sizeLimit].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[initVolumes].items.properties[projected].properties[sources].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[namespaces].items.type: Required value: must not be empty for specified array items, spec.validation.openAPIV3Schema.properties[spec].properties[podIdentityConfig].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[env].items.properties[valueFrom].properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[postStart].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[lifecycle].properties[preStop].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[livenessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[readinessProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[httpGet].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[0].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].anyOf[1].type: Forbidden: must be empty to be structural, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarContainers].items.properties[startupProbe].properties[tcpSocket].properties[port].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[emptyDir].properties[sizeLimit].type: Required value: must not be empty for specified object fields, spec.validation.openAPIV3Schema.properties[spec].properties[sidecarVolumes].items.properties[projected].properties[sources].items.properties[downwardAPI].properties[items].items.properties[resourceFieldRef].properties[divisor].type: Required value: must not be empty for specified object fields]\nerror creating CRD 'm3dbclusters.operator.m3db.io'\ncould not create or update CRD"}

I looked at some fields from the error like divisor, and it does seem indeed that it doesn't have a type in the openapi generated code https://github.com/m3db/m3db-operator/blob/master/pkg/apis/m3dboperator/v1alpha1/openapi_generated.go#L9759-L9764. Should I try regenerating the schema or is there a bigger change that must be done ? I would appreciate any insights here, since this is my first time working with kubernetes operators and couldn't find much online

@schallert
Copy link
Collaborator

Handled by v0.14.0.

@schallert schallert closed this Aug 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants