From 8c449627769b93fb4e71ddcd2b169663fe21d230 Mon Sep 17 00:00:00 2001 From: fabriziopandini Date: Fri, 18 Jul 2025 11:58:18 +0200 Subject: [PATCH 1/2] Add more documentation for v1beta2 API changes # Conflicts: # docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md --- .../providers/migrations/v1.10-to-v1.11.md | 447 +++++++++++++----- 1 file changed, 327 insertions(+), 120 deletions(-) diff --git a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md index bc932dfc318a..4b373802ceb3 100644 --- a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md +++ b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md @@ -25,7 +25,9 @@ proposal because most of the changes described below are a consequence of the wo * [KubeadmConfigTemplate](#kubeadmconfigtemplate) * [KubeadmControlPlane](#kubeadmcontrolplane) * [KubeadmControlPlaneTemplate](#kubeadmcontrolplanetemplate) + * [ClusterResourceSet](#clusterresourceset) * [ClusterResourceSetBinding](#clusterresourcesetbinding) + * [ExtensionConfig](#extensionconfig) * [IPAddress](#ipaddress) * [IPAddressClaim](#ipaddressclaim) * [Cluster API Contract changes](#cluster-api-contract-changes) @@ -73,74 +75,128 @@ proposal because most of the changes described below are a consequence of the wo - `sigs.k8s.io/cluster-api/exp/ipam/api/v1beta1` => `sigs.k8s.io/cluster-api/api/ipam/v1beta1` (apiGroup: `ipam.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/exp/runtime/api/v1alpha1` => `sigs.k8s.io/cluster-api/api/runtime/v1alpha1` (apiGroup: `runtime.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1` => `sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1` (apiGroup: `hooks.runtime.cluster.x-k8s.io`) -- v1beta1 API version is now deprecated and it will be removed tentatively in August 2026 -- v1beta2 API version has been introduced; see following paragraphs for more details. The APIs have - been added in the following packages: +- v1beta2 API version has been introduced and considered the awesome amount of improvements it marks an important + step in the journey towards graduating our API to v1; see following paragraphs for more details. + - The new API version have been added in the following packages: - `sigs.k8s.io/cluster-api/api/bootstrap/kubeadm/v1beta2` (apiGroup: `bootstrap.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/controlplane/kubeadm/v1beta2` (apiGroup: `controlplane.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/addons/v1beta2` (apiGroup: `addons.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/core/v1beta2` (apiGroup: `cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/ipam/v1beta2` (apiGroup: `ipam.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/runtime/v1beta2` (apiGroup: `runtime.cluster.x-k8s.io`) +- v1beta1 API version is now deprecated and it will be removed tentatively in August 2026 - If you are using the `runtime.cluster.x-k8s.io` API group, please be aware that - - `ExtensionConfig` v1alpha1 has been deprecated, and it will be removed in a following release. - `ExtensionConfig` v1beta2 has been created (thus aligning with other Cluster API resources) + - `ExtensionConfig` v1alpha1 has been deprecated, and it will be removed in a following release. - `controllers/remote.ClusterCacheTracker` and corresponding types have been removed - The unused `ClusterStatus` struct in the kubeadm bootstrap apiGroup has been removed ### All CRDs -- The transition to the new K8s aligned conditions using `metav1.Conditions` types and the new condition semantic - has been completed for all Kinds: - - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types - - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily - under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option - for users willing to continue using old conditions. -- Please pay attention to field removals, e.g. if you are using GitOps tools, either migrate to v1beta2 or make sure - to stop setting the removed fields. The removed fields won't be preserved even if setting them via v1beta1 - (as they don't exist in v1beta2). - - For example, we removed the `clusterName` field from `KubeadmControlPlane.spec.kubeadmConfigSpec.clusterConfiguration` +When looking at API changes introduced in the v1beta2 API version for each CRD it could help to keep in mind a few high level themes: + +- Improve status: + - The transition to the new K8s aligned conditions using `metav1.Conditions` types and the new condition semantic + has been completed. + - Replica counters are now consistent with new conditions and across all resources; new replica counters have been added at cluster level. + - Semantic of contract fields in status have been improved and it is now consistent and across all resources. + - Confusing fields FailureReason/Message have been dropped. +- Support CC across namespaces: + - API changes planned for this feature have been implemented. +- Improve object references: + - Unnecessary fields from object reference have been dropped. + - Object references are now GitOps friendly (API version is not overwritten anymore by controllers). +- KubeadmConfig and KubeadmControlPlane APIs have been aligned with kubeadm v1beta4 API. + - Additionally, fields inferred from top level objects have been removed, thus getting rid of a common source of confusion/issues. +- Compliance with K8s API guidelines: + - Thanks to the adoption of the KAL linter, compliance with K8s API guidelines has been greatly improved. + - All the Duration fields are now represented as integer fields with units being part of the field name. + - All the `bool` fields have been changed to `*bool` to preserve user intent. + - An extensive work has been done ensuring the `required` and `optional` is explicitly set in the API, and that + both serialization and validation works accordingly: + - Stop rendering empty struct (review of all the occurrences of `omitempty` and introduction of `omitzero`) + - Do not allow `""` when the zero value is not semantically different from value not set (either you have to provide a non empty string value, or not set the field at all). + - Do not allow `0` when the zero value is not semantically different from value not set (either you have to provide a non zero int value, or not set the field at all). + - Do not allow `{}` when the zero value is not semantically different from value not set (either you have at least one property set in the object, or not set the field at all). + - Do not allow `[]` when the zero value is not semantically different from value not set (either you have at least one item in the list, or not set the field at all). + - Ensure validation for all the enum types. + - Missing list markers have been added. + - Note: For sake of simplicity, changes about `omitempty`, `required` and `optional` markers, or other related validation markers + have not been documented in the following paragraphs. Please look at the CRD definitions if you are interested in this changes. +- Drop unnecessary pointers: + - After fixing `required` and `optional` according to K8s API guidelines, an extensive work for dropping unnecessary + pointers has been performed thus improving the usability of API's go structs. +- Avoid embedding structs: + - Coupling between API types have been reduced by reducing the usage of embedded structs. +- Improve consistency: + - An extensive work has been performed to improve consistency across all resources: + - Fields for machine deletion are under a new `deletion` struct in all resources. + - Settings about health `rollout` have been logically grouped in all resources. + - Settings about health `checks` and `remediation` have been logically grouped in all resources. + - Etc.. +- Missing validations have been added where required. +- Tech debt has been reduced by dropping deprecated fields. + - Important! please pay attention to field removals, e.g. if you are using GitOps tools, either migrate to v1beta2 or make sure + to stop setting the removed fields. The removed fields won't be preserved even if setting them via v1beta1 + (as they don't exist in v1beta2). + - For example, we removed the `clusterName` field from `KubeadmControlPlane.spec.kubeadmConfigSpec.clusterConfiguration` ### Cluster - See changes that apply to [all CRDs](#all-crds) +- The type of the field `spec.paused` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) - The `spec.controlPlaneRef` and `spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. -- The `spec.topology.class` field has been renamed to `spec.topology.classRef.name` -- The `spec.topology.classNamespace` field has been renamed to `spec.topology.classRef.namespace` -- The `spec.topology.rolloutAfter` field has been removed (the corresponding functionality was never implemented) + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD +- The `spec.controlPlaneEndpoint.host` field does not accept anymore "" as a value (missing validation) +- The `spec.controlPlaneEndpoint.port` field does not accept anymore 0 as a value (missing validation) +- The type for the field `spec.clusterNetwork.apiServerPort` has been changed from `*int32` to `int32` (drop unnecessary pointers) + - This field does not accept anymore 0 as a value (missing validation) +- The type for the fields `spec.clusterNetwork.services`, `spec.clusterNetwork.pods` has been changed from `*NetworkRanges` to `NetworkRanges` (drop unnecessary pointers) +- The `spec.topology.class` field has been renamed to `spec.topology.classRef.name` (support CC across namespaces) +- The `spec.topology.classNamespace` field has been renamed to `spec.topology.classRef.namespace` (support CC across namespaces) +- The `spec.topology.rolloutAfter` field has been removed because the corresponding functionality was never implemented (tech debt) - The `definitionFrom` field (deprecated since CAPI v1.8) has been removed from - `spec.topology.variables` - - `spec.topology.controlPlane.variables.overrides` - - `spec.topology.workers.machineDeployments[].variables.overrides` - - `spec.topology.workers.machinePools[].variables.overrides` + - `spec.topology.controlPlane.variables.overrides[]` + - `spec.topology.workers.machineDeployments[].variables.overrides[]` + - `spec.topology.workers.machinePools[].variables.overrides[]` +- The type of the field `spec.workers` has been changed from `*WorkersTopology` to `WorkersTopology` (drop unnecessary pointers) +- The type for the field `spec.topology.controlPlane.variables` has been changed from `*ControlPlaneVariables` to `ControlPlaneVariables` (drop unnecessary pointers) +- The type for the field `spec.topology.workers.machineDeployments[].failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type for the field `spec.topology.workers.machineDeployments[].strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type for the field `spec.topology.workers.machineDeployments[].variables` has been changed from `*MachineDeploymentVariables` to `MachineDeploymentVariables` (drop unnecessary pointers) +- The type for the field `spec.topology.workers.machinePools[].variables` has been changed from `*MachinePoolVariables` to `MachinePoolVariables` (drop unnecessary pointers) - The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct: - `spec.topology.controlPlane.machineHealthCheck` - `spec.topology.workers.machineDeployments[].machineHealthCheck` - All fields of type Duration in `spec.topology.{controlPlane,workers.machineDeployments[],workers.machinePools[]` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` - All fields of type Duration in `spec.topology.{controlPlane.machineHealthCheck,workers.machineDeployments[].machineHealthCheck` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `nodeStartupTimeout` => `nodeStartupTimeoutSeconds` - `unhealthyNodeConditions[].timeout` => `unhealthyNodeConditions[].timeoutSeconds` - All the `remediationTemplate` fields have been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference`: - `spec.topology.controlPlane.machineHealthCheck.remediationTemplate` - `spec.topology.workers.machineDeployments[].machineHealthCheck.remediationTemplate` - For all the above, the following fields have been removed from `remediationTemplate`: `namespace`, `uid`, `resourceVersion`, `fieldPath` -- Information about the initial provisioning process are now surfacing under the new `status.initialization` field. +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- Information about the initial provisioning process are now surfacing under the new `status.initialization` field (improve status) - `status.infrastructureReady` has been replaced by `status.initialization.infrastructureProvisioned` - `status.controlPlaneReady` has been replaced by `status.initialization.controlPlaneInitialized` - The `.status.failureDomains` field has been changed from a map to an array -- New fields for replica counters have been added to the cluster object - - `status.controlPlane` now reports replica counters surfaced from the control plane object. +- New fields for replica counters have been added to the cluster object (improve status): + - `status.controlPlane` now reports replica counters surfaced from the control plane object - `status.workers` now reports replica counters from `MachineDeployments` and standalone `MachineSet` and `Machines` -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` (controllers are not setting this value anymore) - The `GetIPFamily` method (deprecated since CAPI v1.8) has been removed - The `index.ByClusterClassName`, `index.ClusterByClusterClassClassName` and `index.ClusterClassNameField` types have been removed @@ -150,141 +206,215 @@ proposal because most of the changes described below are a consequence of the wo - See changes that apply to [all CRDs](#all-crds) - The `spec.template.spec.bootstrap.configRef` and `spec.template.spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD - The `spec.progressDeadlineSeconds` field (deprecated since CAPI v1.9) has been removed - All fields of type Duration in `spec.template.spec` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- Replica counters are now consistent with replica counters from other resources +- The type for the field `spec.paused` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the field `spec.strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the field `spec.strategy.rollingUpdate` has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the field `spec.strategy.remediation` has been changed from `*RemediationStrategy` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) +- The type for the field `spec.remediation` has been changed from `*string` to `MachineSetDeletePolicy` +- The `spec.revisionHistoryLimit` field has been removed. The MachineDeployment controller will now clean up all MachineSets without replicas (tech debt) + - The corresponding `machinedeployment.clusters.x-k8s.io/revision-history` annotation has also been removed +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- Replica counters are now consistent with replica counters from other resources (improve status): - `status.replicas` was made a pointer and omitempty was added - `status.readyReplicas` has now a new semantic based on machine's `Ready` condition - `status.availableReplicas` has now a new semantic based on machine's `Available` condition - `status.upToDateReplicas` has now a new semantic (and name) based on machine's `UpToDate` condition - Temporarily, old replica counters will still be available under the `status.deprecated.v1beta1` struct -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` (controllers are not setting this value anymore) -- The `status.phases` field is now computed using the same logic used for `ScalingUp` and `ScalingDown` conditions. -- The `spec.revisionHistoryLimit` field has been removed. The MachineDeployment controller will now clean up all MachineSets without replicas. - - The corresponding `machinedeployment.clusters.x-k8s.io/revision-history` annotation has also been removed. +- The `status.phases` field is now computed using the same logic used for `ScalingUp` and `ScalingDown` conditions (improve status) ### MachineSet - See changes that apply to [all CRDs](#all-crds) - The `spec.template.spec.bootstrap.configRef` and `spec.template.spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD +- The type for the field `spec.strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type for the field `spec.strategy.rollingUpdate` has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) +- The type for the field `spec.strategy.remediation` has been changed from `*RemediationStrategy` to `RemediationStrategy` (drop unnecessary pointers) +- The type for the field `spec.strategy.remediation.deletePolicy` has been changed from `string` to `MachineSetDeletePolicy` (use enums) +- The type for the field `spec.deletePolicy` has been changed from `string` to `MachineSetDeletePolicy` (improve consistency) - All fields of type Duration in `spec.template.spec` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- Replica counters fields are now consistent with replica counters from other resources +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- Replica counters fields are now consistent with replica counters from other resources (improve status): - `status.replicas` was made a pointer and omitempty was added - `status.readyReplicas` has now a new semantic based on machine's `Ready` condition - `status.availableReplicas` has now a new semantic based on machine's `Available` condition - `status.upToDateReplicas` has now a new semantic (and name) based on machine's `UpToDate` condition - Temporarily, old replica counters will still be available under the `status.deprecated.v1beta1` struct -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status). + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` ### MachinePool - See changes that apply to [all CRDs](#all-crds) - The `spec.template.spec.bootstrap.configRef` and `spec.template.spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD - All fields of type Duration in `spec.template.spec` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- `status.replicas` was made a pointer and omitempty was added -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. - - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` (controllers are not setting this value anymore) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- `status.replicas` was made a pointer and omitempty was added (improve status) +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` + - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` because controllers are not setting this value anymore ### Machine - See changes that apply to [all CRDs](#all-crds) - The `spec.bootstrap.configRef` and `spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD - All fields of type Duration in `spec` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- Information about the initial provisioning process is now surfacing under the new `status.initialization` field. +- The type for the field `spec.version` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type for the field `spec.providerID` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type for the field `spec.failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- Information about the initial provisioning process is now surfacing under the new `status.initialization` field (improve status) - `status.infrastructureReady` has been replaced by `status.initialization.infrastructureProvisioned` - `status.bootstrapReady` has been replaced by `status.initialization.bootstrapDataSecretCreated` -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` (controllers are not setting this value anymore) -- The type of the `status.nodeRef` field has been changed from `corev1.ObjectReference` to `MachineNodeReference`. +- The type of the field `status.nodeRef` has been changed from `corev1.ObjectReference` to `MachineNodeReference` (improve object references) - The following fields have been removed from `status.nodeRef`: `kind`, `namespace`, `uid`, `apiVersion`, `resourceVersion`, `fieldPath` ### MachineHealthCheck - See changes that apply to [all CRDs](#all-crds) - All fields of type Duration in `spec` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `nodeStartupTimeout` => `nodeStartupTimeoutSeconds` - All fields of type Duration in `spec.unhealthyNodeConditions[]` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `timeout` => `timeoutSeconds` -- The `spec.unhealthyConditions` field has been renamed to `spec.unhealthyNodeConditions` -- The `spec.remediationTemplate` field has been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference`: +- The `spec.unhealthyConditions` field has been renamed to `spec.unhealthyNodeConditions` (improve consistency) +- The `spec.remediationTemplate` field has been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference` (improve object references): - The following fields have been removed from `remediationTemplate`: `namespace`, `uid`, `resourceVersion`, `fieldPath` +- The type for the field `spec.unhealthyRange` has been changed from `*string` to `string` (drop unnecessary pointers) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- The type for the field `status.expectedMachines` has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type for the field `status.currentHealthy` has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type for the field `status.remediationsAllowed` has been changed from `*int32` to `int32` (drop unnecessary pointers) ### ClusterClass - See changes that apply to [all CRDs](#all-crds) - The `spec.patches[].external.generateExtension` and `spec.patches[].external.validateExtension` fields have been renamed to - `spec.patches[].external.generatePatchesExtension` and `spec.patches[].external.validateTopologyExtension` -- The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct: + `spec.patches[].external.generatePatchesExtension` and `spec.patches[].external.validateTopologyExtension` (improve consistency) +- The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct (improve consistency): - `spec.controlPlane.machineHealthCheck` - `spec.workers.machineDeployments[].machineHealthCheck` -- The `spec.variables[].metadata` and `.status.variables[].definitions[].metadata` fields have been renamed +- The deprecated fields `spec.variables[].metadata` and `.status.variables[].definitions[].metadata` fields have been renamed to `spec.variables[].deprecatedV1Beta1Metadata` and `.status.variables[].definitions[].deprecatedV1Beta1Metadata` - - These fields are deprecated and will be removed when support for v1beta1 will be dropped. - - Please use `XMetadata` in `JSONSchemaProps` instead. + - These fields are deprecated and will be removed when support for v1beta1 will be dropped + - Please use `XMetadata` in `JSONSchemaProps` instead - All fields of type Duration in `spec.{controlPlane,workers.machineDeployments[],workers.machinePools[]` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` - All fields of type Duration in `spec.controlPlane.machineHealthCheck` and `spec.workers.machineDeployments[].machineHealthCheck` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `nodeStartupTimeout` => `nodeStartupTimeoutSeconds` - `unhealthyNodeConditions[].timeout` => `unhealthyNodeConditions[].timeoutSeconds` -- All the fields implementing or embedding a reference to a template are now using the `ClusterClassTemplate` type instead - of `corev1.ObjectReference`: - - `spec.infrastructure` - - `spec.controlPlane` and `spec.controlPlane.machineInfrastructure` - - `spec.workers.machineDeployments[].template.bootstrap` and `spec.workers.machineDeployments[].template.infrastructure` - - `spec.workers.machinePool[].template.bootstrap` and `spec.workers.machinePool[].template.infrastructure` +- All the fields implementing or embedding a reference to a template are now using the `ClusterClassTemplateReference` type instead + of `corev1.ObjectReference`; additionally field have been renamed and unnecessary nested struct dropped (improve object references): + - `spec.infrastructure.templateRef`, previously `spec.infrastructure.template.ref` + - `spec.controlPlane.templateRef`, previously `spec.controlPlane.template.ref` + - `spec.controlPlane.machineInfrastructure.templateRef`, previously `spec.controlPlane.machineInfrastructure.template.ref` + - `spec.workers.machineDeployments[].bootstrap.templateRef`, previously `spec.workers.machineDeployments[].bootstrap.template.ref` + - `spec.workers.machineDeployments[].infrastructure.templateRef`, previously `spec.workers.machineDeployments[].infrastructure.template.ref` + - `spec.workers.machinePool[].bootstrap.templateRef`, previously `spec.workers.machinePool[].bootstrap.template.ref` + - `spec.workers.machinePool[].infrastructure.templateRef`, previously `spec.workers.machinePool[].infrastructure.template.ref` - For all the above, the following fields have been removed from `*.ref`: `namespace`, `uid`, `resourceVersion`, `fieldPath` +- The `spec.workers.machineDeployments[].template.metadata` field has bee moved to `spec.workers.machineDeployments[].metadata` (drop unnecessary nested struct) +- The `spec.workers.machinePools[].template.metadata` field has bee moved to `spec.workers.machinePools[].metadata` (drop unnecessary nested struct) +- The type of the field `spec.infrastructure.namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.controlPlane.namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.workers.machineDeployments[].failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.workers.machineDeployments[].strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the field `spec.workers.machineDeployments[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.workers.machinePool[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type for the fields `spec.controlPlane.machineHealthCheck.unhealthyRange`, `spec.workers.machineDeployments[].machineHealthCheck.unhealthyRange` + has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.patches[].enabledIf` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the fields `spec.patches[].definitions[].selector.matchResources.controlPlane`, `spec.patches[].definitions[].selector.matchResources.infrastructureCluster` + has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the fields `spec.patches[].definitions[].jsonPatches[].valueFrom.template`, `spec.patches[].definitions[].jsonPatches[].valueFrom.variable` + has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the fields `spec.patches[].external.generatePatchesExtension` (previously `generateExtension`), `spec.patches[].external.validateTopologyExtension` (previously `validateExtension`), + `spec.patches[].external.discoverVariablesExtension` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the fields `spec.variables[].schema.openAPIV3Schema.uniqueItems`, `spec.variables[].schema.openAPIV3Schema.exclusiveMaximum`, `spec.variables[].schema.openAPIV3Schema.exclusiveMinimum`, + `spec.variables[].schema.openAPIV3Schema.x-kubernetes-preserve-unknown-fields`, `spec.variables[].schema.openAPIV3Schema.x-kubernetes-int-or-string` + has been changed from `bool` to `*bool`(compliance with K8s API guidelines) + - Same applies to the corresponding fields under: + - `spec.variables.schema.openAPIV3Schema.properties[]` + - `spec.variables.schema.openAPIV3Schema.additionalProperties` + - `spec.variables.schema.openAPIV3Schema.allOf[]` + - `spec.variables.schema.openAPIV3Schema.oneOf[]` + - `spec.variables.schema.openAPIV3Schema.anyOf[]` + - `spec.variables.schema.openAPIV3Schema.not` + - and all the corresponding fields under `status.variables[]` +- The type of the field `spec.workers.machinePool[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) - All the `remediationTemplate` fields have been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference`: - `spec.controlPlane.machineHealthCheck.remediationTemplate` - `spec.workers.machineDeployments[].machineHealthCheck.remediationTemplate` - For all the above, the following fields have been removed from `remediationTemplate`: `namespace`, `uid`, `resourceVersion`, `fieldPath` -- The `builtin.cluster.classRef.Name` and `builtin.cluster.classRef.Namespace` variables have been added +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- The type of the field `status.patches[].definitionsConflict` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The `builtin.cluster.classRef.Name` and `builtin.cluster.classRef.Namespace` variables have been added (support CC across namespaces) - The `builtin.cluster.class` and `builtin.cluster.classNamespace` are deprecated and will be removed with the next apiVersion. -- The `builtin.cluster.network.ipFamily` variable has been removed and it cannot be used anymore in patches +- The deprecated `builtin.cluster.network.ipFamily` variable has been removed and it cannot be used anymore in patches ### KubeadmConfig -- KubeadmConfig (and the entire CABPK provider) now implements the v1beta2 Cluster API contract. +- KubeadmConfig (and the entire CABPK provider) now implements the v1beta2 Cluster API contract - See changes that apply to [all CRDs](#all-crds) -- ExtraArg field types have been changed from `map[string]sting` to `[]Arg`, thus aligning with kubeadm v1beta4 API; +- `extraArg` field types have been changed from `map[string]sting` to `[]Arg`, thus aligning with kubeadm v1beta4 API; however, using multiple args with the same name will be enabled only when v1beta1 is removed, tentatively in August 2026 - `spec.clusterConfiguration.apiServer.extraArgs` type has been changed to `[]Arg` - `spec.clusterConfiguration.controllerManager.extraArgs` type has been changed to `[]Arg` @@ -292,10 +422,10 @@ proposal because most of the changes described below are a consequence of the wo - `spec.clusterConfiguration.etcd.local.extraArgs` type has been changed to `[]Arg` - `spec.initConfiguration.nodeRegistration.kubeletExtraArgs` type has been changed to `[]Arg` - `spec.joinConfiguration.nodeRegistration.kubeletExtraArgs` type has been changed to `[]Arg` -- ImagePullPolicy field types have been changed from `string` to `corev1.PullPolicy`, thus aligning with kubeadm v1beta4 API +- `imagePullPolicy` field types have been changed from `string` to `corev1.PullPolicy`, thus aligning with kubeadm v1beta4 API - `spec.initConfiguration.nodeRegistration.imagePullPolicy` type has been changed to `corev1.PullPolicy` - `spec.joinConfiguration.nodeRegistration.imagePullPolicy` type has been changed to `corev1.PullPolicy` -- Timeout fields have been aligned with kubeadm v1beta4 API, but field names and types have been adapted according to API guidelines. +- `timeout` fields have been aligned with kubeadm v1beta4 API, but field names and types have been adapted according to K8s API guidelines - `spec.initConfiguration.timeouts` struct has been added with the following fields: - `controlPlaneComponentHealthCheckSeconds` - `kubeletHealthCheckSeconds` @@ -303,13 +433,29 @@ proposal because most of the changes described below are a consequence of the wo - `etcdAPICallSeconds` - `tlsBootstrapSeconds` - `discoverySeconds` - - `spec.joinConfiguration.timeouts` field has been added with the same set of timeouts listed above. - - `spec.clusterConfiguration.apiServer.timeoutForControlPlane` field has been removed. + - `spec.joinConfiguration.timeouts` field has been added with the same set of timeouts listed above + - `spec.clusterConfiguration.apiServer.timeoutForControlPlane` field has been removed Use `spec.initConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` and `spec.joinConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` instead; - however, using different timeouts for init and join will be enabled only when v1beta1 is removed. - - `spec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead. -- The `spec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed. -- The following `spec` fields have been removed because they are not necessary (Cluster API automatically applies the right gvk when generating kubeadm config files): + however, using different timeouts for init and join will be enabled only when v1beta1 is removed + - `spec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead +- The `spec.clusterConfiguration.apiServer` field `spec.clusterConfiguration.apiServer` does not embeds anymore `ControlPlaneComponent` (avoid embedding structs) + - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to `spec.clusterConfiguration.apiServer` struct +- The type of the field `spec.clusterConfiguration.controllerManager` has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) +- The type of the field `spec.clusterConfiguration.scheduler` has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) +- The type of the fields `spec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.clusterConfiguration.controllerManager.extraVolumes.readOnly` + , `spec.clusterConfiguration.scheduler.extraVolumes.readOnly` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the fields `spec.initConfiguration.nodeRegistration`, `spec.joinConfiguration.nodeRegistration` has been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) +- The type of the field `spec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the field `spec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the field `spec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the field `spec.files[].append` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the fields `spec.users[].gecos`, `spec.users[].groups`, `spec.users[].homeDir`, `spec.users[].shell`, `spec.users[].passwd`, + `spec.users[].primaryGroup`, `spec.users[].sudo` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.diskSetup.filesystems[].partition`, `spec.diskSetup.filesystems[].replaceFS` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.diskSetup.partitions[].tableType` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.ignition.containerLinuxConfig.strict` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The `spec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed +- The following `spec` fields have been removed because they are not necessary because Cluster API automatically applies the right gvk when generating kubeadm config files: - `clusterConfiguration.apiVersion`, `clusterConfiguration.kind` - `initConfiguration.apiVersion`, `initConfiguration.kind` - `joinConfiguration.apiVersion`, `joinConfiguration.kind` @@ -320,29 +466,34 @@ proposal because most of the changes described below are a consequence of the wo - `networking.dnsDomain` (can still be set via `Cluster.spec.clusterNetwork.serviceDomain`) - `kubernetesVersion` (can still be set via `Machine.spec.version`) - `clusterName` (can still be set via `Cluster.metadata.name`) - Note: The ClusterConfiguration fields could previously be used to overwrite the fields from Cluster, now we only use the fields from Cluster. + Note: The ClusterConfiguration fields could previously be used to overwrite the fields from Cluster, now we only use the fields from Cluster - All fields of type Duration in `spec.initConfiguration.bootstrapTokens[]` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `.ttl` => `.ttlSeconds` -- Information about the initial provisioning process is now surfacing under the new `status.initialization` field. +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- The type of the field `status.dataSecretName` has been changed from `*string` to `string` (drop unnecessary pointers) +- Information about the initial provisioning process is now surfacing under the new `status.initialization` field (improve status) - `status.ready` has been replaced by `status.initialization.dataSecretCreated` -- Support for terminal errors has been dropped (see [dataSecretCreated](#cluster-api-contract-changes)). - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` ### KubeadmConfigTemplate -KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [KubeadmConfig](#kubeadmconfig) `spec` struct. +KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [KubeadmConfig](#kubeadmconfig) `spec` struct ### KubeadmControlPlane -- KubeadmControlPlane (and the entire KCP provider) now implements the v1beta2 Cluster API contract. +- KubeadmControlPlane (and the entire KCP provider) now implements the v1beta2 Cluster API contract - See changes that apply to [all CRDs](#all-crds) - The `spec.machineTemplate.infrastructureRef` field was moved to `spec.machineTemplate.spec.infrastructureRef` and is now using `ContractVersionedObjectReference` type instead - of `corev1.ObjectReference`. + of `corev1.ObjectReference` - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD. + - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD - The `spec.machineTemplate.readinessGates` field was moved to `spec.machineTemplate.spec.readinessGates`. -- ExtraArg field types have been changed from `map[string]sting` to `[]Arg`, thus aligning with kubeadm v1beta4 API; +- `extraArg` field types have been changed from `map[string]sting` to `[]Arg`, thus aligning with kubeadm v1beta4 API; however, using multiple args with the same name will be enabled only when v1beta1 is removed, tentatively in August 2026 - `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.extraArgs` type has been changed to `[]Arg` - `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager.extraArgs` type has been changed to `[]Arg` @@ -350,10 +501,10 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K - `spec.kubeadmConfigSpec.clusterConfiguration.etcd.local.extraArgs` type has been changed to `[]Arg` - `spec.kubeadmConfigSpec.initConfiguration.nodeRegistration.kubeletExtraArgs` type has been changed to `[]Arg` - `spec.kubeadmConfigSpec.joinConfiguration.nodeRegistration.kubeletExtraArgs` type has been changed to `[]Arg` -- ImagePullPolicy field types have been changed from `string` to `corev1.PullPolicy`, thus aligning with kubeadm v1beta4 API +- `imagePullPolicy` field types have been changed from `string` to `corev1.PullPolicy`, thus aligning with kubeadm v1beta4 API - `spec.kubeadmConfigSpec.initConfiguration.nodeRegistration.imagePullPolicy` type has been changed to `corev1.PullPolicy` - `spec.kubeadmConfigSpec.joinConfiguration.nodeRegistration.imagePullPolicy` type has been changed to `corev1.PullPolicy` -- Timeout fields have been aligned with kubeadm v1beta4 API, but field names and types have been adapted according to API guidelines. +- `timeout` fields have been aligned with kubeadm v1beta4 API, but field names and types have been adapted according to API guidelines - `spec.kubeadmConfigSpec.initConfiguration.timeouts` struct has been added with the following fields: - `controlPlaneComponentHealthCheckSeconds` - `kubeletHealthCheckSeconds` @@ -361,12 +512,28 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K - `etcdAPICallSeconds` - `tlsBootstrapSeconds` - `discoverySeconds` - - `spec.kubeadmConfigSpec.joinConfiguration.timeouts` field has been added with the same set of timeouts listed above. - - `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.timeoutForControlPlane` field has been removed. + - `spec.kubeadmConfigSpec.joinConfiguration.timeouts` field has been added with the same set of timeouts listed above + - `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.timeoutForControlPlane` field has been removed Use `spec.kubeadmConfigSpec.initConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` and `spec.kubeadmConfigSpec.joinConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` instead; - however, using different timeouts for init and join will be enabled only when v1beta1 is removed. - - `spec.kubeadmConfigSpec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.kubeadmConfigSpec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead. -- The `spec.kubeadmConfigSpec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed. + however, using different timeouts for init and join will be enabled only when v1beta1 is removed + - `spec.kubeadmConfigSpec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.kubeadmConfigSpec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead +- The field `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` does not embeds anymore `ControlPlaneComponent` (avoid embedding structs) + - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` struct +- The type of the field `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager` has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) +- The type of the field `spec.kubeadmConfigSpec.clusterConfiguration.scheduler` has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) +- The type of the fields `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager.extraVolumes.readOnly` + , `spec.kubeadmConfigSpec.clusterConfiguration.scheduler.extraVolumes.readOnly` has been changed from `bool` to `*bool` (avoid custom serialization) +- The type of the fields `spec.kubeadmConfigSpec.initConfiguration.nodeRegistration`, `spec.kubeadmConfigSpec.joinConfiguration.nodeRegistration` has been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) +- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the field `spec.kubeadmConfigSpec.files[].append` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the fields `spec.kubeadmConfigSpec.users[].gecos`, `spec.kubeadmConfigSpec.users[].groups`, `spec.kubeadmConfigSpec.users[].homeDir`, `spec.kubeadmConfigSpec.users[].shell`, `spec.kubeadmConfigSpec.users[].passwd`, + `spec.kubeadmConfigSpec.users[].primaryGroup`, `spec.kubeadmConfigSpec.users[].sudo` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.kubeadmConfigSpec.diskSetup.filesystems[].partition`, `spec.kubeadmConfigSpec.diskSetup.filesystems[].replaceFS` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.kubeadmConfigSpec.diskSetup.partitions[].tableType` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.kubeadmConfigSpec.ignition.containerLinuxConfig.strict` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The `spec.kubeadmConfigSpec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed - The following `spec.kubeadmConfigSpec` fields have been removed because they are not necessary (Cluster API automatically applies the right gvk when generating kubeadm config files): - `clusterConfiguration.apiVersion`, `clusterConfiguration.kind` - `initConfiguration.apiVersion`, `initConfiguration.kind` @@ -378,48 +545,88 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K - `networking.dnsDomain` (can still be set via `Cluster.spec.clusterNetwork.serviceDomain`) - `kubernetesVersion` (can still be set via `KubeadmControlPlane.spec.version`) - `clusterName` (can still be set via `Cluster.metadata.name`) - Note: The ClusterConfiguration fields could previously be used to overwrite the fields from Cluster, now we only use the fields from Cluster. + Note: The ClusterConfiguration fields could previously be used to overwrite the fields from Cluster, now we only use the fields from Cluster - All fields of type Duration in `spec.kubeadmConfigSpec.initConfiguration.bootstrapTokens[]` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `.ttl` => `.ttlSeconds` - All fields of type Duration in `spec.machineTemplate` have - been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` - All fields of type Duration in `spec.remediationStrategy` have - been renamed by adding the `Seconds` suffix and their type was changed to int32, thus aligning to K8s guidelines. + been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `retryPeriod` => `retryPeriodSeconds` - - `minHealthyPeriod` => `minHealthyPeriodSeconds` -- Replica counters fields are now consistent with replica counters from other resources. + - `minHealthyPeriod` => `minHealthyPeriodSeconds` +- The type of the field `spec.version` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.remediationStrategy.retryPeriodSeconds` (previously `retryPeriod`) has been changed from `*string` to `string` (drop unnecessary pointers) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- Replica counters fields are now consistent with replica counters from other resources (improve status) - `status.replicas` was made a pointer and omitempty was added - `status.readyReplicas` has now a new semantic based on machine's `Ready` condition - `status.availableReplicas` has now a new semantic based on machine's `Available` condition - `status.upToDateReplicas` has now a new semantic (and name) based on machine's `UpToDate` condition - Temporarily, old replica counters will still be available under the `status.deprecated.v1beta1` struct -- Information about the initial provisioning process is now surfacing under the new `status.initialization` field. +- Information about the initial provisioning process is now surfacing under the new `status.initialization` field (improve status) - `status.ready` has been dropped - `status.initialized` has been replaced by `status.initialization.controlPlaneInitialized` -- Support for terminal errors has been dropped. - - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1`. +- Support for terminal errors has been dropped (improve status) + - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` +- The type of the field `status.version` has been changed from `*string` to `string` (drop unnecessary pointers) +- The field `status.lastRemediation.timestamp` has been renamed to `status.lastRemediation.time` (compliance with K8s API guidelines) ### KubeadmControlPlaneTemplate -KubeadmControlPlaneTemplate `spec.template.spec` has been aligned to changes in the [KubeadmControlPlane](#kubeadmcontrolplane) `spec` struct. +KubeadmControlPlaneTemplate `spec.template.spec` has been aligned to changes in the [KubeadmControlPlane](#kubeadmcontrolplane) `spec` struct + +### ClusterResourceSet + +- See changes that apply to [all CRDs](#all-crds) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. ### ClusterResourceSetBinding +- See changes that apply to [all CRDs](#all-crds) +- The type of the field `spec.binding` has been changed from `[]*ResourceSetBinding` to `[]ResourceSetBinding` (drop unnecessary pointers) - Remove deprecated `ClusterResourceSetBinding.DeleteBinding` func +### ExtensionConfig + +- `ExtensionConfig` v1beta2 has been created, thus aligning with other Cluster API resources +- `ExtensionConfig` v1alpha1 has been deprecated, and it will be removed in a following release +- See changes that apply to [all CRDs](#all-crds) +- The type of the field `spec.clientConfig.url` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `spec.clientConfig.service.path` has been changed from `*string` to `string` (drop unnecessary pointers) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. +- The type of the field `status.handlers[].timeoutSeconds` has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type of the field `status.handlers[].failurePolicy` has been changed from `*FailurePolicy` to `FailurePolicy` (drop unnecessary pointers) + ### IPAddress -- The type of the `spec.claimRef` field has been changed from `corev1.LocalObjectReference` to `IPAddressClaimReference`. -- The type of the `spec.poolRef` field has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference`. - - The type of the `spec.poolRef.apiGroup` field has been changed from `*string` to `string`. + +- See changes that apply to [all CRDs](#all-crds) +- The type of the field `spec.claimRef` has been changed from `corev1.LocalObjectReference` to `IPAddressClaimReference` (improve object references) +- The type of the field `spec.poolRef` has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) +- The type of the field `spec.poolRef.apiGroup` has been changed from `*string` to `string` (drop unnecessary pointers) ### IPAddressClaim -- The type of the `spec.poolRef` field has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference`. - - The type of the `spec.poolRef.apiGroup` field has been changed from `*string` to `string`. -- The type of the `status.addressRef` field has been changed from `corev1.LocalObjectReference` to `IPAddressReference`. + +- See changes that apply to [all CRDs](#all-crds) +- The type of the field `spec.poolRef` has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) +- The type of the field `spec.poolRef.apiGroup` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the field `status.addressRef` has been changed from `corev1.LocalObjectReference` to `IPAddressReference` (improve object references) +- `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) + - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily + under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option + for users willing to continue using old conditions. ## Cluster API Contract changes From 17fd3a82357bda2394711d9dd99c34c9508c597f Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Fri, 18 Jul 2025 14:26:32 +0200 Subject: [PATCH 2/2] Fix review findings --- .../providers/migrations/v1.10-to-v1.11.md | 248 +++++++++--------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md index 4b373802ceb3..d42e12e34c89 100644 --- a/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md +++ b/docs/book/src/developer/providers/migrations/v1.10-to-v1.11.md @@ -75,9 +75,9 @@ proposal because most of the changes described below are a consequence of the wo - `sigs.k8s.io/cluster-api/exp/ipam/api/v1beta1` => `sigs.k8s.io/cluster-api/api/ipam/v1beta1` (apiGroup: `ipam.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/exp/runtime/api/v1alpha1` => `sigs.k8s.io/cluster-api/api/runtime/v1alpha1` (apiGroup: `runtime.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1` => `sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1` (apiGroup: `hooks.runtime.cluster.x-k8s.io`) -- v1beta2 API version has been introduced and considered the awesome amount of improvements it marks an important +- v1beta2 API version has been introduced and considering the awesome amount of improvements it marks an important step in the journey towards graduating our API to v1; see following paragraphs for more details. - - The new API version have been added in the following packages: + The new API version have been added in the following packages: - `sigs.k8s.io/cluster-api/api/bootstrap/kubeadm/v1beta2` (apiGroup: `bootstrap.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/controlplane/kubeadm/v1beta2` (apiGroup: `controlplane.cluster.x-k8s.io`) - `sigs.k8s.io/cluster-api/api/addons/v1beta2` (apiGroup: `addons.cluster.x-k8s.io`) @@ -93,50 +93,50 @@ proposal because most of the changes described below are a consequence of the wo ### All CRDs -When looking at API changes introduced in the v1beta2 API version for each CRD it could help to keep in mind a few high level themes: +When looking at API changes introduced in the v1beta2 API version for each CRD it could help to keep in mind a few high level themes: - Improve status: - The transition to the new K8s aligned conditions using `metav1.Conditions` types and the new condition semantic has been completed. - Replica counters are now consistent with new conditions and across all resources; new replica counters have been added at cluster level. - - Semantic of contract fields in status have been improved and it is now consistent and across all resources. - - Confusing fields FailureReason/Message have been dropped. + - Semantic of contract fields in status have been improved and are now consistent across all resources. + - The confusing `FailureReason` and `FailureMessage` fields have been dropped. - Support CC across namespaces: - API changes planned for this feature have been implemented. - Improve object references: - - Unnecessary fields from object reference have been dropped. + - Unnecessary fields have been dropped from object reference. - Object references are now GitOps friendly (API version is not overwritten anymore by controllers). - KubeadmConfig and KubeadmControlPlane APIs have been aligned with kubeadm v1beta4 API. - Additionally, fields inferred from top level objects have been removed, thus getting rid of a common source of confusion/issues. - Compliance with K8s API guidelines: - - Thanks to the adoption of the KAL linter, compliance with K8s API guidelines has been greatly improved. - - All the Duration fields are now represented as integer fields with units being part of the field name. - - All the `bool` fields have been changed to `*bool` to preserve user intent. - - An extensive work has been done ensuring the `required` and `optional` is explicitly set in the API, and that + - Thanks to the adoption of the [KAL linter](https://github.com/kubernetes-sigs/kube-api-linter) compliance with K8s API guidelines has been greatly improved. + - All Duration fields are now represented as `*int32` fields with units being part of the field name. + - All `bool` fields have been changed to `*bool` to preserve user intent. + - Extensive work has been done to ensure `required` and `optional` is explicitly set in the API, and that both serialization and validation works accordingly: - - Stop rendering empty struct (review of all the occurrences of `omitempty` and introduction of `omitzero`) - - Do not allow `""` when the zero value is not semantically different from value not set (either you have to provide a non empty string value, or not set the field at all). - - Do not allow `0` when the zero value is not semantically different from value not set (either you have to provide a non zero int value, or not set the field at all). - - Do not allow `{}` when the zero value is not semantically different from value not set (either you have at least one property set in the object, or not set the field at all). - - Do not allow `[]` when the zero value is not semantically different from value not set (either you have at least one item in the list, or not set the field at all). - - Ensure validation for all the enum types. - - Missing list markers have been added. - - Note: For sake of simplicity, changes about `omitempty`, `required` and `optional` markers, or other related validation markers - have not been documented in the following paragraphs. Please look at the CRD definitions if you are interested in this changes. + - Stop rendering empty structs (review of all occurrences of `omitempty` and introduction of `omitzero`) + - Do not allow `""` when it is not semantically different from value not set (either you have to provide a non-empty string value or not set the field at all). + - Do not allow `0` when it is not semantically different from value not set (either you have to provide a non-0 int value or not set the field at all). + - Do not allow `{}` when it is not semantically different from value not set (either you have to set at least one property in the object or not set the field at all). + - Do not allow `[]` when it is not semantically different from value not set (either you have to set at least one item in the list or not set the field at all). + - Ensure validation for all enum types. + - Missing list markers have been added for SSA. + - Note: For sake of simplicity, changes about `omitempty`, `required` and `optional` markers or other related validation markers + have not been documented in the following paragraphs. Please look at the CRD definitions if you are interested in these changes. - Drop unnecessary pointers: - - After fixing `required` and `optional` according to K8s API guidelines, an extensive work for dropping unnecessary - pointers has been performed thus improving the usability of API's go structs. + - After fixing `required` and `optional` according to K8s API guidelines, extensive work has been done to + drop unnecessary pointers thus improving the usability of the API's Go structs. - Avoid embedding structs: - - Coupling between API types have been reduced by reducing the usage of embedded structs. + - Coupling between API types has been reduced by reducing the usage of embedded structs. - Improve consistency: - - An extensive work has been performed to improve consistency across all resources: - - Fields for machine deletion are under a new `deletion` struct in all resources. - - Settings about health `rollout` have been logically grouped in all resources. - - Settings about health `checks` and `remediation` have been logically grouped in all resources. + - Extensive work has been done to improve consistency across all resources: + - Fields for Machine deletion are under a new `deletion` struct in all resources. + - Settings about `rollout` have been logically grouped in all resources. + - Settings about health checks and `remediation` have been logically grouped in all resources. - Etc.. - Missing validations have been added where required. - Tech debt has been reduced by dropping deprecated fields. - - Important! please pay attention to field removals, e.g. if you are using GitOps tools, either migrate to v1beta2 or make sure + - Important! Please pay attention to field removals, e.g. if you are using GitOps tools, either migrate to v1beta2 or make sure to stop setting the removed fields. The removed fields won't be preserved even if setting them via v1beta1 (as they don't exist in v1beta2). - For example, we removed the `clusterName` field from `KubeadmControlPlane.spec.kubeadmConfigSpec.clusterConfiguration` @@ -144,16 +144,16 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i ### Cluster - See changes that apply to [all CRDs](#all-crds) -- The type of the field `spec.paused` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the `spec.paused` field has been changed from `bool` to `*bool`(compliance with K8s API guidelines) - The `spec.controlPlaneRef` and `spec.infrastructureRef` fields are now using `ContractVersionedObjectReference` type instead of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD -- The `spec.controlPlaneEndpoint.host` field does not accept anymore "" as a value (missing validation) -- The `spec.controlPlaneEndpoint.port` field does not accept anymore 0 as a value (missing validation) -- The type for the field `spec.clusterNetwork.apiServerPort` has been changed from `*int32` to `int32` (drop unnecessary pointers) - - This field does not accept anymore 0 as a value (missing validation) -- The type for the fields `spec.clusterNetwork.services`, `spec.clusterNetwork.pods` has been changed from `*NetworkRanges` to `NetworkRanges` (drop unnecessary pointers) +- The `spec.controlPlaneEndpoint.host` field does not accept "" anymore as a value (missing validation) +- The `spec.controlPlaneEndpoint.port` field does not accept 0 anymore as a value (missing validation) +- The type of the `spec.clusterNetwork.apiServerPort` field has been changed from `*int32` to `int32` (drop unnecessary pointers) + - This field does not accept 0 anymore as a value (missing validation) +- The type of the `spec.clusterNetwork.services` and `spec.clusterNetwork.pods` fields has been changed from `*NetworkRanges` to `NetworkRanges` (drop unnecessary pointers) - The `spec.topology.class` field has been renamed to `spec.topology.classRef.name` (support CC across namespaces) - The `spec.topology.classNamespace` field has been renamed to `spec.topology.classRef.namespace` (support CC across namespaces) - The `spec.topology.rolloutAfter` field has been removed because the corresponding functionality was never implemented (tech debt) @@ -162,12 +162,12 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - `spec.topology.controlPlane.variables.overrides[]` - `spec.topology.workers.machineDeployments[].variables.overrides[]` - `spec.topology.workers.machinePools[].variables.overrides[]` -- The type of the field `spec.workers` has been changed from `*WorkersTopology` to `WorkersTopology` (drop unnecessary pointers) -- The type for the field `spec.topology.controlPlane.variables` has been changed from `*ControlPlaneVariables` to `ControlPlaneVariables` (drop unnecessary pointers) -- The type for the field `spec.topology.workers.machineDeployments[].failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type for the field `spec.topology.workers.machineDeployments[].strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) -- The type for the field `spec.topology.workers.machineDeployments[].variables` has been changed from `*MachineDeploymentVariables` to `MachineDeploymentVariables` (drop unnecessary pointers) -- The type for the field `spec.topology.workers.machinePools[].variables` has been changed from `*MachinePoolVariables` to `MachinePoolVariables` (drop unnecessary pointers) +- The type of the `spec.workers` field has been changed from `*WorkersTopology` to `WorkersTopology` (drop unnecessary pointers) +- The type of the `spec.topology.controlPlane.variables` field has been changed from `*ControlPlaneVariables` to `ControlPlaneVariables` (drop unnecessary pointers) +- The type of the `spec.topology.workers.machineDeployments[].failureDomain` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.topology.workers.machineDeployments[].strategy` field has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the `spec.topology.workers.machineDeployments[].variables` field has been changed from `*MachineDeploymentVariables` to `MachineDeploymentVariables` (drop unnecessary pointers) +- The type of the `spec.topology.workers.machinePools[].variables` field has been changed from `*MachinePoolVariables` to `MachinePoolVariables` (drop unnecessary pointers) - The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct: - `spec.topology.controlPlane.machineHealthCheck` - `spec.topology.workers.machineDeployments[].machineHealthCheck` @@ -215,11 +215,11 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- The type for the field `spec.paused` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the field `spec.strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) -- The type of the field `spec.strategy.rollingUpdate` has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategy` (drop unnecessary pointers) -- The type of the field `spec.strategy.remediation` has been changed from `*RemediationStrategy` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) -- The type for the field `spec.remediation` has been changed from `*string` to `MachineSetDeletePolicy` +- The type of the `spec.paused` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.strategy` field has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the `spec.strategy.rollingUpdate` field has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the `spec.strategy.remediation` field has been changed from `*RemediationStrategy` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) +- The type of the `spec.remediation` field has been changed from `*string` to `MachineSetDeletePolicy` - The `spec.revisionHistoryLimit` field has been removed. The MachineDeployment controller will now clean up all MachineSets without replicas (tech debt) - The corresponding `machinedeployment.clusters.x-k8s.io/revision-history` annotation has also been removed - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) @@ -244,11 +244,11 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i of `corev1.ObjectReference` (improve object references) - The following fields have been removed: `namespace`, `uid`, `resourceVersion`, `fieldPath` - `apiVersion` has been replaced with `apiGroup`. As before, the version will be read from the corresponding CRD -- The type for the field `spec.strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) -- The type for the field `spec.strategy.rollingUpdate` has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) -- The type for the field `spec.strategy.remediation` has been changed from `*RemediationStrategy` to `RemediationStrategy` (drop unnecessary pointers) -- The type for the field `spec.strategy.remediation.deletePolicy` has been changed from `string` to `MachineSetDeletePolicy` (use enums) -- The type for the field `spec.deletePolicy` has been changed from `string` to `MachineSetDeletePolicy` (improve consistency) +- The type of the `spec.strategy` field has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the `spec.strategy.rollingUpdate` field has been changed from `*MachineRollingUpdateDeployment` to `MachineDeploymentStrategyRollingUpdate` (drop unnecessary pointers) +- The type of the `spec.strategy.remediation` field has been changed from `*RemediationStrategy` to `RemediationStrategy` (drop unnecessary pointers) +- The type of the `spec.strategy.remediation.deletePolicy` field has been changed from `string` to `MachineSetDeletePolicy` (use enums) +- The type of the `spec.deletePolicy` field has been changed from `string` to `MachineSetDeletePolicy` (improve consistency) - All fields of type Duration in `spec.template.spec` have been renamed by adding the `Seconds` suffix, moved into the `deletion` section and their type was changed to int32 (compliance with K8s API guidelines) - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` @@ -300,9 +300,9 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - `nodeDrainTimeout` => `deletion.nodeDrainTimeoutSeconds` - `nodeVolumeDetachTimeout` => `deletion.nodeVolumeDetachTimeoutSeconds` - `nodeDeletionTimeout` => `deletion.nodeDeletionTimeoutSeconds` -- The type for the field `spec.version` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type for the field `spec.providerID` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type for the field `spec.failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.version` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.providerID` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.failureDomain` field has been changed from `*string` to `string` (drop unnecessary pointers) - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option @@ -313,7 +313,7 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - Support for terminal errors has been dropped (improve status) - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` - The const values for `Failed` phase has been deprecated in the enum type for `status.phase` (controllers are not setting this value anymore) -- The type of the field `status.nodeRef` has been changed from `corev1.ObjectReference` to `MachineNodeReference` (improve object references) +- The type of the `status.nodeRef` field has been changed from `corev1.ObjectReference` to `MachineNodeReference` (improve object references) - The following fields have been removed from `status.nodeRef`: `kind`, `namespace`, `uid`, `apiVersion`, `resourceVersion`, `fieldPath` ### MachineHealthCheck @@ -328,14 +328,14 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - The `spec.unhealthyConditions` field has been renamed to `spec.unhealthyNodeConditions` (improve consistency) - The `spec.remediationTemplate` field has been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference` (improve object references): - The following fields have been removed from `remediationTemplate`: `namespace`, `uid`, `resourceVersion`, `fieldPath` -- The type for the field `spec.unhealthyRange` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.unhealthyRange` field has been changed from `*string` to `string` (drop unnecessary pointers) - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option for users willing to continue using old conditions. -- The type for the field `status.expectedMachines` has been changed from `*int32` to `int32` (drop unnecessary pointers) -- The type for the field `status.currentHealthy` has been changed from `*int32` to `int32` (drop unnecessary pointers) -- The type for the field `status.remediationsAllowed` has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type of the `status.expectedMachines` field has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type of the `status.currentHealthy` field has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type of the `status.remediationsAllowed` field has been changed from `*int32` to `int32` (drop unnecessary pointers) ### ClusterClass @@ -345,7 +345,7 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - The `unhealthyConditions` field has been renamed to `unhealthyNodeConditions` in following struct (improve consistency): - `spec.controlPlane.machineHealthCheck` - `spec.workers.machineDeployments[].machineHealthCheck` -- The deprecated fields `spec.variables[].metadata` and `.status.variables[].definitions[].metadata` fields have been renamed +- The deprecated `spec.variables[].metadata` and `.status.variables[].definitions[].metadata` fields have been renamed to `spec.variables[].deprecatedV1Beta1Metadata` and `.status.variables[].definitions[].deprecatedV1Beta1Metadata` - These fields are deprecated and will be removed when support for v1beta1 will be dropped - Please use `XMetadata` in `JSONSchemaProps` instead @@ -358,8 +358,8 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `nodeStartupTimeout` => `nodeStartupTimeoutSeconds` - `unhealthyNodeConditions[].timeout` => `unhealthyNodeConditions[].timeoutSeconds` -- All the fields implementing or embedding a reference to a template are now using the `ClusterClassTemplateReference` type instead - of `corev1.ObjectReference`; additionally field have been renamed and unnecessary nested struct dropped (improve object references): +- All fields implementing or embedding a reference to a template are now using the `ClusterClassTemplateReference` type instead + of `corev1.ObjectReference`; additionally field have been renamed and unnecessary nested structs dropped (improve object references): - `spec.infrastructure.templateRef`, previously `spec.infrastructure.template.ref` - `spec.controlPlane.templateRef`, previously `spec.controlPlane.template.ref` - `spec.controlPlane.machineInfrastructure.templateRef`, previously `spec.controlPlane.machineInfrastructure.template.ref` @@ -368,25 +368,25 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - `spec.workers.machinePool[].bootstrap.templateRef`, previously `spec.workers.machinePool[].bootstrap.template.ref` - `spec.workers.machinePool[].infrastructure.templateRef`, previously `spec.workers.machinePool[].infrastructure.template.ref` - For all the above, the following fields have been removed from `*.ref`: `namespace`, `uid`, `resourceVersion`, `fieldPath` -- The `spec.workers.machineDeployments[].template.metadata` field has bee moved to `spec.workers.machineDeployments[].metadata` (drop unnecessary nested struct) -- The `spec.workers.machinePools[].template.metadata` field has bee moved to `spec.workers.machinePools[].metadata` (drop unnecessary nested struct) -- The type of the field `spec.infrastructure.namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.controlPlane.namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.workers.machineDeployments[].failureDomain` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.workers.machineDeployments[].strategy` has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) -- The type of the field `spec.workers.machineDeployments[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.workers.machinePool[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type for the fields `spec.controlPlane.machineHealthCheck.unhealthyRange`, `spec.workers.machineDeployments[].machineHealthCheck.unhealthyRange` +- The `spec.workers.machineDeployments[].template.metadata` field has been moved to `spec.workers.machineDeployments[].metadata` (drop unnecessary nested struct) +- The `spec.workers.machinePools[].template.metadata` field has been moved to `spec.workers.machinePools[].metadata` (drop unnecessary nested struct) +- The type of the `spec.infrastructure.namingStrategy.template` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.controlPlane.namingStrategy.template` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.workers.machineDeployments[].failureDomain` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.workers.machineDeployments[].strategy` field has been changed from `*MachineDeploymentStrategy` to `MachineDeploymentStrategy` (drop unnecessary pointers) +- The type of the `spec.workers.machineDeployments[].namingStrategy.template` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.workers.machinePool[].namingStrategy.template` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.controlPlane.machineHealthCheck.unhealthyRange`, `spec.workers.machineDeployments[].machineHealthCheck.unhealthyRange` fields has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.patches[].enabledIf` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the fields `spec.patches[].definitions[].selector.matchResources.controlPlane`, `spec.patches[].definitions[].selector.matchResources.infrastructureCluster` +- The type of the `spec.patches[].enabledIf` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.patches[].definitions[].selector.matchResources.controlPlane`, `spec.patches[].definitions[].selector.matchResources.infrastructureCluster` fields has been changed from `bool` to `*bool`(compliance with K8s API guidelines) -- The type of the fields `spec.patches[].definitions[].jsonPatches[].valueFrom.template`, `spec.patches[].definitions[].jsonPatches[].valueFrom.variable` +- The type of the `spec.patches[].definitions[].jsonPatches[].valueFrom.template`, `spec.patches[].definitions[].jsonPatches[].valueFrom.variable` fields has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the fields `spec.patches[].external.generatePatchesExtension` (previously `generateExtension`), `spec.patches[].external.validateTopologyExtension` (previously `validateExtension`), - `spec.patches[].external.discoverVariablesExtension` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the fields `spec.variables[].schema.openAPIV3Schema.uniqueItems`, `spec.variables[].schema.openAPIV3Schema.exclusiveMaximum`, `spec.variables[].schema.openAPIV3Schema.exclusiveMinimum`, - `spec.variables[].schema.openAPIV3Schema.x-kubernetes-preserve-unknown-fields`, `spec.variables[].schema.openAPIV3Schema.x-kubernetes-int-or-string` +- The type of the `spec.patches[].external.generatePatchesExtension` (previously `generateExtension`), `spec.patches[].external.validateTopologyExtension` (previously `validateExtension`), + `spec.patches[].external.discoverVariablesExtension` fields has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.variables[].schema.openAPIV3Schema.uniqueItems`, `spec.variables[].schema.openAPIV3Schema.exclusiveMaximum`, `spec.variables[].schema.openAPIV3Schema.exclusiveMinimum`, + `spec.variables[].schema.openAPIV3Schema.x-kubernetes-preserve-unknown-fields`, `spec.variables[].schema.openAPIV3Schema.x-kubernetes-int-or-string` fields has been changed from `bool` to `*bool`(compliance with K8s API guidelines) - Same applies to the corresponding fields under: - `spec.variables.schema.openAPIV3Schema.properties[]` @@ -396,7 +396,7 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i - `spec.variables.schema.openAPIV3Schema.anyOf[]` - `spec.variables.schema.openAPIV3Schema.not` - and all the corresponding fields under `status.variables[]` -- The type of the field `spec.workers.machinePool[].namingStrategy.template` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.workers.machinePool[].namingStrategy.template` field has been changed from `*string` to `string` (drop unnecessary pointers) - All the `remediationTemplate` fields have been migrated from type `corev1.ObjectReference` to `MachineHealthCheckRemediationTemplateReference`: - `spec.controlPlane.machineHealthCheck.remediationTemplate` - `spec.workers.machineDeployments[].machineHealthCheck.remediationTemplate` @@ -438,22 +438,22 @@ When looking at API changes introduced in the v1beta2 API version for each CRD i Use `spec.initConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` and `spec.joinConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` instead; however, using different timeouts for init and join will be enabled only when v1beta1 is removed - `spec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead -- The `spec.clusterConfiguration.apiServer` field `spec.clusterConfiguration.apiServer` does not embeds anymore `ControlPlaneComponent` (avoid embedding structs) - - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to `spec.clusterConfiguration.apiServer` struct -- The type of the field `spec.clusterConfiguration.controllerManager` has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) -- The type of the field `spec.clusterConfiguration.scheduler` has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) -- The type of the fields `spec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.clusterConfiguration.controllerManager.extraVolumes.readOnly` - , `spec.clusterConfiguration.scheduler.extraVolumes.readOnly` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the fields `spec.initConfiguration.nodeRegistration`, `spec.joinConfiguration.nodeRegistration` has been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) -- The type of the field `spec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the field `spec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the field `spec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the field `spec.files[].append` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) -- The type of the fields `spec.users[].gecos`, `spec.users[].groups`, `spec.users[].homeDir`, `spec.users[].shell`, `spec.users[].passwd`, - `spec.users[].primaryGroup`, `spec.users[].sudo` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.diskSetup.filesystems[].partition`, `spec.diskSetup.filesystems[].replaceFS` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.diskSetup.partitions[].tableType` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.ignition.containerLinuxConfig.strict` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The `spec.clusterConfiguration.apiServer` field does not embed `ControlPlaneComponent` anymore (avoid embedding structs) + - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to the `spec.clusterConfiguration.apiServer` struct +- The type of the `spec.clusterConfiguration.controllerManager` field has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) +- The type of the `spec.clusterConfiguration.scheduler` field has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) +- The type of the `spec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.clusterConfiguration.controllerManager.extraVolumes.readOnly` + , `spec.clusterConfiguration.scheduler.extraVolumes.readOnly` fields have been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.initConfiguration.nodeRegistration`, `spec.joinConfiguration.nodeRegistration` fields have been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) +- The type of the `spec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.files[].append` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The type of the `spec.users[].gecos`, `spec.users[].groups`, `spec.users[].homeDir`, `spec.users[].shell`, `spec.users[].passwd`, + `spec.users[].pr`, `spec.users[].sudo` fields have been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.diskSetup.filesystems[].partition`, `spec.diskSetup.filesystems[].replaceFS` fields have been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.diskSetup.partitions[].tableType` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.ignition.containerLinuxConfig.strict` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) - The `spec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed - The following `spec` fields have been removed because they are not necessary because Cluster API automatically applies the right gvk when generating kubeadm config files: - `clusterConfiguration.apiVersion`, `clusterConfiguration.kind` @@ -517,22 +517,22 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K Use `spec.kubeadmConfigSpec.initConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` and `spec.kubeadmConfigSpec.joinConfiguration.timeouts.controlPlaneComponentHealthCheckSeconds` instead; however, using different timeouts for init and join will be enabled only when v1beta1 is removed - `spec.kubeadmConfigSpec.joinConfiguration.discovery.timeout` field has been removed. Use `spec.kubeadmConfigSpec.joinConfiguration.timeouts.tlsBootstrapSeconds` instead -- The field `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` does not embeds anymore `ControlPlaneComponent` (avoid embedding structs) - - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` struct -- The type of the field `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager` has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) -- The type of the field `spec.kubeadmConfigSpec.clusterConfiguration.scheduler` has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) -- The type of the fields `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager.extraVolumes.readOnly` - , `spec.kubeadmConfigSpec.clusterConfiguration.scheduler.extraVolumes.readOnly` has been changed from `bool` to `*bool` (avoid custom serialization) -- The type of the fields `spec.kubeadmConfigSpec.initConfiguration.nodeRegistration`, `spec.kubeadmConfigSpec.joinConfiguration.nodeRegistration` has been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) -- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) -- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) -- The type of the field `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) -- The type of the field `spec.kubeadmConfigSpec.files[].append` has been changed from `bool` to `*bool`(compliance with K8s API guidelines) -- The type of the fields `spec.kubeadmConfigSpec.users[].gecos`, `spec.kubeadmConfigSpec.users[].groups`, `spec.kubeadmConfigSpec.users[].homeDir`, `spec.kubeadmConfigSpec.users[].shell`, `spec.kubeadmConfigSpec.users[].passwd`, - `spec.kubeadmConfigSpec.users[].primaryGroup`, `spec.kubeadmConfigSpec.users[].sudo` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.kubeadmConfigSpec.diskSetup.filesystems[].partition`, `spec.kubeadmConfigSpec.diskSetup.filesystems[].replaceFS` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.kubeadmConfigSpec.diskSetup.partitions[].tableType` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.kubeadmConfigSpec.ignition.containerLinuxConfig.strict` has been changed from `bool` to `*bool` (compliance with K8s API guidelines) +- The `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` field does not embed `ControlPlaneComponent` anymore (avoid embedding structs) + - `extraArgs`, `extraVolumes`, `extraEnvs` fields have been added to the `spec.kubeadmConfigSpec.clusterConfiguration.apiServer` struct +- The type of the `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager` field has been changed from `ControlPlaneComponent` to `ControllerManager` (avoid embedding structs) +- The type of the `spec.kubeadmConfigSpec.clusterConfiguration.scheduler` field has been changed from `ControlPlaneComponent` to `Scheduler` (avoid embedding structs) +- The type of the `spec.kubeadmConfigSpec.clusterConfiguration.apiServer.extraVolumes.readOnly`, `spec.kubeadmConfigSpec.clusterConfiguration.controllerManager.extraVolumes.readOnly` + , `spec.kubeadmConfigSpec.clusterConfiguration.scheduler.extraVolumes.readOnly` fields have been changed from `bool` to `*bool` (avoid custom serialization) +- The type of the `spec.kubeadmConfigSpec.initConfiguration.nodeRegistration`, `spec.kubeadmConfigSpec.joinConfiguration.nodeRegistration` fields have been changed from `[]corev1.Taint` to `*[]corev1.Taint` (avoid custom serialization) +- The type of the `spec.kubeadmConfigSpec.joinConfiguration.discovery.bootstrapToken.unsafeSkipCAVerification` field has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.cluster.insecureSkipTLSVerify` field has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the `spec.kubeadmConfigSpec.joinConfiguration.discovery.file.kubeConfig.user.exec.provideClusterInfo` field has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the `spec.kubeadmConfigSpec.files[].append` field has been changed from `bool` to `*bool`(compliance with K8s API guidelines) +- The type of the `spec.kubeadmConfigSpec.users[].gecos`, `spec.kubeadmConfigSpec.users[].groups`, `spec.kubeadmConfigSpec.users[].homeDir`, `spec.kubeadmConfigSpec.users[].shell`, `spec.kubeadmConfigSpec.users[].passwd`, + `spec.kubeadmConfigSpec.users[].primaryGroup`, `spec.kubeadmConfigSpec.users[].sudo` fields have been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.kubeadmConfigSpec.diskSetup.filesystems[].partition`, `spec.kubeadmConfigSpec.diskSetup.filesystems[].replaceFS` fields have been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.kubeadmConfigSpec.diskSetup.partitions[].tableType` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.kubeadmConfigSpec.ignition.containerLinuxConfig.strict` field has been changed from `bool` to `*bool` (compliance with K8s API guidelines) - The `spec.kubeadmConfigSpec.useExperimentalRetryJoin` field (deprecated in CAPI v1.2!) has been removed - The following `spec.kubeadmConfigSpec` fields have been removed because they are not necessary (Cluster API automatically applies the right gvk when generating kubeadm config files): - `clusterConfiguration.apiVersion`, `clusterConfiguration.kind` @@ -558,8 +558,8 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K been renamed by adding the `Seconds` suffix and their type was changed to int32 (compliance with K8s API guidelines) - `retryPeriod` => `retryPeriodSeconds` - `minHealthyPeriod` => `minHealthyPeriodSeconds` -- The type of the field `spec.version` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.remediationStrategy.retryPeriodSeconds` (previously `retryPeriod`) has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.version` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.remediationStrategy.retryPeriodSeconds` field (previously `retryPeriod`) has been changed from `*string` to `string` (drop unnecessary pointers) - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option @@ -575,8 +575,8 @@ KubeadmConfigTemplate `spec.template.spec` has been aligned to changes in the [K - `status.initialized` has been replaced by `status.initialization.controlPlaneInitialized` - Support for terminal errors has been dropped (improve status) - `status.failureReason` and `status.failureMessage` will continue to exist temporarily under `status.deprecated.v1beta1` -- The type of the field `status.version` has been changed from `*string` to `string` (drop unnecessary pointers) -- The field `status.lastRemediation.timestamp` has been renamed to `status.lastRemediation.time` (compliance with K8s API guidelines) +- The type of the `status.version` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The `status.lastRemediation.timestamp` field has been renamed to `status.lastRemediation.time` (compliance with K8s API guidelines) ### KubeadmControlPlaneTemplate @@ -593,7 +593,7 @@ KubeadmControlPlaneTemplate `spec.template.spec` has been aligned to changes in ### ClusterResourceSetBinding - See changes that apply to [all CRDs](#all-crds) -- The type of the field `spec.binding` has been changed from `[]*ResourceSetBinding` to `[]ResourceSetBinding` (drop unnecessary pointers) +- The type of the `spec.binding` field has been changed from `[]*ResourceSetBinding` to `[]ResourceSetBinding` (drop unnecessary pointers) - Remove deprecated `ClusterResourceSetBinding.DeleteBinding` func ### ExtensionConfig @@ -601,28 +601,28 @@ KubeadmControlPlaneTemplate `spec.template.spec` has been aligned to changes in - `ExtensionConfig` v1beta2 has been created, thus aligning with other Cluster API resources - `ExtensionConfig` v1alpha1 has been deprecated, and it will be removed in a following release - See changes that apply to [all CRDs](#all-crds) -- The type of the field `spec.clientConfig.url` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `spec.clientConfig.service.path` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.clientConfig.url` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.clientConfig.service.path` field has been changed from `*string` to `string` (drop unnecessary pointers) - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option for users willing to continue using old conditions. -- The type of the field `status.handlers[].timeoutSeconds` has been changed from `*int32` to `int32` (drop unnecessary pointers) -- The type of the field `status.handlers[].failurePolicy` has been changed from `*FailurePolicy` to `FailurePolicy` (drop unnecessary pointers) +- The type of the `status.handlers[].timeoutSeconds` field has been changed from `*int32` to `int32` (drop unnecessary pointers) +- The type of the `status.handlers[].failurePolicy` field has been changed from `*FailurePolicy` to `FailurePolicy` (drop unnecessary pointers) ### IPAddress - See changes that apply to [all CRDs](#all-crds) -- The type of the field `spec.claimRef` has been changed from `corev1.LocalObjectReference` to `IPAddressClaimReference` (improve object references) -- The type of the field `spec.poolRef` has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) -- The type of the field `spec.poolRef.apiGroup` has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `spec.claimRef` field has been changed from `corev1.LocalObjectReference` to `IPAddressClaimReference` (improve object references) +- The type of the `spec.poolRef` field has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) +- The type of the `spec.poolRef.apiGroup` field has been changed from `*string` to `string` (drop unnecessary pointers) ### IPAddressClaim - See changes that apply to [all CRDs](#all-crds) -- The type of the field `spec.poolRef` has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) -- The type of the field `spec.poolRef.apiGroup` has been changed from `*string` to `string` (drop unnecessary pointers) -- The type of the field `status.addressRef` has been changed from `corev1.LocalObjectReference` to `IPAddressReference` (improve object references) +- The type of the `spec.poolRef` field has been changed from `corev1.TypedLocalObjectReference` to `IPPoolReference` (improve object references) +- The type of the `spec.poolRef.apiGroup` field has been changed from `*string` to `string` (drop unnecessary pointers) +- The type of the `status.addressRef` field has been changed from `corev1.LocalObjectReference` to `IPAddressReference` (improve object references) - `status.conditions` has been replaced with `status.v1beta2.conditions` based on metav1 condition types (improve status) - the old `status.conditions` based on custom cluster API condition types will continue to exist temporarily under `status.deprecated.v1beta1.conditions` for the sake of down conversions and to provide a temporary option