Skip to content

MCO-2275: Part2 Migrate MCO OCB - #6340

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
ptalgulk01:migrate-mco-ocb-part2
Aug 5, 2026
Merged

MCO-2275: Part2 Migrate MCO OCB#6340
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
ptalgulk01:migrate-mco-ocb-part2

Conversation

@ptalgulk01

@ptalgulk01 ptalgulk01 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

MCO-2275: Migrate OCB longduration test cases (Part 2)

Completes the OCB test migration from openshift-tests-private to machine-config-operator. This is Part 2, following PR #6080 which migrated 11 OCB test cases and all shared helpers/infrastructure.

This PR adds the remaining 6 longduration OCB test cases:

  • 83137: OCB use OutputImage with CurrentImagePullSecret
  • 79137: OCB respect maxUnavailable setting for Workers
  • 83139: OCB build images in many MCPs at the same time
  • 83755: OCL no new image applied on node after ssh/password/file MC
  • 85843: Internal Registry new nodes boot directly with OCL image
  • 82536: Internal Registry image removed triggers rebuild

Tests 83755 and 82536 are excluded via g.Label("Exclude: ...") until OCPBUGS-85094 is resolved. Both tests fail consistently across 4.23 and 5.0 on AWS shards due to an upstream bug, not a test migration issue.

Also includes:

  • Improved MCP wait-time estimation for proxy environments
  • Increased MOSC build validation timeout for concurrent builds
  • Pod readiness polling that excludes transient Job pods
  • Broader usbguard permission error handling

Summary by CodeRabbit

  • Bug Fixes

    • Improved estimated wait times for environments using an HTTP proxy, while preserving existing cluster-specific adjustments.
  • Tests

    • Expanded long-duration validation for image updates, configuration ordering, concurrent builds, node boot behavior, image deletion, and rebuild scenarios.
    • Added coverage for workflows where image updates are intentionally skipped.

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The PR adds an OCB long-duration E2E suite with image, node-boot, and MOSB rebuild checks. It also increases MCP wait durations by 30% for HTTP-proxy clusters. A duplicate package declaration causes compilation errors.

Changes

OCB validation

Layer / File(s) Summary
Proxy-aware MCP wait duration
test/extended-priv/machineconfigpool.go
The wait-duration calculation uses a default multiplier of 1.0 and a 1.3 multiplier when status.httpProxy is set.
OCB long-duration test flows
test/extended-priv/mco_ocb_longduration.go
The suite tests image and pull-secret usage, MCP update ordering, concurrent builds, no-image updates, direct OCL node boots, and replacement-node validation.
Image deletion and MOSB rebuild checks
test/extended-priv/mco_ocb_longduration.go
Helpers delete internal-registry and Quay images. Tests verify MOSB-1 rebuild behavior, MCP updates, and suppression of additional rebuilds. The file also contains a duplicate package extended declaration.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: proietfb, sergiordlr

Sequence Diagram(s)

sequenceDiagram
  participant OCBLongDurationSuite
  participant MachineOSConfig
  participant MachineConfigPool
  participant MachineSets
  participant NewNodes

  OCBLongDurationSuite->>MachineOSConfig: Configure OCB image and build settings
  MachineOSConfig->>MachineConfigPool: Apply machine configuration
  OCBLongDurationSuite->>MachineSets: Scale existing and duplicated MachineSets
  MachineSets->>NewNodes: Create replacement nodes
  OCBLongDurationSuite->>NewNodes: Validate expected OCL image
  OCBLongDurationSuite->>MachineConfigPool: Wait for MCP completion
Loading

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 4 warnings)

Check name Status Explanation Resolution
No-Sensitive-Data-In-Logs ❌ Error Added logs expose cluster-derived data: OCL/image pull specs include image-registry.openshift-image-registry.svc:5000, and new logs print node hostnames and command output. Redact image pull specs, node names, and stdout/stderr from logs; log only stable resource identifiers or sanitized summaries.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ⚠️ Warning The added suite leaves a second package/import block and six duplicate helper declarations, and several new scaling assertions lack failure messages. Merge the new tests into one package, remove duplicate helpers, and add diagnostic messages to every new Expect assertion.
Microshift Test Compatibility ⚠️ Warning The six new It() cases use machineconfiguration.openshift.io resources, and test 85843 scales MachineSets; the serial suite has no MicroShift skip, apigroup tag, or IsMicroShiftCluster guard. Add [apigroup:machineconfiguration.openshift.io] (and machine.openshift.io for scaling), [Skipped:MicroShift], or an IsMicroShiftCluster/g.Skip guard. Otherwise run the serial MicroShift payload job.
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning Test 83755 calls CreateMachineOSConfigUsingExternalOrInternalRegistry, which falls back to public quay.io, but its name lacks [Skipped:Disconnected]. No IPv4 literals were found. Add [Skipped:Disconnected] to test 83755, or skip it when the internal registry is unavailable; run the IPv6 disconnected payload job to verify compatibility.
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the MCO-2275 migration of the OCB tests, which is the primary change in the pull request.
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 All six added Ginkgo test titles are quoted static literals; searches found no formatting, concatenation, node, namespace, timestamp, IP, or random values in titles.
Single Node Openshift (Sno) Test Compatibility ✅ Passed Tests 79137, 83139, 85843, and 82536 call SkipIfCompactOrSNO; tests 83137 and 83755 use one compatible MCP node and make no distinct-host assumption.
Topology-Aware Scheduling Compatibility ✅ Passed The PR changes only extended test code and MCP wait-time estimation; it adds no deployment/controller manifests or pod affinity, spread, selector, toleration, replica, or PDB constraints.
Ote Binary Stdout Contract ✅ Passed No process-level stdout writes found. main() has no print calls; suite initializers only register tests and create CLI objects; added logger calls route through logext to GinkgoWriter.
No-Weak-Crypto ✅ Passed The PR adds no MD5, SHA-1, DES, RC4, Blowfish, ECB, custom crypto, or secret comparisons; its SSH test reuses an unchanged RSA-2048 helper.
Container-Privileges ✅ Passed The PR changes only Go files. No Kubernetes manifests changed, and scans found no privileged, host namespace, SYS_ADMIN, allowPrivilegeEscalation, or root settings.
✨ 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.

@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch from 57785af to 2b55131 Compare July 24, 2026 14:04
@openshift-ci
openshift-ci Bot requested review from proietfb and sergiordlr July 24, 2026 14:05
@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 24, 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: 1

🧹 Nitpick comments (2)
test/extended-priv/mco_ocb_longduration.go (1)

450-450: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Rename the unused removeQuayImageUsingSkepo helper or wire it into the test path.

removeQuayImageUsingSkepo is defined in test/extended-priv/mco_ocb_longduration.go, but there is no call to it in the Go codebase; only removeImageStream is used. Remove the dead helper, or if it is intended to run Skopeo, rename the name from SkepoSkopeo and wire it in.

🤖 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_ocb_longduration.go` at line 450, Remove the unused
removeQuayImageUsingSkepo helper, or, if it is required for the test flow,
rename it to removeQuayImageUsingSkopeo and add a call from the appropriate test
path. Ensure the final code has no dead helper and that only the intended
image-removal implementation is used.
test/extended-priv/util/pods.go (1)

205-205: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Use the canonical Job label selector for consistency.

job-name is still added by the Kubernetes Job controller for backward compatibility, so this selector still excludes Job pods, but the sibling readiness gate uses !batch.kubernetes.io/job-name. Align the selector with the canonical form to keep the test helpers consistent.

🤖 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/util/pods.go` at line 205, Update the pod selector in the
Run call to exclude Job pods using the canonical batch.kubernetes.io/job-name
label, matching the selector used by the sibling readiness gate while preserving
the existing namespace and template behavior.
🤖 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/machineconfigpool.go`:
- Line 588: Update the node-diagnostic command in the surrounding
polling/error-handling flow to capture the error returned by CLI.Execute() for
mcp.oc.Run("get").Args("nodes").Execute(). Preserve that error in the test
context or include it in the final assertion so failures from oc get nodes are
surfaced alongside the polling error.

---

Nitpick comments:
In `@test/extended-priv/mco_ocb_longduration.go`:
- Line 450: Remove the unused removeQuayImageUsingSkepo helper, or, if it is
required for the test flow, rename it to removeQuayImageUsingSkopeo and add a
call from the appropriate test path. Ensure the final code has no dead helper
and that only the intended image-removal implementation is used.

In `@test/extended-priv/util/pods.go`:
- Line 205: Update the pod selector in the Run call to exclude Job pods using
the canonical batch.kubernetes.io/job-name label, matching the selector used by
the sibling readiness gate while preserving the existing namespace and template
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: 1e62a24b-94f0-4d4e-bc28-b8da47079c63

📥 Commits

Reviewing files that changed from the base of the PR and between 76953dd and 2b55131.

📒 Files selected for processing (5)
  • test/extended-priv/machineconfigpool.go
  • test/extended-priv/machineosconfig.go
  • test/extended-priv/mco_ocb.go
  • test/extended-priv/mco_ocb_longduration.go
  • test/extended-priv/util/pods.go

}
if totalUpdating > maxUnavailable {
// print nodes for debug
mcp.oc.Run("get").Args("nodes").Execute()

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C2 --type go 'func\s*\([^)]*\)\s*Execute\s*\(' .
rg -n -C2 --type go '\.Run\("get"\)\.Args\("nodes"\)\.Execute\(\)' test/extended-priv/machineconfigpool.go

Repository: openshift/machine-config-operator

Length of output: 8796


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "## client.go around CLI Execute"
sed -n '820,885p' test/extended-priv/util/client.go

echo
echo "## machineconfigpool.go around diagnostic call"
sed -n '560,605p' test/extended-priv/machineconfigpool.go

echo
echo "## same repository calls to CLI Execute without error check"
rg -n --type go '\.+Execute\(\)' test/extended-priv -g '*.go'

Repository: openshift/machine-config-operator

Length of output: 10952


Handle the diagnostic command failure.

CLI.Execute() returns the underlying oc get error, but line 588 discards it and the test still asserts the polling error. Capture the error, keep it in the context or prepend it to the final assertion, so node-dump failures surface useful diagnostics instead of being absorbed.

🤖 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/machineconfigpool.go` at line 588, Update the
node-diagnostic command in the surrounding polling/error-handling flow to
capture the error returned by CLI.Execute() for
mcp.oc.Run("get").Args("nodes").Execute(). Preserve that error in the test
context or include it in the final assertion so failures from oc get nodes are
surfaced alongside the polling error.

Source: Path instructions

@ptalgulk01

ptalgulk01 commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

● 4.23 Jobs (image: ci-ln-dj702mt/release:latest)

5.0 Jobs (image: ci-ln-ydkgvmt/release:latest)

● PR #6340 — Test Case Results (6 tests × 10 jobs)

Legend:  ✅ = PASS    ❌ = FAIL    ─ = Not in this shard

                                                    │      4.23                    │      5.0
 #   OCP ID   Description                           │ a1   a2   a3   v1   v2      │ a1   a2   a3   v1   v2
──────────────────────────────────────────────────────┼──────────────────────────────┼──────────────────────────
 1   83137    OCB OutputImage CurrentImagePullSecret  │ ✅    ─    ─   ✅    ─      │ ✅    ─    ─   ✅    ─
 2   79137    OCB respect maxUnavailable Workers      │  ─   ✅    ─   ✅    ─      │  ─   ✅    ─   ✅    ─
 3   83139    OCB build images in many MCPs           │  ─   ✅    ─   ✅    ─      │  ─   ✅    ─   ✅    ─
 4   83755    OCL no new image after MC changes       │  ─   ❌    ─    ─   ✅      │  ─   ❌    ─    ─   ✅
 5   85843    IntReg new nodes boot with OCL image    │  ─   ✅    ─   ❌    ─      │  ─   ✅    ─   ✅    ─
 6   82536    IntReg image removed triggers rebuild   │ ❌    ─    ─    ─   ✅      │ ❌    ─    ─    ─   ✅
──────────────────────────────────────────────────────┴──────────────────────────────┴──────────────────────────

@ptalgulk01

Copy link
Copy Markdown
Contributor Author

/test unit

@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch from 2b55131 to 1f393eb Compare July 27, 2026 06:25
@ptalgulk01

ptalgulk01 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor Author

4.23 Jobs (image: ci-ln-wqm0vh2/release:latest)

5.0 Jobs (image: ci-ln-9j50f32/release:latest)

  #6340 — OCB Test Results (6 tests × 10 jobs)

  ┌─────┬────────┬────────────────────────────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬────────┬────────┬────────┬────────┐
  │  #  │ OCP ID │              Description               │ 4.23 a1 │ 4.23 a2 │ 4.23 a3 │ 4.23 v1 │ 4.23 v2 │ 5.0 a1 │ 5.0 a2 │ 5.0 a3 │ 5.0 v1 │ 5.0 v2 │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 1   │ 83137  │ OCB OutputImage CurrentImagePullSecret │ ✅      │ ─       │ ─       │ ✅      │ ─       │ ✅     │ ─      │ ─      │ ∅      │ ⏭️      │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 2   │ 79137  │ OCB respect maxUnavailable Workers     │ ─       │ ✅      │ ─       │ ✅      │ ─       │ ─      │ ✅     │ ─      │ ∅      │ ⏭️      │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 3   │ 83139  │ OCB build images in many MCPs          │ ─       │ ✅      │ ─       │ ✅      │ ─       │ ─      │ ✅     │ ─      │ ∅      │ ⏭️      │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 4   │ 83755  │ OCL no new image after MC changes      │ ─       │ ❌      │ ─       │ ─       │ ✅      │ ─      │ ❌     │ ─      │ ∅      │ ⏭️      │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 5   │ 85843  │ IntReg new nodes boot with OCL image   │ ─       │ ✅      │ ─       │ ✅      │ ─       │ ─      │ ✅     │ ─      │ ∅      │ ⏭️      │
  ├─────┼────────┼────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼────────┼────────┼────────┤
  │ 6   │ 82536  │ IntReg image removed triggers rebuild  │ ❌      │ ─       │ ─       │ ─       │ ✅      │ ❌     │ ─      │ ─      │ ∅      │ ⏭️      │
  └─────┴────────┴────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴────────┴────────┴────────┴────────┘

  Legend: ✅ PASS · ❌ FAIL · ⏭️  SKIP · ─ Not in shard · ∅ Infra failure

The TC 83755 and TC 82536 is failing because of bug https://redhat.atlassian.net/browse/OCPBUGS-85094 hence, excluding it.

@ptalgulk01 ptalgulk01 changed the title Migrate mco ocb part2 MCO-2275: Part2 Migrate MCO OCB Jul 28, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 28, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

@ptalgulk01: This pull request references MCO-2275 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Part 2

Part 2 (migrate-mco-ocb-part2 branch — uncommitted): 6 tests needing verification (83137, 79137, 83139, 83755, 85843, 82536) + all shared helpers/infrastructure. Build passes.

Summary by CodeRabbit

  • New Features
  • Added helpers to manage and read rendered image push settings and detect internal registry usage.
  • Added pod readiness polling that excludes transient Job pods.
  • Introduced a new long-duration, serial disruptive E2E suite covering OCB workflows, image rebuilds, node boot behavior, and MCP update ordering.
  • Bug Fixes
  • Improved MachineConfigPool wait-time estimation for clusters using HTTP proxying.
  • Increased MOSC build validation timeout to better handle longer concurrent builds.
  • Broadened expected usbguard permission error handling during validation.

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.

@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch 2 times, most recently from 8c3aa0e to 61fc8ec Compare July 28, 2026 06:36
@isabella-janssen

Copy link
Copy Markdown
Member

/hold

Holding to allow the Kube rebase to land in #6321. Please ensure this will not cause merge conflicts for the Kube rebase before unholding this PR.

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 28, 2026
@isabella-janssen

Copy link
Copy Markdown
Member

/unhold

Kube rebase landed

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 29, 2026
@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch from 61fc8ec to 76dc665 Compare August 3, 2026 08:27

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
test/extended-priv/mco_ocb_longduration.go (1)

583-596: 🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Duplicate package declaration and duplicate function definitions break the build.

The file contains the full content twice. A second package extended clause and import block start at line 583, and the entire body repeats through line 1463, including a second var _ = g.Describe(...) block and byte-identical redefinitions of checkNewBuildIsTriggered, getNewNodeRebootValueForOCL, ValidateNewNodesBootDirectlyWithOCLImage, removeImageStream, removeQuayImageUsingSkepo, and verifyMOSBRebuildAfterImageDeletion.

A Go source file cannot contain two package clauses, and a package cannot declare the same function name twice. This is a compile-breaking defect, not a style issue.

The PR description states it migrates six long-duration test cases, matching only the first Describe block (83137, 79137, 83139, 83755, 85843, 82536). The second block's eleven test cases (79172, 83136, 78001, 77498, 77497, 77576, 77977, 78196, 88801, 85980, 87176) and the duplicated helpers must be merged into a single package clause, a single import block (retaining sync, which the concurrent-build test needs), and a single Describe body containing all It blocks, with each helper function defined exactly once.

🤖 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_ocb_longduration.go` around lines 583 - 596, Remove
the duplicated second package/import block and repeated content in the file,
retaining one package clause and one merged import block including sync.
Consolidate both g.Describe bodies so all It cases remain, and keep exactly one
definition each of checkNewBuildIsTriggered, getNewNodeRebootValueForOCL,
ValidateNewNodesBootDirectlyWithOCLImage, removeImageStream,
removeQuayImageUsingSkepo, and verifyMOSBRebuildAfterImageDeletion.
🤖 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/machineconfigpool.go`:
- Line 279: Update the proxy detection logic used by estimateWaitDuration to
consider both status.httpProxy and status.httpsProxy, applying the 1.3
proxyModifier when either is configured. When the proxy lookup returns proxyErr,
log the error and adjust behavior consistently with the adjacent SNO check
instead of silently retaining the default modifier.

