Merge https://github.com/kubernetes-sigs/cluster-api:v1.13.1 (16d0a65) into master#288
Merge https://github.com/kubernetes-sigs/cluster-api:v1.13.1 (16d0a65) into master#288cloud-team-rebase-bot[bot] wants to merge 601 commits intoopenshift:masterfrom
Conversation
…bot/go_modules/sigs.k8s.io/structured-merge-diff/v6-6.3.2 🌱 Bump sigs.k8s.io/structured-merge-diff/v6 from 6.3.2-0.20260122202528-d9cc6641c482 to 6.3.2
Signed-off-by: Stefan Büringer buringerst@vmware.com
…/sdk pkg) (kubernetes-sigs#13372) * GO-2026-4394: CVE fix for go.opentelemetry.io/otel/sdk pkg Signed-off-by: Adarsh Agrawal <adarsh.agrawal1@ibm.com> * Updating otlp pkgs to latest Signed-off-by: Adarsh Agrawal <adarsh.agrawal1@ibm.com> * Updating remaining opentelemetry pkg Signed-off-by: Adarsh Agrawal <adarsh.agrawal1@ibm.com> --------- Signed-off-by: Adarsh Agrawal <adarsh.agrawal1@ibm.com>
…ky-kcp-test 🌱 Fix flaky KCP test
…-limiting-beta ✨ Promote ReconcileRateLimiting to beta (enabled per default)
…toscaler-v1.35.0 🌱 Bump autoscaler version used for testing to v1.35.0
Signed-off-by: Troy Connor <troy0820@users.noreply.github.com>
…e-cert-manager-1.19.4 🌱 Bump cert-manager v1.19.4
Signed-off-by: Stefan Büringer buringerst@vmware.com
…panic 🐛 Fix panic in Cluster conversion
Signed-off-by: Stefan Büringer buringerst@vmware.com
🐛 e2e: only retry creating objects that failed
🐛 Bump trivy to v0.69.2 to fix CI
Signed-off-by: Stefan Büringer buringerst@vmware.com
🌱 Bump golang.org/x/net to v0.51 to fix CVE
… instead of 128 items
Signed-off-by: Stefan Büringer buringerst@vmware.com
…rbosity 🌱 Remove stack traces from ClusterCache errors
Bumps the all-github-actions group with 1 update: [actions/setup-go](https://github.com/actions/setup-go). Updates `actions/setup-go` from 6.2.0 to 6.3.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](actions/setup-go@7a3fe6c...4b73464) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-github-actions ... Signed-off-by: dependabot[bot] <support@github.com>
… 8 updates Bumps the all-go-mod-patch-and-minor group with 3 updates in the / directory: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) and [k8s.io/cluster-bootstrap](https://github.com/kubernetes/cluster-bootstrap). Bumps the all-go-mod-patch-and-minor group with 3 updates in the /hack/tools directory: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Bumps the all-go-mod-patch-and-minor group with 2 updates in the /test directory: [k8s.io/api](https://github.com/kubernetes/api) and [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver). Updates `k8s.io/api` from 0.35.1 to 0.35.2 - [Commits](kubernetes/api@v0.35.1...v0.35.2) Updates `k8s.io/apiextensions-apiserver` from 0.35.1 to 0.35.2 - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](kubernetes/apiextensions-apiserver@v0.35.1...v0.35.2) Updates `k8s.io/apimachinery` from 0.35.1 to 0.35.2 - [Commits](kubernetes/apimachinery@v0.35.1...v0.35.2) Updates `k8s.io/apiserver` from 0.35.1 to 0.35.2 - [Commits](kubernetes/apiserver@v0.35.1...v0.35.2) Updates `k8s.io/client-go` from 0.35.1 to 0.35.2 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](kubernetes/client-go@v0.35.1...v0.35.2) Updates `k8s.io/cluster-bootstrap` from 0.35.1 to 0.35.2 - [Commits](kubernetes/cluster-bootstrap@v0.35.1...v0.35.2) Updates `k8s.io/component-base` from 0.35.1 to 0.35.2 - [Commits](kubernetes/component-base@v0.35.1...v0.35.2) Updates `k8s.io/api` from 0.35.1 to 0.35.2 - [Commits](kubernetes/api@v0.35.1...v0.35.2) Updates `k8s.io/apiextensions-apiserver` from 0.35.1 to 0.35.2 - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](kubernetes/apiextensions-apiserver@v0.35.1...v0.35.2) Updates `k8s.io/apimachinery` from 0.35.1 to 0.35.2 - [Commits](kubernetes/apimachinery@v0.35.1...v0.35.2) Updates `k8s.io/client-go` from 0.35.1 to 0.35.2 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](kubernetes/client-go@v0.35.1...v0.35.2) Updates `google.golang.org/api` from 0.268.0 to 0.269.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](googleapis/google-api-go-client@v0.268.0...v0.269.0) Updates `k8s.io/api` from 0.35.1 to 0.35.2 - [Commits](kubernetes/api@v0.35.1...v0.35.2) Updates `k8s.io/apiextensions-apiserver` from 0.35.1 to 0.35.2 - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](kubernetes/apiextensions-apiserver@v0.35.1...v0.35.2) Updates `k8s.io/apimachinery` from 0.35.1 to 0.35.2 - [Commits](kubernetes/apimachinery@v0.35.1...v0.35.2) Updates `k8s.io/apiserver` from 0.35.1 to 0.35.2 - [Commits](kubernetes/apiserver@v0.35.1...v0.35.2) Updates `k8s.io/client-go` from 0.35.1 to 0.35.2 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](kubernetes/client-go@v0.35.1...v0.35.2) Updates `k8s.io/component-base` from 0.35.1 to 0.35.2 - [Commits](kubernetes/component-base@v0.35.1...v0.35.2) --- updated-dependencies: - dependency-name: k8s.io/api dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apiextensions-apiserver dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apimachinery dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apiserver dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/client-go dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/cluster-bootstrap dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/component-base dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/api dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apiextensions-apiserver dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apimachinery dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/client-go dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: google.golang.org/api dependency-version: 0.269.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/api dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apiextensions-apiserver dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apimachinery dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/apiserver dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/client-go dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor - dependency-name: k8s.io/component-base dependency-version: 0.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all-go-mod-patch-and-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…bot/github_actions/all-github-actions-2c6e677ddc 🌱 Bump actions/setup-go from 6.2.0 to 6.3.0 in the all-github-actions group
…bot/go_modules/all-go-mod-patch-and-minor-2fc94a814f 🌱 Bump the all-go-mod-patch-and-minor group across 3 directories with 8 updates
…es-status-addresses-even-further 🌱 api: relax validation for Machine .status.addresses to maximum of 256 instead of 128 items
* Postpone date when we stop serving v1beta1 * Address comments
Signed-off-by: Stefan Büringer buringerst@vmware.com
* Add rolloutAfter to cluster.spec.topology * Address comments
…eout-unset 🌱 Avoid unsetting nodeDeletionTimeoutSeconds during Machine deletion
apiserver Signed-off-by: Stefan Büringer buringerst@vmware.com
Signed-off-by: Stefan Büringer buringerst@vmware.com
|
/retest |
b87308b to
5c92e88
Compare
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml (1)
18-237:⚠️ Potential issue | 🟠 MajorVerify that v1alpha3 and v1alpha4 were safely migrated before removing them from spec.versions.
This change removes
v1alpha3andv1alpha4from the CRD versions. According to Kubernetes CRD versioning requirements, a version cannot be safely removed fromspec.versionswhile it still appears in the live cluster'sstatus.storedVersions. Before removing these versions, confirm that:
- All existing
ClusterResourceSetBindingobjects stored in these versions have been migrated to the new storage version (v1beta2)v1alpha3andv1alpha4have been removed from the CRD'sstatus.storedVersionson all affected clustersIf this migration was not completed before applying this manifest, the CRD update will fail on upgraded clusters.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml` around lines 18 - 237, The CRD removal of v1alpha3 and v1alpha4 from spec.versions for ClusterResourceSetBinding can fail if stored objects still exist in those versions; verify migration by ensuring all ClusterResourceSetBinding objects previously stored as v1alpha3/v1alpha4 have been migrated to the storage version v1beta2 and that v1alpha3 and v1alpha4 no longer appear in the CRD's status.storedVersions on every cluster before removing them from spec.versions; if you find remaining storedVersions or resources, perform the Kubernetes CRD version migration (or re-add the versions temporarily) so storedVersions is cleared, confirm spec.required and the v1beta2 schema supports the migrated objects, then remove v1alpha3/v1alpha4 from spec.versions only after status.storedVersions no longer lists them.api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go (1)
777-806:⚠️ Potential issue | 🟠 Major | ⚡ Quick winReject contradictory
layout/diskLayoutcombinations.
diskLayoutadds a second way to define partition layout, butlayoutis still a required boolean on the same struct. As written,layout: falseplus a non-emptydiskLayoutcan still be admitted, so the boolean is effectively ignored by the renderer and the persisted spec becomes misleading. Please add schema/webhook validation requiringlayout=truewhendiskLayoutis set, or make the two fields conditionally exclusive.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go` around lines 777 - 806, The Partition struct allows contradictory definitions (Layout bool vs DiskLayout slice); add validation so DiskLayout may only be set when Layout is true. Implement this by adding a kubebuilder XValidation on the Partition type (or immediately above DiskLayout) such as an XValidation rule that enforces "if diskLayout is present then layout == true" (e.g. rule like "!has(self.diskLayout) || self.layout == true" with a clear message), or if you prefer, implement an equivalent validating webhook that rejects Partition entries where DiskLayout is non-empty but Layout is false; reference the Partition struct and its fields Layout and DiskLayout when making the change.controllers/clustercache/cluster_cache.go (1)
322-328:⚠️ Potential issue | 🟠 Major | ⚡ Quick winWire
options.ClusterFilterinto the cache instance.
Reconcilereadscc.clusterFilter, but this constructor never copiesoptions.ClusterFilterinto the struct, so the new filter is alwaysniland filtered clusters will still be connected.Suggested fix
cc := &clusterCache{ client: mgr.GetClient(), clusterAccessorConfig: buildClusterAccessorConfig(mgr.GetScheme(), options, controllerPodMetadata), clusterAccessors: make(map[client.ObjectKey]*clusterAccessor), cacheCtx: cacheCtx, cacheCtxCancel: cacheCtxCancel, + clusterFilter: options.ClusterFilter, }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@controllers/clustercache/cluster_cache.go` around lines 322 - 328, The clusterCache constructor is not setting the clusterFilter field, so cc.clusterFilter is nil when Reconcile reads it; update the struct literal that creates the clusterCache (the cc := &clusterCache{...} block) to include clusterFilter: options.ClusterFilter so the newly created clusterCache carries the provided filter into Reconcile.
🧹 Nitpick comments (3)
CHANGELOG/v1.13.0-rc.0.md (3)
236-236: ⚡ Quick winMaintain consistent spelling: use "Optimize" instead of "Optimise".
The document consistently uses American spelling "optimize" elsewhere (lines 65, 73, 82), but line 236 uses British spelling "Optimise." As per coding guidelines, maintain consistency within a single document.
📝 Suggested fix
-- util: Optimise patch calls (`#13367`) +- util: Optimize patch calls (`#13367`)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG/v1.13.0-rc.0.md` at line 236, Change the British spelling "Optimise" to American "Optimize" in the changelog entry "- util: Optimise patch calls (`#13367`)" so it matches the document's existing use of "optimize"; update the string exactly to "- util: Optimize patch calls (`#13367`)" in the CHANGELOG/v1.13.0-rc.0.md content.
37-38: ⚡ Quick winFix subject-verb agreement.
"Provider" should be plural "Providers" to match the verb "should."
📝 Suggested fix
- - Reminder: Provider should start implementing the v1beta2 contract ASAP. + - Reminder: Providers should start implementing the v1beta2 contract ASAP.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG/v1.13.0-rc.0.md` around lines 37 - 38, Change the noun in the sentence "Reminder: Provider should start implementing the v1beta2 contract ASAP." to plural so it agrees with the verb; replace "Provider" with "Providers" in the CHANGELOG entry so the line reads "Reminder: Providers should start implementing the v1beta2 contract ASAP."
13-13: ⚡ Quick winUse singular "performance" instead of "performances".
In this technical context, "performance" is typically used as an uncountable noun.
📝 Suggested fix
-CAPI v1.13 is a release focused on stability, reliability and performances: +CAPI v1.13 is a release focused on stability, reliability and performance:🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG/v1.13.0-rc.0.md` at line 13, Replace the plural word "performances" in the sentence "CAPI v1.13 is a release focused on stability, reliability and performances:" with the uncountable singular "performance" so it reads "CAPI v1.13 is a release focused on stability, reliability and performance:"; update only that token in the line containing "stability, reliability and performances".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/weekly-security-scan.yaml:
- Line 16: The workflow's matrix branches list is invalid (it lists main and
release-1.*); update the branches array used in the weekly-security-scan
workflow so actions/checkout uses existing repo branches (replace "branch: [
main, release-1.12, release-1.11 ]" with a valid list such as "branch: [ master
]" or the actual release branch names), ensuring the matrix contains only real
branch names so the job runs successfully.
In `@api/controlplane/kubeadm/v1beta1/conversion.go`:
- Around line 420-427: The conversion functions are appending to destination
taint slices (e.g., out.Spec.Taints, out.Taints) without clearing them, causing
duplicates when objects are reused; change each conversion that iterates over
in.Taints (and the reverse/template variants) to allocate a slice of exact
length (len(in.Taints)), assign it to the destination (out.Spec.Taints =
make(..., len(in.Taints))), and populate entries by index using
clusterv1.MachineTaint{...} instead of append; apply the same pattern for all
occurrences noted (the blocks around the in.Taints iterations and their
reverse/template counterparts).
In `@api/runtime/hooks/v1alpha1/lifecyclehooks_types.go`:
- Around line 22-23: Revert the import change so the embedded Cluster schema in
the v1alpha1 hook contract remains the original core v1beta1 type: replace the
current import "sigs.k8s.io/cluster-api/api/core/v1beta2" used as clusterv1 with
the original "sigs.k8s.io/cluster-api/api/core/v1beta1" and ensure every struct
in this file that embeds or references clusterv1.Cluster (the v1alpha1 request
types) continues to use the v1beta1 shape; if you actually need v1beta2
semantics, instead create a new hook version (e.g., v1beta1 hook API) and
perform explicit conversion between versions rather than changing the v1alpha1
contract in-place.
In `@bootstrap/util/configowner_test.go`:
- Around line 66-68: The test currently discards the error returned by
clusterv1.AddToScheme, which can hide scheme registration failures; update both
places where runtime.NewScheme() and clusterv1.AddToScheme(...) are used to
capture the returned error (e.g., err := clusterv1.AddToScheme(scheme)) and
explicitly fail the test if err != nil (use t.Fatalf or a test assertion helper
like require.NoError) before building the fake client
(fake.NewClientBuilder().WithScheme(scheme)...), so any scheme registration
failure surfaces immediately.
In `@CHANGELOG/v1.13.0-rc.0.md`:
- Line 186: Replace the malformed changelog line "e2e: 0 in e2e tests" with a
clear, complete description for PR `#13429`: locate the entry referencing PR
`#13429` and update it to a concise sentence like "e2e: <brief summary of the
fix/feature introduced by PR `#13429`> (PR `#13429`)" so it explains what changed in
e2e tests and includes the PR number for traceability; confirm the wording
matches the PR title/description and preserves the changelog format.
In `@config/crd/bases/cluster.x-k8s.io_machines.yaml`:
- Around line 293-302: The spec.taints[].key schema currently allows a name
segment longer than 63 chars because maxLength: 317 was left without the
split-length enforcement; restore the original qualified-name validation by
updating the key schema (the pattern and length checks for spec.taints[].key) so
the optional DNS subdomain prefix is limited to 253 chars and the name segment
is limited to 63 chars (i.e. reinstate the regex that enforces the name segment
max 63 and prefix max 253 rather than relying only on a 317 overall max),
update/remove the incorrect maxLength if needed to match that regex, and then
regenerate the CRDs so the corrected validation is applied.
In `@controllers/clustercache/cluster_cache.go`:
- Around line 469-478: When a cluster is filtered out we currently disconnect
and delete the accessor (getClusterAccessor, accessor.Disconnect,
deleteClusterAccessor, cleanupClusterSourcesForCluster) then return early, which
prevents notifying consumers; move or add a call to
cc.sendEventsToClusterSources (or invoke the existing method that enqueues a
handled→filtered-out disconnect event for GetClusterSource consumers)
immediately after Disconnect and before
deleteClusterAccessor/cleanupClusterSourcesForCluster (or at least before
returning) so the disconnect/requeue is sent; ensure you reference clusterKey
and the same transition payload used elsewhere so consumers see the
handled→filtered-out event.
---
Outside diff comments:
In `@api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go`:
- Around line 777-806: The Partition struct allows contradictory definitions
(Layout bool vs DiskLayout slice); add validation so DiskLayout may only be set
when Layout is true. Implement this by adding a kubebuilder XValidation on the
Partition type (or immediately above DiskLayout) such as an XValidation rule
that enforces "if diskLayout is present then layout == true" (e.g. rule like
"!has(self.diskLayout) || self.layout == true" with a clear message), or if you
prefer, implement an equivalent validating webhook that rejects Partition
entries where DiskLayout is non-empty but Layout is false; reference the
Partition struct and its fields Layout and DiskLayout when making the change.
In `@config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml`:
- Around line 18-237: The CRD removal of v1alpha3 and v1alpha4 from
spec.versions for ClusterResourceSetBinding can fail if stored objects still
exist in those versions; verify migration by ensuring all
ClusterResourceSetBinding objects previously stored as v1alpha3/v1alpha4 have
been migrated to the storage version v1beta2 and that v1alpha3 and v1alpha4 no
longer appear in the CRD's status.storedVersions on every cluster before
removing them from spec.versions; if you find remaining storedVersions or
resources, perform the Kubernetes CRD version migration (or re-add the versions
temporarily) so storedVersions is cleared, confirm spec.required and the v1beta2
schema supports the migrated objects, then remove v1alpha3/v1alpha4 from
spec.versions only after status.storedVersions no longer lists them.
In `@controllers/clustercache/cluster_cache.go`:
- Around line 322-328: The clusterCache constructor is not setting the
clusterFilter field, so cc.clusterFilter is nil when Reconcile reads it; update
the struct literal that creates the clusterCache (the cc := &clusterCache{...}
block) to include clusterFilter: options.ClusterFilter so the newly created
clusterCache carries the provided filter into Reconcile.
---
Nitpick comments:
In `@CHANGELOG/v1.13.0-rc.0.md`:
- Line 236: Change the British spelling "Optimise" to American "Optimize" in the
changelog entry "- util: Optimise patch calls (`#13367`)" so it matches the
document's existing use of "optimize"; update the string exactly to "- util:
Optimize patch calls (`#13367`)" in the CHANGELOG/v1.13.0-rc.0.md content.
- Around line 37-38: Change the noun in the sentence "Reminder: Provider should
start implementing the v1beta2 contract ASAP." to plural so it agrees with the
verb; replace "Provider" with "Providers" in the CHANGELOG entry so the line
reads "Reminder: Providers should start implementing the v1beta2 contract ASAP."
- Line 13: Replace the plural word "performances" in the sentence "CAPI v1.13 is
a release focused on stability, reliability and performances:" with the
uncountable singular "performance" so it reads "CAPI v1.13 is a release focused
on stability, reliability and performance:"; update only that token in the line
containing "stability, reliability and performances".
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: a65565de-5e44-46d8-b1b1-bc5a111226ef
⛔ Files ignored due to path filters (36)
api/bootstrap/kubeadm/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/bootstrap/kubeadm/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/bootstrap/kubeadm/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.openapi.gois excluded by!**/zz_generated*api/core/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta2/zz_generated.openapi.gois excluded by!**/zz_generated*api/runtime/hooks/v1alpha1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/runtime/hooks/v1alpha1/zz_generated.openapi.gois excluded by!**/zz_generated*docs/book/src/images/clusterclass-crd-relationships.svgis excluded by!**/*.svgdocs/book/src/images/kubeadm-control-plane-machines-resources.pngis excluded by!**/*.pngdocs/book/src/images/worker-machines-resources.pngis excluded by!**/*.pnggo.sumis excluded by!**/*.sumhack/tools/go.sumis excluded by!**/*.sumhack/tools/vendor/cloud.google.com/go/auth/CHANGES.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/detect.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/filetypes.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/httptransport/httptransport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/httptransport/transport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/parse.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/internal.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/jwt/jwt.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/transport/transport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/version.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/.repo-metadata.jsonis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/CHANGES.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/README.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.gois excluded by!**/*.pb.go,!**/vendor/**
📒 Files selected for processing (264)
.dockerignore.github/workflows/pr-gh-workflow-approve.yaml.github/workflows/pr-md-link-check.yaml.github/workflows/release.yaml.github/workflows/weekly-md-link-check.yaml.github/workflows/weekly-security-scan.yaml.github/workflows/weekly-test-release.yaml.golangci-kal.yml.golangci.yml.trivyignoreCHANGELOG/v1.10.10.mdCHANGELOG/v1.10.9.mdCHANGELOG/v1.11.4.mdCHANGELOG/v1.11.5.mdCHANGELOG/v1.11.6.mdCHANGELOG/v1.11.7.mdCHANGELOG/v1.12.0-rc.1.mdCHANGELOG/v1.12.0.mdCHANGELOG/v1.12.1.mdCHANGELOG/v1.12.2.mdCHANGELOG/v1.12.3.mdCHANGELOG/v1.12.4.mdCHANGELOG/v1.13.0-beta.0.mdCHANGELOG/v1.13.0-beta.1.mdCHANGELOG/v1.13.0-rc.0.mdCONTRIBUTING.mdDockerfileMakefileTiltfileapi/bootstrap/kubeadm/v1beta1/conversion.goapi/bootstrap/kubeadm/v1beta1/kubeadm_types.goapi/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.goapi/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.goapi/controlplane/kubeadm/v1beta1/conversion.goapi/controlplane/kubeadm/v1beta1/kubeadm_control_plane_types.goapi/controlplane/kubeadm/v1beta1/kubeadmcontrolplanetemplate_types.goapi/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.goapi/controlplane/kubeadm/v1beta2/kubeadmcontrolplanetemplate_types.goapi/core/v1beta1/cluster_types.goapi/core/v1beta1/clusterclass_types.goapi/core/v1beta1/common_types.goapi/core/v1beta1/conversion.goapi/core/v1beta1/conversion_test.goapi/core/v1beta1/machine_types.goapi/core/v1beta1/machinehealthcheck_types.goapi/core/v1beta2/cluster_types.goapi/core/v1beta2/clusterclass_types.goapi/core/v1beta2/common_types.goapi/core/v1beta2/condition_types.goapi/core/v1beta2/machine_types.goapi/ipam/v1alpha1/conversion.goapi/runtime/hooks/v1alpha1/common_types.goapi/runtime/hooks/v1alpha1/lifecyclehooks_types.goapi/runtime/hooks/v1alpha1/topologymutation_types.goapi/runtime/hooks/v1alpha1/topologymutation_variable_types.gobootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yamlbootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yamlbootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigs.yamlbootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigtemplates.yamlbootstrap/kubeadm/config/manager/manager.yamlbootstrap/kubeadm/config/webhook/manifests.yamlbootstrap/kubeadm/internal/cloudinit/cloudinit_test.gobootstrap/kubeadm/internal/cloudinit/disk_setup.gobootstrap/kubeadm/internal/cloudinit/utils.gobootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.gobootstrap/kubeadm/internal/controllers/suite_test.gobootstrap/kubeadm/internal/locking/control_plane_init_mutex.gobootstrap/kubeadm/internal/setup/setup.gobootstrap/kubeadm/internal/webhooks/kubeadmconfig.gobootstrap/kubeadm/internal/webhooks/kubeadmconfig_test.gobootstrap/kubeadm/internal/webhooks/kubeadmconfigtemplate.gobootstrap/kubeadm/internal/webhooks/kubeadmconfigtemplate_test.gobootstrap/kubeadm/main.gobootstrap/util/configowner_test.gobootstrap/util/suite_test.gocmd/clusterctl/Dockerfilecmd/clusterctl/client/cluster/cert_manager.gocmd/clusterctl/client/cluster/cert_manager_test.gocmd/clusterctl/client/cluster/mover.gocmd/clusterctl/client/cluster/template.gocmd/clusterctl/client/cluster/template_test.gocmd/clusterctl/client/cluster/upgrader.gocmd/clusterctl/client/cluster/upgrader_test.gocmd/clusterctl/client/config/imagemeta_client.gocmd/clusterctl/client/config/imagemeta_client_test.gocmd/clusterctl/client/config/providers_client.gocmd/clusterctl/client/config_test.gocmd/clusterctl/client/repository/repository_github.gocmd/clusterctl/client/repository/repository_github_test.gocmd/clusterctl/client/upgrade.gocmd/clusterctl/cmd/config_repositories_test.gocmd/clusterctl/cmd/describe_cluster.gocmd/clusterctl/cmd/upgrade_apply.gocmd/clusterctl/cmd/version_checker.gocmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_metadata.yamlcmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_providers.yamlcmd/clusterctl/config/manifest/clusterctl-api.yamlcmd/clusterctl/hack/create-local-repository.pycmd/clusterctl/internal/test/fake_github.gocmd/clusterctl/internal/test/fake_reader.goconfig/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yamlconfig/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yamlconfig/crd/bases/cluster.x-k8s.io_clusterclasses.yamlconfig/crd/bases/cluster.x-k8s.io_clusters.yamlconfig/crd/bases/cluster.x-k8s.io_machinedeployments.yamlconfig/crd/bases/cluster.x-k8s.io_machinedrainrules.yamlconfig/crd/bases/cluster.x-k8s.io_machinehealthchecks.yamlconfig/crd/bases/cluster.x-k8s.io_machinepools.yamlconfig/crd/bases/cluster.x-k8s.io_machines.yamlconfig/crd/bases/cluster.x-k8s.io_machinesets.yamlconfig/crd/bases/ipam.cluster.x-k8s.io_ipaddressclaims.yamlconfig/crd/bases/ipam.cluster.x-k8s.io_ipaddresses.yamlconfig/crd/bases/runtime.cluster.x-k8s.io_extensionconfigs.yamlconfig/crd/patches/webhook_in_clusterclasses.yamlconfig/crd/patches/webhook_in_clusterresourcesetbindings.yamlconfig/crd/patches/webhook_in_clusterresourcesets.yamlconfig/crd/patches/webhook_in_clusters.yamlconfig/crd/patches/webhook_in_extensionconfigs.yamlconfig/crd/patches/webhook_in_ipaddressclaims.yamlconfig/crd/patches/webhook_in_ipaddresses.yamlconfig/crd/patches/webhook_in_machinedeployments.yamlconfig/crd/patches/webhook_in_machinedrainrules.yamlconfig/crd/patches/webhook_in_machinehealthchecks.yamlconfig/crd/patches/webhook_in_machinepools.yamlconfig/crd/patches/webhook_in_machines.yamlconfig/crd/patches/webhook_in_machinesets.yamlconfig/manager/manager.yamlconfig/metrics/crd-metrics-config.yamlconfig/webhook/manifests.yamlcontrollers/clustercache/cluster_accessor.gocontrollers/clustercache/cluster_accessor_client.gocontrollers/clustercache/cluster_accessor_test.gocontrollers/clustercache/cluster_cache.gocontrollers/clustercache/cluster_cache_test.gocontrollers/crdmigrator/crd_migrator.gocontrollers/crdmigrator/test/t1/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t2/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t3/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t4/crd/test.cluster.x-k8s.io_testclusters.yamlcontrolplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yamlcontrolplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yamlcontrolplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanes.yamlcontrolplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanetemplates.yamlcontrolplane/kubeadm/config/manager/manager.yamlcontrolplane/kubeadm/config/webhook/manifests.yamlcontrolplane/kubeadm/internal/cluster.gocontrolplane/kubeadm/internal/cluster_test.gocontrolplane/kubeadm/internal/clustercache_utils.gocontrolplane/kubeadm/internal/control_plane.gocontrolplane/kubeadm/internal/control_plane_test.gocontrolplane/kubeadm/internal/controllers/controller.gocontrolplane/kubeadm/internal/controllers/controller_test.gocontrolplane/kubeadm/internal/controllers/fakes_test.gocontrolplane/kubeadm/internal/controllers/helpers.gocontrolplane/kubeadm/internal/controllers/inplace.gocontrolplane/kubeadm/internal/controllers/inplace_canupdatemachine.gocontrolplane/kubeadm/internal/controllers/inplace_trigger.gocontrolplane/kubeadm/internal/controllers/remediation.gocontrolplane/kubeadm/internal/controllers/remediation_test.gocontrolplane/kubeadm/internal/controllers/scale.gocontrolplane/kubeadm/internal/controllers/scale_test.gocontrolplane/kubeadm/internal/controllers/status.gocontrolplane/kubeadm/internal/controllers/status_test.gocontrolplane/kubeadm/internal/controllers/suite_test.gocontrolplane/kubeadm/internal/controllers/update_test.gocontrolplane/kubeadm/internal/desiredstate/desired_state.gocontrolplane/kubeadm/internal/desiredstate/desired_state_test.gocontrolplane/kubeadm/internal/etcd/etcd_test.gocontrolplane/kubeadm/internal/etcd/fake/client.gocontrolplane/kubeadm/internal/setup/setup.gocontrolplane/kubeadm/internal/suite_test.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplane.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplane_test.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplanetemplate.gocontrolplane/kubeadm/internal/webhooks/scale.gocontrolplane/kubeadm/internal/workload_cluster.gocontrolplane/kubeadm/internal/workload_cluster_conditions.gocontrolplane/kubeadm/internal/workload_cluster_conditions_test.gocontrolplane/kubeadm/internal/workload_cluster_coredns.gocontrolplane/kubeadm/internal/workload_cluster_etcd.gocontrolplane/kubeadm/internal/workload_cluster_etcd_test.gocontrolplane/kubeadm/internal/workload_cluster_test.gocontrolplane/kubeadm/main.godocs/book/src/SUMMARY.mddocs/book/src/clusterctl/configuration.mddocs/book/src/developer/core/logging.mddocs/book/src/developer/core/tilt.mddocs/book/src/developer/providers/contracts/bootstrap-config.mddocs/book/src/developer/providers/contracts/clusterctl.mddocs/book/src/developer/providers/contracts/control-plane.mddocs/book/src/developer/providers/contracts/infra-cluster.mddocs/book/src/developer/providers/contracts/infra-machine.mddocs/book/src/developer/providers/contracts/infra-machinepool.mddocs/book/src/developer/providers/getting-started/webhooks.mddocs/book/src/developer/providers/migrations/v1.10-to-v1.11.mddocs/book/src/developer/providers/migrations/v1.12-to-v1.13.mddocs/book/src/developer/providers/migrations/v1.9-to-v1.10.mddocs/book/src/images/kubeadm-control-plane-machines-resources.plantumldocs/book/src/images/worker-machines-resources.plantumldocs/book/src/introduction.mddocs/book/src/reference/api/crd-api-reference-v1beta1.mddocs/book/src/reference/api/crd-api-reference.mddocs/book/src/reference/api/crd-relationships.mddocs/book/src/reference/api/reference.mddocs/book/src/reference/versions.mddocs/book/src/tasks/automated-machine-management/healthchecking.mddocs/book/src/tasks/automated-machine-management/scaling.mddocs/book/src/tasks/cluster-resource-set.mddocs/book/src/tasks/diagnostics.mddocs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.mddocs/book/src/tasks/experimental-features/experimental-features.mddocs/book/src/tasks/experimental-features/machine-pools.mddocs/book/src/tasks/experimental-features/runtime-sdk/implement-extensions.mddocs/book/src/tasks/experimental-features/runtime-sdk/index.mddocs/book/src/tasks/external-etcd.mddocs/book/src/tasks/using-kustomize.mddocs/book/src/user/quick-start.mddocs/proposals/20200506-conditions.mddocs/proposals/20210310-opt-in-autoscaling-from-zero.mddocs/proposals/20220330-topology-mutation-hook.mddocs/proposals/20240916-improve-status-in-CAPI-resources.mddocs/proposals/20250124-From CAPD(docker) to CAPD(dev) .mddocs/release/releases/release-1.13.mddocs/release/role-handbooks/ci-signal/README.mddocs/release/role-handbooks/release-lead/README.mdexp/topology/desiredstate/desired_state.goexp/topology/desiredstate/desired_state_test.goexp/topology/desiredstate/lifecycle_hooks.goexp/topology/desiredstate/lifecycle_hooks_test.goexp/topology/desiredstate/upgrade_plan.goexp/topology/desiredstate/upgrade_plan_test.gofeature/feature.gogo.modhack/crd-ref-docs-config-v1beta1.yamlhack/crd-ref-docs-config-v1beta2.yamlhack/ensure-go.shhack/gogcflags.shhack/kind-install.shhack/observability/alloy/kustomization.yamlhack/observability/grafana/chart/kustomization.yamlhack/observability/grafana/dashboards/cluster-api-mgmt-apiserver-requests.jsonhack/observability/grafana/dashboards/cluster-api-performance.jsonhack/observability/grafana/dashboards/cluster-api-state.jsonhack/observability/grafana/dashboards/cluster-api-wl-apiserver-requests.jsonhack/observability/grafana/dashboards/controller-runtime.jsonhack/observability/grafana/dashboards/runtime-extensions.jsonhack/observability/kube-state-metrics/kustomization.yamlhack/observability/loki/kustomization.yamlhack/observability/loki/values.yamlhack/observability/metrics-server/kustomization.yamlhack/observability/parca/values.yamlhack/observability/prometheus/kustomization.yamlhack/observability/prometheus/values.yamlhack/observability/tempo/kustomization.yamlhack/observability/visualizer/kustomization.yamlhack/tools/go.modhack/tools/internal/tilt-prepare/main.gohack/tools/prowjob-gen/config.gohack/tools/prowjob-gen/test/test-configuration.yamlhack/tools/prowjob-gen/test/test-main.yaml.goldenhack/tools/prowjob-gen/test/test.yaml.tplhack/tools/release/internal/update_providers/provider_issues.gohack/tools/release/weekly/main.gohack/tools/runtime-openapi-gen/main.go
💤 Files with no reviewable changes (7)
- config/webhook/manifests.yaml
- controllers/clustercache/cluster_accessor_test.go
- .trivyignore
- bootstrap/kubeadm/config/webhook/manifests.yaml
- cmd/clusterctl/client/cluster/upgrader_test.go
- bootstrap/util/suite_test.go
- .github/workflows/pr-gh-workflow-approve.yaml
| fail-fast: false | ||
| matrix: | ||
| branch: [ main, release-1.11, release-1.10, release-1.9 ] | ||
| branch: [ main, release-1.12, release-1.11 ] |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for b in main master release-1.12 release-1.11; do
if git ls-remote --exit-code --heads origin "$b" >/dev/null 2>&1; then
echo "exists: $b"
else
echo "missing: $b"
fi
doneRepository: openshift/cluster-api
Length of output: 138
Update workflow matrix branches to match actual repository branches.
The workflow matrix references main, release-1.12, and release-1.11, but only master exists in this repository. The actions/checkout action will fail on all three matrix entries, preventing the security scan from running. Update line 16 to reference valid branches.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/weekly-security-scan.yaml at line 16, The workflow's
matrix branches list is invalid (it lists main and release-1.*); update the
branches array used in the weekly-security-scan workflow so actions/checkout
uses existing repo branches (replace "branch: [ main, release-1.12, release-1.11
]" with a valid list such as "branch: [ master ]" or the actual release branch
names), ensuring the matrix contains only real branch names so the job runs
successfully.
| for _, c := range in.Taints { | ||
| out.Spec.Taints = append(out.Spec.Taints, clusterv1.MachineTaint{ | ||
| Key: c.Key, | ||
| Value: c.Value, | ||
| Effect: c.Effect, | ||
| Propagation: clusterv1.MachineTaintPropagation(c.Propagation), | ||
| }) | ||
| } |
There was a problem hiding this comment.
Reset destination taint slices before appending.
These conversions append into out.Spec.Taints / out.Taints without clearing them first. If the destination object is reused, you'll retain stale taints or duplicate entries across conversions. Allocate the exact-length slice and assign by index instead of appending.
💡 Suggested pattern
- for _, c := range in.Taints {
- out.Spec.Taints = append(out.Spec.Taints, clusterv1.MachineTaint{
- Key: c.Key,
- Value: c.Value,
- Effect: c.Effect,
- Propagation: clusterv1.MachineTaintPropagation(c.Propagation),
- })
- }
+ if len(in.Taints) == 0 {
+ out.Spec.Taints = nil
+ } else {
+ out.Spec.Taints = make([]clusterv1.MachineTaint, len(in.Taints))
+ for i, c := range in.Taints {
+ out.Spec.Taints[i] = clusterv1.MachineTaint{
+ Key: c.Key,
+ Value: c.Value,
+ Effect: c.Effect,
+ Propagation: clusterv1.MachineTaintPropagation(c.Propagation),
+ }
+ }
+ }Apply the same pattern to the reverse/template conversions as well.
Also applies to: 446-453, 464-471, 482-489
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@api/controlplane/kubeadm/v1beta1/conversion.go` around lines 420 - 427, The
conversion functions are appending to destination taint slices (e.g.,
out.Spec.Taints, out.Taints) without clearing them, causing duplicates when
objects are reused; change each conversion that iterates over in.Taints (and the
reverse/template variants) to allocate a slice of exact length (len(in.Taints)),
assign it to the destination (out.Spec.Taints = make(..., len(in.Taints))), and
populate entries by index using clusterv1.MachineTaint{...} instead of append;
apply the same pattern for all occurrences noted (the blocks around the
in.Taints iterations and their reverse/template counterparts).
| clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2" | ||
| runtimecatalog "sigs.k8s.io/cluster-api/exp/runtime/catalog" |
There was a problem hiding this comment.
Avoid changing the embedded Cluster schema in the v1alpha1 hook contract.
These request types are the wire contract for Runtime SDK extensions. Swapping cluster from core v1beta1 to core v1beta2 changes that payload shape without a hook API version bump, so existing extensions can start deserializing a different object after upgrading the management cluster. Keep the old payload in v1alpha1 or introduce a new hook version and convert explicitly.
Also applies to: 34-36, 61-63, 89-91, 141-143, 185-187, 225-227, 269-271, 309-311, 341-343
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@api/runtime/hooks/v1alpha1/lifecyclehooks_types.go` around lines 22 - 23,
Revert the import change so the embedded Cluster schema in the v1alpha1 hook
contract remains the original core v1beta1 type: replace the current import
"sigs.k8s.io/cluster-api/api/core/v1beta2" used as clusterv1 with the original
"sigs.k8s.io/cluster-api/api/core/v1beta1" and ensure every struct in this file
that embeds or references clusterv1.Cluster (the v1alpha1 request types)
continues to use the v1beta1 shape; if you actually need v1beta2 semantics,
instead create a new hook version (e.g., v1beta1 hook API) and perform explicit
conversion between versions rather than changing the v1alpha1 contract in-place.
| scheme := runtime.NewScheme() | ||
| _ = clusterv1.AddToScheme(scheme) | ||
| c := fake.NewClientBuilder().WithScheme(scheme).WithObjects(myMachine).Build() |
There was a problem hiding this comment.
Handle scheme registration failures explicitly.
At Line [67] and Line [121], discarding the AddToScheme error can hide test setup failures and make downstream assertions misleading.
Suggested fix
scheme := runtime.NewScheme()
- _ = clusterv1.AddToScheme(scheme)
+ g.Expect(clusterv1.AddToScheme(scheme)).To(Succeed())
c := fake.NewClientBuilder().WithScheme(scheme).WithObjects(myMachine).Build()
@@
scheme := runtime.NewScheme()
- _ = clusterv1.AddToScheme(scheme)
+ g.Expect(clusterv1.AddToScheme(scheme)).To(Succeed())
c := fake.NewClientBuilder().WithScheme(scheme).WithObjects(myPool).Build()Also applies to: 120-123
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@bootstrap/util/configowner_test.go` around lines 66 - 68, The test currently
discards the error returned by clusterv1.AddToScheme, which can hide scheme
registration failures; update both places where runtime.NewScheme() and
clusterv1.AddToScheme(...) are used to capture the returned error (e.g., err :=
clusterv1.AddToScheme(scheme)) and explicitly fail the test if err != nil (use
t.Fatalf or a test assertion helper like require.NoError) before building the
fake client (fake.NewClientBuilder().WithScheme(scheme)...), so any scheme
registration failure surfaces immediately.
| - Devtools: Enable native histograms in Grafana / Prometheus (#13304) | ||
| - Devtools: Make kind image configurable via env var for make tilt-up (#13333) | ||
| - Devtools: Updated dev observability stack (#13044) | ||
| - e2e: 0 in e2e tests (#13429) |
There was a problem hiding this comment.
Fix malformed changelog entry.
This entry is incomplete and unclear: "0 in e2e tests" does not describe what change was made. Please verify the correct description for PR #13429.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@CHANGELOG/v1.13.0-rc.0.md` at line 186, Replace the malformed changelog line
"e2e: 0 in e2e tests" with a clear, complete description for PR `#13429`: locate
the entry referencing PR `#13429` and update it to a concise sentence like "e2e:
<brief summary of the fix/feature introduced by PR `#13429`> (PR `#13429`)" so it
explains what changed in e2e tests and includes the PR number for traceability;
confirm the wording matches the PR title/description and preserves the changelog
format.
| key: | ||
| description: |- | ||
| key is the taint key to be applied to a node. | ||
| Must be a valid qualified name of maximum size 63 characters | ||
| with an optional subdomain prefix of maximum size 253 characters, | ||
| separated by a `/`. | ||
| maxLength: 317 | ||
| minLength: 1 | ||
| pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/)?([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$ | ||
| type: string |
There was a problem hiding this comment.
Restore qualified-name validation on spec.taints[].key.
After dropping the split-length validation, this schema now accepts keys whose name segment is longer than 63 characters as long as the overall string stays under 317 chars. That no longer matches Kubernetes qualified-name rules, so invalid taints can be admitted here and then fail later when Cluster API tries to apply them to Nodes. Please restore the source-level validation and regenerate the CRDs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@config/crd/bases/cluster.x-k8s.io_machines.yaml` around lines 293 - 302, The
spec.taints[].key schema currently allows a name segment longer than 63 chars
because maxLength: 317 was left without the split-length enforcement; restore
the original qualified-name validation by updating the key schema (the pattern
and length checks for spec.taints[].key) so the optional DNS subdomain prefix is
limited to 253 chars and the name segment is limited to 63 chars (i.e. reinstate
the regex that enforces the name segment max 63 and prefix max 253 rather than
relying only on a 317 overall max), update/remove the incorrect maxLength if
needed to match that regex, and then regenerate the CRDs so the corrected
validation is applied.
| // Apply cluster filter if set | ||
| if cc.clusterFilter != nil && !cc.clusterFilter(cluster) { | ||
| log.V(6).Info("Cluster filtered out by ClusterFilter, not connecting") | ||
| accessor := cc.getClusterAccessor(clusterKey) | ||
| if accessor != nil { | ||
| accessor.Disconnect(ctx) | ||
| } | ||
| cc.deleteClusterAccessor(clusterKey) | ||
| cc.cleanupClusterSourcesForCluster(clusterKey) | ||
| return ctrl.Result{}, nil |
There was a problem hiding this comment.
Don't drop disconnect events when a cluster becomes filtered out.
If this branch disconnects an existing accessor, the early return skips sendEventsToClusterSources below, so GetClusterSource consumers never see the disconnect requeue for handled → filtered-out transitions.
Suggested fix
// Apply cluster filter if set
if cc.clusterFilter != nil && !cc.clusterFilter(cluster) {
log.V(6).Info("Cluster filtered out by ClusterFilter, not connecting")
accessor := cc.getClusterAccessor(clusterKey)
+ didDisconnect := false
if accessor != nil {
- accessor.Disconnect(ctx)
+ if accessor.Connected(ctx) {
+ accessor.Disconnect(ctx)
+ didDisconnect = true
+ }
}
+ if didDisconnect {
+ cc.sendEventsToClusterSources(ctx, cluster, time.Now(), accessor.GetHealthCheckingState(ctx).LastProbeSuccessTime, false, true)
+ }
cc.deleteClusterAccessor(clusterKey)
cc.cleanupClusterSourcesForCluster(clusterKey)
return ctrl.Result{}, nil
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@controllers/clustercache/cluster_cache.go` around lines 469 - 478, When a
cluster is filtered out we currently disconnect and delete the accessor
(getClusterAccessor, accessor.Disconnect, deleteClusterAccessor,
cleanupClusterSourcesForCluster) then return early, which prevents notifying
consumers; move or add a call to cc.sendEventsToClusterSources (or invoke the
existing method that enqueues a handled→filtered-out disconnect event for
GetClusterSource consumers) immediately after Disconnect and before
deleteClusterAccessor/cleanupClusterSourcesForCluster (or at least before
returning) so the disconnect/requeue is sent; ensure you reference clusterKey
and the same transition payload used elsewhere so consumers see the
handled→filtered-out event.
Squash follow-up OWNERS sync into the initial OpenShift-specific carry since it updates the same initial ownership surface. # Conflicts: # .github/workflows/pr-dependabot.yaml # .github/workflows/pr-golangci-lint.yaml # .github/workflows/pr-verify.yaml # OWNERS_ALIASES
Squash the OWNERS-only carries into a single update to keep ownership churn in one focused commit.
Squash adjacent changes that iterate on OpenShift manifest tooling and metadata sync behavior in the same Makefile-driven flow.
Squash adjacent Dockerfile updates that refine the 4.21 image carry and manager binary naming.
Squash adjacent toolchain updates touching openshift/tools so kustomize alignment and IPAM pinning are applied together.
…olicy: Ignore Add functions to set the failurePolicy to Ignore for both mutating and validating webhooks handling IPAM resources. During bootstrap, the bootstrap node's Kube API Server receives IPAM create requests but is unable to reach the webhooks in the Cluster API namespace. This is because the bootstrap node doesn't have a route to the pods as it doesn't have access to the pod networks. If failurePolicy is set to Fail, the KAS cannot reach the webhook endpoints and the request fails, preventing creation of IPAddress and IPAddressClaim resources. This causes a chicken-and-egg problem as it prevents IPAM provisioning for the workers which won't start without their IP addresses being allocated. Setting failurePolicy to Ignore allows the resources to be created even when the webhooks are unreachable during bootstrap, matching what Machine API also does. More context: https://redhat-internal.slack.com/archives/C0A2M43S199/p1765540108488539
Squash ART image consistency updates into a single carry commit.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Squash adjacent carries that iterate over OpenShift manifests generation, IPAM kustomization, and Dockerfile image consistency.
… upstream rebase Squash the post-rebase regeneration steps into a single carry commit so the PR keeps one coherent update for generated manifests and dependency vendoring.
5c92e88 to
e801fc2
Compare
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go (1)
778-807:⚠️ Potential issue | 🟠 Major | 🏗️ Heavy liftAdd custom conversion logic to handle
layout+diskLayoutmutual exclusivity across API versions.v1beta2's
Partitionstruct enforces+kubebuilder:validation:ExactlyOneOf=layout;diskLayout(line 853), ensuring exactly one field is set. However, the auto-generated conversion produces incorrect results:In v1beta1,
Layout boolis required (always non-nil). When converting a v1beta1 resource with bothlayout: falseanddiskLayout: [...], the auto-generatedConvert_bool_To_Pointer_boolcreates a non-nil pointerLayout: &false. In v1beta2, this counts as "specified" byExactlyOneOf, causing validation failure even though the user intended onlydiskLayoutto be set.The v1beta1→v1beta2 conversion must set
Layout = nilwhenDiskLayoutis non-empty. The reverse conversion (v1beta2→v1beta1) needs to setLayout = falsewhenLayout == nil(indicating onlydiskLayoutwas used in v1beta2).Implement custom conversion functions in
api/bootstrap/kubeadm/v1beta1/conversion.goto override the auto-generatedConvert_v1beta1_Partition_To_v1beta2_PartitionandConvert_v1beta2_Partition_To_v1beta1_Partition.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go` around lines 778 - 807, The auto-generated conversions need to be overridden for Partition to enforce mutual exclusivity: add custom conversion functions Convert_v1beta1_Partition_To_v1beta2_Partition and Convert_v1beta2_Partition_To_v1beta1_Partition in api/bootstrap/kubeadm/v1beta1/conversion.go that first call the autogenerated conversion to copy fields, then adjust Layout/DiskLayout: in Convert_v1beta1_Partition_To_v1beta2_Partition, if in the source DiskLayout is non-empty set dst.Layout = nil (so layout is treated as unspecified); in Convert_v1beta2_Partition_To_v1beta1_Partition, if src.Layout == nil set dst.Layout = false; ensure you preserve other fields and return any conversion errors from the autogenerated call.
♻️ Duplicate comments (1)
CHANGELOG/v1.13.0-rc.0.md (1)
186-186:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix malformed changelog entry.
This entry is incomplete and unclear: "0 in e2e tests" does not describe what change was made. Please verify the correct description for PR
#13429and update the entry accordingly.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@CHANGELOG/v1.13.0-rc.0.md` at line 186, The changelog entry "e2e: 0 in e2e tests (`#13429`)" is malformed; look up PR `#13429` to determine the correct concise description and replace that line with a proper changelog entry that follows the repo's format (e.g., "e2e: <brief description of the change> (`#13429`)"), ensuring it clearly describes what was changed and includes the PR number.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@api/bootstrap/kubeadm/v1beta1/conversion.go`:
- Around line 68-78: The conversion currently restores only InitConfiguration
and JoinConfiguration timeouts; you must also preserve backported
ClusterConfiguration fields by copying CertificateValidityPeriodDays,
CACertificateValidityPeriodDays, and EncryptionAlgorithm from the restored
object into dst when those fields are present in restored but unset/zero in dst;
update RestoreKubeadmConfigSpec to check restored.ClusterConfiguration (or
restored.ClusterConfiguration.IsDefined() if available) and for each of
CertificateValidityPeriodDays, CACertificateValidityPeriodDays, and
EncryptionAlgorithm assign dst.ClusterConfiguration.<field> =
restored.ClusterConfiguration.<field> only when dst.ClusterConfiguration.<field>
is empty/zero to avoid overwriting existing spoke values.
In `@api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go`:
- Around line 411-435: The validateIgnition function must reject any
Partition.DiskLayout entries when spec.Format is "ignition"; update
KubeadmConfigSpec.validateIgnition to iterate c.DiskSetup.Partitions and for
each partition with len(partition.DiskLayout) > 0 append a field.Forbidden
(using pathPrefix.Child("diskSetup","partitions").Index(i).Child("diskLayout"))
with a clear message such as "diskLayout is not supported when format is
ignition" so users get a validation error instead of silent ignored
configuration.
In `@api/core/v1beta1/machinehealthcheck_types.go`:
- Around line 170-175: The Timeout field currently uses metav1.Duration which
allows sub-second, negative, and very large values that are lossy when converted
via ConvertToSeconds() to v1beta2; to fix, either change the Timeout type to
*int32 (seconds) to match the v1beta2 hub representation and update all
conversion helpers/CRD tags to accept seconds-only, or keep metav1.Duration but
add strict validation (e.g., in the MachineHealthCheck webhook/Validate methods)
to reject values < 1s, reject negative durations, and reject values >
math.MaxInt32 seconds and any sub-second precision (truncate/rounding not
allowed); update ConvertToSeconds usage and conversion functions to assume the
new seconds-only contract and add clear error messages referencing Timeout and
ConvertToSeconds so clients receive validation failures instead of silent
truncation.
In `@CHANGELOG/v1.12.0-rc.1.md`:
- Around line 85-311: The release note contains duplicate top-level headings
within the <details> block (e.g., "## :chart_with_upwards_trend: Overview", "##
:bug: Bug Fixes", "## :seedling: Others", "## Dependencies") which triggers
markdownlint MD024; remove or rename the duplicated headings inside the
<details> section (or convert them to lower-level headings like "###" or inline
labels) so only one instance of each top-level heading remains (search for the
exact heading strings above to locate the duplicated blocks).
In `@CHANGELOG/v1.12.0.md`:
- Around line 308-373: The dependency transition table in the "### Changed"
section contains apparent downgrades (e.g., cloud.google.com/go/storage,
cloud.google.com/go, github.com/census-instrumentation/opencensus-proto,
github.com/googleapis/gax-go/v2, go.opencensus.io, google.golang.org/api);
verify the intended direction by checking the authoritative source
(go.mod/go.sum or the release tooling that produced the list), then correct each
line to show the proper "old → new" version or remove any incorrect entries;
update the specific entries for cloud.google.com/go/storage,
cloud.google.com/go, github.com/census-instrumentation/opencensus-proto,
github.com/googleapis/gax-go/v2, go.opencensus.io, and google.golang.org/api in
the changelog so the arrow direction and versions match the actual dependency
changes.
In `@CHANGELOG/v1.13.0-beta.0.md`:
- Line 135: The changelog line "e2e: 0 in e2e tests" is malformed and must be
replaced with a clear summary of PR `#13429`; review PR `#13429` to determine the
intended change and update the entry to a concise, conventional changelog phrase
(e.g., "e2e: fix flakey test X" or "e2e: add test for Y"), keeping the same
prefix/scope format used in other entries and preserving bullet/list formatting
so the entry is meaningful and consistent with surrounding lines.
In `@CHANGELOG/v1.13.0-beta.1.md`:
- Line 207: The changelog contains a malformed entry "e2e: 0 in e2e tests" that
must be replaced with the actual description from PR `#13429`; open PR `#13429` to
confirm the intended change (what was added/fixed in e2e tests) and update the
entry in CHANGELOG/v1.13.0-beta.1.md to a clear, concise sentence referencing
the fix or feature (e.g., "e2e: <brief description of change/fix> (`#13429`)"),
ensuring the PR number remains included for traceability.
In `@config/crd/bases/cluster.x-k8s.io_machinedeployments.yaml`:
- Around line 594-600: The CRD schema for the taint "value" field currently has
minLength: 1 which rejects valid empty taint values even though the regex
pattern allows the empty string; update the "value" schema (the value property
under the taint definition) to allow empty values by removing the minLength
constraint or setting minLength: 0 so the pattern and length constraints are
consistent and manifests with an explicit empty taint value validate
successfully.
---
Outside diff comments:
In `@api/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.go`:
- Around line 778-807: The auto-generated conversions need to be overridden for
Partition to enforce mutual exclusivity: add custom conversion functions
Convert_v1beta1_Partition_To_v1beta2_Partition and
Convert_v1beta2_Partition_To_v1beta1_Partition in
api/bootstrap/kubeadm/v1beta1/conversion.go that first call the autogenerated
conversion to copy fields, then adjust Layout/DiskLayout: in
Convert_v1beta1_Partition_To_v1beta2_Partition, if in the source DiskLayout is
non-empty set dst.Layout = nil (so layout is treated as unspecified); in
Convert_v1beta2_Partition_To_v1beta1_Partition, if src.Layout == nil set
dst.Layout = false; ensure you preserve other fields and return any conversion
errors from the autogenerated call.
---
Duplicate comments:
In `@CHANGELOG/v1.13.0-rc.0.md`:
- Line 186: The changelog entry "e2e: 0 in e2e tests (`#13429`)" is malformed;
look up PR `#13429` to determine the correct concise description and replace that
line with a proper changelog entry that follows the repo's format (e.g., "e2e:
<brief description of the change> (`#13429`)"), ensuring it clearly describes what
was changed and includes the PR number.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: c3a07f7d-036d-431b-83f1-8894ce44d85d
⛔ Files ignored due to path filters (36)
api/bootstrap/kubeadm/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/bootstrap/kubeadm/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/bootstrap/kubeadm/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.conversion.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta1/zz_generated.openapi.gois excluded by!**/zz_generated*api/core/v1beta2/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/core/v1beta2/zz_generated.openapi.gois excluded by!**/zz_generated*api/runtime/hooks/v1alpha1/zz_generated.deepcopy.gois excluded by!**/zz_generated*api/runtime/hooks/v1alpha1/zz_generated.openapi.gois excluded by!**/zz_generated*docs/book/src/images/clusterclass-crd-relationships.svgis excluded by!**/*.svgdocs/book/src/images/kubeadm-control-plane-machines-resources.pngis excluded by!**/*.pngdocs/book/src/images/worker-machines-resources.pngis excluded by!**/*.pnggo.sumis excluded by!**/*.sumhack/tools/go.sumis excluded by!**/*.sumhack/tools/vendor/cloud.google.com/go/auth/CHANGES.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/detect.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/filetypes.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/httptransport/httptransport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/httptransport/transport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/filetype.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/credsfile/parse.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/internal.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/jwt/jwt.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/transport/transport.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/auth/internal/version.gois excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/.repo-metadata.jsonis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/CHANGES.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/README.mdis excluded by!**/vendor/**hack/tools/vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.gois excluded by!**/*.pb.go,!**/vendor/**
📒 Files selected for processing (264)
.dockerignore.github/workflows/pr-gh-workflow-approve.yaml.github/workflows/pr-md-link-check.yaml.github/workflows/release.yaml.github/workflows/weekly-md-link-check.yaml.github/workflows/weekly-security-scan.yaml.github/workflows/weekly-test-release.yaml.golangci-kal.yml.golangci.yml.trivyignoreCHANGELOG/v1.10.10.mdCHANGELOG/v1.10.9.mdCHANGELOG/v1.11.4.mdCHANGELOG/v1.11.5.mdCHANGELOG/v1.11.6.mdCHANGELOG/v1.11.7.mdCHANGELOG/v1.12.0-rc.1.mdCHANGELOG/v1.12.0.mdCHANGELOG/v1.12.1.mdCHANGELOG/v1.12.2.mdCHANGELOG/v1.12.3.mdCHANGELOG/v1.12.4.mdCHANGELOG/v1.13.0-beta.0.mdCHANGELOG/v1.13.0-beta.1.mdCHANGELOG/v1.13.0-rc.0.mdCONTRIBUTING.mdDockerfileMakefileTiltfileapi/bootstrap/kubeadm/v1beta1/conversion.goapi/bootstrap/kubeadm/v1beta1/kubeadm_types.goapi/bootstrap/kubeadm/v1beta1/kubeadmconfig_types.goapi/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.goapi/controlplane/kubeadm/v1beta1/conversion.goapi/controlplane/kubeadm/v1beta1/kubeadm_control_plane_types.goapi/controlplane/kubeadm/v1beta1/kubeadmcontrolplanetemplate_types.goapi/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.goapi/controlplane/kubeadm/v1beta2/kubeadmcontrolplanetemplate_types.goapi/core/v1beta1/cluster_types.goapi/core/v1beta1/clusterclass_types.goapi/core/v1beta1/common_types.goapi/core/v1beta1/conversion.goapi/core/v1beta1/conversion_test.goapi/core/v1beta1/machine_types.goapi/core/v1beta1/machinehealthcheck_types.goapi/core/v1beta2/cluster_types.goapi/core/v1beta2/clusterclass_types.goapi/core/v1beta2/common_types.goapi/core/v1beta2/condition_types.goapi/core/v1beta2/machine_types.goapi/ipam/v1alpha1/conversion.goapi/runtime/hooks/v1alpha1/common_types.goapi/runtime/hooks/v1alpha1/lifecyclehooks_types.goapi/runtime/hooks/v1alpha1/topologymutation_types.goapi/runtime/hooks/v1alpha1/topologymutation_variable_types.gobootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigs.yamlbootstrap/kubeadm/config/crd/bases/bootstrap.cluster.x-k8s.io_kubeadmconfigtemplates.yamlbootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigs.yamlbootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigtemplates.yamlbootstrap/kubeadm/config/manager/manager.yamlbootstrap/kubeadm/config/webhook/manifests.yamlbootstrap/kubeadm/internal/cloudinit/cloudinit_test.gobootstrap/kubeadm/internal/cloudinit/disk_setup.gobootstrap/kubeadm/internal/cloudinit/utils.gobootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.gobootstrap/kubeadm/internal/controllers/suite_test.gobootstrap/kubeadm/internal/locking/control_plane_init_mutex.gobootstrap/kubeadm/internal/setup/setup.gobootstrap/kubeadm/internal/webhooks/kubeadmconfig.gobootstrap/kubeadm/internal/webhooks/kubeadmconfig_test.gobootstrap/kubeadm/internal/webhooks/kubeadmconfigtemplate.gobootstrap/kubeadm/internal/webhooks/kubeadmconfigtemplate_test.gobootstrap/kubeadm/main.gobootstrap/util/configowner_test.gobootstrap/util/suite_test.gocmd/clusterctl/Dockerfilecmd/clusterctl/client/cluster/cert_manager.gocmd/clusterctl/client/cluster/cert_manager_test.gocmd/clusterctl/client/cluster/mover.gocmd/clusterctl/client/cluster/template.gocmd/clusterctl/client/cluster/template_test.gocmd/clusterctl/client/cluster/upgrader.gocmd/clusterctl/client/cluster/upgrader_test.gocmd/clusterctl/client/config/imagemeta_client.gocmd/clusterctl/client/config/imagemeta_client_test.gocmd/clusterctl/client/config/providers_client.gocmd/clusterctl/client/config_test.gocmd/clusterctl/client/repository/repository_github.gocmd/clusterctl/client/repository/repository_github_test.gocmd/clusterctl/client/upgrade.gocmd/clusterctl/cmd/config_repositories_test.gocmd/clusterctl/cmd/describe_cluster.gocmd/clusterctl/cmd/upgrade_apply.gocmd/clusterctl/cmd/version_checker.gocmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_metadata.yamlcmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_providers.yamlcmd/clusterctl/config/manifest/clusterctl-api.yamlcmd/clusterctl/hack/create-local-repository.pycmd/clusterctl/internal/test/fake_github.gocmd/clusterctl/internal/test/fake_reader.goconfig/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yamlconfig/crd/bases/addons.cluster.x-k8s.io_clusterresourcesets.yamlconfig/crd/bases/cluster.x-k8s.io_clusterclasses.yamlconfig/crd/bases/cluster.x-k8s.io_clusters.yamlconfig/crd/bases/cluster.x-k8s.io_machinedeployments.yamlconfig/crd/bases/cluster.x-k8s.io_machinedrainrules.yamlconfig/crd/bases/cluster.x-k8s.io_machinehealthchecks.yamlconfig/crd/bases/cluster.x-k8s.io_machinepools.yamlconfig/crd/bases/cluster.x-k8s.io_machines.yamlconfig/crd/bases/cluster.x-k8s.io_machinesets.yamlconfig/crd/bases/ipam.cluster.x-k8s.io_ipaddressclaims.yamlconfig/crd/bases/ipam.cluster.x-k8s.io_ipaddresses.yamlconfig/crd/bases/runtime.cluster.x-k8s.io_extensionconfigs.yamlconfig/crd/patches/webhook_in_clusterclasses.yamlconfig/crd/patches/webhook_in_clusterresourcesetbindings.yamlconfig/crd/patches/webhook_in_clusterresourcesets.yamlconfig/crd/patches/webhook_in_clusters.yamlconfig/crd/patches/webhook_in_extensionconfigs.yamlconfig/crd/patches/webhook_in_ipaddressclaims.yamlconfig/crd/patches/webhook_in_ipaddresses.yamlconfig/crd/patches/webhook_in_machinedeployments.yamlconfig/crd/patches/webhook_in_machinedrainrules.yamlconfig/crd/patches/webhook_in_machinehealthchecks.yamlconfig/crd/patches/webhook_in_machinepools.yamlconfig/crd/patches/webhook_in_machines.yamlconfig/crd/patches/webhook_in_machinesets.yamlconfig/manager/manager.yamlconfig/metrics/crd-metrics-config.yamlconfig/webhook/manifests.yamlcontrollers/clustercache/cluster_accessor.gocontrollers/clustercache/cluster_accessor_client.gocontrollers/clustercache/cluster_accessor_test.gocontrollers/clustercache/cluster_cache.gocontrollers/clustercache/cluster_cache_test.gocontrollers/crdmigrator/crd_migrator.gocontrollers/crdmigrator/test/t1/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t2/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t3/crd/test.cluster.x-k8s.io_testclusters.yamlcontrollers/crdmigrator/test/t4/crd/test.cluster.x-k8s.io_testclusters.yamlcontrolplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yamlcontrolplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanetemplates.yamlcontrolplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanes.yamlcontrolplane/kubeadm/config/crd/patches/webhook_in_kubeadmcontrolplanetemplates.yamlcontrolplane/kubeadm/config/manager/manager.yamlcontrolplane/kubeadm/config/webhook/manifests.yamlcontrolplane/kubeadm/internal/cluster.gocontrolplane/kubeadm/internal/cluster_test.gocontrolplane/kubeadm/internal/clustercache_utils.gocontrolplane/kubeadm/internal/control_plane.gocontrolplane/kubeadm/internal/control_plane_test.gocontrolplane/kubeadm/internal/controllers/controller.gocontrolplane/kubeadm/internal/controllers/controller_test.gocontrolplane/kubeadm/internal/controllers/fakes_test.gocontrolplane/kubeadm/internal/controllers/helpers.gocontrolplane/kubeadm/internal/controllers/inplace.gocontrolplane/kubeadm/internal/controllers/inplace_canupdatemachine.gocontrolplane/kubeadm/internal/controllers/inplace_trigger.gocontrolplane/kubeadm/internal/controllers/remediation.gocontrolplane/kubeadm/internal/controllers/remediation_test.gocontrolplane/kubeadm/internal/controllers/scale.gocontrolplane/kubeadm/internal/controllers/scale_test.gocontrolplane/kubeadm/internal/controllers/status.gocontrolplane/kubeadm/internal/controllers/status_test.gocontrolplane/kubeadm/internal/controllers/suite_test.gocontrolplane/kubeadm/internal/controllers/update_test.gocontrolplane/kubeadm/internal/desiredstate/desired_state.gocontrolplane/kubeadm/internal/desiredstate/desired_state_test.gocontrolplane/kubeadm/internal/etcd/etcd_test.gocontrolplane/kubeadm/internal/etcd/fake/client.gocontrolplane/kubeadm/internal/setup/setup.gocontrolplane/kubeadm/internal/suite_test.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplane.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplane_test.gocontrolplane/kubeadm/internal/webhooks/kubeadmcontrolplanetemplate.gocontrolplane/kubeadm/internal/webhooks/scale.gocontrolplane/kubeadm/internal/workload_cluster.gocontrolplane/kubeadm/internal/workload_cluster_conditions.gocontrolplane/kubeadm/internal/workload_cluster_conditions_test.gocontrolplane/kubeadm/internal/workload_cluster_coredns.gocontrolplane/kubeadm/internal/workload_cluster_etcd.gocontrolplane/kubeadm/internal/workload_cluster_etcd_test.gocontrolplane/kubeadm/internal/workload_cluster_test.gocontrolplane/kubeadm/main.godocs/book/src/SUMMARY.mddocs/book/src/clusterctl/configuration.mddocs/book/src/developer/core/logging.mddocs/book/src/developer/core/tilt.mddocs/book/src/developer/providers/contracts/bootstrap-config.mddocs/book/src/developer/providers/contracts/clusterctl.mddocs/book/src/developer/providers/contracts/control-plane.mddocs/book/src/developer/providers/contracts/infra-cluster.mddocs/book/src/developer/providers/contracts/infra-machine.mddocs/book/src/developer/providers/contracts/infra-machinepool.mddocs/book/src/developer/providers/getting-started/webhooks.mddocs/book/src/developer/providers/migrations/v1.10-to-v1.11.mddocs/book/src/developer/providers/migrations/v1.12-to-v1.13.mddocs/book/src/developer/providers/migrations/v1.9-to-v1.10.mddocs/book/src/images/kubeadm-control-plane-machines-resources.plantumldocs/book/src/images/worker-machines-resources.plantumldocs/book/src/introduction.mddocs/book/src/reference/api/crd-api-reference-v1beta1.mddocs/book/src/reference/api/crd-api-reference.mddocs/book/src/reference/api/crd-relationships.mddocs/book/src/reference/api/reference.mddocs/book/src/reference/versions.mddocs/book/src/tasks/automated-machine-management/healthchecking.mddocs/book/src/tasks/automated-machine-management/scaling.mddocs/book/src/tasks/cluster-resource-set.mddocs/book/src/tasks/diagnostics.mddocs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.mddocs/book/src/tasks/experimental-features/experimental-features.mddocs/book/src/tasks/experimental-features/machine-pools.mddocs/book/src/tasks/experimental-features/runtime-sdk/implement-extensions.mddocs/book/src/tasks/experimental-features/runtime-sdk/index.mddocs/book/src/tasks/external-etcd.mddocs/book/src/tasks/using-kustomize.mddocs/book/src/user/quick-start.mddocs/proposals/20200506-conditions.mddocs/proposals/20210310-opt-in-autoscaling-from-zero.mddocs/proposals/20220330-topology-mutation-hook.mddocs/proposals/20240916-improve-status-in-CAPI-resources.mddocs/proposals/20250124-From CAPD(docker) to CAPD(dev) .mddocs/release/releases/release-1.13.mddocs/release/role-handbooks/ci-signal/README.mddocs/release/role-handbooks/release-lead/README.mdexp/topology/desiredstate/desired_state.goexp/topology/desiredstate/desired_state_test.goexp/topology/desiredstate/lifecycle_hooks.goexp/topology/desiredstate/lifecycle_hooks_test.goexp/topology/desiredstate/upgrade_plan.goexp/topology/desiredstate/upgrade_plan_test.gofeature/feature.gogo.modhack/crd-ref-docs-config-v1beta1.yamlhack/crd-ref-docs-config-v1beta2.yamlhack/ensure-go.shhack/gogcflags.shhack/kind-install.shhack/observability/alloy/kustomization.yamlhack/observability/grafana/chart/kustomization.yamlhack/observability/grafana/dashboards/cluster-api-mgmt-apiserver-requests.jsonhack/observability/grafana/dashboards/cluster-api-performance.jsonhack/observability/grafana/dashboards/cluster-api-state.jsonhack/observability/grafana/dashboards/cluster-api-wl-apiserver-requests.jsonhack/observability/grafana/dashboards/controller-runtime.jsonhack/observability/grafana/dashboards/runtime-extensions.jsonhack/observability/kube-state-metrics/kustomization.yamlhack/observability/loki/kustomization.yamlhack/observability/loki/values.yamlhack/observability/metrics-server/kustomization.yamlhack/observability/parca/values.yamlhack/observability/prometheus/kustomization.yamlhack/observability/prometheus/values.yamlhack/observability/tempo/kustomization.yamlhack/observability/visualizer/kustomization.yamlhack/tools/go.modhack/tools/internal/tilt-prepare/main.gohack/tools/prowjob-gen/config.gohack/tools/prowjob-gen/test/test-configuration.yamlhack/tools/prowjob-gen/test/test-main.yaml.goldenhack/tools/prowjob-gen/test/test.yaml.tplhack/tools/release/internal/update_providers/provider_issues.gohack/tools/release/weekly/main.gohack/tools/runtime-openapi-gen/main.go
💤 Files with no reviewable changes (7)
- .trivyignore
- .github/workflows/pr-gh-workflow-approve.yaml
- controllers/clustercache/cluster_accessor_test.go
- cmd/clusterctl/client/cluster/upgrader_test.go
- config/webhook/manifests.yaml
- bootstrap/util/suite_test.go
- bootstrap/kubeadm/config/webhook/manifests.yaml
✅ Files skipped from review due to trivial changes (62)
- .github/workflows/pr-md-link-check.yaml
- bootstrap/kubeadm/internal/webhooks/kubeadmconfigtemplate_test.go
- bootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigs.yaml
- config/crd/patches/webhook_in_clusterresourcesets.yaml
- config/crd/patches/webhook_in_machines.yaml
- cmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_providers.yaml
- config/crd/bases/ipam.cluster.x-k8s.io_ipaddresses.yaml
- .github/workflows/weekly-md-link-check.yaml
- cmd/clusterctl/client/repository/repository_github.go
- cmd/clusterctl/config/manifest/clusterctl-api.yaml
- config/manager/manager.yaml
- cmd/clusterctl/client/cluster/template_test.go
- CONTRIBUTING.md
- cmd/clusterctl/config/crd/bases/clusterctl.cluster.x-k8s.io_metadata.yaml
- cmd/clusterctl/cmd/version_checker.go
- bootstrap/kubeadm/config/crd/patches/webhook_in_kubeadmconfigtemplates.yaml
- config/crd/patches/webhook_in_clusterresourcesetbindings.yaml
- config/crd/patches/webhook_in_ipaddressclaims.yaml
- config/crd/patches/webhook_in_machinehealthchecks.yaml
- config/crd/patches/webhook_in_extensionconfigs.yaml
- bootstrap/kubeadm/config/manager/manager.yaml
- controllers/crdmigrator/test/t4/crd/test.cluster.x-k8s.io_testclusters.yaml
- controllers/crdmigrator/test/t3/crd/test.cluster.x-k8s.io_testclusters.yaml
- config/crd/patches/webhook_in_machinepools.yaml
- config/crd/patches/webhook_in_machinedeployments.yaml
- cmd/clusterctl/internal/test/fake_github.go
- controllers/crdmigrator/test/t1/crd/test.cluster.x-k8s.io_testclusters.yaml
- cmd/clusterctl/hack/create-local-repository.py
- config/crd/patches/webhook_in_machinesets.yaml
- config/crd/patches/webhook_in_clusterclasses.yaml
- cmd/clusterctl/client/config/providers_client.go
- config/crd/bases/cluster.x-k8s.io_machinedrainrules.yaml
- api/controlplane/kubeadm/v1beta1/kubeadm_control_plane_types.go
- .github/workflows/weekly-test-release.yaml
- controllers/crdmigrator/test/t2/crd/test.cluster.x-k8s.io_testclusters.yaml
- CHANGELOG/v1.12.1.md
- .dockerignore
- api/core/v1beta2/common_types.go
- CHANGELOG/v1.10.9.md
- cmd/clusterctl/client/config/imagemeta_client.go
- CHANGELOG/v1.12.2.md
- api/core/v1beta1/common_types.go
- api/core/v1beta1/machine_types.go
- config/crd/patches/webhook_in_ipaddresses.yaml
- config/crd/patches/webhook_in_machinedrainrules.yaml
- CHANGELOG/v1.12.3.md
- bootstrap/kubeadm/internal/cloudinit/disk_setup.go
- CHANGELOG/v1.11.6.md
- api/core/v1beta2/condition_types.go
- config/metrics/crd-metrics-config.yaml
- CHANGELOG/v1.11.4.md
- CHANGELOG/v1.11.7.md
- controllers/clustercache/cluster_cache_test.go
- .github/workflows/release.yaml
- api/runtime/hooks/v1alpha1/topologymutation_variable_types.go
- CHANGELOG/v1.12.4.md
- bootstrap/kubeadm/internal/setup/setup.go
- config/crd/patches/webhook_in_clusters.yaml
- .golangci.yml
- api/core/v1beta1/cluster_types.go
- api/runtime/hooks/v1alpha1/lifecyclehooks_types.go
- bootstrap/kubeadm/internal/webhooks/kubeadmconfig.go
🚧 Files skipped from review as they are similar to previous changes (28)
- bootstrap/kubeadm/internal/webhooks/kubeadmconfig_test.go
- cmd/clusterctl/client/cluster/template.go
- api/runtime/hooks/v1alpha1/topologymutation_types.go
- .github/workflows/weekly-security-scan.yaml
- cmd/clusterctl/cmd/config_repositories_test.go
- api/core/v1beta2/machine_types.go
- config/crd/bases/addons.cluster.x-k8s.io_clusterresourcesetbindings.yaml
- api/controlplane/kubeadm/v1beta2/kubeadmcontrolplanetemplate_types.go
- cmd/clusterctl/client/repository/repository_github_test.go
- cmd/clusterctl/client/cluster/mover.go
- cmd/clusterctl/client/config/imagemeta_client_test.go
- .golangci-kal.yml
- api/ipam/v1alpha1/conversion.go
- Tiltfile
- api/controlplane/kubeadm/v1beta1/conversion.go
- controllers/clustercache/cluster_accessor.go
- api/bootstrap/kubeadm/v1beta1/kubeadm_types.go
- api/core/v1beta1/conversion_test.go
- config/crd/bases/cluster.x-k8s.io_machinepools.yaml
- api/core/v1beta2/cluster_types.go
- controllers/clustercache/cluster_cache.go
- api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go
- config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml
- config/crd/bases/cluster.x-k8s.io_machines.yaml
- controllers/clustercache/cluster_accessor_client.go
- api/core/v1beta1/conversion.go
- config/crd/bases/cluster.x-k8s.io_machinesets.yaml
- bootstrap/kubeadm/main.go
| func RestoreKubeadmConfigSpec(restored *bootstrapv1.KubeadmConfigSpec, dst *bootstrapv1.KubeadmConfigSpec) { | ||
| // Restore fields added in v1beta2 | ||
| // Note: Because timeout fields partially exist already in v1beta1 we are using the conversion annotation | ||
| // instead of backporting the entire timeout fields to v1beta1 and then having some duplicate timeout fields. | ||
| if restored.InitConfiguration.IsDefined() && !reflect.DeepEqual(restored.InitConfiguration.Timeouts, bootstrapv1.Timeouts{}) { | ||
| dst.InitConfiguration.Timeouts = restored.InitConfiguration.Timeouts | ||
| } | ||
| if restored.JoinConfiguration.IsDefined() && !reflect.DeepEqual(restored.JoinConfiguration.Timeouts, bootstrapv1.Timeouts{}) { | ||
| dst.JoinConfiguration.Timeouts = restored.JoinConfiguration.Timeouts | ||
| } | ||
| if restored.ClusterConfiguration.CertificateValidityPeriodDays != 0 || restored.ClusterConfiguration.CACertificateValidityPeriodDays != 0 { | ||
| if restored.ClusterConfiguration.CertificateValidityPeriodDays != 0 { | ||
| dst.ClusterConfiguration.CertificateValidityPeriodDays = restored.ClusterConfiguration.CertificateValidityPeriodDays | ||
| } | ||
| if restored.ClusterConfiguration.CACertificateValidityPeriodDays != 0 { | ||
| dst.ClusterConfiguration.CACertificateValidityPeriodDays = restored.ClusterConfiguration.CACertificateValidityPeriodDays | ||
| } | ||
| } | ||
| if restored.ClusterConfiguration.EncryptionAlgorithm != "" { | ||
| dst.ClusterConfiguration.EncryptionAlgorithm = restored.ClusterConfiguration.EncryptionAlgorithm | ||
| } | ||
| } |
There was a problem hiding this comment.
Keep restoring the newly backported ClusterConfiguration fields for older annotated objects.
After this change, CertificateValidityPeriodDays, CACertificateValidityPeriodDays, and EncryptionAlgorithm are no longer recovered from the stored hub annotation. That works for objects written after the backport, but pre-upgrade v1beta1 objects can still have those values only in the annotation, so a v1beta1 -> v1beta2 conversion will now silently drop them. Please keep the restore path until those objects are rewritten, or only skip the annotation value when the spoke field is already populated.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@api/bootstrap/kubeadm/v1beta1/conversion.go` around lines 68 - 78, The
conversion currently restores only InitConfiguration and JoinConfiguration
timeouts; you must also preserve backported ClusterConfiguration fields by
copying CertificateValidityPeriodDays, CACertificateValidityPeriodDays, and
EncryptionAlgorithm from the restored object into dst when those fields are
present in restored but unset/zero in dst; update RestoreKubeadmConfigSpec to
check restored.ClusterConfiguration (or
restored.ClusterConfiguration.IsDefined() if available) and for each of
CertificateValidityPeriodDays, CACertificateValidityPeriodDays, and
EncryptionAlgorithm assign dst.ClusterConfiguration.<field> =
restored.ClusterConfiguration.<field> only when dst.ClusterConfiguration.<field>
is empty/zero to avoid overwriting existing spoke values.
| func (c *KubeadmConfigSpec) validateDiskSetup(pathPrefix *field.Path) field.ErrorList { | ||
| var allErrs field.ErrorList | ||
|
|
||
| for i, partition := range c.DiskSetup.Partitions { | ||
| if len(partition.DiskLayout) > 0 { | ||
| var totalPercentage int32 | ||
| for _, layout := range partition.DiskLayout { | ||
| totalPercentage += layout.Percentage | ||
| } | ||
|
|
||
| if totalPercentage > 100 { | ||
| allErrs = append( | ||
| allErrs, | ||
| field.Invalid( | ||
| pathPrefix.Child("diskSetup", "partitions").Index(i).Child("diskLayout"), | ||
| totalPercentage, | ||
| "the sum of all partition percentages must not be greater than 100", | ||
| ), | ||
| ) | ||
| } | ||
| } | ||
| } | ||
|
|
||
| return allErrs | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify whether the Ignition rendering path (internal/ignition) handles DiskLayout
rg -n --type go "DiskLayout" -C 4 -- bootstrap/kubeadm/internal/ignition/Repository: openshift/cluster-api
Length of output: 47
🏁 Script executed:
# Search for validateIgnition function
rg -n "validateIgnition" --type go api/bootstrap/kubeadm/v1beta2/Repository: openshift/cluster-api
Length of output: 328
🏁 Script executed:
# Look at the ignition directory structure
find . -path "*bootstrap/kubeadm/internal/ignition*" -type f -name "*.go" | head -20Repository: openshift/cluster-api
Length of output: 273
🏁 Script executed:
# Search more broadly for DiskLayout and format ignition handling
rg -n "format.*ignition\|ignition.*format" --type go -i api/bootstrap/kubeadm/ | head -30Repository: openshift/cluster-api
Length of output: 47
🏁 Script executed:
# Check the kubeadmconfig_types.go file around the validateDiskSetup to find validateIgnition
rg -n "func.*validate" --type go api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go | head -20Repository: openshift/cluster-api
Length of output: 424
🏁 Script executed:
# Read validateIgnition function starting at line 303
sed -n '303,410p' api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.goRepository: openshift/cluster-api
Length of output: 2424
🏁 Script executed:
# Read the ignition.go file to understand DiskLayout handling
cat -n bootstrap/kubeadm/internal/ignition/ignition.goRepository: openshift/cluster-api
Length of output: 4867
🏁 Script executed:
# Find disk_setup.go
find . -name "disk_setup.go" -type fRepository: openshift/cluster-api
Length of output: 118
🏁 Script executed:
# Search for how DiskLayout is handled in cloud-init rendering
rg -n "DiskLayout" --type go -C 3 bootstrap/kubeadm/internal/cloudinit/Repository: openshift/cluster-api
Length of output: 4222
🏁 Script executed:
# Check if BaseUserData includes DiskSetup
rg -n "type BaseUserData" --type go -A 20 bootstrap/kubeadm/internal/cloudinit/Repository: openshift/cluster-api
Length of output: 1865
🏁 Script executed:
# Check how BaseUserData with DiskSetup is passed to the ignition rendering
rg -n "BaseUserData\|DiskSetup" bootstrap/kubeadm/internal/ignition/ignition.go -B 2 -A 2Repository: openshift/cluster-api
Length of output: 47
🏁 Script executed:
# Check clc.Render function to see if it uses DiskSetup
rg -n "func Render" bootstrap/kubeadm/internal/ignition/clc/clc.go -A 30Repository: openshift/cluster-api
Length of output: 1294
🏁 Script executed:
# Find renderCLC function to see if it processes DiskSetup
rg -n "func renderCLC" bootstrap/kubeadm/internal/ignition/clc/clc.go -A 30Repository: openshift/cluster-api
Length of output: 1172
🏁 Script executed:
# Search for disk_setup template usage in ignition rendering
rg -n "disk_setup\|DiskSetup" bootstrap/kubeadm/internal/ignition/clc/clc.go -B 2 -A 2Repository: openshift/cluster-api
Length of output: 47
🏁 Script executed:
# Find the clcTemplate to see if it references disk_setup
rg -n "clcTemplate\|disk_setup" bootstrap/kubeadm/internal/ignition/clc/clc.go -B 2 -A 2Repository: openshift/cluster-api
Length of output: 47
🏁 Script executed:
# Get the clcTemplate definition - look at the end of clc.go file
tail -300 bootstrap/kubeadm/internal/ignition/clc/clc.go | head -150Repository: openshift/cluster-api
Length of output: 4030
validateIgnition should forbid DiskLayout on partitions.
validateIgnition forbids other cloud-init-specific fields (bootCommands, replaceFS, partition, non-gpt table types, gzip encoding) but does not forbid DiskLayout. The Ignition template (clcTemplate in bootstrap/kubeadm/internal/ignition/clc/clc.go) does not reference DiskLayout; it only uses the Layout field. Meanwhile, the cloud-init rendering uses DiskLayout to generate the layout: section in disk_setup.go. Users setting diskLayout with format: ignition would have their configuration silently ignored, creating a confusing failure mode without validation feedback.
Add validation to forbid DiskLayout on partitions when format: ignition:
for i, partition := range c.DiskSetup.Partitions {
if partition.TableType != "" && partition.TableType != "gpt" {
// ...existing tableType check...
}
+ if len(partition.DiskLayout) > 0 {
+ allErrs = append(
+ allErrs,
+ field.Forbidden(
+ pathPrefix.Child("diskSetup", "partitions").Index(i).Child("diskLayout"),
+ cannotUseWithIgnition,
+ ),
+ )
+ }
}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@api/bootstrap/kubeadm/v1beta2/kubeadmconfig_types.go` around lines 411 - 435,
The validateIgnition function must reject any Partition.DiskLayout entries when
spec.Format is "ignition"; update KubeadmConfigSpec.validateIgnition to iterate
c.DiskSetup.Partitions and for each partition with len(partition.DiskLayout) > 0
append a field.Forbidden (using
pathPrefix.Child("diskSetup","partitions").Index(i).Child("diskLayout")) with a
clear message such as "diskLayout is not supported when format is ignition" so
users get a validation error instead of silent ignored configuration.
| // timeout is the duration that a Machine must be in a given status for, | ||
| // after which the Machine is considered unhealthy. | ||
| // For example, with a value of "1h", the Machine must match the status | ||
| // for at least 1 hour before being considered unhealthy. | ||
| // +required | ||
| Timeout metav1.Duration `json:"timeout"` |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n -C3 'UnhealthyMachineCondition|timeoutSeconds|Timeout' \
api/core/v1beta1/conversion.go \
api/core/v1beta1/conversion_test.goRepository: openshift/cluster-api
Length of output: 42771
🏁 Script executed:
# Find the clusterv1 package conversion functions
find . -type f -name "*.go" | xargs grep -l "ConvertToSeconds\|ConvertFromSeconds" | head -5Repository: openshift/cluster-api
Length of output: 319
🏁 Script executed:
# Search for the v1beta2 UnhealthyMachineCondition type definition
rg -n "type UnhealthyMachineCondition" --type go | grep -v v1beta1Repository: openshift/cluster-api
Length of output: 410
🏁 Script executed:
# Check if there are validation rules on the v1beta1 Timeout field
rg -n "Timeout.*metav1.Duration" api/core/v1beta1/machinehealthcheck_types.go -A 5Repository: openshift/cluster-api
Length of output: 1234
🏁 Script executed:
# View the v1beta2 UnhealthyMachineCondition definition
sed -n '245,260p' api/core/v1beta2/machinehealthcheck_types.goRepository: openshift/cluster-api
Length of output: 994
🏁 Script executed:
# Find and view the ConvertToSeconds function implementation
rg -n "func ConvertToSeconds" api/core/ -A 10Repository: openshift/cluster-api
Length of output: 665
🏁 Script executed:
# Find and view the ConvertFromSeconds function implementation
rg -n "func ConvertFromSeconds" api/core/ -A 10Repository: openshift/cluster-api
Length of output: 939
Constrain Timeout to second-granularity values matching v1beta2's int32 representation.
The v1beta1 field accepts any metav1.Duration, but the conversion to v1beta2 is lossy. ConvertToSeconds() truncates sub-second precision via math.Trunc() and clamps values exceeding int32 max seconds. A v1beta1 client submitting 500ms converts to 0 seconds in v1beta2 and round-trips back as 0 duration. Similarly, negative durations and durations exceeding ~68 years get truncated or clamped. Either add validation to reject invalid values (e.g., minimum: 1 second, maximum bounds) or change Timeout to *int32 (seconds only) to match the hub version.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@api/core/v1beta1/machinehealthcheck_types.go` around lines 170 - 175, The
Timeout field currently uses metav1.Duration which allows sub-second, negative,
and very large values that are lossy when converted via ConvertToSeconds() to
v1beta2; to fix, either change the Timeout type to *int32 (seconds) to match the
v1beta2 hub representation and update all conversion helpers/CRD tags to accept
seconds-only, or keep metav1.Duration but add strict validation (e.g., in the
MachineHealthCheck webhook/Validate methods) to reject values < 1s, reject
negative durations, and reject values > math.MaxInt32 seconds and any sub-second
precision (truncate/rounding not allowed); update ConvertToSeconds usage and
conversion functions to assume the new seconds-only contract and add clear error
messages referencing Timeout and ConvertToSeconds so clients receive validation
failures instead of silent truncation.
| <details> | ||
| <summary>More details about the release</summary> | ||
|
|
||
| ## Changes since v1.11.0 | ||
| ## :chart_with_upwards_trend: Overview | ||
| - 287 new commits merged | ||
| - 5 breaking changes :warning: | ||
| - 42 feature additions ✨ | ||
| - 42 bugs fixed 🐛 | ||
|
|
||
| ## :warning: Breaking Changes | ||
| - CI: Improve KAL config docs for forbidding OpenAPI defaulting (#12869) | ||
| - clusterctl: Block move when Cluster or ClusterClass is paused (#12786) | ||
| - Dependency: Bump to controller-runtime v0.22 & controller-tools v0.19 (#12634) | ||
| - Runtime SDK: Improve chained upgrade observability (#12973) | ||
| - Runtime SDK: Make the AfterClusterUpgrade hook blocking (#12984) | ||
|
|
||
| ## :sparkles: New Features | ||
| - API/Machine/MachineSet/MachineDeployment: Machine related API changes, conversion and feature gate (#12936) | ||
| - CABPK: Add EncryptionAlgorithm to Kubeadmconfig (#12859) | ||
| - CAPD: Add scale from/to 0 support for CAPD (#12572) | ||
| - CI: Bump autoscaler to a9cb59fdd (#12643) | ||
| - CI: Bump Kubernetes in tests to v1.34.0 and claim support for v1.34 (#12699) | ||
| - ClusterCache/KCP: Deprecate GetClientCertificatePrivateKey and stop using it in KCP (#12846) | ||
| - ClusterCache: Add GetUncachedClient() (#12803) | ||
| - ClusterClass: Add .spec.upgrade.external.generateUpgradePlanExtension field to ClusterClass (#12809) | ||
| - ClusterClass: Add types and hook for GenerateUpgradePlan (#12823) | ||
| - ClusterClass: Additional validation in Cluster/ClusterClass webhook for chained upgrades (#12816) | ||
| - ClusterClass: Call GenerateUpgradePlanRequest Runtime Extension (#12903) | ||
| - ClusterClass: Implement core logic for chained upgrades (#12726) | ||
| - clusterctl: Add conditions filter for clusterctl describe (#12991) | ||
| - Control-plane: Add new control-plane provider HCP (#12800) | ||
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.1 (#12623) | ||
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.2 (#12658) | ||
| - e2e: Bump Kubernetes version used for testing to v1.35.0-beta.0 (#13029) | ||
| - e2e: Change RuntimeSDK e2e test ClusterClass to use GenerateUpgradePlan extension (#12955) | ||
| - e2e: Implement e2e test for in-place updates (#12938) | ||
| - KCP/CABPK/CI: Bump KAL to pick up latest requiredfields linter, add Min/MaxLength to BootstrapToken (#12563) | ||
| - KCP/MachineSet: Refactor BootstrapConfig/InfraMachine managedFields for in-place (#12890) | ||
| - KCP: Bump coredns/corefile-migration to v1.0.28 (#12748) | ||
| - KCP: Bump coredns/corefile-migration to v1.0.29 (#12862) | ||
| - KCP: Bump corefile-migration to v1.0.27 (#12636) | ||
| - KCP: Compare ClusterConfiguration via KubeadmConfig instead of annotation on Machine (#12758) | ||
| - KCP: Extend rollout logic for in-place updates (#12840) | ||
| - KCP: Implement CanUpdateMachine (#12857) | ||
| - KCP: Implement trigger in-place update (#12897) | ||
| - Machine: Add in-place updates support for machine controller (#12831) | ||
| - MachineDeployment: Add in-place to rollout planner (#12865) | ||
| - MachineDeployment: Implement CanUpdateMachineSet (#12965) | ||
| - MachineHealthCheck: Add support for checking Machine conditions in MachineHealthCheck (#12827) | ||
| - Misc: Add inplace updates featuregate (#12755) | ||
| - Misc: Improve logs, errors and conditions (#12992) | ||
| - Misc: Introduce & use wait for cache utils (#12957) | ||
| - Misc: Introduce reconciler rate-limiting and hook caching (#13006) | ||
| - Runtime SDK/IPAM/MachinePool: Cleanup exp packages (#12651) | ||
| - Runtime SDK: Add in-place update hooks to API (#12343) | ||
| - Runtime SDK: Add lifecycle hooks for chained-upgrade (#12878) | ||
| - Runtime SDK: Call new lifecycle hooks for chained-upgrades (#12891) | ||
| - Runtime SDK: Ensure ExtensionConfig controller can be used outside of the core provider (#12754) | ||
| - Runtime SDK: Implement GenerateUpgradePlan handler (#12927) | ||
|
|
||
| ## :bug: Bug Fixes | ||
| - API: Only try to convert infraRefs if they are set (#12686) | ||
| - API: Register conversion funcs in schemes (#12687) | ||
| - CABPK: Always use latest apiVersion when getting owner of KubeadmConfig in CABPK (#12685) | ||
| - CAPD: CAPD on rootless podman (#12941) | ||
| - CAPD: Fix the format error of healthCheck in test templates (#12787) | ||
| - CAPD: Remove finalizers during deletion if ownerRef was never set (#12675) | ||
| - CAPD: Run CAPD conversion tests in CI (#12583) | ||
| - CAPIM: Eliminate data race in DialContext (#12778) | ||
| - ClusterClass/MachinePool: Fix MP error in desired state calculation during Cluster creation (#12607) | ||
| - ClusterClass: Do not overwrite global http.DefaultClient TLSConfig (#13063) | ||
| - ClusterClass: Ensure holder field path in GeneratePatchRequest is set based on contract (#12684) | ||
| - ClusterClass: Fix field paths in ClusterClass compatibility validation errors (#12660) | ||
| - ClusterClass: Fix wait for cache in reconcile_state.go (#13032) | ||
| - ClusterClass: Stop adding conversion-data annotation to Cluster object (#12719) | ||
| - ClusterClass: Stop writing zero values for spec.controlPlaneEndpoint to ControlPlane objects (#12958) | ||
| - clusterctl: Removing Ready/Available prefix from STATUS Column (#12729) | ||
| - clusterctl: Verify providers need upgrade before applying (#12753) | ||
| - Devtools: Fix kube-state-metrics deployment (#13024) | ||
| - e2e: Do not require kubetest configration if not needed (#12948) | ||
| - e2e: Fix autoscaler e2e test flake (#12613) | ||
| - e2e: Fix e2e test issues introduced by chained upgrades (#12766) | ||
| - e2e: Fix objects with Changed Resource Versions flake (#12848) | ||
| - e2e: Fix upgrade runtimesdk test (#12833) | ||
| - e2e: Fix WaitForMachinesReady interval (#13051) | ||
| - e2e: Increase reconcile timeout for DockerMachine (#13099) | ||
| - e2e: Propagate clusterctl variables for cluster upgrades (#12949) | ||
| - KCP: Fix ControlPlaneComponentHealthCheckSeconds validation in KubeadmConfigSpec.Validate (#12609) | ||
| - KCP: Fix conversion issue in KubeadmControlPlaneTemplate with rolloutStrategy.type (#12608) | ||
| - KCP: Fix KCP KubeadmConfig isJoin detection (#13035) | ||
| - KCP: Grant `delete` permissions to Secrets. (#13097) | ||
| - Machine/MachinePool: Fix MachinePool nodeRef UID mismatch after K8s upgrade (#12392) | ||
| - Machine/MachineSet: Use MachineSet template values in completeMoveMachine for in-place updates (#13085) | ||
| - MachineDeployment: Fix race conditions ScaleDownOldMS (#12812) | ||
| - MachineDeployment: Fix race conditions ScaleDownOldMS OnDelete (#12830) | ||
| - MachineDeployment: Fix rollout with unavailable machines (#13020) | ||
| - Runtime SDK: Export ExtensionConfig webhook (#12598) | ||
| - Testing/e2e: Fix unit test flakes, improve clusterctl download error in e2e tests (#13056) | ||
| - Testing: Fix flaky TestFuzzyConversion (Cluster) test (#12618) | ||
| - Testing: Fix flaky TestReconcileMachinePhases unit test (#12616) | ||
| - Testing: Fix flaky TestReconcileState unit test (#12617) | ||
| - Testing: Fix KubeadmConfig fuzz test flake (#12679) | ||
| - util: Fix a panic in conditions.Delete method if the sources condition list is empty (#13053) | ||
|
|
||
| ## :seedling: Others | ||
| - API: Relax validation for Machine .status.addresses to maximum of 128 instead of 32 items (#13090) | ||
| - Autoscaling: Bump autoscaler in e2e tests to v1.33.1 (#12790) | ||
| - CABPK: Migrate from Requeue to RequeueAfter in CABPK (#12988) | ||
| - CAPD: Cleanup CAPD exp packages (#12672) | ||
| - CAPD: Recreate container if we re-enter reconciliation and it exists but is not running (#12923) | ||
| - CI: Add OpenAPI defaulting detection for KubeadmConfig by using forbiddenmarkers (#12851) | ||
| - CI: Block FIXME comments (#12772) | ||
| - CI: Bump KAL & add nodurations linter (#12743) | ||
| - CI: Bump KAL & add nonullable and forbiddenmarkers linter (#12724) | ||
| - CI: Bump KAL & drop schemaless excludes (#12646) | ||
| - CI: Bump KAL, adjust excludes (#12650) | ||
| - CI: Bump Kube API Linter version (#12974) | ||
| - CI: Bump softprops/action-gh-release from 2.4.2 to 2.5.0 in the all-github-actions group (#13094) | ||
| - CI: Bump to golangci-linter version to v2.4.0 (#12703) | ||
| - CI: Update metrics configuration to v1beta2 (#12642) | ||
| - Cluster: Allow >1 minor version upgrades if generateUpgradePlan extension is defined (#12979) | ||
| - Cluster: Simplify Cluster webhook (#12895) | ||
| - ClusterClass: Add input validations for desired state generator function (#12655) | ||
| - ClusterClass: Improve topology reconciled condition (#13002) | ||
| - clusterctl: Add metal-stack infrastructure provider (#12925) | ||
| - clusterctl: Add Metal3 as an IPAMProvider (#12756) | ||
| - clusterctl: Allow metadata.yaml's Kind to be empty (#12714) | ||
| - clusterctl: Bump cert-manager to v1.19.0 (#12828) | ||
| - clusterctl: Bump cert-manager to v1.19.1 (#12873) | ||
| - clusterctl: Bumping tablewriter to v1.0.9 - latest (#12781) | ||
| - clusterctl: Show Available condition for CP (#12759) | ||
| - ClusterResourceSet: Remove deprecated ClusterResourceSet feature gate (#12950) | ||
| - Dependency: Bump github.com/go-viper/mapstructure/v2 to fix CVE (#12677) | ||
| - Dependency: Bump Go to v1.24.10 (#12962) | ||
| - Dependency: Bump Go to v1.24.6 (#12611) | ||
| - Dependency: Bump go to v1.24.7 (#12733) | ||
| - Dependency: Bump Go to v1.24.8 (#12826) | ||
| - Dependency: Bump Go to v1.24.9 (#12867) | ||
| - Dependency: Bump golang.org/x/crypto to v0.45 to fix CVE (#13036) | ||
| - Dependency: Bump to envtest v1.34.0 (#12702) | ||
| - Devtools: Drop ALL groups in tilt (#13001) | ||
| - Devtools: Extend CR dashboard to handle capi_reconcile metrics (#13040) | ||
| - Devtools: Promtail to alloy migration (#11945) | ||
| - Documentation/MachinePool: Add structure for area/machinepool ownership in OWNERS files (#13018) | ||
| - e2e: Add quickstart e2e test with v1beta1 with ClusterClass and RuntimeSDK (#12577) | ||
| - e2e: Bump autoscaler in e2e tests to v1.34.0 (#12806) | ||
| - e2e: Bump pause image in e2e tests to 3.10.1 (default for Kubernetes v1.34) (#12731) | ||
| - e2e: Bump to kind v0.30.0 (#12701) | ||
| - e2e: Do not expect Machines for MachinePools not supporting Machines (#13077) | ||
| - e2e: E2e coverage via md rollout test (#12966) | ||
| - e2e: Enable IPv6 test again (#12597) | ||
| - e2e: Fix autoscaler test (#12978) | ||
| - e2e: Fix kind build git commit setting (#12858) | ||
| - e2e: Fix md-rollout test to test in-place taint changes before doing the rollout change (#13031) | ||
| - e2e: Fix self-hosted to actually read DOCKER_PRELOAD_IMAGES from the e2e config (#12907) | ||
| - e2e: Get kind mgmt cluster logs in clusterctl upgrade test (#12676) | ||
| - e2e: Improve check for Cluster Available condition in e2e tests (#12594) | ||
| - e2e: Make clusterctl upgrade test to work when there are no machines (#13074) | ||
| - e2e: Set startup taint for autoscaler in e2e tests (#12736) | ||
| - e2e: Start testing against Kubernetes v1.35 (#12709) | ||
| - e2e: Use wait-machine-upgrade timeout in ClusterClassChanges tests to wait for machines to be ready (#13013) | ||
| - e2e: Wait for cluster deletion in runtime sdk test (#12956) | ||
| - KCP/CABPK: Stop using unsafe for EnvVar conversion (#12619) | ||
| - KCP/MachineSet/MachineDeployment: Remove unused CleanUpManagedFieldsForSSAAdoption code (#12788) | ||
| - KCP: Add current/desired objects to NotUpToDateResult & refactor object creation (#12817) | ||
| - KCP: Avoid KCP rollouts if only ControlPlaneComponentHealthCheckSeconds is changed (#13026) | ||
| - KCP: Check for error before checking reconcile result (#12935) | ||
| - KCP: Enable websocket dialer with fallback to spdy (#12902) | ||
| - KCP: Fix race condition on KCP initialized condition (#12980) | ||
| - KCP: Improve KCP etcd client crt/key caching (#12977) | ||
| - KCP: Simplify cleanupConfigFields in KCP (#12776) | ||
| - KCP: Simplify KCP matchesKubeadmConfig (#12813) | ||
| - KCP: Variable/func renames, func order (#12793) | ||
| - Logging: Reduce noisy logs (#12606) | ||
| - Machine/MachineSet/MachineDeployment: Adjust UpToDate condition to consider Updating, move UpToDate condition to Machine ctrl for workers (#12959) | ||
| - Machine: Add DisableCertPrivateKey function for clustercache for test flake (#12921) | ||
| - Machine: Consider updating condition when computing Machine's ready condition (#12939) | ||
| - Machine: Fix TestReconcileMachinePhases flake (#12818) | ||
| - Machine: Implement Updating Machine phase (#12940) | ||
| - Machine: Requeue for Machine Available condition (#12953) | ||
| - Machine: Use apireader to directly talk to apiserver (#12819) | ||
| - MachineDeployment: Add in-place to machineset controller (#12906) | ||
| - MachineDeployment: Add more info to logs for rollout changes (#12997) | ||
| - MachineDeployment: Add rollout planner (#12804) | ||
| - MachineDeployment: Cleanup getMachinesSucceeded flag from MD controller (#12882) | ||
| - MachineDeployment: Defer in-place updates for machines not yet provisioned (#13007) | ||
| - MachineDeployment: Fix misleading log statements and optimize logic (#12871) | ||
| - MachineDeployment: Move compute and create ms to rollout planner (#12841) | ||
| - MachineDeployment: Refactor MachineTemplateUpToDate (#12811) | ||
| - MachineDeployment: Rollout-planner improve checks for scalingOrInPlaceUpdateInProgress (#12954) | ||
| - MachineDeployment: Simplify rollout planner (#12899) | ||
| - MachineHealthCheck: Add reason to condition, add reason+message to log (#12987) | ||
| - MachineHealthCheck: No longer requeue when remediation is not allowed (#12924) | ||
| - MachinePool: Migrate from Requeue to RequeueAfter in MachinePool tests (#13027) | ||
| - MachineSet: Fix flakes in syncMachines unit test (#12918) | ||
| - MachineSet: Fix race conditions with global scheme in TestMachineSetReconciler_reconcileUnhealthyMachines (#12919) | ||
| - MachineSet: Refactor BootstrapConfig/InfraMachine creation in MachineSet controller (#12881) | ||
| - Misc: Add Proxy Support to Docker Build-Args (#12669) | ||
| - Misc: Avoid using deprecated client.Patch method (#12737) | ||
| - Misc: Cleanup TestReconcileMachinePhases (#12976) | ||
| - Misc: Consistent webhook file/folder structure (#12791) | ||
| - Misc: Improve mark hook utils (#12994) | ||
| - Misc: Improve wait for cache (#12993) | ||
| - Misc: Log version and git commit on controller start (#12694) | ||
| - Misc: Stop setting and relying on TypeMeta in typed objects (#12533) | ||
| - Misc: Use errors package of Go (#10875) | ||
| - Release/clusterctl: Add CAPRKE2 to release tool’s issue-opening providers list (#12713) | ||
| - Release/Testing: Added test cases for list.go and github.go (#11937) | ||
| - Release: Clarify semantic of --previous-release-version (#12995) | ||
| - Release: Prepare main branch for v1.12 development (#12723) | ||
| - Release: Update release notes tool to handle multiples_areas and colons (#12738) | ||
| - Runtime SDK: Add defensive response status checking in runtime client (#12898) | ||
| - Runtime SDK: Add hint to look into controller logs to runtime client error response (#12849) | ||
| - Runtime SDK: Add httpClientCache to runtime client (#13080) | ||
| - Runtime SDK: Deduplicate extension filtering and response validation logic (#12905) | ||
| - Runtime SDK: Migrate from Requeue to RequeueAfter in extensionconfig (#13000) | ||
| - Testing: Add clusterapi crd groups to audit logs for envtest (#12883) | ||
| - Testing: Enable audit logs for envtest-based unit tests if ARTIFACTS env var is set (#12847) | ||
| - Testing: Implement unit-tests for desired state generator (#12656) | ||
| - Testing: Update version matrix for GitHub workflows for release 1.11 (#12586) | ||
| - util: Add check version against metadata utility (#12529) | ||
| - util: Add items to cache immediately after apply (#12877) | ||
|
|
||
| :book: Additionally, there have been 44 contributions to our documentation and book. (#12085, #12199, #12329, #12562, #12581, #12582, #12593, #12600, #12601, #12647, #12662, #12663, #12673, #12710, #12741, #12761, #12777, #12779, #12797, #12810, #12814, #12835, #12836, #12854, #12866, #12880, #12885, #12892, #12893, #12896, #12917, #12934, #12942, #12944, #12951, #12961, #12970, #12998, #13010, #13011, #13012, #13021, #13057, #13098) | ||
|
|
||
| ## Dependencies |
There was a problem hiding this comment.
Duplicate headings inside <details> trigger markdownlint MD024 warnings.
The nested section repeats headings like ## :chart_with_upwards_trend: Overview, ## :bug: Bug Fixes, ## :seedling: Others, and ## Dependencies, which can fail docs linting.
Suggested minimal fix
-## :chart_with_upwards_trend: Overview
+### :chart_with_upwards_trend: Overview (detailed)
-## :bug: Bug Fixes
+### :bug: Bug Fixes (detailed)
-## :seedling: Others
+### :seedling: Others (detailed)
-## Dependencies
+### Dependencies (detailed)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <details> | |
| <summary>More details about the release</summary> | |
| ## Changes since v1.11.0 | |
| ## :chart_with_upwards_trend: Overview | |
| - 287 new commits merged | |
| - 5 breaking changes :warning: | |
| - 42 feature additions ✨ | |
| - 42 bugs fixed 🐛 | |
| ## :warning: Breaking Changes | |
| - CI: Improve KAL config docs for forbidding OpenAPI defaulting (#12869) | |
| - clusterctl: Block move when Cluster or ClusterClass is paused (#12786) | |
| - Dependency: Bump to controller-runtime v0.22 & controller-tools v0.19 (#12634) | |
| - Runtime SDK: Improve chained upgrade observability (#12973) | |
| - Runtime SDK: Make the AfterClusterUpgrade hook blocking (#12984) | |
| ## :sparkles: New Features | |
| - API/Machine/MachineSet/MachineDeployment: Machine related API changes, conversion and feature gate (#12936) | |
| - CABPK: Add EncryptionAlgorithm to Kubeadmconfig (#12859) | |
| - CAPD: Add scale from/to 0 support for CAPD (#12572) | |
| - CI: Bump autoscaler to a9cb59fdd (#12643) | |
| - CI: Bump Kubernetes in tests to v1.34.0 and claim support for v1.34 (#12699) | |
| - ClusterCache/KCP: Deprecate GetClientCertificatePrivateKey and stop using it in KCP (#12846) | |
| - ClusterCache: Add GetUncachedClient() (#12803) | |
| - ClusterClass: Add .spec.upgrade.external.generateUpgradePlanExtension field to ClusterClass (#12809) | |
| - ClusterClass: Add types and hook for GenerateUpgradePlan (#12823) | |
| - ClusterClass: Additional validation in Cluster/ClusterClass webhook for chained upgrades (#12816) | |
| - ClusterClass: Call GenerateUpgradePlanRequest Runtime Extension (#12903) | |
| - ClusterClass: Implement core logic for chained upgrades (#12726) | |
| - clusterctl: Add conditions filter for clusterctl describe (#12991) | |
| - Control-plane: Add new control-plane provider HCP (#12800) | |
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.1 (#12623) | |
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.2 (#12658) | |
| - e2e: Bump Kubernetes version used for testing to v1.35.0-beta.0 (#13029) | |
| - e2e: Change RuntimeSDK e2e test ClusterClass to use GenerateUpgradePlan extension (#12955) | |
| - e2e: Implement e2e test for in-place updates (#12938) | |
| - KCP/CABPK/CI: Bump KAL to pick up latest requiredfields linter, add Min/MaxLength to BootstrapToken (#12563) | |
| - KCP/MachineSet: Refactor BootstrapConfig/InfraMachine managedFields for in-place (#12890) | |
| - KCP: Bump coredns/corefile-migration to v1.0.28 (#12748) | |
| - KCP: Bump coredns/corefile-migration to v1.0.29 (#12862) | |
| - KCP: Bump corefile-migration to v1.0.27 (#12636) | |
| - KCP: Compare ClusterConfiguration via KubeadmConfig instead of annotation on Machine (#12758) | |
| - KCP: Extend rollout logic for in-place updates (#12840) | |
| - KCP: Implement CanUpdateMachine (#12857) | |
| - KCP: Implement trigger in-place update (#12897) | |
| - Machine: Add in-place updates support for machine controller (#12831) | |
| - MachineDeployment: Add in-place to rollout planner (#12865) | |
| - MachineDeployment: Implement CanUpdateMachineSet (#12965) | |
| - MachineHealthCheck: Add support for checking Machine conditions in MachineHealthCheck (#12827) | |
| - Misc: Add inplace updates featuregate (#12755) | |
| - Misc: Improve logs, errors and conditions (#12992) | |
| - Misc: Introduce & use wait for cache utils (#12957) | |
| - Misc: Introduce reconciler rate-limiting and hook caching (#13006) | |
| - Runtime SDK/IPAM/MachinePool: Cleanup exp packages (#12651) | |
| - Runtime SDK: Add in-place update hooks to API (#12343) | |
| - Runtime SDK: Add lifecycle hooks for chained-upgrade (#12878) | |
| - Runtime SDK: Call new lifecycle hooks for chained-upgrades (#12891) | |
| - Runtime SDK: Ensure ExtensionConfig controller can be used outside of the core provider (#12754) | |
| - Runtime SDK: Implement GenerateUpgradePlan handler (#12927) | |
| ## :bug: Bug Fixes | |
| - API: Only try to convert infraRefs if they are set (#12686) | |
| - API: Register conversion funcs in schemes (#12687) | |
| - CABPK: Always use latest apiVersion when getting owner of KubeadmConfig in CABPK (#12685) | |
| - CAPD: CAPD on rootless podman (#12941) | |
| - CAPD: Fix the format error of healthCheck in test templates (#12787) | |
| - CAPD: Remove finalizers during deletion if ownerRef was never set (#12675) | |
| - CAPD: Run CAPD conversion tests in CI (#12583) | |
| - CAPIM: Eliminate data race in DialContext (#12778) | |
| - ClusterClass/MachinePool: Fix MP error in desired state calculation during Cluster creation (#12607) | |
| - ClusterClass: Do not overwrite global http.DefaultClient TLSConfig (#13063) | |
| - ClusterClass: Ensure holder field path in GeneratePatchRequest is set based on contract (#12684) | |
| - ClusterClass: Fix field paths in ClusterClass compatibility validation errors (#12660) | |
| - ClusterClass: Fix wait for cache in reconcile_state.go (#13032) | |
| - ClusterClass: Stop adding conversion-data annotation to Cluster object (#12719) | |
| - ClusterClass: Stop writing zero values for spec.controlPlaneEndpoint to ControlPlane objects (#12958) | |
| - clusterctl: Removing Ready/Available prefix from STATUS Column (#12729) | |
| - clusterctl: Verify providers need upgrade before applying (#12753) | |
| - Devtools: Fix kube-state-metrics deployment (#13024) | |
| - e2e: Do not require kubetest configration if not needed (#12948) | |
| - e2e: Fix autoscaler e2e test flake (#12613) | |
| - e2e: Fix e2e test issues introduced by chained upgrades (#12766) | |
| - e2e: Fix objects with Changed Resource Versions flake (#12848) | |
| - e2e: Fix upgrade runtimesdk test (#12833) | |
| - e2e: Fix WaitForMachinesReady interval (#13051) | |
| - e2e: Increase reconcile timeout for DockerMachine (#13099) | |
| - e2e: Propagate clusterctl variables for cluster upgrades (#12949) | |
| - KCP: Fix ControlPlaneComponentHealthCheckSeconds validation in KubeadmConfigSpec.Validate (#12609) | |
| - KCP: Fix conversion issue in KubeadmControlPlaneTemplate with rolloutStrategy.type (#12608) | |
| - KCP: Fix KCP KubeadmConfig isJoin detection (#13035) | |
| - KCP: Grant `delete` permissions to Secrets. (#13097) | |
| - Machine/MachinePool: Fix MachinePool nodeRef UID mismatch after K8s upgrade (#12392) | |
| - Machine/MachineSet: Use MachineSet template values in completeMoveMachine for in-place updates (#13085) | |
| - MachineDeployment: Fix race conditions ScaleDownOldMS (#12812) | |
| - MachineDeployment: Fix race conditions ScaleDownOldMS OnDelete (#12830) | |
| - MachineDeployment: Fix rollout with unavailable machines (#13020) | |
| - Runtime SDK: Export ExtensionConfig webhook (#12598) | |
| - Testing/e2e: Fix unit test flakes, improve clusterctl download error in e2e tests (#13056) | |
| - Testing: Fix flaky TestFuzzyConversion (Cluster) test (#12618) | |
| - Testing: Fix flaky TestReconcileMachinePhases unit test (#12616) | |
| - Testing: Fix flaky TestReconcileState unit test (#12617) | |
| - Testing: Fix KubeadmConfig fuzz test flake (#12679) | |
| - util: Fix a panic in conditions.Delete method if the sources condition list is empty (#13053) | |
| ## :seedling: Others | |
| - API: Relax validation for Machine .status.addresses to maximum of 128 instead of 32 items (#13090) | |
| - Autoscaling: Bump autoscaler in e2e tests to v1.33.1 (#12790) | |
| - CABPK: Migrate from Requeue to RequeueAfter in CABPK (#12988) | |
| - CAPD: Cleanup CAPD exp packages (#12672) | |
| - CAPD: Recreate container if we re-enter reconciliation and it exists but is not running (#12923) | |
| - CI: Add OpenAPI defaulting detection for KubeadmConfig by using forbiddenmarkers (#12851) | |
| - CI: Block FIXME comments (#12772) | |
| - CI: Bump KAL & add nodurations linter (#12743) | |
| - CI: Bump KAL & add nonullable and forbiddenmarkers linter (#12724) | |
| - CI: Bump KAL & drop schemaless excludes (#12646) | |
| - CI: Bump KAL, adjust excludes (#12650) | |
| - CI: Bump Kube API Linter version (#12974) | |
| - CI: Bump softprops/action-gh-release from 2.4.2 to 2.5.0 in the all-github-actions group (#13094) | |
| - CI: Bump to golangci-linter version to v2.4.0 (#12703) | |
| - CI: Update metrics configuration to v1beta2 (#12642) | |
| - Cluster: Allow >1 minor version upgrades if generateUpgradePlan extension is defined (#12979) | |
| - Cluster: Simplify Cluster webhook (#12895) | |
| - ClusterClass: Add input validations for desired state generator function (#12655) | |
| - ClusterClass: Improve topology reconciled condition (#13002) | |
| - clusterctl: Add metal-stack infrastructure provider (#12925) | |
| - clusterctl: Add Metal3 as an IPAMProvider (#12756) | |
| - clusterctl: Allow metadata.yaml's Kind to be empty (#12714) | |
| - clusterctl: Bump cert-manager to v1.19.0 (#12828) | |
| - clusterctl: Bump cert-manager to v1.19.1 (#12873) | |
| - clusterctl: Bumping tablewriter to v1.0.9 - latest (#12781) | |
| - clusterctl: Show Available condition for CP (#12759) | |
| - ClusterResourceSet: Remove deprecated ClusterResourceSet feature gate (#12950) | |
| - Dependency: Bump github.com/go-viper/mapstructure/v2 to fix CVE (#12677) | |
| - Dependency: Bump Go to v1.24.10 (#12962) | |
| - Dependency: Bump Go to v1.24.6 (#12611) | |
| - Dependency: Bump go to v1.24.7 (#12733) | |
| - Dependency: Bump Go to v1.24.8 (#12826) | |
| - Dependency: Bump Go to v1.24.9 (#12867) | |
| - Dependency: Bump golang.org/x/crypto to v0.45 to fix CVE (#13036) | |
| - Dependency: Bump to envtest v1.34.0 (#12702) | |
| - Devtools: Drop ALL groups in tilt (#13001) | |
| - Devtools: Extend CR dashboard to handle capi_reconcile metrics (#13040) | |
| - Devtools: Promtail to alloy migration (#11945) | |
| - Documentation/MachinePool: Add structure for area/machinepool ownership in OWNERS files (#13018) | |
| - e2e: Add quickstart e2e test with v1beta1 with ClusterClass and RuntimeSDK (#12577) | |
| - e2e: Bump autoscaler in e2e tests to v1.34.0 (#12806) | |
| - e2e: Bump pause image in e2e tests to 3.10.1 (default for Kubernetes v1.34) (#12731) | |
| - e2e: Bump to kind v0.30.0 (#12701) | |
| - e2e: Do not expect Machines for MachinePools not supporting Machines (#13077) | |
| - e2e: E2e coverage via md rollout test (#12966) | |
| - e2e: Enable IPv6 test again (#12597) | |
| - e2e: Fix autoscaler test (#12978) | |
| - e2e: Fix kind build git commit setting (#12858) | |
| - e2e: Fix md-rollout test to test in-place taint changes before doing the rollout change (#13031) | |
| - e2e: Fix self-hosted to actually read DOCKER_PRELOAD_IMAGES from the e2e config (#12907) | |
| - e2e: Get kind mgmt cluster logs in clusterctl upgrade test (#12676) | |
| - e2e: Improve check for Cluster Available condition in e2e tests (#12594) | |
| - e2e: Make clusterctl upgrade test to work when there are no machines (#13074) | |
| - e2e: Set startup taint for autoscaler in e2e tests (#12736) | |
| - e2e: Start testing against Kubernetes v1.35 (#12709) | |
| - e2e: Use wait-machine-upgrade timeout in ClusterClassChanges tests to wait for machines to be ready (#13013) | |
| - e2e: Wait for cluster deletion in runtime sdk test (#12956) | |
| - KCP/CABPK: Stop using unsafe for EnvVar conversion (#12619) | |
| - KCP/MachineSet/MachineDeployment: Remove unused CleanUpManagedFieldsForSSAAdoption code (#12788) | |
| - KCP: Add current/desired objects to NotUpToDateResult & refactor object creation (#12817) | |
| - KCP: Avoid KCP rollouts if only ControlPlaneComponentHealthCheckSeconds is changed (#13026) | |
| - KCP: Check for error before checking reconcile result (#12935) | |
| - KCP: Enable websocket dialer with fallback to spdy (#12902) | |
| - KCP: Fix race condition on KCP initialized condition (#12980) | |
| - KCP: Improve KCP etcd client crt/key caching (#12977) | |
| - KCP: Simplify cleanupConfigFields in KCP (#12776) | |
| - KCP: Simplify KCP matchesKubeadmConfig (#12813) | |
| - KCP: Variable/func renames, func order (#12793) | |
| - Logging: Reduce noisy logs (#12606) | |
| - Machine/MachineSet/MachineDeployment: Adjust UpToDate condition to consider Updating, move UpToDate condition to Machine ctrl for workers (#12959) | |
| - Machine: Add DisableCertPrivateKey function for clustercache for test flake (#12921) | |
| - Machine: Consider updating condition when computing Machine's ready condition (#12939) | |
| - Machine: Fix TestReconcileMachinePhases flake (#12818) | |
| - Machine: Implement Updating Machine phase (#12940) | |
| - Machine: Requeue for Machine Available condition (#12953) | |
| - Machine: Use apireader to directly talk to apiserver (#12819) | |
| - MachineDeployment: Add in-place to machineset controller (#12906) | |
| - MachineDeployment: Add more info to logs for rollout changes (#12997) | |
| - MachineDeployment: Add rollout planner (#12804) | |
| - MachineDeployment: Cleanup getMachinesSucceeded flag from MD controller (#12882) | |
| - MachineDeployment: Defer in-place updates for machines not yet provisioned (#13007) | |
| - MachineDeployment: Fix misleading log statements and optimize logic (#12871) | |
| - MachineDeployment: Move compute and create ms to rollout planner (#12841) | |
| - MachineDeployment: Refactor MachineTemplateUpToDate (#12811) | |
| - MachineDeployment: Rollout-planner improve checks for scalingOrInPlaceUpdateInProgress (#12954) | |
| - MachineDeployment: Simplify rollout planner (#12899) | |
| - MachineHealthCheck: Add reason to condition, add reason+message to log (#12987) | |
| - MachineHealthCheck: No longer requeue when remediation is not allowed (#12924) | |
| - MachinePool: Migrate from Requeue to RequeueAfter in MachinePool tests (#13027) | |
| - MachineSet: Fix flakes in syncMachines unit test (#12918) | |
| - MachineSet: Fix race conditions with global scheme in TestMachineSetReconciler_reconcileUnhealthyMachines (#12919) | |
| - MachineSet: Refactor BootstrapConfig/InfraMachine creation in MachineSet controller (#12881) | |
| - Misc: Add Proxy Support to Docker Build-Args (#12669) | |
| - Misc: Avoid using deprecated client.Patch method (#12737) | |
| - Misc: Cleanup TestReconcileMachinePhases (#12976) | |
| - Misc: Consistent webhook file/folder structure (#12791) | |
| - Misc: Improve mark hook utils (#12994) | |
| - Misc: Improve wait for cache (#12993) | |
| - Misc: Log version and git commit on controller start (#12694) | |
| - Misc: Stop setting and relying on TypeMeta in typed objects (#12533) | |
| - Misc: Use errors package of Go (#10875) | |
| - Release/clusterctl: Add CAPRKE2 to release tool’s issue-opening providers list (#12713) | |
| - Release/Testing: Added test cases for list.go and github.go (#11937) | |
| - Release: Clarify semantic of --previous-release-version (#12995) | |
| - Release: Prepare main branch for v1.12 development (#12723) | |
| - Release: Update release notes tool to handle multiples_areas and colons (#12738) | |
| - Runtime SDK: Add defensive response status checking in runtime client (#12898) | |
| - Runtime SDK: Add hint to look into controller logs to runtime client error response (#12849) | |
| - Runtime SDK: Add httpClientCache to runtime client (#13080) | |
| - Runtime SDK: Deduplicate extension filtering and response validation logic (#12905) | |
| - Runtime SDK: Migrate from Requeue to RequeueAfter in extensionconfig (#13000) | |
| - Testing: Add clusterapi crd groups to audit logs for envtest (#12883) | |
| - Testing: Enable audit logs for envtest-based unit tests if ARTIFACTS env var is set (#12847) | |
| - Testing: Implement unit-tests for desired state generator (#12656) | |
| - Testing: Update version matrix for GitHub workflows for release 1.11 (#12586) | |
| - util: Add check version against metadata utility (#12529) | |
| - util: Add items to cache immediately after apply (#12877) | |
| :book: Additionally, there have been 44 contributions to our documentation and book. (#12085, #12199, #12329, #12562, #12581, #12582, #12593, #12600, #12601, #12647, #12662, #12663, #12673, #12710, #12741, #12761, #12777, #12779, #12797, #12810, #12814, #12835, #12836, #12854, #12866, #12880, #12885, #12892, #12893, #12896, #12917, #12934, #12942, #12944, #12951, #12961, #12970, #12998, #13010, #13011, #13012, #13021, #13057, #13098) | |
| ## Dependencies | |
| <details> | |
| <summary>More details about the release</summary> | |
| ## Changes since v1.11.0 | |
| ### :chart_with_upwards_trend: Overview (detailed) | |
| - 287 new commits merged | |
| - 5 breaking changes :warning: | |
| - 42 feature additions ✨ | |
| - 42 bugs fixed 🐛 | |
| ## :warning: Breaking Changes | |
| - CI: Improve KAL config docs for forbidding OpenAPI defaulting (`#12869`) | |
| - clusterctl: Block move when Cluster or ClusterClass is paused (`#12786`) | |
| - Dependency: Bump to controller-runtime v0.22 & controller-tools v0.19 (`#12634`) | |
| - Runtime SDK: Improve chained upgrade observability (`#12973`) | |
| - Runtime SDK: Make the AfterClusterUpgrade hook blocking (`#12984`) | |
| ### :sparkles: New Features (detailed) | |
| - API/Machine/MachineSet/MachineDeployment: Machine related API changes, conversion and feature gate (`#12936`) | |
| - CABPK: Add EncryptionAlgorithm to Kubeadmconfig (`#12859`) | |
| - CAPD: Add scale from/to 0 support for CAPD (`#12572`) | |
| - CI: Bump autoscaler to a9cb59fdd (`#12643`) | |
| - CI: Bump Kubernetes in tests to v1.34.0 and claim support for v1.34 (`#12699`) | |
| - ClusterCache/KCP: Deprecate GetClientCertificatePrivateKey and stop using it in KCP (`#12846`) | |
| - ClusterCache: Add GetUncachedClient() (`#12803`) | |
| - ClusterClass: Add .spec.upgrade.external.generateUpgradePlanExtension field to ClusterClass (`#12809`) | |
| - ClusterClass: Add types and hook for GenerateUpgradePlan (`#12823`) | |
| - ClusterClass: Additional validation in Cluster/ClusterClass webhook for chained upgrades (`#12816`) | |
| - ClusterClass: Call GenerateUpgradePlanRequest Runtime Extension (`#12903`) | |
| - ClusterClass: Implement core logic for chained upgrades (`#12726`) | |
| - clusterctl: Add conditions filter for clusterctl describe (`#12991`) | |
| - Control-plane: Add new control-plane provider HCP (`#12800`) | |
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.1 (`#12623`) | |
| - e2e: Bump Kubernetes version used for testing to v1.34.0-rc.2 (`#12658`) | |
| - e2e: Bump Kubernetes version used for testing to v1.35.0-beta.0 (`#13029`) | |
| - e2e: Change RuntimeSDK e2e test ClusterClass to use GenerateUpgradePlan extension (`#12955`) | |
| - e2e: Implement e2e test for in-place updates (`#12938`) | |
| - KCP/CABPK/CI: Bump KAL to pick up latest requiredfields linter, add Min/MaxLength to BootstrapToken (`#12563`) | |
| - KCP/MachineSet: Refactor BootstrapConfig/InfraMachine managedFields for in-place (`#12890`) | |
| - KCP: Bump coredns/corefile-migration to v1.0.28 (`#12748`) | |
| - KCP: Bump coredns/corefile-migration to v1.0.29 (`#12862`) | |
| - KCP: Bump corefile-migration to v1.0.27 (`#12636`) | |
| - KCP: Compare ClusterConfiguration via KubeadmConfig instead of annotation on Machine (`#12758`) | |
| - KCP: Extend rollout logic for in-place updates (`#12840`) | |
| - KCP: Implement CanUpdateMachine (`#12857`) | |
| - KCP: Implement trigger in-place update (`#12897`) | |
| - Machine: Add in-place updates support for machine controller (`#12831`) | |
| - MachineDeployment: Add in-place to rollout planner (`#12865`) | |
| - MachineDeployment: Implement CanUpdateMachineSet (`#12965`) | |
| - MachineHealthCheck: Add support for checking Machine conditions in MachineHealthCheck (`#12827`) | |
| - Misc: Add inplace updates featuregate (`#12755`) | |
| - Misc: Improve logs, errors and conditions (`#12992`) | |
| - Misc: Introduce & use wait for cache utils (`#12957`) | |
| - Misc: Introduce reconciler rate-limiting and hook caching (`#13006`) | |
| - Runtime SDK/IPAM/MachinePool: Cleanup exp packages (`#12651`) | |
| - Runtime SDK: Add in-place update hooks to API (`#12343`) | |
| - Runtime SDK: Add lifecycle hooks for chained-upgrade (`#12878`) | |
| - Runtime SDK: Call new lifecycle hooks for chained-upgrades (`#12891`) | |
| - Runtime SDK: Ensure ExtensionConfig controller can be used outside of the core provider (`#12754`) | |
| - Runtime SDK: Implement GenerateUpgradePlan handler (`#12927`) | |
| ### :bug: Bug Fixes (detailed) | |
| - API: Only try to convert infraRefs if they are set (`#12686`) | |
| - API: Register conversion funcs in schemes (`#12687`) | |
| - CABPK: Always use latest apiVersion when getting owner of KubeadmConfig in CABPK (`#12685`) | |
| - CAPD: CAPD on rootless podman (`#12941`) | |
| - CAPD: Fix the format error of healthCheck in test templates (`#12787`) | |
| - CAPD: Remove finalizers during deletion if ownerRef was never set (`#12675`) | |
| - CAPD: Run CAPD conversion tests in CI (`#12583`) | |
| - CAPIM: Eliminate data race in DialContext (`#12778`) | |
| - ClusterClass/MachinePool: Fix MP error in desired state calculation during Cluster creation (`#12607`) | |
| - ClusterClass: Do not overwrite global http.DefaultClient TLSConfig (`#13063`) | |
| - ClusterClass: Ensure holder field path in GeneratePatchRequest is set based on contract (`#12684`) | |
| - ClusterClass: Fix field paths in ClusterClass compatibility validation errors (`#12660`) | |
| - ClusterClass: Fix wait for cache in reconcile_state.go (`#13032`) | |
| - ClusterClass: Stop adding conversion-data annotation to Cluster object (`#12719`) | |
| - ClusterClass: Stop writing zero values for spec.controlPlaneEndpoint to ControlPlane objects (`#12958`) | |
| - clusterctl: Removing Ready/Available prefix from STATUS Column (`#12729`) | |
| - clusterctl: Verify providers need upgrade before applying (`#12753`) | |
| - Devtools: Fix kube-state-metrics deployment (`#13024`) | |
| - e2e: Do not require kubetest configration if not needed (`#12948`) | |
| - e2e: Fix autoscaler e2e test flake (`#12613`) | |
| - e2e: Fix e2e test issues introduced by chained upgrades (`#12766`) | |
| - e2e: Fix objects with Changed Resource Versions flake (`#12848`) | |
| - e2e: Fix upgrade runtimesdk test (`#12833`) | |
| - e2e: Fix WaitForMachinesReady interval (`#13051`) | |
| - e2e: Increase reconcile timeout for DockerMachine (`#13099`) | |
| - e2e: Propagate clusterctl variables for cluster upgrades (`#12949`) | |
| - KCP: Fix ControlPlaneComponentHealthCheckSeconds validation in KubeadmConfigSpec.Validate (`#12609`) | |
| - KCP: Fix conversion issue in KubeadmControlPlaneTemplate with rolloutStrategy.type (`#12608`) | |
| - KCP: Fix KCP KubeadmConfig isJoin detection (`#13035`) | |
| - KCP: Grant `delete` permissions to Secrets. (`#13097`) | |
| - Machine/MachinePool: Fix MachinePool nodeRef UID mismatch after K8s upgrade (`#12392`) | |
| - Machine/MachineSet: Use MachineSet template values in completeMoveMachine for in-place updates (`#13085`) | |
| - MachineDeployment: Fix race conditions ScaleDownOldMS (`#12812`) | |
| - MachineDeployment: Fix race conditions ScaleDownOldMS OnDelete (`#12830`) | |
| - MachineDeployment: Fix rollout with unavailable machines (`#13020`) | |
| - Runtime SDK: Export ExtensionConfig webhook (`#12598`) | |
| - Testing/e2e: Fix unit test flakes, improve clusterctl download error in e2e tests (`#13056`) | |
| - Testing: Fix flaky TestFuzzyConversion (Cluster) test (`#12618`) | |
| - Testing: Fix flaky TestReconcileMachinePhases unit test (`#12616`) | |
| - Testing: Fix flaky TestReconcileState unit test (`#12617`) | |
| - Testing: Fix KubeadmConfig fuzz test flake (`#12679`) | |
| - util: Fix a panic in conditions.Delete method if the sources condition list is empty (`#13053`) | |
| ### :seedling: Others (detailed) | |
| - API: Relax validation for Machine .status.addresses to maximum of 128 instead of 32 items (`#13090`) | |
| - Autoscaling: Bump autoscaler in e2e tests to v1.33.1 (`#12790`) | |
| - CABPK: Migrate from Requeue to RequeueAfter in CABPK (`#12988`) | |
| - CAPD: Cleanup CAPD exp packages (`#12672`) | |
| - CAPD: Recreate container if we re-enter reconciliation and it exists but is not running (`#12923`) | |
| - CI: Add OpenAPI defaulting detection for KubeadmConfig by using forbiddenmarkers (`#12851`) | |
| - CI: Block FIXME comments (`#12772`) | |
| - CI: Bump KAL & add nodurations linter (`#12743`) | |
| - CI: Bump KAL & add nonullable and forbiddenmarkers linter (`#12724`) | |
| - CI: Bump KAL & drop schemaless excludes (`#12646`) | |
| - CI: Bump KAL, adjust excludes (`#12650`) | |
| - CI: Bump Kube API Linter version (`#12974`) | |
| - CI: Bump softprops/action-gh-release from 2.4.2 to 2.5.0 in the all-github-actions group (`#13094`) | |
| - CI: Bump to golangci-linter version to v2.4.0 (`#12703`) | |
| - CI: Update metrics configuration to v1beta2 (`#12642`) | |
| - Cluster: Allow >1 minor version upgrades if generateUpgradePlan extension is defined (`#12979`) | |
| - Cluster: Simplify Cluster webhook (`#12895`) | |
| - ClusterClass: Add input validations for desired state generator function (`#12655`) | |
| - ClusterClass: Improve topology reconciled condition (`#13002`) | |
| - clusterctl: Add metal-stack infrastructure provider (`#12925`) | |
| - clusterctl: Add Metal3 as an IPAMProvider (`#12756`) | |
| - clusterctl: Allow metadata.yaml's Kind to be empty (`#12714`) | |
| - clusterctl: Bump cert-manager to v1.19.0 (`#12828`) | |
| - clusterctl: Bump cert-manager to v1.19.1 (`#12873`) | |
| - clusterctl: Bumping tablewriter to v1.0.9 - latest (`#12781`) | |
| - clusterctl: Show Available condition for CP (`#12759`) | |
| - ClusterResourceSet: Remove deprecated ClusterResourceSet feature gate (`#12950`) | |
| - Dependency: Bump github.com/go-viper/mapstructure/v2 to fix CVE (`#12677`) | |
| - Dependency: Bump Go to v1.24.10 (`#12962`) | |
| - Dependency: Bump Go to v1.24.6 (`#12611`) | |
| - Dependency: Bump go to v1.24.7 (`#12733`) | |
| - Dependency: Bump Go to v1.24.8 (`#12826`) | |
| - Dependency: Bump Go to v1.24.9 (`#12867`) | |
| - Dependency: Bump golang.org/x/crypto to v0.45 to fix CVE (`#13036`) | |
| - Dependency: Bump to envtest v1.34.0 (`#12702`) | |
| - Devtools: Drop ALL groups in tilt (`#13001`) | |
| - Devtools: Extend CR dashboard to handle capi_reconcile metrics (`#13040`) | |
| - Devtools: Promtail to alloy migration (`#11945`) | |
| - Documentation/MachinePool: Add structure for area/machinepool ownership in OWNERS files (`#13018`) | |
| - e2e: Add quickstart e2e test with v1beta1 with ClusterClass and RuntimeSDK (`#12577`) | |
| - e2e: Bump autoscaler in e2e tests to v1.34.0 (`#12806`) | |
| - e2e: Bump pause image in e2e tests to 3.10.1 (default for Kubernetes v1.34) (`#12731`) | |
| - e2e: Bump to kind v0.30.0 (`#12701`) | |
| - e2e: Do not expect Machines for MachinePools not supporting Machines (`#13077`) | |
| - e2e: E2e coverage via md rollout test (`#12966`) | |
| - e2e: Enable IPv6 test again (`#12597`) | |
| - e2e: Fix autoscaler test (`#12978`) | |
| - e2e: Fix kind build git commit setting (`#12858`) | |
| - e2e: Fix md-rollout test to test in-place taint changes before doing the rollout change (`#13031`) | |
| - e2e: Fix self-hosted to actually read DOCKER_PRELOAD_IMAGES from the e2e config (`#12907`) | |
| - e2e: Get kind mgmt cluster logs in clusterctl upgrade test (`#12676`) | |
| - e2e: Improve check for Cluster Available condition in e2e tests (`#12594`) | |
| - e2e: Make clusterctl upgrade test to work when there are no machines (`#13074`) | |
| - e2e: Set startup taint for autoscaler in e2e tests (`#12736`) | |
| - e2e: Start testing against Kubernetes v1.35 (`#12709`) | |
| - e2e: Use wait-machine-upgrade timeout in ClusterClassChanges tests to wait for machines to be ready (`#13013`) | |
| - e2e: Wait for cluster deletion in runtime sdk test (`#12956`) | |
| - KCP/CABPK: Stop using unsafe for EnvVar conversion (`#12619`) | |
| - KCP/MachineSet/MachineDeployment: Remove unused CleanUpManagedFieldsForSSAAdoption code (`#12788`) | |
| - KCP: Add current/desired objects to NotUpToDateResult & refactor object creation (`#12817`) | |
| - KCP: Avoid KCP rollouts if only ControlPlaneComponentHealthCheckSeconds is changed (`#13026`) | |
| - KCP: Check for error before checking reconcile result (`#12935`) | |
| - KCP: Enable websocket dialer with fallback to spdy (`#12902`) | |
| - KCP: Fix race condition on KCP initialized condition (`#12980`) | |
| - KCP: Improve KCP etcd client crt/key caching (`#12977`) | |
| - KCP: Simplify cleanupConfigFields in KCP (`#12776`) | |
| - KCP: Simplify KCP matchesKubeadmConfig (`#12813`) | |
| - KCP: Variable/func renames, func order (`#12793`) | |
| - Logging: Reduce noisy logs (`#12606`) | |
| - Machine/MachineSet/MachineDeployment: Adjust UpToDate condition to consider Updating, move UpToDate condition to Machine ctrl for workers (`#12959`) | |
| - Machine: Add DisableCertPrivateKey function for clustercache for test flake (`#12921`) | |
| - Machine: Consider updating condition when computing Machine's ready condition (`#12939`) | |
| - Machine: Fix TestReconcileMachinePhases flake (`#12818`) | |
| - Machine: Implement Updating Machine phase (`#12940`) | |
| - Machine: Requeue for Machine Available condition (`#12953`) | |
| - Machine: Use apireader to directly talk to apiserver (`#12819`) | |
| - MachineDeployment: Add in-place to machineset controller (`#12906`) | |
| - MachineDeployment: Add more info to logs for rollout changes (`#12997`) | |
| - MachineDeployment: Add rollout planner (`#12804`) | |
| - MachineDeployment: Cleanup getMachinesSucceeded flag from MD controller (`#12882`) | |
| - MachineDeployment: Defer in-place updates for machines not yet provisioned (`#13007`) | |
| - MachineDeployment: Fix misleading log statements and optimize logic (`#12871`) | |
| - MachineDeployment: Move compute and create ms to rollout planner (`#12841`) | |
| - MachineDeployment: Refactor MachineTemplateUpToDate (`#12811`) | |
| - MachineDeployment: Rollout-planner improve checks for scalingOrInPlaceUpdateInProgress (`#12954`) | |
| - MachineDeployment: Simplify rollout planner (`#12899`) | |
| - MachineHealthCheck: Add reason to condition, add reason+message to log (`#12987`) | |
| - MachineHealthCheck: No longer requeue when remediation is not allowed (`#12924`) | |
| - MachinePool: Migrate from Requeue to RequeueAfter in MachinePool tests (`#13027`) | |
| - MachineSet: Fix flakes in syncMachines unit test (`#12918`) | |
| - MachineSet: Fix race conditions with global scheme in TestMachineSetReconciler_reconcileUnhealthyMachines (`#12919`) | |
| - MachineSet: Refactor BootstrapConfig/InfraMachine creation in MachineSet controller (`#12881`) | |
| - Misc: Add Proxy Support to Docker Build-Args (`#12669`) | |
| - Misc: Avoid using deprecated client.Patch method (`#12737`) | |
| - Misc: Cleanup TestReconcileMachinePhases (`#12976`) | |
| - Misc: Consistent webhook file/folder structure (`#12791`) | |
| - Misc: Improve mark hook utils (`#12994`) | |
| - Misc: Improve wait for cache (`#12993`) | |
| - Misc: Log version and git commit on controller start (`#12694`) | |
| - Misc: Stop setting and relying on TypeMeta in typed objects (`#12533`) | |
| - Misc: Use errors package of Go (`#10875`) | |
| - Release/clusterctl: Add CAPRKE2 to release tool's issue-opening providers list (`#12713`) | |
| - Release/Testing: Added test cases for list.go and github.go (`#11937`) | |
| - Release: Clarify semantic of --previous-release-version (`#12995`) | |
| - Release: Prepare main branch for v1.12 development (`#12723`) | |
| - Release: Update release notes tool to handle multiples_areas and colons (`#12738`) | |
| - Runtime SDK: Add defensive response status checking in runtime client (`#12898`) | |
| - Runtime SDK: Add hint to look into controller logs to runtime client error response (`#12849`) | |
| - Runtime SDK: Add httpClientCache to runtime client (`#13080`) | |
| - Runtime SDK: Deduplicate extension filtering and response validation logic (`#12905`) | |
| - Runtime SDK: Migrate from Requeue to RequeueAfter in extensionconfig (`#13000`) | |
| - Testing: Add clusterapi crd groups to audit logs for envtest (`#12883`) | |
| - Testing: Enable audit logs for envtest-based unit tests if ARTIFACTS env var is set (`#12847`) | |
| - Testing: Implement unit-tests for desired state generator (`#12656`) | |
| - Testing: Update version matrix for GitHub workflows for release 1.11 (`#12586`) | |
| - util: Add check version against metadata utility (`#12529`) | |
| - util: Add items to cache immediately after apply (`#12877`) | |
| :book: Additionally, there have been 44 contributions to our documentation and book. (`#12085`, `#12199`, `#12329`, `#12562`, `#12581`, `#12582`, `#12593`, `#12600`, `#12601`, `#12647`, `#12662`, `#12663`, `#12673`, `#12710`, `#12741`, `#12761`, `#12777`, `#12779`, `#12797`, `#12810`, `#12814`, `#12835`, `#12836`, `#12854`, `#12866`, `#12880`, `#12885`, `#12892`, `#12893`, `#12896`, `#12917`, `#12934`, `#12942`, `#12944`, `#12951`, `#12961`, `#12970`, `#12998`, `#13010`, `#13011`, `#13012`, `#13021`, `#13057`, `#13098`) | |
| ### Dependencies (detailed) |
🧰 Tools
🪛 LanguageTool
[style] ~143-~143: This phrase is redundant. Consider using “outside”.
Context: ... ExtensionConfig controller can be used outside of the core provider (#12754) - Runtime SD...
(OUTSIDE_OF)
[uncategorized] ~293-~293: The official name of this software platform is spelled with a capital “H”.
Context: ...sting: Added test cases for list.go and github.go (#11937) - Release: Clarify semantic...
(GITHUB)
🪛 markdownlint-cli2 (0.22.1)
[warning] 89-89: Multiple headings with the same content
(MD024, no-duplicate-heading)
[warning] 146-146: Multiple headings with the same content
(MD024, no-duplicate-heading)
[warning] 190-190: Multiple headings with the same content
(MD024, no-duplicate-heading)
[warning] 311-311: Multiple headings with the same content
(MD024, no-duplicate-heading)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG/v1.12.0-rc.1.md` around lines 85 - 311, The release note contains
duplicate top-level headings within the <details> block (e.g., "##
:chart_with_upwards_trend: Overview", "## :bug: Bug Fixes", "## :seedling:
Others", "## Dependencies") which triggers markdownlint MD024; remove or rename
the duplicated headings inside the <details> section (or convert them to
lower-level headings like "###" or inline labels) so only one instance of each
top-level heading remains (search for the exact heading strings above to locate
the duplicated blocks).
| - cel.dev/expr: v0.19.1 → v0.24.0 | ||
| - cloud.google.com/go/storage: v1.49.0 → v1.5.0 | ||
| - cloud.google.com/go: v0.116.0 → v0.53.0 | ||
| - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp: [v1.25.0 → v1.26.0](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/compare/detectors/gcp/v1.25.0...detectors/gcp/v1.26.0) | ||
| - github.com/Masterminds/semver/v3: [v3.3.0 → v3.4.0](https://github.com/Masterminds/semver/compare/v3.3.0...v3.4.0) | ||
| - github.com/census-instrumentation/opencensus-proto: [v0.4.1 → v0.2.1](https://github.com/census-instrumentation/opencensus-proto/compare/v0.4.1...v0.2.1) | ||
| - github.com/cncf/xds/go: [cff3c89 → 2f00578](https://github.com/cncf/xds/compare/cff3c89...2f00578) | ||
| - github.com/coredns/corefile-migration: [v1.0.27 → v1.0.29](https://github.com/coredns/corefile-migration/compare/v1.0.27...v1.0.29) | ||
| - github.com/emicklei/go-restful/v3: [v3.12.2 → v3.13.0](https://github.com/emicklei/go-restful/compare/v3.12.2...v3.13.0) | ||
| - github.com/fsnotify/fsnotify: [v1.8.0 → v1.9.0](https://github.com/fsnotify/fsnotify/compare/v1.8.0...v1.9.0) | ||
| - github.com/fxamacker/cbor/v2: [v2.7.0 → v2.9.0](https://github.com/fxamacker/cbor/compare/v2.7.0...v2.9.0) | ||
| - github.com/go-viper/mapstructure/v2: [v2.3.0 → v2.4.0](https://github.com/go-viper/mapstructure/compare/v2.3.0...v2.4.0) | ||
| - github.com/golang/groupcache: [41bb18b → 8c9f03a](https://github.com/golang/groupcache/compare/41bb18b...8c9f03a) | ||
| - github.com/google/cel-go: [v0.23.2 → v0.26.0](https://github.com/google/cel-go/compare/v0.23.2...v0.26.0) | ||
| - github.com/google/gnostic-models: [v0.6.9 → v0.7.0](https://github.com/google/gnostic-models/compare/v0.6.9...v0.7.0) | ||
| - github.com/google/pprof: [27863c8 → f64d9cf](https://github.com/google/pprof/compare/27863c8...f64d9cf) | ||
| - github.com/googleapis/gax-go/v2: [v2.14.1 → v2.0.5](https://github.com/googleapis/gax-go/compare/v2.14.1...v2.0.5) | ||
| - github.com/grpc-ecosystem/grpc-gateway/v2: [v2.24.0 → v2.26.3](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.24.0...v2.26.3) | ||
| - github.com/ianlancetaylor/demangle: [bd984b5 → f615e6b](https://github.com/ianlancetaylor/demangle/compare/bd984b5...f615e6b) | ||
| - github.com/jonboulle/clockwork: [v0.4.0 → v0.5.0](https://github.com/jonboulle/clockwork/compare/v0.4.0...v0.5.0) | ||
| - github.com/mattn/go-colorable: [v0.1.13 → v0.1.14](https://github.com/mattn/go-colorable/compare/v0.1.13...v0.1.14) | ||
| - github.com/mattn/go-runewidth: [v0.0.14 → v0.0.16](https://github.com/mattn/go-runewidth/compare/v0.0.14...v0.0.16) | ||
| - github.com/modern-go/reflect2: [v1.0.2 → 35a7c28](https://github.com/modern-go/reflect2/compare/v1.0.2...35a7c28) | ||
| - github.com/olekukonko/tablewriter: [v0.0.5 → v1.0.9](https://github.com/olekukonko/tablewriter/compare/v0.0.5...v1.0.9) | ||
| - github.com/onsi/ginkgo/v2: [v2.23.4 → v2.27.2](https://github.com/onsi/ginkgo/compare/v2.23.4...v2.27.2) | ||
| - github.com/onsi/gomega: [v1.38.0 → v1.38.2](https://github.com/onsi/gomega/compare/v1.38.0...v1.38.2) | ||
| - github.com/pelletier/go-toml/v2: [v2.2.3 → v2.2.4](https://github.com/pelletier/go-toml/compare/v2.2.3...v2.2.4) | ||
| - github.com/prometheus/client_model: [v0.6.1 → v0.6.2](https://github.com/prometheus/client_model/compare/v0.6.1...v0.6.2) | ||
| - github.com/rivo/uniseg: [v0.4.2 → v0.4.7](https://github.com/rivo/uniseg/compare/v0.4.2...v0.4.7) | ||
| - github.com/rogpeppe/go-internal: [v1.13.1 → v1.14.1](https://github.com/rogpeppe/go-internal/compare/v1.13.1...v1.14.1) | ||
| - github.com/sagikazarmark/locafero: [v0.7.0 → v0.11.0](https://github.com/sagikazarmark/locafero/compare/v0.7.0...v0.11.0) | ||
| - github.com/sourcegraph/conc: [v0.3.0 → 5f936ab](https://github.com/sourcegraph/conc/compare/v0.3.0...5f936ab) | ||
| - github.com/spf13/afero: [v1.12.0 → v1.15.0](https://github.com/spf13/afero/compare/v1.12.0...v1.15.0) | ||
| - github.com/spf13/cast: [v1.7.1 → v1.10.0](https://github.com/spf13/cast/compare/v1.7.1...v1.10.0) | ||
| - github.com/spf13/cobra: [v1.9.1 → v1.10.1](https://github.com/spf13/cobra/compare/v1.9.1...v1.10.1) | ||
| - github.com/spf13/pflag: [v1.0.7 → v1.0.10](https://github.com/spf13/pflag/compare/v1.0.7...v1.0.10) | ||
| - github.com/spf13/viper: [v1.20.1 → v1.21.0](https://github.com/spf13/viper/compare/v1.20.1...v1.21.0) | ||
| - github.com/stretchr/testify: [v1.10.0 → v1.11.1](https://github.com/stretchr/testify/compare/v1.10.0...v1.11.1) | ||
| - go.etcd.io/bbolt: v1.3.11 → v1.4.2 | ||
| - go.etcd.io/etcd/api/v3: v3.5.22 → v3.6.6 | ||
| - go.etcd.io/etcd/client/pkg/v3: v3.5.22 → v3.6.6 | ||
| - go.etcd.io/etcd/client/v3: v3.5.22 → v3.6.6 | ||
| - go.etcd.io/etcd/pkg/v3: v3.5.21 → v3.6.4 | ||
| - go.etcd.io/etcd/server/v3: v3.5.21 → v3.6.4 | ||
| - go.opencensus.io: v0.24.0 → v0.22.3 | ||
| - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc: v0.58.0 → v0.60.0 | ||
| - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc: v1.33.0 → v1.34.0 | ||
| - go.opentelemetry.io/otel/exporters/otlp/otlptrace: v1.33.0 → v1.34.0 | ||
| - go.opentelemetry.io/otel/metric: v1.34.0 → v1.35.0 | ||
| - go.opentelemetry.io/otel/trace: v1.34.0 → v1.35.0 | ||
| - go.opentelemetry.io/otel: v1.34.0 → v1.35.0 | ||
| - go.opentelemetry.io/proto/otlp: v1.4.0 → v1.5.0 | ||
| - go.uber.org/zap: v1.27.0 → v1.27.1 | ||
| - go.yaml.in/yaml/v3: v3.0.3 → v3.0.4 | ||
| - golang.org/x/crypto: v0.40.0 → v0.45.0 | ||
| - golang.org/x/mod: v0.25.0 → v0.29.0 | ||
| - golang.org/x/net: v0.42.0 → v0.47.0 | ||
| - golang.org/x/oauth2: v0.30.0 → v0.33.0 | ||
| - golang.org/x/sync: v0.16.0 → v0.18.0 | ||
| - golang.org/x/sys: v0.34.0 → v0.38.0 | ||
| - golang.org/x/telemetry: bda5523 → 078029d | ||
| - golang.org/x/term: v0.33.0 → v0.37.0 | ||
| - golang.org/x/text: v0.27.0 → v0.31.0 | ||
| - golang.org/x/tools: v0.34.0 → v0.38.0 | ||
| - google.golang.org/api: v0.215.0 → v0.17.0 | ||
| - google.golang.org/genproto/googleapis/api: 5f5ef82 → a0af3ef |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verify whether versions documented in CHANGELOG/v1.12.0.md match current go.mod.
modfile="$(fd '^go\.mod$' | head -n1)"
echo "Using go.mod: ${modfile:-<not found>}"
[ -n "${modfile:-}" ] || { echo "go.mod not found"; exit 1; }
echo
echo "=== Versions currently in go.mod (spot-check suspicious modules) ==="
rg -n '^\s*(cloud\.google\.com/go($|/storage)|google\.golang\.org/api|github\.com/googleapis/gax-go/v2|go\.opencensus\.io)\s' "$modfile"
echo
echo "=== Changelog entries for the same modules ==="
rg -n 'cloud\.google\.com/go/storage|cloud\.google\.com/go:|google\.golang\.org/api|github\.com/googleapis/gax-go/v2|go\.opencensus\.io' CHANGELOG/v1.12.0.md
echo
echo "If go.mod versions do not match the 'to' versions in changelog, regenerate/fix the dependency section."Repository: openshift/cluster-api
Length of output: 156
🏁 Script executed:
# First, check if the CHANGELOG file exists and read the suspicious lines
if [ -f CHANGELOG/v1.12.0.md ]; then
echo "=== CHANGELOG/v1.12.0.md exists. Reading lines 308-320 ==="
sed -n '308,320p' CHANGELOG/v1.12.0.md
echo
echo "=== Lines 360-373 ==="
sed -n '360,373p' CHANGELOG/v1.12.0.md
else
echo "CHANGELOG/v1.12.0.md not found"
ls -la CHANGELOG/ 2>/dev/null | head -20
fiRepository: openshift/cluster-api
Length of output: 2159
🏁 Script executed:
# Check the current go.mod and look for some of the suspicious modules
echo "=== Current go.mod modules (first 50 lines) ==="
head -50 go.mod
echo
echo "=== Searching for google.golang.org/api in go.mod ==="
rg 'google\.golang\.org/api' go.mod -A 0
echo
echo "=== Searching for cloud.google.com/go in go.mod ==="
rg 'cloud\.google\.com/go' go.mod -A 0 | head -10Repository: openshift/cluster-api
Length of output: 1961
Dependency transition table contains multiple downgrade entries that appear incorrect.
Several entries in the ### Changed section show version downgrades rather than upgrades, which is unusual for a release changelog:
- Line 309:
cloud.google.com/go/storage: v1.49.0 → v1.5.0(downgrade) - Line 310:
cloud.google.com/go: v0.116.0 → v0.53.0(downgrade) - Line 314:
github.com/census-instrumentation/opencensus-proto: [v0.4.1 → v0.2.1](downgrade) - Line 324:
github.com/googleapis/gax-go/v2: [v2.14.1 → v2.0.5](downgrade) - Line 336:
go.opencensus.io: v0.24.0 → v0.22.3(downgrade) - Line 372:
google.golang.org/api: v0.215.0 → v0.17.0(downgrade)
These entries would mislead users during upgrade planning and incident triage. Verify whether the version arrows are reversed or if these should be removed from the changelog entirely.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG/v1.12.0.md` around lines 308 - 373, The dependency transition table
in the "### Changed" section contains apparent downgrades (e.g.,
cloud.google.com/go/storage, cloud.google.com/go,
github.com/census-instrumentation/opencensus-proto,
github.com/googleapis/gax-go/v2, go.opencensus.io, google.golang.org/api);
verify the intended direction by checking the authoritative source
(go.mod/go.sum or the release tooling that produced the list), then correct each
line to show the proper "old → new" version or remove any incorrect entries;
update the specific entries for cloud.google.com/go/storage,
cloud.google.com/go, github.com/census-instrumentation/opencensus-proto,
github.com/googleapis/gax-go/v2, go.opencensus.io, and google.golang.org/api in
the changelog so the arrow direction and versions match the actual dependency
changes.
| - Devtools: Enable native histograms in Grafana / Prometheus (#13304) | ||
| - Devtools: Make kind image configurable via env var for make tilt-up (#13333) | ||
| - Devtools: Updated dev observability stack (#13044) | ||
| - e2e: 0 in e2e tests (#13429) |
There was a problem hiding this comment.
Fix malformed changelog entry.
This entry is incomplete and unclear: "0 in e2e tests" does not describe what change was made. Please verify the correct description for PR #13429 and update the entry accordingly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG/v1.13.0-beta.0.md` at line 135, The changelog line "e2e: 0 in e2e
tests" is malformed and must be replaced with a clear summary of PR `#13429`;
review PR `#13429` to determine the intended change and update the entry to a
concise, conventional changelog phrase (e.g., "e2e: fix flakey test X" or "e2e:
add test for Y"), keeping the same prefix/scope format used in other entries and
preserving bullet/list formatting so the entry is meaningful and consistent with
surrounding lines.
| - Devtools: Enable native histograms in Grafana / Prometheus (#13304) | ||
| - Devtools: Make kind image configurable via env var for make tilt-up (#13333) | ||
| - Devtools: Updated dev observability stack (#13044) | ||
| - e2e: 0 in e2e tests (#13429) |
There was a problem hiding this comment.
Fix malformed changelog entry.
This entry is incomplete and unclear: "0 in e2e tests" does not describe what change was made. Please verify the correct description for PR #13429 and update the entry accordingly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG/v1.13.0-beta.1.md` at line 207, The changelog contains a malformed
entry "e2e: 0 in e2e tests" that must be replaced with the actual description
from PR `#13429`; open PR `#13429` to confirm the intended change (what was
added/fixed in e2e tests) and update the entry in CHANGELOG/v1.13.0-beta.1.md to
a clear, concise sentence referencing the fix or feature (e.g., "e2e: <brief
description of change/fix> (`#13429`)"), ensuring the PR number remains included
for traceability.
| value: | ||
| description: |- | ||
| value is the taint value corresponding to the taint key. | ||
| It must be a valid label value of maximum size 63 characters. | ||
| maxLength: 63 | ||
| minLength: 1 | ||
| pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ |
There was a problem hiding this comment.
Allow empty taint values.
The pattern already permits "", and taint values are optional, but minLength: 1 rejects that valid case. This makes manifests with an explicit empty taint value fail validation for no functional reason.
Suggested schema change
value:
description: |-
value is the taint value corresponding to the taint key.
It must be a valid label value of maximum size 63 characters.
maxLength: 63
- minLength: 1
pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
type: string📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| value: | |
| description: |- | |
| value is the taint value corresponding to the taint key. | |
| It must be a valid label value of maximum size 63 characters. | |
| maxLength: 63 | |
| minLength: 1 | |
| pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ | |
| value: | |
| description: |- | |
| value is the taint value corresponding to the taint key. | |
| It must be a valid label value of maximum size 63 characters. | |
| maxLength: 63 | |
| pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@config/crd/bases/cluster.x-k8s.io_machinedeployments.yaml` around lines 594 -
600, The CRD schema for the taint "value" field currently has minLength: 1 which
rejects valid empty taint values even though the regex pattern allows the empty
string; update the "value" schema (the value property under the taint
definition) to allow empty values by removing the minLength constraint or
setting minLength: 0 so the pattern and length constraints are consistent and
manifests with an explicit empty taint value validate successfully.
|
@cloud-team-rebase-bot[bot]: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores