From 0463e8e8e2a11167697b5dace14697ca34fed019 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 18:51:21 +0200 Subject: [PATCH 1/7] Enable ssatags KAL linter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- .golangci-kal.yml | 25 +++++++++++++++++++------ hack/tools/.custom-gcl.yaml | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/.golangci-kal.yml b/.golangci-kal.yml index 84168c8224f1..be62664ab5bd 100644 --- a/.golangci-kal.yml +++ b/.golangci-kal.yml @@ -27,6 +27,7 @@ linters: # having the `omitempty` value in their `json` tag where appropriate. - "optionalorrequired" # Every field should be marked as `+optional` or `+required`. - "requiredfields" # Required fields should not be pointers, and should not have `omitempty`. + - "ssatags" # Ensure array fields have the appropriate listType markers - "statusoptional" # Ensure all first children within status should be optional. - "statussubresource" # All root objects that have a `status` field should have a status subresource. - "uniquemarkers" # Ensure that types and fields do not contain more than a single definition of a marker that should only be present once. @@ -44,19 +45,21 @@ linters: isFirstField: Warn # Require conditions to be the first field in the status struct. usePatchStrategy: Forbid # Require conditions to be the first field in the status struct. useProtobuf: Forbid # We don't use protobuf, so protobuf tags are not required. - optionalFields: + optionalfields: pointers: preference: WhenRequired # Always | WhenRequired # Whether to always require pointers, or only when required. Defaults to `Always`. policy: SuggestFix # SuggestFix | Warn # The policy for pointers in optional fields. Defaults to `SuggestFix`. omitempty: policy: SuggestFix # SuggestFix | Warn | Ignore # The policy for omitempty in optional fields. Defaults to `SuggestFix`. - # jsonTags: + # jsontags: # jsonTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$" # The default regex is appropriate for our use case. - # optionalOrRequired: + # optionalorrequired: # preferredOptionalMarker: optional | kubebuilder:validation:Optional # The preferred optional marker to use, fixes will suggest to use this marker. Defaults to `optional`. # preferredRequiredMarker: required | kubebuilder:validation:Required # The preferred required marker to use, fixes will suggest to use this marker. Defaults to `required`. - # requiredFields: + # requiredfields: # pointerPolicy: Warn | SuggestFix # Defaults to `SuggestFix`. We want our required fields to not be pointers. +# ssatags: +# listTypeSetUsage: Warn | Ignore # The policy for listType=set usage on object arrays. Defaults to `Warn`. exclusions: generated: strict @@ -83,23 +86,33 @@ linters: text: "Conditions field must be a slice of metav1.Condition" linters: - kubeapilinter + - path: "api/addons/v1beta2|api/bootstrap/kubeadm/v1beta2|api/controlplane/kubeadm/v1beta2|api/core/v1beta2|api/ipam/v1beta2|api/runtime/v1beta2" + text: "ssatags: Conditions should have a listType marker for proper Server-Side Apply behavior" + linters: + - kubeapilinter - path: "api/core/v1beta2" text: "field Conditions type Conditions must have a maximum items, add kubebuilder:validation:MaxItems marker" linters: - kubeapilinter ## Excludes for current clusterctl v1alpha3 and Runtime Hooks v1alpha1 apiVersions (can be fixed once we bump their apiVersion). + # Note: The types in api/runtime/hooks/v1alpha1 are not CRDs, so e.g. SSA markers don't make sense there. - path: "cmd/clusterctl/api/v1alpha3|api/runtime/hooks/v1alpha1" - text: "optionalfields|maxlength" + text: "optionalfields|maxlength|ssatags" linters: - kubeapilinter ## Excludes for JSONSchemaProps - # controller-gen does not allow to add MaxItems to Schemaless fields + # controller-gen does not allow to add MaxItems to Schemaless fields: https://github.com/kubernetes-sigs/kube-api-linter/issues/120 - path: "api/core/v1beta2/clusterclass_types.go" text: "maxlength: field (AllOf|OneOf|AnyOf) must have a maximum items, add kubebuilder:validation:MaxItems marker" linters: - kubeapilinter + # controller-gen does not allow to add listType to Schemaless fields: https://github.com/kubernetes-sigs/kube-api-linter/issues/120 + - path: "api/core/v1beta2/clusterclass_types.go" + text: "ssatags: (AllOf|OneOf|AnyOf) should have a listType marker for proper Server-Side Apply behavior" + linters: + - kubeapilinter # We want to align to the JSON tags of the CustomResourceDefinition fields. - path: "api/core/v1beta2/clusterclass_types" text: "field (XPreserveUnknownFields|XPreserveUnknownFields|XValidations|XMetadata|XIntOrString) json tag does not match pattern" diff --git a/hack/tools/.custom-gcl.yaml b/hack/tools/.custom-gcl.yaml index 39af65743d03..0745d94d1367 100644 --- a/hack/tools/.custom-gcl.yaml +++ b/hack/tools/.custom-gcl.yaml @@ -3,4 +3,4 @@ name: golangci-lint-kube-api-linter destination: ./bin plugins: - module: 'sigs.k8s.io/kube-api-linter' - version: v0.0.0-20250626111229-e719da12d840 + version: v0.0.0-20250710131328-b566fe88b732 From f5ac2b2e944652c0c56d882fdea49f57fb26edbe Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 19:56:34 +0200 Subject: [PATCH 2/7] Mark all []string array fields as atomic --- api/bootstrap/kubeadm/v1beta2/kubeadm_types.go | 16 ++++++++++++++++ .../kubeadm/v1beta2/kubeadmconfig_types.go | 6 ++++++ api/core/v1beta2/cluster_types.go | 2 ++ api/core/v1beta2/clusterclass_types.go | 4 ++++ api/core/v1beta2/machinehealthcheck_types.go | 1 + api/core/v1beta2/machinepool_types.go | 2 ++ 6 files changed, 31 insertions(+) diff --git a/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go b/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go index 30ca1e718ef3..18aa30ec23f0 100644 --- a/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go +++ b/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go @@ -99,6 +99,7 @@ type InitConfiguration struct { // The list of phases can be obtained with the "kubeadm init --help" command. // This option takes effect only on Kubernetes >=1.22.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=50 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -211,6 +212,7 @@ type APIServer struct { // certSANs sets extra Subject Alternative Names for the API Server signing cert. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=253 @@ -357,6 +359,7 @@ type NodeRegistrationOptions struct { // ignorePreflightErrors provides a slice of pre-flight errors to be ignored when the current node is registered, e.g. 'IsPrivilegedUser,Swap'. // Value 'all' ignores errors from all checks. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=50 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=512 @@ -383,31 +386,38 @@ type BootstrapToken struct { // Used for joining nodes in the cluster. // +required Token *BootstrapTokenString `json:"token"` + // description sets a human-friendly message why this token exists and what it's used // for, so other administrators can know its purpose. // +optional // +kubebuilder:validation:MinLength=1 // +kubebuilder:validation:MaxLength=512 Description string `json:"description,omitempty"` + // ttlSeconds defines the time to live for this token. Defaults to 24h. // Expires and ttlSeconds are mutually exclusive. // +optional // +kubebuilder:validation:Minimum=0 TTLSeconds *int32 `json:"ttlSeconds,omitempty"` + // expires specifies the timestamp when this token expires. Defaults to being set // dynamically at runtime based on the ttlSeconds. Expires and ttlSeconds are mutually exclusive. // +optional Expires *metav1.Time `json:"expires,omitempty"` + // usages describes the ways in which this token can be used. Can by default be used // for establishing bidirectional trust, but that can be changed here. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 Usages []string `json:"usages,omitempty"` + // groups specifies the extra groups that this token will authenticate as when/if // used for authentication // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -461,6 +471,7 @@ type LocalEtcd struct { // serverCertSANs sets extra Subject Alternative Names for the etcd server signing cert. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=253 @@ -468,6 +479,7 @@ type LocalEtcd struct { // peerCertSANs sets extra Subject Alternative Names for the etcd peer signing cert. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=253 @@ -479,6 +491,7 @@ type LocalEtcd struct { type ExternalEtcd struct { // endpoints of etcd members. Required for ExternalEtcd. // +required + // +listType=atomic // +kubebuilder:validation:MinItems=1 // +kubebuilder:validation:MaxItems=50 // +kubebuilder:validation:items:MinLength=1 @@ -538,6 +551,7 @@ type JoinConfiguration struct { // The list of phases can be obtained with the "kubeadm init --help" command. // This option takes effect only on Kubernetes >=1.22.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=50 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -606,6 +620,7 @@ type BootstrapTokenDiscovery struct { // ASN.1. These hashes can be calculated using, for example, OpenSSL: // openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=512 @@ -743,6 +758,7 @@ type KubeConfigAuthExec struct { // args is the arguments to pass to the command when executing it. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=512 diff --git a/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go b/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go index a61053d07034..ef5245eb883c 100644 --- a/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go +++ b/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go @@ -82,6 +82,7 @@ type KubeadmConfigSpec struct { // module. bootcmd will run on every boot, 'cloud-init-per' command can be used to make bootcmd run exactly // once. This is typically run in the cloud-init.service systemd unit. This has no effect in Ignition. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=10240 @@ -91,6 +92,7 @@ type KubeadmConfigSpec struct { // With cloud-init, this is prepended to the runcmd module configuration, and is typically executed in // the cloud-final.service systemd unit. In Ignition, this is prepended to /etc/kubeadm.sh. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=10240 @@ -100,6 +102,7 @@ type KubeadmConfigSpec struct { // With cloud-init, this is appended to the runcmd module configuration, and is typically executed in // the cloud-final.service systemd unit. In Ignition, this is appended to /etc/kubeadm.sh. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=10240 @@ -766,6 +769,7 @@ type User struct { // sshAuthorizedKeys specifies a list of ssh authorized keys for the user // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=2048 @@ -776,6 +780,7 @@ type User struct { type NTP struct { // servers specifies which NTP servers to use // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=512 @@ -863,6 +868,7 @@ type Filesystem struct { // extraOpts defined extra options to add to the command for creating the file system. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 diff --git a/api/core/v1beta2/cluster_types.go b/api/core/v1beta2/cluster_types.go index 845ea9f8bf45..35fdb4cc1deb 100644 --- a/api/core/v1beta2/cluster_types.go +++ b/api/core/v1beta2/cluster_types.go @@ -813,6 +813,7 @@ type MachinePoolTopology struct { // failureDomains is the list of failure domains the machine pool will be created in. // Must match a key in the FailureDomains map stored on the cluster object. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -943,6 +944,7 @@ type ClusterNetwork struct { type NetworkRanges struct { // cidrBlocks is a list of CIDR blocks. // +required + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=43 diff --git a/api/core/v1beta2/clusterclass_types.go b/api/core/v1beta2/clusterclass_types.go index a3f5afd5e978..319d8d0cfccd 100644 --- a/api/core/v1beta2/clusterclass_types.go +++ b/api/core/v1beta2/clusterclass_types.go @@ -460,6 +460,7 @@ type MachinePoolClass struct { // Must match a key in the FailureDomains map stored on the cluster object. // NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -655,6 +656,7 @@ type JSONSchemaProps struct { // required specifies which fields of an object are required. // NOTE: Can only be set if type is object. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -1053,6 +1055,7 @@ type PatchSelectorMatch struct { type PatchSelectorMatchMachineDeploymentClass struct { // names selects templates by class names. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 @@ -1064,6 +1067,7 @@ type PatchSelectorMatchMachineDeploymentClass struct { type PatchSelectorMatchMachinePoolClass struct { // names selects templates by class names. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 diff --git a/api/core/v1beta2/machinehealthcheck_types.go b/api/core/v1beta2/machinehealthcheck_types.go index c45841dc8e23..376d45134777 100644 --- a/api/core/v1beta2/machinehealthcheck_types.go +++ b/api/core/v1beta2/machinehealthcheck_types.go @@ -231,6 +231,7 @@ type MachineHealthCheckStatus struct { // targets shows the current list of machines the machine health check is watching // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=10000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=253 diff --git a/api/core/v1beta2/machinepool_types.go b/api/core/v1beta2/machinepool_types.go index 0292d8f6faa3..be041f3d3a4d 100644 --- a/api/core/v1beta2/machinepool_types.go +++ b/api/core/v1beta2/machinepool_types.go @@ -86,6 +86,7 @@ type MachinePoolSpec struct { // providerIDList are the identification IDs of machine instances provided by the provider. // This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=10000 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=512 @@ -93,6 +94,7 @@ type MachinePoolSpec struct { // failureDomains is the list of failure domains this MachinePool should be attached to. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 // +kubebuilder:validation:items:MinLength=1 // +kubebuilder:validation:items:MaxLength=256 From a90c31fd7dd6d32ef980f45c4ea780efb6afd548 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 20:04:10 +0200 Subject: [PATCH 3/7] Mark all remaining KubeadmConfig array fields as atomic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/bootstrap/kubeadm/v1beta2/kubeadm_types.go | 9 +++++++++ api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go b/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go index 18aa30ec23f0..2eb91cbe75ca 100644 --- a/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go +++ b/api/bootstrap/kubeadm/v1beta2/kubeadm_types.go @@ -77,6 +77,7 @@ type InitConfiguration struct { // bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create. // This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 BootstrapTokens []BootstrapToken `json:"bootstrapTokens,omitempty"` @@ -200,6 +201,7 @@ type APIServer struct { // extraVolumes is an extra set of host volumes, mounted to the control plane component. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraVolumes []HostPathMount `json:"extraVolumes,omitempty"` @@ -207,6 +209,7 @@ type APIServer struct { // Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default. // This option takes effect only on Kubernetes >=1.31.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"` @@ -236,6 +239,7 @@ type ControllerManager struct { // extraVolumes is an extra set of host volumes, mounted to the control plane component. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraVolumes []HostPathMount `json:"extraVolumes,omitempty"` @@ -243,6 +247,7 @@ type ControllerManager struct { // Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default. // This option takes effect only on Kubernetes >=1.31.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"` } @@ -264,6 +269,7 @@ type Scheduler struct { // extraVolumes is an extra set of host volumes, mounted to the control plane component. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraVolumes []HostPathMount `json:"extraVolumes,omitempty"` @@ -271,6 +277,7 @@ type Scheduler struct { // Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default. // This option takes effect only on Kubernetes >=1.31.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"` } @@ -466,6 +473,7 @@ type LocalEtcd struct { // Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default. // This option takes effect only on Kubernetes >=1.31.0. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 ExtraEnvs []EnvVar `json:"extraEnvs,omitempty"` @@ -768,6 +776,7 @@ type KubeConfigAuthExec struct { // are unioned with the host's environment, as well as variables client-go uses // to pass argument to the plugin. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Env []KubeConfigAuthExecEnv `json:"env,omitempty"` diff --git a/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go b/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go index ef5245eb883c..b177f9356df4 100644 --- a/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go +++ b/api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go @@ -66,6 +66,7 @@ type KubeadmConfigSpec struct { // files specifies extra files to be passed to user_data upon creation. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=200 Files []File `json:"files,omitempty"` @@ -75,6 +76,7 @@ type KubeadmConfigSpec struct { // mounts specifies a list of mount points to be setup. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Mounts []MountPoints `json:"mounts,omitempty"` @@ -110,6 +112,7 @@ type KubeadmConfigSpec struct { // users specifies extra users to add // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Users []User `json:"users,omitempty"` @@ -795,11 +798,13 @@ type NTP struct { type DiskSetup struct { // partitions specifies the list of the partitions to setup. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Partitions []Partition `json:"partitions,omitempty"` // filesystems specifies the list of file systems to setup. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Filesystems []Filesystem `json:"filesystems,omitempty"` } From 18f7f638191e55dc9a9eef06eafb9a2a0773c127 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 20:07:10 +0200 Subject: [PATCH 4/7] Mark all remaining ClusterResourceSet and ClusterResourceSetBinding array fields as atomic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/addons/v1beta2/clusterresourceset_types.go | 1 + api/addons/v1beta2/clusterresourcesetbinding_types.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/api/addons/v1beta2/clusterresourceset_types.go b/api/addons/v1beta2/clusterresourceset_types.go index afcd009827f3..8e8c6d95b45f 100644 --- a/api/addons/v1beta2/clusterresourceset_types.go +++ b/api/addons/v1beta2/clusterresourceset_types.go @@ -64,6 +64,7 @@ type ClusterResourceSetSpec struct { // resources is a list of Secrets/ConfigMaps where each contains 1 or more resources to be applied to remote clusters. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Resources []ResourceRef `json:"resources,omitempty"` diff --git a/api/addons/v1beta2/clusterresourcesetbinding_types.go b/api/addons/v1beta2/clusterresourcesetbinding_types.go index 43031e40c88b..cc992574805a 100644 --- a/api/addons/v1beta2/clusterresourcesetbinding_types.go +++ b/api/addons/v1beta2/clusterresourcesetbinding_types.go @@ -57,6 +57,7 @@ type ResourceSetBinding struct { // resources is a list of resources that the ClusterResourceSet has. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Resources []ResourceBinding `json:"resources,omitempty"` } @@ -137,6 +138,7 @@ type ClusterResourceSetBinding struct { type ClusterResourceSetBindingSpec struct { // bindings is a list of ClusterResourceSets and their resources. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Bindings []*ResourceSetBinding `json:"bindings,omitempty"` From 8fc263abfb044a5f092fa4474ffe43e1a5382b4a Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 20:15:42 +0200 Subject: [PATCH 5/7] Mark all remaining ClusterClass array fields as atomic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/core/v1beta2/clusterclass_types.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/api/core/v1beta2/clusterclass_types.go b/api/core/v1beta2/clusterclass_types.go index 319d8d0cfccd..776171268bc7 100644 --- a/api/core/v1beta2/clusterclass_types.go +++ b/api/core/v1beta2/clusterclass_types.go @@ -119,6 +119,7 @@ type ClusterClassSpec struct { // variables defines the variables which can be configured // in the Cluster topology and are then used in patches. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 Variables []ClusterClassVariable `json:"variables,omitempty"` @@ -126,6 +127,7 @@ type ClusterClassSpec struct { // referenced templates of a ClusterClass. // Note: Patches will be applied in the order of the array. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 Patches []ClusterClassPatch `json:"patches,omitempty"` } @@ -393,6 +395,7 @@ type MachineHealthCheckClass struct { // logical OR, i.e. if any of the conditions is met, the node is unhealthy. // // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 UnhealthyNodeConditions []UnhealthyNodeCondition `json:"unhealthyNodeConditions,omitempty"` @@ -745,6 +748,7 @@ type JSONSchemaProps struct { // enum is the list of valid values of the variable. // NOTE: Can be set for all types. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Enum []apiextensionsv1.JSON `json:"enum,omitempty"` @@ -975,6 +979,7 @@ type ClusterClassPatch struct { // Note: Patches will be applied in the order of the array. // Note: Exactly one of Definitions or External must be set. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 Definitions []PatchDefinition `json:"definitions,omitempty"` @@ -995,6 +1000,7 @@ type PatchDefinition struct { // Note: Patches will be applied in the order of the array. // +kubebuilder:validation:MaxItems=100 // +required + // +listType=atomic JSONPatches []JSONPatch `json:"jsonPatches"` } @@ -1251,6 +1257,7 @@ type ClusterClassStatus struct { // variables is a list of ClusterClassStatusVariable that are defined for the ClusterClass. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=1000 Variables []ClusterClassStatusVariable `json:"variables,omitempty"` @@ -1296,8 +1303,9 @@ type ClusterClassStatusVariable struct { DefinitionsConflict *bool `json:"definitionsConflict,omitempty"` // definitions is a list of definitions for a variable. - // +kubebuilder:validation:MaxItems=100 // +required + // +listType=atomic + // +kubebuilder:validation:MaxItems=100 Definitions []ClusterClassStatusVariableDefinition `json:"definitions"` } From 19c90e8a86ed8a9bd614dbdf807006c5d56a77dd Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 20:17:28 +0200 Subject: [PATCH 6/7] Mark all remaining Machine, MHC and MachinePool array fields as atomic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/core/v1beta2/common_types.go | 1 + api/core/v1beta2/machinehealthcheck_types.go | 1 + api/core/v1beta2/machinepool_types.go | 1 + 3 files changed, 3 insertions(+) diff --git a/api/core/v1beta2/common_types.go b/api/core/v1beta2/common_types.go index 0d46d4853879..4633ab28c723 100644 --- a/api/core/v1beta2/common_types.go +++ b/api/core/v1beta2/common_types.go @@ -303,6 +303,7 @@ type MachineAddress struct { // MachineAddresses is a slice of MachineAddress items to be used by infrastructure providers. // +kubebuilder:validation:MaxItems=32 +// +listType=atomic type MachineAddresses []MachineAddress // ObjectMeta is metadata that all persisted resources must have, which includes all objects diff --git a/api/core/v1beta2/machinehealthcheck_types.go b/api/core/v1beta2/machinehealthcheck_types.go index 376d45134777..c264255229d8 100644 --- a/api/core/v1beta2/machinehealthcheck_types.go +++ b/api/core/v1beta2/machinehealthcheck_types.go @@ -65,6 +65,7 @@ type MachineHealthCheckSpec struct { // logical OR, i.e. if any of the conditions is met, the node is unhealthy. // // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=100 UnhealthyNodeConditions []UnhealthyNodeCondition `json:"unhealthyNodeConditions,omitempty"` diff --git a/api/core/v1beta2/machinepool_types.go b/api/core/v1beta2/machinepool_types.go index be041f3d3a4d..eb1b8d3c6ba5 100644 --- a/api/core/v1beta2/machinepool_types.go +++ b/api/core/v1beta2/machinepool_types.go @@ -124,6 +124,7 @@ type MachinePoolStatus struct { // nodeRefs will point to the corresponding Nodes if it they exist. // +optional + // +listType=atomic // +kubebuilder:validation:MaxItems=10000 NodeRefs []corev1.ObjectReference `json:"nodeRefs,omitempty"` From 596994aadc840c1fe56cad3859bf2d25ce05a40b Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Wed, 9 Jul 2025 20:27:38 +0200 Subject: [PATCH 7/7] Regenerate manifests & OpenAPI --- api/core/v1beta2/zz_generated.openapi.go | 100 ++++++++++++++++++ ...strap.cluster.x-k8s.io_kubeadmconfigs.yaml | 32 ++++++ ...uster.x-k8s.io_kubeadmconfigtemplates.yaml | 32 ++++++ ...r.x-k8s.io_clusterresourcesetbindings.yaml | 2 + ....cluster.x-k8s.io_clusterresourcesets.yaml | 1 + .../cluster.x-k8s.io_clusterclasses.yaml | 15 +++ .../crd/bases/cluster.x-k8s.io_clusters.yaml | 5 + .../cluster.x-k8s.io_machinehealthchecks.yaml | 2 + .../bases/cluster.x-k8s.io_machinepools.yaml | 3 + .../crd/bases/cluster.x-k8s.io_machines.yaml | 1 + ...cluster.x-k8s.io_kubeadmcontrolplanes.yaml | 32 ++++++ ...x-k8s.io_kubeadmcontrolplanetemplates.yaml | 32 ++++++ 12 files changed, 257 insertions(+) diff --git a/api/core/v1beta2/zz_generated.openapi.go b/api/core/v1beta2/zz_generated.openapi.go index c8b4043a2f18..2b177c07ce6e 100644 --- a/api/core/v1beta2/zz_generated.openapi.go +++ b/api/core/v1beta2/zz_generated.openapi.go @@ -438,6 +438,11 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassPatch(ref common.ReferenceC }, }, "definitions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "definitions define inline patches. Note: Patches will be applied in the order of the array. Note: Exactly one of Definitions or External must be set.", Type: []string{"array"}, @@ -546,6 +551,11 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassSpec(ref common.ReferenceCa }, }, "variables": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "variables defines the variables which can be configured in the Cluster topology and are then used in patches.", Type: []string{"array"}, @@ -560,6 +570,11 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassSpec(ref common.ReferenceCa }, }, "patches": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "patches defines the patches which are applied to customize referenced templates of a ClusterClass. Note: Patches will be applied in the order of the array.", Type: []string{"array"}, @@ -612,6 +627,11 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassStatus(ref common.Reference }, }, "variables": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "variables is a list of ClusterClassStatusVariable that are defined for the ClusterClass.", Type: []string{"array"}, @@ -669,6 +689,11 @@ func schema_cluster_api_api_core_v1beta2_ClusterClassStatusVariable(ref common.R }, }, "definitions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "definitions is a list of definitions for a variable.", Type: []string{"array"}, @@ -1958,6 +1983,11 @@ func schema_cluster_api_api_core_v1beta2_JSONSchemaProps(ref common.ReferenceCal }, }, "required": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "required specifies which fields of an object are required. NOTE: Can only be set if type is object.", Type: []string{"array"}, @@ -2063,6 +2093,11 @@ func schema_cluster_api_api_core_v1beta2_JSONSchemaProps(ref common.ReferenceCal }, }, "enum": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "enum is the list of valid values of the variable. NOTE: Can be set for all types.", Type: []string{"array"}, @@ -3346,6 +3381,11 @@ func schema_cluster_api_api_core_v1beta2_MachineHealthCheckClass(ref common.Refe Type: []string{"object"}, Properties: map[string]spec.Schema{ "unhealthyNodeConditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, @@ -3526,6 +3566,11 @@ func schema_cluster_api_api_core_v1beta2_MachineHealthCheckSpec(ref common.Refer }, }, "unhealthyNodeConditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, @@ -3632,6 +3677,11 @@ func schema_cluster_api_api_core_v1beta2_MachineHealthCheckStatus(ref common.Ref }, }, "targets": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "targets shows the current list of machines the machine health check is watching", Type: []string{"array"}, @@ -3675,6 +3725,11 @@ func schema_cluster_api_api_core_v1beta2_MachineHealthCheckTopology(ref common.R }, }, "unhealthyNodeConditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, @@ -3945,6 +4000,11 @@ func schema_cluster_api_api_core_v1beta2_MachinePoolClass(ref common.ReferenceCa }, }, "failureDomains": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "failureDomains is the list of failure domains the MachinePool should be attached to. Must match a key in the FailureDomains map stored on the cluster object. NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.", Type: []string{"array"}, @@ -4234,6 +4294,11 @@ func schema_cluster_api_api_core_v1beta2_MachinePoolSpec(ref common.ReferenceCal }, }, "providerIDList": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "providerIDList are the identification IDs of machine instances provided by the provider. This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.", Type: []string{"array"}, @@ -4249,6 +4314,11 @@ func schema_cluster_api_api_core_v1beta2_MachinePoolSpec(ref common.ReferenceCal }, }, "failureDomains": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "failureDomains is the list of failure domains this MachinePool should be attached to.", Type: []string{"array"}, @@ -4308,6 +4378,11 @@ func schema_cluster_api_api_core_v1beta2_MachinePoolStatus(ref common.ReferenceC }, }, "nodeRefs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "nodeRefs will point to the corresponding Nodes if it they exist.", Type: []string{"array"}, @@ -4408,6 +4483,11 @@ func schema_cluster_api_api_core_v1beta2_MachinePoolTopology(ref common.Referenc }, }, "failureDomains": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "failureDomains is the list of failure domains the machine pool will be created in. Must match a key in the FailureDomains map stored on the cluster object.", Type: []string{"array"}, @@ -5266,6 +5346,11 @@ func schema_cluster_api_api_core_v1beta2_NetworkRanges(ref common.ReferenceCallb Type: []string{"object"}, Properties: map[string]spec.Schema{ "cidrBlocks": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "cidrBlocks is a list of CIDR blocks.", Type: []string{"array"}, @@ -5347,6 +5432,11 @@ func schema_cluster_api_api_core_v1beta2_PatchDefinition(ref common.ReferenceCal }, }, "jsonPatches": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "jsonPatches defines the patches which should be applied on the templates matching the selector. Note: Patches will be applied in the order of the array.", Type: []string{"array"}, @@ -5457,6 +5547,11 @@ func schema_cluster_api_api_core_v1beta2_PatchSelectorMatchMachineDeploymentClas Type: []string{"object"}, Properties: map[string]spec.Schema{ "names": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "names selects templates by class names.", Type: []string{"array"}, @@ -5485,6 +5580,11 @@ func schema_cluster_api_api_core_v1beta2_PatchSelectorMatchMachinePoolClass(ref Type: []string{"object"}, Properties: map[string]spec.Schema{ "names": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, SchemaProps: spec.SchemaProps{ Description: "names selects templates by class names.", Type: []string{"array"}, diff --git a/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yaml b/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yaml index 4cb961786deb..70300b43759c 100644 --- a/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yaml +++ b/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yaml @@ -4130,6 +4130,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic clusterConfiguration: description: clusterConfiguration along with InitConfiguration are the configurations necessary for the init command @@ -4148,6 +4149,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic extraArgs: description: |- extraArgs is a list of args to pass to the control plane component. @@ -4305,6 +4307,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4344,6 +4347,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object certificatesDir: description: |- @@ -4531,6 +4535,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4570,6 +4575,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object dns: description: dns defines the options for the DNS add-on installed @@ -4625,6 +4631,7 @@ spec: maxItems: 50 minItems: 1 type: array + x-kubernetes-list-type: atomic keyFile: description: |- keyFile is an SSL key file used to secure etcd communication. @@ -4808,6 +4815,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic imageRepository: description: |- imageRepository sets the container registry to pull images from. @@ -4831,6 +4839,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic serverCertSANs: description: serverCertSANs sets extra Subject Alternative Names for the etcd server signing cert. @@ -4840,6 +4849,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object featureGates: @@ -5025,6 +5035,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -5064,6 +5075,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object diskSetup: @@ -5090,6 +5102,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic filesystem: description: filesystem specifies the file system type. maxLength: 128 @@ -5126,6 +5139,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic partitions: description: partitions specifies the list of the partitions to setup. @@ -5163,6 +5177,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object files: description: files specifies extra files to be passed to user_data @@ -5237,6 +5252,7 @@ spec: type: object maxItems: 200 type: array + x-kubernetes-list-type: atomic format: description: format specifies the output format of the bootstrap data enum: @@ -5299,6 +5315,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is used for establishing bidirectional trust between nodes and control-planes. @@ -5321,11 +5338,13 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - token type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic localAPIEndpoint: description: |- localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node @@ -5374,6 +5393,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -5502,6 +5522,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -5625,6 +5646,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is a token used to validate cluster information @@ -5749,6 +5771,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic command: description: command to execute. maxLength: 1024 @@ -5782,6 +5805,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic provideClusterInfo: description: |- provideClusterInfo determines whether or not to provide cluster information, @@ -5840,6 +5864,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -5968,6 +5993,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -6033,6 +6059,7 @@ spec: type: array maxItems: 100 type: array + x-kubernetes-list-type: atomic ntp: description: ntp specifies NTP configuration properties: @@ -6047,6 +6074,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object postKubeadmCommands: description: |- @@ -6059,6 +6087,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic preKubeadmCommands: description: |- preKubeadmCommands specifies extra commands to run before kubeadm runs. @@ -6070,6 +6099,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic users: description: users specifies extra users to add items: @@ -6157,6 +6187,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic sudo: description: sudo specifies a sudo role for the user maxLength: 256 @@ -6167,6 +6198,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic verbosity: description: |- verbosity is the number for the kubeadm log level verbosity. diff --git a/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yaml b/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yaml index 3875eed81115..b1c54b126517 100644 --- a/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yaml +++ b/bootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yaml @@ -4000,6 +4000,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic clusterConfiguration: description: clusterConfiguration along with InitConfiguration are the configurations necessary for the init command @@ -4018,6 +4019,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic extraArgs: description: |- extraArgs is a list of args to pass to the control plane component. @@ -4179,6 +4181,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4220,6 +4223,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object certificatesDir: description: |- @@ -4411,6 +4415,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4452,6 +4457,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object dns: description: dns defines the options for the DNS add-on @@ -4508,6 +4514,7 @@ spec: maxItems: 50 minItems: 1 type: array + x-kubernetes-list-type: atomic keyFile: description: |- keyFile is an SSL key file used to secure etcd communication. @@ -4697,6 +4704,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic imageRepository: description: |- imageRepository sets the container registry to pull images from. @@ -4720,6 +4728,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic serverCertSANs: description: serverCertSANs sets extra Subject Alternative Names for the etcd server signing @@ -4730,6 +4739,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object featureGates: @@ -4919,6 +4929,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4960,6 +4971,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object diskSetup: @@ -4987,6 +4999,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic filesystem: description: filesystem specifies the file system type. @@ -5025,6 +5038,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic partitions: description: partitions specifies the list of the partitions to setup. @@ -5063,6 +5077,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object files: description: files specifies extra files to be passed to user_data @@ -5138,6 +5153,7 @@ spec: type: object maxItems: 200 type: array + x-kubernetes-list-type: atomic format: description: format specifies the output format of the bootstrap data @@ -5203,6 +5219,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is used for establishing bidirectional trust between nodes and control-planes. @@ -5225,11 +5242,13 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - token type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic localAPIEndpoint: description: |- localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node @@ -5278,6 +5297,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -5406,6 +5426,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -5531,6 +5552,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is a token used to validate cluster information @@ -5660,6 +5682,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic command: description: command to execute. maxLength: 1024 @@ -5693,6 +5716,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic provideClusterInfo: description: |- provideClusterInfo determines whether or not to provide cluster information, @@ -5751,6 +5775,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -5879,6 +5904,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -5946,6 +5972,7 @@ spec: type: array maxItems: 100 type: array + x-kubernetes-list-type: atomic ntp: description: ntp specifies NTP configuration properties: @@ -5960,6 +5987,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object postKubeadmCommands: description: |- @@ -5972,6 +6000,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic preKubeadmCommands: description: |- preKubeadmCommands specifies extra commands to run before kubeadm runs. @@ -5983,6 +6012,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic users: description: users specifies extra users to add items: @@ -6073,6 +6103,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic sudo: description: sudo specifies a sudo role for the user maxLength: 256 @@ -6083,6 +6114,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic verbosity: description: |- verbosity is the number for the kubeadm log level verbosity. diff --git a/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml b/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml index 2e3e52c59b55..6ad4c78f7398 100644 --- a/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml +++ b/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml @@ -392,11 +392,13 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - clusterResourceSetName type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic clusterName: description: clusterName is the name of the Cluster this binding applies to. diff --git a/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yaml b/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yaml index c2106cc4b795..eb38290d6d11 100644 --- a/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yaml +++ b/config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yaml @@ -718,6 +718,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic strategy: description: strategy is the strategy to be used during applying resources. Defaults to ApplyOnce. This field is immutable. diff --git a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml index 79ca43864dd6..b15c923bf029 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml @@ -2998,6 +2998,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic unhealthyRange: description: |- unhealthyRange specifies the range of unhealthy machines allowed. @@ -3349,6 +3350,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic selector: description: selector defines on which templates the patch should be applied. @@ -3397,6 +3399,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object machinePoolClass: description: |- @@ -3412,6 +3415,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object required: @@ -3425,6 +3429,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic description: description: description is a human-readable description of this patch. @@ -3483,6 +3488,7 @@ spec: type: object maxItems: 1000 type: array + x-kubernetes-list-type: atomic variables: description: |- variables defines the variables which can be configured @@ -3577,6 +3583,7 @@ spec: x-kubernetes-preserve-unknown-fields: true maxItems: 100 type: array + x-kubernetes-list-type: atomic example: description: example is an example for this variable. x-kubernetes-preserve-unknown-fields: true @@ -3695,6 +3702,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic type: description: |- type is the type of the variable. @@ -3896,6 +3904,7 @@ spec: type: object maxItems: 1000 type: array + x-kubernetes-list-type: atomic workers: description: |- workers describes the worker nodes for the cluster. @@ -4033,6 +4042,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic unhealthyRange: description: |- unhealthyRange specifies the range of unhealthy machines allowed. @@ -4389,6 +4399,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic minReadySeconds: description: |- minReadySeconds is the minimum number of seconds for which a newly created machine pool should @@ -4813,6 +4824,7 @@ spec: x-kubernetes-preserve-unknown-fields: true maxItems: 100 type: array + x-kubernetes-list-type: atomic example: description: example is an example for this variable. x-kubernetes-preserve-unknown-fields: true @@ -4931,6 +4943,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic type: description: |- type is the type of the variable. @@ -5141,6 +5154,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic definitionsConflict: description: definitionsConflict specifies whether or not there are conflicting definitions for a single variable name. @@ -5156,6 +5170,7 @@ spec: type: object maxItems: 1000 type: array + x-kubernetes-list-type: atomic type: object required: - spec diff --git a/config/crd/bases/cluster.x-k8s.io_clusters.yaml b/config/crd/bases/cluster.x-k8s.io_clusters.yaml index 64c7e4f20647..f0dac48ffc22 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusters.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusters.yaml @@ -2249,6 +2249,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - cidrBlocks type: object @@ -2269,6 +2270,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - cidrBlocks type: object @@ -2523,6 +2525,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic unhealthyRange: description: |- unhealthyRange specifies the range of unhealthy machines allowed. @@ -2861,6 +2864,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic unhealthyRange: description: |- unhealthyRange specifies the range of unhealthy machines allowed. @@ -3156,6 +3160,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic metadata: description: |- metadata is the metadata applied to the MachinePool. diff --git a/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml b/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml index 908e4ac06897..73a706df40f3 100644 --- a/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml +++ b/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml @@ -1190,6 +1190,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic unhealthyRange: description: |- unhealthyRange specifies the range of unhealthy machines allowed. @@ -1376,6 +1377,7 @@ spec: type: string maxItems: 10000 type: array + x-kubernetes-list-type: atomic type: object required: - spec diff --git a/config/crd/bases/cluster.x-k8s.io_machinepools.yaml b/config/crd/bases/cluster.x-k8s.io_machinepools.yaml index e12d6d503c25..3643e5d2a740 100644 --- a/config/crd/bases/cluster.x-k8s.io_machinepools.yaml +++ b/config/crd/bases/cluster.x-k8s.io_machinepools.yaml @@ -1678,6 +1678,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic providerIDList: description: |- providerIDList are the identification IDs of machine instances provided by the provider. @@ -1688,6 +1689,7 @@ spec: type: string maxItems: 10000 type: array + x-kubernetes-list-type: atomic replicas: description: |- replicas is the number of desired machines. Defaults to 1. @@ -2187,6 +2189,7 @@ spec: x-kubernetes-map-type: atomic maxItems: 10000 type: array + x-kubernetes-list-type: atomic observedGeneration: description: observedGeneration is the latest generation observed by the controller. diff --git a/config/crd/bases/cluster.x-k8s.io_machines.yaml b/config/crd/bases/cluster.x-k8s.io_machines.yaml index 8740f57aaf98..ee38062d727f 100644 --- a/config/crd/bases/cluster.x-k8s.io_machines.yaml +++ b/config/crd/bases/cluster.x-k8s.io_machines.yaml @@ -1760,6 +1760,7 @@ spec: type: object maxItems: 32 type: array + x-kubernetes-list-type: atomic certificatesExpiryDate: description: |- certificatesExpiryDate is the expiry date of the machine certificates. diff --git a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml index 962720ec159d..67dd9e6c7943 100644 --- a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml +++ b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml @@ -5052,6 +5052,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic clusterConfiguration: description: clusterConfiguration along with InitConfiguration are the configurations necessary for the init command @@ -5070,6 +5071,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic extraArgs: description: |- extraArgs is a list of args to pass to the control plane component. @@ -5228,6 +5230,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -5268,6 +5271,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object certificatesDir: description: |- @@ -5456,6 +5460,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -5496,6 +5501,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object dns: description: dns defines the options for the DNS add-on installed @@ -5552,6 +5558,7 @@ spec: maxItems: 50 minItems: 1 type: array + x-kubernetes-list-type: atomic keyFile: description: |- keyFile is an SSL key file used to secure etcd communication. @@ -5738,6 +5745,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic imageRepository: description: |- imageRepository sets the container registry to pull images from. @@ -5761,6 +5769,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic serverCertSANs: description: serverCertSANs sets extra Subject Alternative Names for the etcd server signing cert. @@ -5770,6 +5779,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object featureGates: @@ -5956,6 +5966,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -5996,6 +6007,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object diskSetup: @@ -6022,6 +6034,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic filesystem: description: filesystem specifies the file system type. maxLength: 128 @@ -6059,6 +6072,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic partitions: description: partitions specifies the list of the partitions to setup. @@ -6097,6 +6111,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object files: description: files specifies extra files to be passed to user_data @@ -6172,6 +6187,7 @@ spec: type: object maxItems: 200 type: array + x-kubernetes-list-type: atomic format: description: format specifies the output format of the bootstrap data @@ -6235,6 +6251,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is used for establishing bidirectional trust between nodes and control-planes. @@ -6257,11 +6274,13 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - token type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic localAPIEndpoint: description: |- localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node @@ -6310,6 +6329,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -6438,6 +6458,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -6561,6 +6582,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is a token used to validate cluster information @@ -6688,6 +6710,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic command: description: command to execute. maxLength: 1024 @@ -6721,6 +6744,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic provideClusterInfo: description: |- provideClusterInfo determines whether or not to provide cluster information, @@ -6779,6 +6803,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -6907,6 +6932,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -6973,6 +6999,7 @@ spec: type: array maxItems: 100 type: array + x-kubernetes-list-type: atomic ntp: description: ntp specifies NTP configuration properties: @@ -6987,6 +7014,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object postKubeadmCommands: description: |- @@ -6999,6 +7027,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic preKubeadmCommands: description: |- preKubeadmCommands specifies extra commands to run before kubeadm runs. @@ -7010,6 +7039,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic users: description: users specifies extra users to add items: @@ -7099,6 +7129,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic sudo: description: sudo specifies a sudo role for the user maxLength: 256 @@ -7109,6 +7140,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic verbosity: description: |- verbosity is the number for the kubeadm log level verbosity. diff --git a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yaml b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yaml index 1b2b5d1147ef..2e088a0c8247 100644 --- a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yaml +++ b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yaml @@ -3414,6 +3414,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic clusterConfiguration: description: clusterConfiguration along with InitConfiguration are the configurations necessary for the init command @@ -3432,6 +3433,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic extraArgs: description: |- extraArgs is a list of args to pass to the control plane component. @@ -3596,6 +3598,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -3638,6 +3641,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object certificatesDir: description: |- @@ -3832,6 +3836,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -3874,6 +3879,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object dns: description: dns defines the options for the DNS add-on @@ -3930,6 +3936,7 @@ spec: maxItems: 50 minItems: 1 type: array + x-kubernetes-list-type: atomic keyFile: description: |- keyFile is an SSL key file used to secure etcd communication. @@ -4125,6 +4132,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic imageRepository: description: |- imageRepository sets the container registry to pull images from. @@ -4149,6 +4157,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic serverCertSANs: description: serverCertSANs sets extra Subject Alternative Names for the etcd server signing @@ -4159,6 +4168,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object featureGates: @@ -4351,6 +4361,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic extraVolumes: description: extraVolumes is an extra set of host volumes, mounted to the control plane component. @@ -4393,6 +4404,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object type: object diskSetup: @@ -4421,6 +4433,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic filesystem: description: filesystem specifies the file system type. @@ -4460,6 +4473,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic partitions: description: partitions specifies the list of the partitions to setup. @@ -4498,6 +4512,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object files: description: files specifies extra files to be passed @@ -4574,6 +4589,7 @@ spec: type: object maxItems: 200 type: array + x-kubernetes-list-type: atomic format: description: format specifies the output format of the bootstrap data @@ -4639,6 +4655,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is used for establishing bidirectional trust between nodes and control-planes. @@ -4661,11 +4678,13 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic required: - token type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic localAPIEndpoint: description: |- localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node @@ -4714,6 +4733,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -4843,6 +4863,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -4968,6 +4989,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic token: description: |- token is a token used to validate cluster information @@ -5098,6 +5120,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic command: description: command to execute. maxLength: 1024 @@ -5131,6 +5154,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic provideClusterInfo: description: |- provideClusterInfo determines whether or not to provide cluster information, @@ -5189,6 +5213,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic imagePullPolicy: description: |- imagePullPolicy specifies the policy for image pulling @@ -5318,6 +5343,7 @@ spec: type: string maxItems: 50 type: array + x-kubernetes-list-type: atomic timeouts: description: timeouts holds various timeouts that apply to kubeadm commands. @@ -5385,6 +5411,7 @@ spec: type: array maxItems: 100 type: array + x-kubernetes-list-type: atomic ntp: description: ntp specifies NTP configuration properties: @@ -5401,6 +5428,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic type: object postKubeadmCommands: description: |- @@ -5413,6 +5441,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic preKubeadmCommands: description: |- preKubeadmCommands specifies extra commands to run before kubeadm runs. @@ -5424,6 +5453,7 @@ spec: type: string maxItems: 1000 type: array + x-kubernetes-list-type: atomic users: description: users specifies extra users to add items: @@ -5514,6 +5544,7 @@ spec: type: string maxItems: 100 type: array + x-kubernetes-list-type: atomic sudo: description: sudo specifies a sudo role for the user @@ -5525,6 +5556,7 @@ spec: type: object maxItems: 100 type: array + x-kubernetes-list-type: atomic verbosity: description: |- verbosity is the number for the kubeadm log level verbosity.