In `@test/extended-priv/mco_ocb_longduration.go`:
- Around line 354-360: Replace the existingMS assignment from msl[0] with
GetScalableMachineSet(oc.AsAdmin()), preserving error handling and the
subsequent AddToScale(1) call. Use the same scalable-selection helper as the
duplicate-machineset path, while retaining the existing machineset-list
validation if still required.
- Around line 509-518: Update the image deletion flow around skopeoCommand and
fullCommand to avoid interpolating tmpAuthFile or digestedImage into a shell
command executed with “sh -c”. Pass these values as discrete arguments through
node.DebugNodeWithChrootStd, or apply robust shell quoting/escaping if the shell
and proxy environment sourcing must be retained.
- Around line 158-214: Replace the immediate MOSB condition assertions after
mc.create() in the “Check that the build is triggered” block with polling via
o.Eventually (or Consistently where appropriate). Re-fetch the current MOSB
inside the polling callback and verify Building becomes false and Succeeded
becomes true, preserving the existing expected build-state behavior while
accounting for mc.skipWaitForMcp = true.

---

Outside diff comments:
In `@test/extended-priv/mco_ocb_longduration.go`:
- Around line 583-596: Remove the duplicated second package/import block and
repeated content in the file, retaining one package clause and one merged import
block including sync. Consolidate both g.Describe bodies so all It cases remain,
and keep exactly one definition each of checkNewBuildIsTriggered,
getNewNodeRebootValueForOCL, ValidateNewNodesBootDirectlyWithOCLImage,
removeImageStream, removeQuayImageUsingSkepo, and
verifyMOSBRebuildAfterImageDeletion.
🪄 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: f8fd4e3b-4764-4753-8d48-7ff86dd0992d

📥 Commits

Reviewing files that changed from the base of the PR and between 61fc8ec and 76dc665.

📒 Files selected for processing (2)
  • test/extended-priv/machineconfigpool.go
  • test/extended-priv/mco_ocb_longduration.go

Comment thread test/extended-priv/machineconfigpool.go Outdated
totalNodes int
guessedNodes = 3 // the number of nodes that we will use if we cannot get the actual number of nodes in the cluster
masterAdjust = 1.0
proxyModifier = 1.0

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 | 🟡 Minor | ⚡ Quick win

Proxy detection is incomplete and silently swallows lookup errors.

The check only reads .status.httpProxy. Clusters that configure only .status.httpsProxy (a common HTTPS-only egress setup) do not get the 1.3 wait-time multiplier, so estimateWaitDuration can under-estimate wait time on proxied clusters this check was meant to cover.

Also, when proxyErr != nil, the code proceeds silently with proxyModifier at its default. The SNO check just above (lines 315-322) logs the error and adjusts behavior instead of failing silently. Apply the same pattern here for consistency and diagnosability.

🔧 Proposed fix
 	proxy := NewResource(mcp.GetOC(), "proxy", "cluster")
