Skip to content

controller-gen: k8s.io/api/core/v1.Container ports are broken for v1beta1 CRDs on k8s v1.18 #529

@estroz

Description

@estroz

From the original issue operator-framework/operator-sdk#3235:

An api/v1/types.go containing k8s.io/api/core/v1.Container:

// +kubebuilder:object:generate=true
// +groupName=example.com
package v1

import (
	"k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/scheme"
)

var (
	GroupVersion  = schema.GroupVersion{Group: "example.com", Version: "v1"}
	SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
	AddToScheme   = SchemeBuilder.AddToScheme
)

type AppSpec struct {
	Containers v1.Container `json:"container"`
}

type AppStatus struct{}

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status

type App struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   AppSpec   `json:"spec,omitempty"`
	Status AppStatus `json:"status,omitempty"`
}

Then:

$ go get sigs.k8s.io/controller-tools/cmd/controller-gen@master
go: found sigs.k8s.io/controller-tools/cmd/controller-gen in sigs.k8s.io/controller-tools v0.4.2-0.20201118235450-895eccc97eb5
$ controller-gen crd:crdVersions=v1beta1 paths=./api/v1/... output:crd:artifacts:config=.
Warning: default unsupported in CRD version v1beta1, v1 required. Removing defaults.
$ kind create cluster --image=kindest/node:v1.18.8 # Kubernetes v1.18 cluster
...
$ kubectl apply -f example.com_apps.yaml
The CustomResourceDefinition "apps.example.com" is invalid: spec.validation.openAPIV3Schema.properties[spec].properties[container].properties[ports].items.properties[protocol].default: Required value: this property is in x-kubernetes-list-map-keys, so it must have a default or be a required property

Removing protocol from the x-kubernetes-list-map-keys list fixes this (as expected) since defaulting is not supported in v1beta1. This was fixed for v1 CRDs but the fixes (listed below) were not tested on v1beta1 CRDs afaict.

Related issues: #444, #445, kubernetes/kubernetes#91395

/kind bug

/cc @munnerz @vincepri

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.lifecycle/rottenDenotes an issue or PR that has aged beyond stale and will be auto-closed.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions