---
# System prepended metadata

title: v1.4.0-beta.0
tags: [v1.4.0-beta.0]

---

---
tags: v1.4.0-beta.0
---

# v1.4.0-beta.0

🚨 This is a RELEASE CANDIDATE. Use it only for testing purposes. If you find any bugs, file an issue.

## Highlights

Some of the hightlights in this release are:
- Support for KCP remediation during cluster provisioning
- Support for Variable Discovery through external patches
- Support for Label Sync Between Machines and underlying Kubernetes Nodes
- Support for In-place propagation of changes in KCP, MachineDeployments and MachineSets

## Cluster API v1.3 compared to v1.4
See [the Cluster-API book](https://main.cluster-api.sigs.k8s.io/developer/providers/v1.3-to-v1.4.html) for an overview over relevant changes between Cluster API v1.3 and v1.4 for maintainers of providers and consumers of our Go API.



<details>
<summary>More details about the release</summary>


:warning: **RELEASE CANDIDATE RELEASE NOTES** :warning: 

## Changes since v1.3.0-rc.0
---
## :memo: Proposals
- update autoscaling from zero proposal (#8036)
- Amend KCP proposal with remediation while provisioning the CP (#7855)

## :warning: Breaking Changes
- in-place propagation from MS to InfraMachine and BootstrapConfig (#8060)
- Add filter to associate variables with specific patches (#8128)
- in-place propagation from MD to MS (#8110)
- in-place propagation from MS to Machines (#8111)
- Stop supporting CRDs with invalid names (#8041)
- Refactor clusterctl alpha rollout (#7988)
- Remove clusterctl restore command and Restore function from Client interface (#7945)
- Bump controller-runtime 0.13.1=>0.14.1 (#7906)
- KCP: block upgrade to versions with old registry, improve registry handling (#7856)
- Drop ClusterTopologyManagedFieldsAnnotation field from v1beta1 (#7845)
- Removing deprecated (--disable-no-echo) flag and renaming docs (#7837)
- Removing deprecated NewServer function (#7844)
- Removing deprecated --list-images flag on init command (#7838)
- Removing CloneTemplate and CloneTemplateInput (#7839)
- Removing deprecated healthcheck condition (#7836)
- Use Kubernetes 1.26 in Quick Start docs and CAPD. (#7799)
- Use consistent naming for API constants (#7618)

## :sparkles: New Features
- Handle variable definition conflicts for external variables (#8107)
- docs: fix command-line-tools links in book (#8162)
- Add support for KCP remediation during cluster provisioning (#7963)
- Implement Reconcile mode for ClusterResourceSet (#7497)
- Add discoverVariables runtime hook to ClusterClass reconcile loop (#8006)
- Update coredns corefile migration to v1.0.19 (#8074)
- add response metrics for RuntimeSDK hook client (#7956)
- Add more reviewers and maintainers (#7996)
- Add NodeRegistrationOptions.ImagePullPolicy Support (#7772)
- Add KCP feature to clusterctl alpha rollout (#6858)
- e2e Test: Ensure OwnerRefs are consistently reconciled (#7606)
- Add Node managed labels support (#7173)
- Managed Cluster should set labels and annotations on ControlPlane and MDs (#7917)
- ClusterClass patches: Allow matching all MachineDeploymentClasses (#6930)
- Add output flag, change printYaml function signature (#7828)
- add explicit securitycontexts to controllers (#7831)
- Adds a verify script that run trivy scanner on container images (#7604)
- Make control plane port configurable in CAPD (#7548)
- tilt: add podman support (#7810)
- Add support for raw template URL in clusterctl generate yaml (#7371)
- Add support for CoxEdge provider (#7770)
- clusterctl: add command groups (#7769)
- Improve clusterctl upgrade syntax. Don't require namespace (#7376)
- add Settings support to RuntimeExtensions (#7562)
- Adds a make target to generate all the release manifests (#7629)
- [kcp] Make kcp.skipPhases field mutable (#7646)
- Get Ginkgo version in Makefile from go.mod (#7503)
- Move lowestNonZeroRetryAfterSeconds to util (#7542)
- Removed the writing of os.environment by passing the 'env' parameter in cmd_button (#7574)
- Introduce additional linters & bump golangci-lint to 1.50.1 (#7581)
- Update support policy (#7549)
- MachinePool annotation for externally managed autoscaler (#7107)
- add kubekey k3s boostrap and control plane provider (#7528)

## :bug: Bug Fixes
- Fix git config in release-binary builds (#8199)
- MD controller: fix nil pointer when OnDelete policy is used (#8184)
- Fix flaky TestServerSideApplyWithDefaulting test (#8166)
- Requeue health check during the creation of a new cluster accessor (#8122)
- ClusterClass: run dry-run on original and modified object (#8139)
- KCP: fix rollout after upgrade (#8125)
- uplift golang and x/net (#8126)
- uplift helm dependency (#8089)
- KCP: Allow unsetting fields if their child fields are mutable (#8037)
- Added nodeVolumeDetachTimeout to CP machine (#8066)
- ClusterCacheTracker: fix panic in error creation (#8062)
- Fix unit test coverage in KubeadmConfig (#7678)
- Fix spelling of requeuing across files (#8024)
- Update comment describing controlPlaneInitialized (#8005)
- Remove exact path match from walkTemplate test (#8019)
- Fix version calculation in make lint (#8003)
- Migration github repository  cluster-api-provider-outscale from organization outscale-dev to outscale (#7998)
- Use tenancy as filter in ownerReference test (#7976)
- bugfix write-to flag should only run filepath.Clean when the output file is not "" or - (#7972)
- Fix secret selection logic for ownerRef test (#7973)
- ClusterClass: remove empty hook entries from annotation (#7930)
- test/e2e: don't restart the conformance test container after ginkgo exits (#7946)
- Allow using the --from flag to get a template from a github release (#7453)
- test/e2e: Fix cluster cleanup in self-hosted test (#7928)
- Revert: CAPD: only ignore necessary kubeadm preflight errors (#7878)
- test/e2e: fix CoreDNS readiness validation, misc improvements (#7843)
- Fix to enable bootstrap secret rotation if the secret itself missing (#7717)
- Add deterministic prefix and suffix to label hash (#7763)
- Validate MachineDeploymentTopology.Name to be valid label value (#7759)
- Add name hashing for long MS and KCP names (#7711)
- clusterctl: fix goproxy to also return versions for major > 1 (#7709)
- Fix flakiness in MD controller test (#7668)
- Remove inaccurate comment on KCP test (#7662)
- Fix adoption KubeadmControlPlane owned secrets (#7592)
- Fix Machine adoption for KCP/MachineSet-owned Machines (#7591)
- Fix bug in kubeadmconfig adoption (#7623)
- Fix kubeadmconfig bootstrapsecret ownerRef reconciliation (#7587)
- Fix adopting ClusterResourceSet resource by CRS when already applied (#7590)
- Add CleanupAndWait call for flaky ClusterClass test (#7589)
- test/e2e: fix ClusterClass changes flake (#7579)
- Add finalizer reconcile for Topology MachineSets and MachineDeployments (#7536)

## :seedling: Others
- Weaken ClusterClass webhook variable validation on update (#8153)
- ClusterClass: extend engine unit tests to cover applying builtin variables (#8183)
- test/extension: push to staging registry (#8181)
- Bump github.com/coredns/corefile-migration from 1.0.19 to 1.0.20 (#8193)
- Bump github.com/gobuffalo/flect from 1.0.0 to 1.0.2 (#8195)
- Bump golang.org/x/oauth2 from 0.0.0-20221014153046-6fdb5e3db783 to 0.5.0 (#8194)
- Bump actions/cache from 3.2.5 to 3.2.6 (#8191)
- Bump github.com/onsi/ginkgo/v2 from 2.8.1 to 2.8.4 (#8143)
- CAPD: drop kubectl from image (#8182)
- hack: add support for date ranges to notes.go script (#8094)
- CAPD: add env var to allow using remote Docker engines (#8177)
- Set fail-fast: false for weekly md link check (#8161)
- align CAPD docker run flags with kind (#8157)
- Use errors.Is to check for a specific error (#8130)
- Make Cluster webhook less strict for out of date ClusterClasses (#8136)
- Add envtest unit tests for node label sync (#8055)
- Move machine controller tests to envtest, drop disableNodeLabelSync (#8044)
- Bump github.com/onsi/gomega from 1.26.0 to 1.27.1 (#8144)
- test/framework: ensure ApplyClusterTemplateAndWait always returns a cluster (#8142)
- test/e2e: disable rollout check for ClusterClass-based cluster in clusterctl ugprade tests II (#8140)
- test/e2e: disable rollout check for ClusterClass-based cluster in clusterctl upgrade test (#8138)
- ClusterClass: Allow fine-granular control of MachineDeployment upgrades (#8102)
- Remove generation check for clusterclass to fix e2e test (#8133)
- Default and Validate Cluster variables based on ClusterClass status (#8076)
- improve logging during Machine deletion (#8108)
- Deprecate v1alpha3 & v1alpha4 (#8071)
- Bump github.com/onsi/ginkgo/v2 from 2.8.0 to 2.8.1 (#8104)
- Bump actions/cache from 3.2.4 to 3.2.5 (#8103)
- Enable ginkgolinter len assertion check and fix findings (#8087)
- Add DefinitionFrom field to ClusterVariable (#8031)
- CAPD: reduce noisy error logs during machine reconciliation (#8090)
- ClusterClass: also consider MD unavailableReplicas for rollout (#8063)
- test/e2e: Add v1.0=>main clusterctl upgrade test (#8072)
- Add ClusterClass generation check to Cluster Topology reconciler (#8023)
- MD: improve replica defaulting for autoscaler (#7990)
- Add clusterclass validation to topology reconciler (#7954)
- ClusterClass: catch panics when applying patches (#8067)
- Bump golangci-lint (v1.51.1) and enable some ginkgolinter checks (#8058)
- test/e2e use informer to stream pod logs (#7935)
- Bump controller-tools to v0.11.3 (#8056)
- envtest: add env var to allow writing envtest kubeconfig (#8042)
- MachinePool: automatically bump apiVersions like in our other controllers (#7995)
- Make 'inline' a reserved name for patches (#8025)
- Update golangci-lint to v1.51.0 (#8046)
- Add introduction.png image (#8043)
- Add ClusterClass variables to status on reconcile (#7991)
- remove KCP as a valid resource type for rollback (#8035)
- make ensure scripts fail if GOPATH/bin not in PATH (#8017)
- Bump github.com/onsi/gomega from 1.25.0 to 1.26.0 (#8028)
- Bump github.com/onsi/ginkgo/v2 from 2.7.0 to 2.8.0 (#8029)
- Bump actions/cache from 3.2.3 to 3.2.4 (#8027)
- Bump to controller-tools v0.11.2 (#8020)
- Nit on KCP proposal (#8018)
- Bump to CR v0.14.2 (#8014)
- Add API types for DiscoverVariables hook (#7986)
- Add observedGeneration to ClusterClass status (#7987)
- Add variable discovery to topology mutation proposal (#7932)
- Replace deprecated string set through generic set (#8004)
- actions: use go version from Makefile (#8002)
- update const strings for util.secret (#7997)
- Allow Machines in unreachable Clusters to do initial reconciliation (#7719)
- Remove PopulateDefaultsMachineDeployment and fix how MD controller set revision (#7992)
- Bump to Go 1.19.5 (#7981)
- Bump github.com/spf13/viper from 1.14.0 to 1.15.0 (#7979)
- Bump github.com/onsi/gomega from 1.24.2 to 1.25.0 (#7980)
- Bump github.com/fatih/color from 1.13.0 to 1.14.1 (#7978)
- Bump golangci/golangci-lint-action from 3.3.1 to 3.4.0 (#7977)
- Improve tilt-prepare for testing providers outside of the CAPI repository (#7968)
- add comment to disableNodeLabelSync (#7965)
- Improve quick-start test supporting scenarios with more than one infrastructure provider (#7969)
- Run weekly markdown check against all supported branches (#7960)
- Remove redirection handling in repository_github client (#7951)
- logging: add removal note, cleanup no-op code (#7955)
- Fix sha of kubebuilder-release-tools GitHub action (#7953)
- ClusterClass proposal: Clean up outdated implementation details by linking the book's page (#7790)
- Add configurable etcd call timeout (#7841)
- drop the draft release notes step from github workflow (#7893)
- Update visualizer chart to v1.1.0 (#7857)
- ClusterClass & test/framework: consider replicas for control plane readiness (#7914)
- improves the existing capi metrics (#7886)
- Update cert-manager to v1.11.0 (#7916)
- setup Trivy scanning for supported release branches (#7874)
- Bump kubebuilder-release-tools to v0.3.0, start running it on cherry-pick PRs (#7908)
- Bump controller-tools 0.10.0=>0.11.1 (#7907)
- test/e2e: Cleanup test files & update doc (#7825)
- test/e2e: run clusterctl v0.4=>main test with v1.23.13 (#7899)
- Update versions doc adding Kubernetes 1.26 (#7801)
- test/e2e: increase Ginkgo poll progress after to 1h (#7888)
- Added WatchDeploymentLogsByLabelSelector function (#7039)
- Bump github.com/onsi/ginkgo/v2 from 2.6.1 to 2.7.0 (#7883)
- Bump github.com/gobuffalo/flect from 0.3.0 to 1.0.0 (#7885)
- Bump golang.org/x/text from 0.5.0 to 0.6.0 (#7884)
- Bump actions/cache from 3.2.2 to 3.2.3 (#7882)
- Bump actions/checkout from 3.2.0 to 3.3.0 (#7881)
- Small improvement to the backport policy (#7823)
- Fix verify boilerplate on mac (#7866)
- tilt: remove securityContext for live_update (#7846)
- CAPD: only ignore necessary kubeadm preflight errors (#7842)
- Update conversion-gen version (v0.25.0 -> v0.26.0) (#7847)
- Update kubebuilder envtest (1.25.2 -> 1.26.0) (#7835)
- go.mod: Update github.com/google/go-github to v48.2.0 (#7830)
- Bump github.com/valyala/fastjson from 1.6.3 to 1.6.4 (#7827)
- Bump actions/cache from 3.2.1 to 3.2.2 (#7826)
- Remove `clusterctl backup` command and Backup function from Client interface (#7752)
- Add failing/flaking test issue templates to the repository (#7778)
- Bump actions/cache from 3.0.11 to 3.2.1 (#7805)
- Cluster topology: fix comment about MD replicas defaulting (#7779)
- Tilt must show templates for enabled providers only (#7724)
- New Filter NeedsRollout to determine if a machine needs rollout. (#7571)
- Add category to DockerClusterTemplate (#7798)
- Cleanup special handling for tilt_modules folder (#7774)
- Bump helm and containerd in hack/tools go module (#7788)
- Bump to Go 1.19.4 (#7791)
- Bump github.com/onsi/gomega from 1.24.1 to 1.24.2 (#7782)
- Bump actions/setup-go from 3.4.0 to 3.5.0 (#7781)
- update golang.org//x/net to v0.4.0 (#7780)
- Remove fix RBAC from component management in clusterctl (#7339)
- Fix verify-shellcheck script and fix findings (#7755)
- Bump actions/checkout from 3.1.0 to 3.2.0 (#7733)
- Bump shellcheck version (0.8.0 -> 0.9.0) (#7737)
- Bump github.com/onsi/ginkgo/v2 from 2.5.1 to 2.6.0 (#7735)
- KCP should avoid to reconcile certificates too early (#7727)
- Add explicit length check for cluster and md names (#7712)
- Update cert-manager to v1.10.1 (#7705)
- `make promote-images` should also work if the user uses a SSH style URL (#7715)
- lint: enable revive if-return check and fix findings (#7682)
- Bump sprig and golang/x/text (#7701)
- prepare main branch for v1.4 development (#7692)
- Bump actions/setup-go from 3.3.1 to 3.4.0 (#7689)
- Bump softprops/action-gh-release from 0.1.14 to 0.1.15 (#7688)
- e2e: add init versions for providers (#7628)
- Change test-extension pull policy to IfNotPresent (#7666)
- Bump github.com/coredns/corefile-migration (#7652)
- Ensure infra and bootstrap objects are owned by Machines (#7593)
- Bump github.com/prometheus/client_golang from 1.13.0 to 1.14.0 (#7651)
- Bump github.com/spf13/viper from 1.13.0 to 1.14.0 (#7650)
- Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 (#7649)
- Automate go dependency bumps (except CR/k8s.io) (#7632)
- Use latest kind images for CAPD (#7621)
- KCP: remove unused code (#7598)
- MD reconciler: improve integration test (#7596)
- Fix an error message of the failure domain field in the Machine controller (#7583)
- test/e2e: bump ginkgo binary to v2.5.0 (#7580)
- self-hosted e2e should check managed fields (#7513)
- add clusterctl label to providers deployed with tilt (#7551)
- Add Jont828 to clusterctl reviewers (#7491)
- Update e2e components to v1.2.5 (#7550)

:book: Additionally, there have been 52 contributions to our documentation and book. (#8169, #8168, #8165, #8134, #8148, #8156, #8118, #8117, #8073, #8079, #8015, #8034, #8030, #7902, #7983, #7967, #7566, #7950, #7922, #7943, #7933, #7934, #7912, #7802, #7894, #7867, #7546, #7822, #7817, #7814, #7803, #7706, #7767, #7726, #7718, #7720, #7714, #7698, #7696, #7681, #7667, #7331, #7675, #7595, #7645, #7605, #7561, #7570, #7526, #7499, #7444, #7545)


</details>
<br/>

_Thanks to all our contributors!_ 😊