-	httpProxy, proxyErr := proxy.Get(`{.status.httpProxy}`)
-	if proxyErr == nil && httpProxy != "" {
+	httpProxy, proxyErr := proxy.Get(`{.status.httpProxy}`)
+	httpsProxy, httpsProxyErr := proxy.Get(`{.status.httpsProxy}`)
+	if proxyErr != nil {
+		logger.Errorf("Not able to get the httpProxy status from the proxy resource. Err: %s", proxyErr)
+	}
+	if httpsProxyErr != nil {
+		logger.Errorf("Not able to get the httpsProxy status from the proxy resource. Err: %s", httpsProxyErr)
+	}
+	if (proxyErr == nil && httpProxy != "") || (httpsProxyErr == nil && httpsProxy != "") {
 		logger.Infof("Increase waiting time because the cluster is proxied")
 		proxyModifier = 1.3
 	}

Also applies to: 328-335

🤖 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/machineconfigpool.go` at line 279, Update the proxy
detection logic used by estimateWaitDuration to consider both status.httpProxy
and status.httpsProxy, applying the 1.3 proxyModifier when either is configured.
When the proxy lookup returns proxyErr, log the error and adjust behavior
consistently with the adjacent SNO check instead of silently retaining the
default modifier.

Comment on lines +158 to +214
g.It("[PolarionID:83755][OTP] In OCL check no new image is applied on node after applying ssh/password/file MC .[Disruptive]", g.Label("Exclude: excluded until OCPBUGS-85094 is fixed"), func() {
var (
mcp = GetCompactCompatiblePool(oc.AsAdmin())
node = mcp.GetSortedNodesOrFail()[0]

moscName = mcp.GetName()
mcName = fmt.Sprintf("test-ssh-%s", GetCurrentTestPolarionIDNumber())

_, key = GenerateSSHKeyPairOrFail()
user = ign32PaswdUser{Name: "core", SSHAuthorizedKeys: []string{key}}
)

exutil.By("Configure OCB functionality for the new worker MCP")
mosc, err := CreateMachineOSConfigUsingExternalOrInternalRegistry(oc.AsAdmin(), MachineConfigNamespace, moscName, mcp.GetName(), nil)
defer DisableOCL(mosc)
o.Expect(err).NotTo(o.HaveOccurred(), "Error creating the MachineOSConfig resource")
logger.Infof("Applied MOSC!\n")

ValidateSuccessfulMOSC(mosc, nil)
logger.Infof("MOSC is applied!\n")

exutil.By("Get the image that is currently applied on nodes")
initialImage := OrFail[string](node.GetRpmOstreeStatus(false))
logger.Infof("Initial image: %s", initialImage)
logger.Infof("Got the initial image!\n")

exutil.By("Create a new MC to deploy new authorized keys")
mc := NewMachineConfig(oc.AsAdmin(), mcName, mcp.GetName())
mc.parameters = []string{fmt.Sprintf(`PWDUSERS=[%s]`, MarshalOrFail(user))}
mc.skipWaitForMcp = true

mc.create()
defer mc.DeleteWithWait()
logger.Infof("Created MC!\n")

exutil.By("Check that the build is triggered with succeed status and not building")
mosb, err := mosc.GetCurrentMachineOSBuild()
logger.Infof("MOSB: %s\n", mosb)
o.Expect(err).NotTo(o.HaveOccurred(), "Error getting MOSB from MOSC")
o.Expect(mosb).To(HaveConditionField("Building", "status", FalseString), "Build is still building")
o.Expect(mosb).To(HaveConditionField("Succeeded", "status", TrueString), "Build didn't succeed")
logger.Infof("Checked that the build does not take place!\n")

mcp.waitForComplete()
logger.Infof("OK!\n")

exutil.By("Check that the image is not updated")
o.Expect(OrFail[string](node.GetRpmOstreeStatus(false))).To(o.Equal(initialImage), "Image was updated")
logger.Infof("Image is not updated!\n")

exutil.By("Check that all expected keys are present and with the right permissions and owners")
currentMc := OrFail[*MachineConfig](mcp.GetConfiguredMachineConfig())
initialKeys := OrFail[[]string](currentMc.GetAuthorizedKeysByUserAsList("core"))
checkAuthorizedKeyInNode(node, append(initialKeys, key))
logger.Infof("MC is configured with the expected keys!\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 | 🟡 Minor | ⚡ Quick win

Synchronous assertion after mc.create() with skipWaitForMcp = true risks a race.

mc.skipWaitForMcp = true is set before mc.create() (lines 187-189). The code then immediately does a synchronous o.Expect on the MOSB Building/Succeeded conditions (lines 194-199) without o.Eventually. Since skipWaitForMcp bypasses the internal wait for pool completion, the controller may not yet have reconciled the MOSB conditions at the moment of the check, producing an intermittent false pass or false fail.

Based on learnings, "If mc.skipWaitForMcp is set to true, then o.Eventually may be needed" for node/build-state checks placed after mc.create(). Wrap the MOSB condition checks in o.Eventually (or o.Consistently, since the test intends to confirm no rebuild happens) to eliminate the race.

🤖 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_ocb_longduration.go` around lines 158 - 214, Replace
the immediate MOSB condition assertions after mc.create() in the “Check that the
build is triggered” block with polling via o.Eventually (or Consistently where
appropriate). Re-fetch the current MOSB inside the polling callback and verify
Building becomes false and Succeeded becomes true, preserving the existing
expected build-state behavior while accounting for mc.skipWaitForMcp = true.

Source: Learnings

Comment on lines +354 to +360
exutil.By("Check able to scale the node from existing Machineset")
msl, err := NewMachineSetList(oc.AsAdmin(), MachineAPINamespace).GetAll()
o.Expect(err).NotTo(o.HaveOccurred(), "Get machinesets failed")
o.Expect(msl).ShouldNot(o.BeEmpty(), "Machineset list is empty")
existingMS := msl[0]

o.Expect(existingMS.AddToScale(1)).NotTo(o.HaveOccurred())

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 | 🟡 Minor | ⚡ Quick win

Use GetScalableMachineSet instead of msl[0] for the existing-machineset scale-up.

existingMS := msl[0] picks the first machineset returned by NewMachineSetList(...).GetAll() without verifying it can actually be scaled. Two lines later, the duplicate machineset path correctly uses GetScalableMachineSet(oc.AsAdmin()) for the same purpose. If msl[0] happens to be a machineset without available capacity, existingMS.AddToScale(1) at line 360 can fail or hang, causing flaky test failures.

Use the same scalable-selection helper for both machinesets.

🤖 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_ocb_longduration.go` around lines 354 - 360, Replace
the existingMS assignment from msl[0] with GetScalableMachineSet(oc.AsAdmin()),
preserving error handling and the subsequent AddToScale(1) call. Use the same
scalable-selection helper as the duplicate-machineset path, while retaining the
existing machineset-list validation if still required.

Comment on lines +509 to +518
skopeoCommand := fmt.Sprintf("skopeo delete --authfile %s docker://%s", tmpAuthFile, digestedImage)
fullCommand := fmt.Sprintf("set -a; source /etc/mco/proxy.env; %s", skopeoCommand)

logger.Infof("Executing command on node: %s", skopeoCommand)

stdout, stderr, err := node.DebugNodeWithChrootStd("sh", "-c", fullCommand)
if err != nil {
logger.Errorf("Error deleting Quay image via skopeo on node. Stdout: %s, Stderr: %s, Error: %s", stdout, stderr, err)
return false
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Shell command built via string interpolation and executed through sh -c.

skopeoCommand and fullCommand are built with fmt.Sprintf and executed via node.DebugNodeWithChrootStd("sh", "-c", fullCommand). digestedImage (from mosb.GetStatusDigestedImagePullSpec()) and tmpAuthFile are interpolated directly into the shell string rather than passed as discrete, quoted arguments. If either value ever contains shell metacharacters, this executes arbitrary commands with root access on the node via oc debug.

Practical risk is reduced because these values currently originate from cluster-generated resources rather than raw external input, but the pattern itself is the kind of shell-interpolation construction that should be avoided. Pass arguments without going through a shell, or quote/escape interpolated values before building the command string.

🤖 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_ocb_longduration.go` around lines 509 - 518, Update
the image deletion flow around skopeoCommand and fullCommand to avoid
interpolating tmpAuthFile or digestedImage into a shell command executed with
“sh -c”. Pass these values as discrete arguments through
node.DebugNodeWithChrootStd, or apply robust shell quoting/escaping if the shell
and proxy environment sourcing must be retained.

Source: Path instructions

@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch from 76dc665 to 9ed67c7 Compare August 3, 2026 09:22
@ptalgulk01

Copy link
Copy Markdown
Contributor Author

5.0 (registry.build10.ci.openshift.org/ci-ln-v02t0n2/release:latest)

AWS fips-proxy longduration:

vSphere longduration:

4.23 (registry.build10.ci.openshift.org/ci-ln-0f3fgfb/release:latest)

AWS fips-proxy longduration:

vSphere longduration:

@ptalgulk01

Copy link
Copy Markdown
Contributor Author

/cherry-pick release-4.22

@openshift-cherrypick-robot

Copy link
Copy Markdown

@ptalgulk01: once the present PR merges, I will cherry-pick it on top of release-4.22 in a new PR and assign it to you.

Details

In response to this:

/cherry-pick release-4.22

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.

@ptalgulk01

Copy link
Copy Markdown
Contributor Author

https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-4.23-periodics-e2e-aws-mco-fips-proxy-longduration-1of3/2084220795239796736
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-4.23-periodics-e2e-aws-mco-fips-proxy-longduration-2of3/2084220807801737216
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-4.23-periodics-e2e-aws-mco-fips-proxy-longduration-3of3/2084220820409815040
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-4.23-periodics-e2e-vsphere-mco-tp-longduration-1of2/2084220833286328320
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-4.23-periodics-e2e-vsphere-mco-tp-longduration-2of2/2084220845927960576

https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-5.0-periodics-e2e-aws-mco-fips-proxy-longduration-1of3/2084220619557179392
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-5.0-periodics-e2e-aws-mco-fips-proxy-longduration-2of3/2084220632215588864
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-5.0-periodics-e2e-aws-mco-fips-proxy-longduration-3of3/2084220645159211008
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-5.0-periodics-e2e-vsphere-mco-tp-longduration-1of2/2084220658048307200
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-machine-config-operator-release-5.0-periodics-e2e-vsphere-mco-tp-longduration-2of2/2084220670664773632

    ┌─────┬────────┬──────────────────────────────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
    │  #  │ OCP ID │ Description                              │ 4.23 a1 │ 4.23 a2 │ 4.23 a3 │ 4.23 v1 │ 4.23 v2 │  5.0 a1 │  5.0 a2 │  5.0 a3 │  5.0 v1 │  5.0 v2 │
    ├─────┼────────┼──────────────────────────────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
    │ 1   │ 59417  │ MCD create/update password with Machi... │ ∅       │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │
    │ 2   │ 59424  │ ssh keys can be found in new dir on R... │ ∅       │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │
    │ 3   │ 59426  │ ssh keys can be updated in new dir on... │ ∅       │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │
    │ 4   │ 62533  │ Passwd login must not work with ssh      │ ∅       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │
    │ 5   │ 64986  │ Remove all ssh keys                      │ ∅       │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │
    │ 6   │ 72137  │ Create a password for a different user   │ ∅       │ ─       │ ─       │ ─       │ ✅      │ ✅      │ ─       │ ─       │ ─       │ ✅      │
    │ 7   │ 75552  │ apply ssh keys when root owns .ssh       │ ∅       │ ─       │ ✅      │ ─       │ ✅      │ ─       │ ─       │ ✅      │ ─       │ ✅      │
    │ 8   │ 88940  │ Apply password only if changes exist     │ ∅       │ ✅      │ ─       │ ✅      │ ─       │ ─       │ ✅      │ ─       │ ✅      │ ─       │
    └─────┴────────┴──────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

    Legend: ✅ PASS · ❌ FAIL · ⏭️   SKIP · ─ Not in shard · ∅ Infra failure

Comment thread test/extended-priv/machineconfigpool.go Outdated
Comment on lines +328 to +333
proxy := NewResource(mcp.GetOC(), "proxy", "cluster")
httpProxy, proxyErr := proxy.Get(`{.status.httpProxy}`)
if proxyErr == nil && httpProxy != "" {
logger.Infof("Increase waiting time because the cluster is proxied")
proxyModifier = 1.3
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Same as part 1, proxy should not increase the time needed to update a pool. Let's remove this code.

Comment on lines +58 to +59
wMcp.SetMaxUnavailable(2)
defer wMcp.RemoveMaxUnavailable()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Let's restore the original maxUnavailable value here.

In the original code we don't do it, but in the MCO repository there was a PR to guarantee that maxUnavailable was always restored #6336

o.Expect(err).NotTo(o.HaveOccurred(), "Error creating the MachineOSConfig resource")
logger.Infof("OK!\n")

exutil.By("Configure OCB functionality for the new worker MCP")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Wrong step name, it looks like we copy pasted the previous one.

ValidateNewNodesBootDirectlyWithOCLImage(oc.AsAdmin(), mosc, mcp)
})

