Skip to content

feat: upgrade cluster-api to v1.14.2 - #412

Merged
WassimKallel merged 5 commits into
mainfrom
feat/capi-v1.14
Oct 1, 2026
Merged

WassimKallel merged 5 commits into
mainfrom
feat/capi-v1.14

Conversation

@WassimKallel

@WassimKallel WassimKallel commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

What is the purpose of this pull request/Why do we need it?

Upgrade to Cluster API v1.14.2, following the v1.13 → v1.14 migration guide.

This ships in v0.9.0. v0.8.0 was cut from the commit right before this PR, built on CAPI v1.13.5 and without the RBAC fix below.

Issue #, if available:

Description of changes:

Commit Change
fix(rbac) CAPIC may now delete secrets. Without it, the OwnerReferencesPermissionEnforcement admission plugin rejects the owner reference CAPIC adds to the credentials Secret (cannot set an ownerRef on a resource you can't delete), and every IonosCloudCluster and IonosCloudMachine reconcile fails. The CAPI v1.14 e2e framework enables this plugin, and OpenShift enables it by default.
feat cluster-api v1.14.2, controller-runtime v0.24.1, k8s.io v0.36.5. CAPI v1.14 ships its API types in a new module, sigs.k8s.io/cluster-api/api, which has to be required explicitly; it's added to the dependabot cluster-api group. E2E config moves to the v1.14.2 providers, and the README gets a v1.14 column. No Go code changes.
chore(build) controller-gen v0.21.0 (the CRDs change only in their version stamp) and envtest 1.37.0, as in CAPI v1.14.2.
test(e2e) Drop the v1alpha3/v1alpha4 series from the v1.14 metadata, matching upstream's own metadata.yaml (kubernetes-sigs/cluster-api#11919).
chore(release) Prepare the v0.9 series, following the minor-release checklist: add 0.9 → v1beta2 to metadata.yaml, bump nextVersion in clusterctl-settings.json, move the e2e provider to v0.9.99, and add a v0.9 row to the README. v0.8 × CAPI v1.14 is marked ☓ (not validated).

None of the v1.14 breaking changes or deprecations affect CAPIC: the controller-runtime/controller-tools bump, webhook version validation, the Docker* resources, util/record and controllers/remote.

Testing:

  • Local: make verify lint vet unit-test integration-test (envtest 1.37.0) and go vet -tags e2e ./test/e2e/... all pass.

  • envtest with OwnerReferencesPermissionEnforcement and CAPIC's generated ClusterRole: the owner reference update on the Secret is rejected before the RBAC fix and allowed after it.

  • In place, on a kind management cluster (k8s v1.33.1) running CAPI v1.13.5 and CAPIC v0.8.99, with a live IONOS workload cluster (3 CP + 2 workers, k8s v1.34.11):

    1. With the admission plugin enabled, CAPIC v0.8.99 fails every reconcile with the error above.
    2. clusterctl upgrade apply to CAPI v1.14.2 and CAPIC from this branch. No machine rollout, the owner reference is restored within seconds, and the v1beta2 status shape is intact.
    3. Scale the MachineDeployment from 2 to 3.
    4. Upgrade k8s v1.34.11 → v1.35.9: KCP first, then the MachineDeployment.
    5. Delete the cluster, and create a new one from templates/cluster-template.yaml (3 CP + 2 workers).

    After every step: all nodes Ready, all Cluster conditions true, no orphaned IONOS servers, and no resourceVersion changes on the CAPI/CAPIC objects while idle.

  • The e2e suite runs on this PR.

Special notes for your reviewer:

  • delete on secrets is cluster-wide. CAPIC already had cluster-wide get/list/watch/update on secrets.
  • After an in-place upgrade, clusterctl carries over the stale cluster.x-k8s.io/v1beta1 CRD label. Remove it as after the v0.7 → v0.8 upgrade.
  • templates/* still use the v1beta1 CAPI APIs, which CAPI v1.16 plans to stop serving. That's for a follow-up.

Checklist:

  • Documentation updated
  • Unit Tests added
  • E2E Tests added
  • Includes emojis

🤖 Generated with Claude Code

WassimKallel and others added 3 commits September 30, 2026 16:03
CAPIC adds an owner reference to the user-provided credentials Secret.
The OwnerReferencesPermissionEnforcement admission plugin only lets
callers that can delete an object change its ownerReferences, so every
IonosCloudCluster and IonosCloudMachine reconcile failed with "cannot
set an ownerRef on a resource you can't delete" wherever the plugin is
enabled. OpenShift enables it by default, and the CAPI v1.14 e2e
framework enables it on the kind management cluster.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps cluster-api to v1.14.2, controller-runtime to v0.24.1 and the
Kubernetes libraries to v0.36.5, following the v1.13-to-v1.14 migration
guide. No code changes are needed.

CAPI v1.14 ships its API types in a new Go module,
sigs.k8s.io/cluster-api/api, which has to be required explicitly.
Dependabot now bumps it together with the other CAPI modules.

The e2e suite runs against the v1.14.2 core providers, and the README
lists v1.14 as supported by v0.8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
controller-gen v0.21.0 (the CRDs change only in their version stamp)
and envtest 1.37.0, matching CAPI v1.14.2's Makefile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

The dependency, tooling, E2E, documentation, and generated RBAC changes are consistent and comprehensively validated.

Review effort: Balanced
Findings: None

What changed in this PR

Upgrades CAPIC to Cluster API v1.14.2 and aligns its dependencies, tooling, tests, documentation, and RBAC.

Changes:

  • Upgrades Cluster API, Kubernetes, controller-runtime, controller-gen, and envtest dependencies.
  • Updates E2E provider metadata and compatibility documentation.
  • Grants required Secret deletion permission for owner-reference enforcement.
File Description
.github/​dependabot.yml Groups the new Cluster API API module.
Makefile Updates controller-gen and envtest versions.
README.md Documents v1.14 compatibility.
config/​crd/​bases/​infrastructure.cluster.x-k8s.io_ionoscloudclusters.yaml Updates generator version stamp.
config/​crd/​bases/​infrastructure.cluster.x-k8s.io_ionoscloudclustertemplates.yaml Updates generator version stamp.
config/​crd/​bases/​infrastructure.cluster.x-k8s.io_ionoscloudmachines.yaml Updates generator version stamp.
config/​crd/​bases/​infrastructure.cluster.x-k8s.io_ionoscloudmachinetemplates.yaml Updates generator version stamp.
config/​rbac/​role.yaml Adds Secret deletion permission.
go.mod Upgrades direct and transitive dependencies.
go.sum Records upgraded dependency checksums.
internal/​controller/​ionoscloudcluster_controller.go Updates the Secret RBAC marker.
internal/​controller/​ionoscloudmachine_controller.go Updates the Secret RBAC marker.
test/​e2e/​config/​ionoscloud.yaml Uses CAPI v1.14.2 E2E providers.
test/​e2e/​data/​shared/​v1.14/​metadata.yaml Adds v1.14 clusterctl metadata.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

mneverov
mneverov previously approved these changes Sep 30, 2026
Comment thread README.md Resolved
WassimKallel and others added 2 commits October 1, 2026 10:34
CAPI removed the v1alpha3 and v1alpha4 API versions
(kubernetes-sigs/cluster-api#11919), and its own v1.14.2 metadata.yaml
stops at the 1.0 series. Match it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.8.0 was cut just before this upgrade, so the CAPI v1.14 support and
the secrets RBAC fix ship in v0.9.0. Following the minor-release
checklist, add the 0.9 series to metadata.yaml, bump nextVersion in
clusterctl-settings.json (still on v0.7.0) and the e2e provider version
to v0.9.99, and add a v0.9 row to the compatibility table.

v0.8 is marked unvalidated against CAPI v1.14. It was never tested
against a v1.14 core, and without the secrets delete permission it fails
wherever OwnerReferencesPermissionEnforcement is enabled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Oct 1, 2026

Copy link
Copy Markdown

@WassimKallel
WassimKallel enabled auto-merge (squash) October 1, 2026 09:47
@WassimKallel
WassimKallel disabled auto-merge October 1, 2026 12:36
@WassimKallel
WassimKallel enabled auto-merge (squash) October 1, 2026 12:36
@WassimKallel
WassimKallel disabled auto-merge October 1, 2026 12:36
@WassimKallel
WassimKallel merged commit ac3a472 into main Oct 1, 2026
10 checks passed
@WassimKallel
WassimKallel deleted the feat/capi-v1.14 branch October 1, 2026 12:36

This branch was successfully deployed

1 active deployment
e2e — 3962d148 Deployed Oct 1, 2026 by WassimKallel via e2e #692
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants