Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

OCPBUGS-87962: Add OCP-89593 test for boot image skew reset on reconcile-skip#6331

Open
ptalgulk01 wants to merge 1 commit into
openshift:mainopenshift/machine-config-operator:mainfrom
ptalgulk01:ppt/ocp-89593ptalgulk01/machine-config-operator:ppt/ocp-89593Copy head branch name to clipboard
Open

OCPBUGS-87962: Add OCP-89593 test for boot image skew reset on reconcile-skip#6331
ptalgulk01 wants to merge 1 commit into
openshift:mainopenshift/machine-config-operator:mainfrom
ptalgulk01:ppt/ocp-89593ptalgulk01/machine-config-operator:ppt/ocp-89593Copy head branch name to clipboard

Conversation

@ptalgulk01

@ptalgulk01 ptalgulk01 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Approach

  • Uses an OwnerReference on a MachineSet to trigger reconcileSkipped=true in syncMAPIMachineSet (line 150-152 of ms_helpers.go)
  • This check happens before the OS stream check, so it works on both rhel-9 (4.x) and rhel-10 (5.0) clusters
  • No SkipIfUnsupportedOSStreamLabel needed
  • defer removes the OwnerReference for cleanup

Manual verification

  • Tested on 4.23 (rhel-9) and 5.0 (rhel-10) clusters
  • Controller correctly reports "1 skipped" after adding OwnerReference, "Reconciled 3 of 3" after removing it
  • On non-upgraded clusters (install == current), automatic.ocpVersion stays the same since resetClusterBootImage writes the install version which equals the current version
  • On upgraded clusters, automatic.ocpVersion would reset to the install version (e.g., 5.0.0 → 4.22.0)

Question for dev

On a non-upgraded cluster the version doesn't visibly change because resetClusterBootImage() writes the same install version as updateClusterBootImage() writes from the configmap. Should the test assert a version difference (requiring an upgraded cluster), or is verifying the controller handles the skip path without degrading sufficient?

Summary by CodeRabbit

  • Tests
    • Added coverage to verify boot image skew reporting remains accurate when MachineSet reconciliation is skipped.
    • Confirmed the reported automatic OpenShift version is preserved during the skipped reconciliation and restored correctly after reconciliation resumes.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Jul 23, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@ptalgulk01: This pull request references Jira Issue OCPBUGS-87962, which is invalid:

  • expected the bug to be in one of the following states: NEW, ASSIGNED, POST, but it is Verified instead

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Summary

Approach

  • Uses an OwnerReference on a MachineSet to trigger reconcileSkipped=true in syncMAPIMachineSet (line 150-152 of ms_helpers.go)
  • This check happens before the OS stream check, so it works on both rhel-9 (4.x) and rhel-10 (5.0) clusters
  • No SkipIfUnsupportedOSStreamLabel needed
  • defer removes the OwnerReference for cleanup

Manual verification

  • Tested on 4.23 (rhel-9) and 5.0 (rhel-10) clusters
  • Controller correctly reports "1 skipped" after adding OwnerReference, "Reconciled 3 of 3" after removing it
  • On non-upgraded clusters (install == current), automatic.ocpVersion stays the same since resetClusterBootImage writes the install version which equals the current version
  • On upgraded clusters, automatic.ocpVersion would reset to the install version (e.g., 5.0.0 → 4.22.0)

Question for dev

On a non-upgraded cluster the version doesn't visibly change because resetClusterBootImage() writes the same install version as updateClusterBootImage() writes from the configmap. Should the test assert a version difference (requiring an upgraded cluster), or is verifying the controller handles the skip path without degrading sufficient?

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Walkthrough

Adds an extended-privileged Ginkgo test that validates automatic.ocpVersion while MachineSet reconciliation is skipped and after the owner reference is removed. It also imports fmt for the MachineSet patch construction.

Changes

Boot Image Skew Validation

Layer / File(s) Summary
MachineSet reconcile-skip validation
test/extended-priv/mco_bootimages_skew.go
Enables automatic skew enforcement, captures automatic.ocpVersion, patches a MachineSet with an Infrastructure owner reference, verifies the version during the skipped reconciliation, then removes the reference and confirms restoration after reconciliation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: djoshy

🚥 Pre-merge checks | ✅ 13 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Test Structure And Quality ⚠️ Warning The test’s cleanup is brittle and non-idempotent, and it has bare patch expectations plus an Eventually that swallows Get errors. Restore ownerReferences idempotently (or in AfterEach), use Eventually(func() (string,error)), and add failure messages to every Expect/patch.
Microshift Test Compatibility ⚠️ Warning New Ginkgo It uses MachineSet and config.openshift.io Infrastructure APIs, with no [Skipped:MicroShift], apigroup tag, or IsMicroShiftCluster guard. Add an [apigroup:machine.openshift.io] or [Skipped:MicroShift] label, or guard with exutil.IsMicroShiftCluster() and g.Skip() for this test.
✅ Passed checks (13 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding an OCP-89593 boot image skew test around reconcile-skip behavior.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The new Ginkgo title is a static, deterministic string; it contains no generated names, dates, UUIDs, or other run-to-run values.
Single Node Openshift (Sno) Test Compatibility ✅ Passed PASS: The suite's BeforeEach calls exutil.SkipOnSingleNodeTopology(oc), so the new It is skipped on SNO; no additional multi-node assumptions were found.
Topology-Aware Scheduling Compatibility ✅ Passed Only an extended-priv test changed; it patches a MachineSet ownerRef and boot-image status, with no manifests, replicas, affinities, nodeSelectors, or spread constraints added.
Ote Binary Stdout Contract ✅ Passed The new fmt usage is only fmt.Sprintf inside an It block; no process-level stdout writers (fmt.Print*, klog, log.SetOutput, RunSpecs setup) were added.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The added Ginkgo test only patches cluster objects and reads cluster status; it contains no IPv4 literals, IP-family assumptions, or external/public network calls.
No-Weak-Crypto ✅ Passed The only changed file is a Ginkgo test, and the diff/search found no MD5/SHA1/DES/RC4/3DES/Blowfish/ECB, custom crypto, or secret comparisons.
Container-Privileges ✅ Passed Only test/extended-priv/mco_bootimages_skew.go changed; it contains no privileged/host* security-context settings or manifest updates.
No-Sensitive-Data-In-Logs ✅ Passed The new logs only print an OCP version and MachineSet name; no passwords, tokens, API keys, PII, or session IDs are logged in the added test.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@openshift-ci
openshift-ci Bot requested review from djoshy and sergiordlr July 23, 2026 10:13
@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ptalgulk01

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 23, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 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 `@test/extended-priv/mco_bootimages_skew.go`:
- Around line 342-348: Update the post-patch verification around
WaitForBootImageControllerComplete to poll Get(automaticOCPVersionPath) with the
same Eventually-based strategy used by the restoration check below. Preserve the
existing error and non-empty assertions, logging, and controller wait while
allowing resetClusterBootImage status updates to settle asynchronously.
- Around line 313-348: Strengthen the assertions in the test flow around
machineConfiguration.Get and resetClusterBootImage: after reconcile-skip, verify
patchedOCPVersion equals the cluster install version from the ClusterVersion
desired version, rather than only checking it is non-empty. Preserve the
existing restoration checks and use the cluster-version retrieval mechanism
already established in the test or nearby helpers.
- Around line 353-357: Update the Eventually polling closure around
machineConfiguration.Get to return both its value and error directly instead of
discarding the error. Preserve the existing automatic.ocpVersion path and
equality assertion so Eventually retries on non-nil errors and validates the
restored version.
- Around line 335-339: Make the deferred cleanup around machineSetUnderTest
idempotent: before removing /metadata/ownerReferences, ensure the owner
reference exists or tolerate an already-removed path, while preserving the
existing restoration and MachineForBootImageControllerComplete wait behavior.
🪄 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: Pro Plus

Run ID: 1a0cf095-3672-4c2c-93c4-fa2f19bb9e7e

📥 Commits

Reviewing files that changed from the base of the PR and between 6197659 and 09e4930.

📒 Files selected for processing (1)
  • test/extended-priv/mco_bootimages_skew.go

Comment on lines +313 to +348
exutil.By("Get the automatic.ocpVersion before patch")
originalOCPVersion, err := machineConfiguration.Get(automaticOCPVersionPath)
o.Expect(err).NotTo(o.HaveOccurred(), "Error getting automatic.ocpVersion from %s", machineConfiguration)
o.Expect(originalOCPVersion).NotTo(o.BeEmpty(), "automatic.ocpVersion should not be empty in Automatic mode")
logger.Infof("automatic.ocpVersion before patch: %s", originalOCPVersion)
logger.Infof("OK!\n")

exutil.By("Pick a MachineSet and add an OwnerReference to trigger reconcile-skip")
machineSetUnderTest := NewMachineSetList(oc.AsAdmin(), MachineAPINamespace).GetAllOrFail()[0]
logger.Infof("MachineSet under test: %s", machineSetUnderTest.name)

infraUID, err := oc.AsAdmin().WithoutNamespace().Run("get").Args(
"infrastructure", "cluster", "-o", "jsonpath={.metadata.uid}",
).Output()
o.Expect(err).NotTo(o.HaveOccurred(), "Failed to get Infrastructure UID")

ownerRefPatch := fmt.Sprintf(
`{"metadata":{"ownerReferences":[{"apiVersion":"config.openshift.io/v1","kind":"Infrastructure","name":"cluster","uid":"%s"}]}}`,
infraUID)
o.Expect(machineSetUnderTest.Patch("merge", ownerRefPatch)).To(o.Succeed())
logger.Infof("Added OwnerReference to MachineSet %s to trigger reconcile-skip", machineSetUnderTest.name)

defer func() {
exutil.By("Restoring MachineSet by removing OwnerReference")
o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
machineConfiguration.WaitForBootImageControllerComplete()
}()
logger.Infof("OK!\n")

exutil.By("Wait for boot image controller to process and get automatic.ocpVersion after patch")
machineConfiguration.WaitForBootImageControllerComplete()
patchedOCPVersion, err := machineConfiguration.Get(automaticOCPVersionPath)
o.Expect(err).NotTo(o.HaveOccurred(), "Error getting automatic.ocpVersion after patch")
o.Expect(patchedOCPVersion).NotTo(o.BeEmpty(), "automatic.ocpVersion should not be empty after reconcile-skip")
logger.Infof("automatic.ocpVersion after patch: %s", patchedOCPVersion)
logger.Infof("OK!\n")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Assertion only checks non-emptiness, not that resetClusterBootImage actually fired.

Per the controller contract (resetClusterBootImage, pkg/controller/bootimage/boot_image_controller.go:652-685), reconcile-skip should overwrite automatic.ocpVersion with the cluster's install version, not just "any non-empty string". If originalOCPVersion is already non-empty (the typical case) and this reset logic silently regresses, patchedOCPVersion would still be non-empty (because it never changed), and the final restoration check at lines 353-357 would then also trivially pass since the value never diverged from originalOCPVersion. The test could pass while the exact fix it's meant to validate (OCPBUGS-87962 / resetClusterBootImage) is broken.

Consider asserting that patchedOCPVersion equals the cluster's install version (e.g., via oc get clusterversion version -o jsonpath='{.status.desired.version}' or similar), or at minimum that it differs from originalOCPVersion when they're expected to diverge.

🤖 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 `@test/extended-priv/mco_bootimages_skew.go` around lines 313 - 348, Strengthen
the assertions in the test flow around machineConfiguration.Get and
resetClusterBootImage: after reconcile-skip, verify patchedOCPVersion equals the
cluster install version from the ClusterVersion desired version, rather than
only checking it is non-empty. Preserve the existing restoration checks and use
the cluster-version retrieval mechanism already established in the test or
nearby helpers.

Comment on lines +335 to +339
defer func() {
exutil.By("Restoring MachineSet by removing OwnerReference")
o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
machineConfiguration.WaitForBootImageControllerComplete()
}()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does Kubernetes API server reject a JSON Patch (RFC 6902) "remove" operation when the target path no longer exists?

💡 Result:

Yes, the Kubernetes API server rejects a JSON Patch (RFC 6902) remove operation if the target path does not exist [1][2]. According to the RFC 6902 specification, the target location for a "remove" operation must exist for the operation to be successful [3][4]. Because Kubernetes implements JSON Patch in accordance with this RFC, attempting to remove a non-existent path will result in a failure [1][5][2]. When such an error occurs, the API server rejects the request, typically returning an error (often a 422 Unprocessable Entity status code) [1]. This behavior is consistent with the standard's requirement that if any operation in a JSON Patch sequence fails, the entire patch is aborted [6][4]. If you need to avoid this error, you must ensure the path exists before attempting the removal, or handle the error on the client side [1][2]. Note that some specific Kubernetes-related tools or libraries may have their own wrapper implementations or configuration options (e.g., in admission controllers or specialized controllers) that might handle these operations differently, but the core Kubernetes API server enforces the strict RFC 6902 requirement [7][1][2].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Files matching target:\n'
fd -a 'mco_bootimages_skew\.go$' . || true

printf '\nRelevant lines:\n'
file="$(fd 'mco_bootimages_skew\.go$' . | head -n1)"
if [ -n "${file:-}" ]; then
  sed -n '320,365p' "$file" | nl -ba -v320
fi

printf '\nSearch for ownerReferences removal in test and ms helpers:\n'
rg -n 'ownerReferences|OwnerReference|reconcileSkipped|Automatic\.OCPVersion|ResetClusterBootImage|waitForBootImageControllerComplete|WaitForBootImageControllerComplete' test/extended-priv/mco_bootimages_skew.go pkg test || true

Repository: openshift/machine-config-operator

Length of output: 313


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file="$(fd 'mco_bootimages_skew\.go$' . | head -n1)"
echo "FILE=$file"

echo "== lines 320-365 =="
sed -n '320,365p' "$file" | awk '{printf "%7d\t%s\n", NR+319, $0}'

echo "== relevant searches =="
rg -n 'ownerReferences|OwnerReference|reconcileSkipped|Automatic\.OCPVersion|ResetClusterBootImage|waitForBootImageControllerComplete|WaitForBootImageControllerComplete' test/extended-priv/mco_bootimages_skew.go pkg || true

Repository: openshift/machine-config-operator

Length of output: 13527


Make the owner reference cleanup idempotent.

Line 351 removes /metadata/ownerReferences with a JSON patch, and the defer cleanup repeats the same removal. A JSON Patch remove on a path that no longer exists fails, so the deferred cleanup can make an otherwise passing spec fail.

🐛 Proposed fix: make cleanup idempotent
+		ownerRefRemoved := false
 		defer func() {
+			if ownerRefRemoved {
+				return
+			}
 			exutil.By("Restoring MachineSet by removing OwnerReference")
 			o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
 			machineConfiguration.WaitForBootImageControllerComplete()
 		}()
...
 		exutil.By("Remove OwnerReference and verify automatic.ocpVersion is restored")
 		o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
+		ownerRefRemoved = true
 		machineConfiguration.WaitForBootImageControllerComplete()
📝 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.

Suggested change
defer func() {
exutil.By("Restoring MachineSet by removing OwnerReference")
o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
machineConfiguration.WaitForBootImageControllerComplete()
}()
ownerRefRemoved := false
defer func() {
if ownerRefRemoved {
return
}
exutil.By("Restoring MachineSet by removing OwnerReference")
o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
machineConfiguration.WaitForBootImageControllerComplete()
}()
...
exutil.By("Remove OwnerReference and verify automatic.ocpVersion is restored")
o.Expect(machineSetUnderTest.Patch("json", `[{"op":"remove","path":"/metadata/ownerReferences"}]`)).To(o.Succeed())
ownerRefRemoved = true
machineConfiguration.WaitForBootImageControllerComplete()
🤖 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 `@test/extended-priv/mco_bootimages_skew.go` around lines 335 - 339, Make the
deferred cleanup around machineSetUnderTest idempotent: before removing
/metadata/ownerReferences, ensure the owner reference exists or tolerate an
already-removed path, while preserving the existing restoration and
MachineForBootImageControllerComplete wait behavior.

Comment on lines +342 to +348
exutil.By("Wait for boot image controller to process and get automatic.ocpVersion after patch")
machineConfiguration.WaitForBootImageControllerComplete()
patchedOCPVersion, err := machineConfiguration.Get(automaticOCPVersionPath)
o.Expect(err).NotTo(o.HaveOccurred(), "Error getting automatic.ocpVersion after patch")
o.Expect(patchedOCPVersion).NotTo(o.BeEmpty(), "automatic.ocpVersion should not be empty after reconcile-skip")
logger.Infof("automatic.ocpVersion after patch: %s", patchedOCPVersion)
logger.Infof("OK!\n")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Inconsistent wait strategy vs. the restoration check below.

This assertion uses a single synchronous o.Expect right after WaitForBootImageControllerComplete(), whereas the restoration check at lines 353-357 wraps the identical Get call in o.Eventually. Given resetClusterBootImage's status update can lag independently of the "controller complete" signal, this asymmetry risks flakiness here that the later check was clearly written to guard against.

🤖 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 `@test/extended-priv/mco_bootimages_skew.go` around lines 342 - 348, Update the
post-patch verification around WaitForBootImageControllerComplete to poll
Get(automaticOCPVersionPath) with the same Eventually-based strategy used by the
restoration check below. Preserve the existing error and non-empty assertions,
logging, and controller wait while allowing resetClusterBootImage status updates
to settle asynchronously.

Comment on lines +353 to +357
o.Eventually(func() string {
v, _ := machineConfiguration.Get(automaticOCPVersionPath)
return v
}, "2m", "10s").Should(o.Equal(originalOCPVersion),
"automatic.ocpVersion should be restored to %s after removing OwnerReference", originalOCPVersion)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Error from Get is silently discarded.

v, _ := machineConfiguration.Get(...) drops the error inside the polling closure. Gomega's Eventually supports functions returning (value, error) directly and will retry automatically on a non-nil error, which is more idiomatic than swallowing it here.

♻️ Suggested simplification
-		o.Eventually(func() string {
-			v, _ := machineConfiguration.Get(automaticOCPVersionPath)
-			return v
-		}, "2m", "10s").Should(o.Equal(originalOCPVersion),
+		o.Eventually(func() (string, error) {
+			return machineConfiguration.Get(automaticOCPVersionPath)
+		}, "2m", "10s").Should(o.Equal(originalOCPVersion),
 			"automatic.ocpVersion should be restored to %s after removing OwnerReference", originalOCPVersion)
As per path instructions, "Never ignore error returns".
📝 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.

Suggested change
o.Eventually(func() string {
v, _ := machineConfiguration.Get(automaticOCPVersionPath)
return v
}, "2m", "10s").Should(o.Equal(originalOCPVersion),
"automatic.ocpVersion should be restored to %s after removing OwnerReference", originalOCPVersion)
o.Eventually(func() (string, error) {
return machineConfiguration.Get(automaticOCPVersionPath)
}, "2m", "10s").Should(o.Equal(originalOCPVersion),
"automatic.ocpVersion should be restored to %s after removing OwnerReference", originalOCPVersion)
🤖 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 `@test/extended-priv/mco_bootimages_skew.go` around lines 353 - 357, Update the
Eventually polling closure around machineConfiguration.Get to return both its
value and error directly instead of discarding the error. Preserve the existing
automatic.ocpVersion path and equality assertion so Eventually retries on
non-nil errors and validates the restored version.

Source: Path instructions

@openshift-ci

openshift-ci Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@ptalgulk01: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/unit 09e4930 link true /test unit

Full PR test history. Your PR dashboard.

Details

Instructions 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.