g.It("[PolarionID:82536][OTP][Skipped:Disconnected] Internal Registry In OCB to check when a image is removed the old build is triggered again and the MC should start updating directly. [Disruptive]", g.Label("Exclude: excluded until OCPBUGS-85094 is fixed"), func() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

OCPBUGS-85094 is making these 2 tests fail, but those tests failing are not leaving the cluster in an unrecoverable status. Hence, we shouldn't skip the failing tests, we should let them fail and report the failures so that it is visible.

If those tests were leaving the cluster in an unrecoverable status it would be different.

@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch 2 times, most recently from 875c990 to 5b88c4b Compare August 5, 2026 06:51
@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch 3 times, most recently from 826cc41 to dd9e989 Compare August 5, 2026 12:00
Add the remaining OCB long-duration test coverage to mco_ocb_longduration.go, including internal-registry and multi-MCP scenarios, and clean up helper naming for readability.
@ptalgulk01
ptalgulk01 force-pushed the migrate-mco-ocb-part2 branch from dd9e989 to c19a014 Compare August 5, 2026 14:04
@sergiordlr

Copy link
Copy Markdown
Contributor

/test unit

@sergiordlr

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Aug 5, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification

No second-stage tests were triggered for this PR.

This can happen when:

  • The changed files don't match any pipeline_run_if_changed patterns
  • All files match pipeline_skip_if_only_changed patterns
  • No pipeline-controlled jobs are defined for the main branch

Use /test ? to see all available tests.

@openshift-ci

openshift-ci Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ptalgulk01, sergiordlr

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:
  • OWNERS [ptalgulk01,sergiordlr]

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

@ptalgulk01

Copy link
Copy Markdown
Contributor Author

/verified by @ptalgulk01

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Aug 5, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@ptalgulk01: This PR has been marked as verified by @ptalgulk01.

Details

In response to this:

/verified by @ptalgulk01

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.

@openshift-ci

openshift-ci Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

@ptalgulk01: all tests passed!

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.

@openshift-merge-bot
openshift-merge-bot Bot merged commit 2117ea3 into openshift:main Aug 5, 2026
9 checks passed
@openshift-cherrypick-robot

Copy link
Copy Markdown

@ptalgulk01: #6340 failed to apply on top of branch "release-4.22":

Applying: Migrate remaining OCB long-duration test cases
Using index info to reconstruct a base tree...
A	test/extended-priv/mco_ocb_longduration.go
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): test/extended-priv/mco_ocb_longduration.go deleted in HEAD and modified in Migrate remaining OCB long-duration test cases.  Version Migrate remaining OCB long-duration test cases of test/extended-priv/mco_ocb_longduration.go left in tree.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Patch failed at 0001 Migrate remaining OCB long-duration test cases

Details

In response to this:

/cherry-pick release-4.22

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.

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/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants