Skip to content

Hcp kubevirt oz ci - #83224

Closed
isumitsolanki wants to merge 7 commits into
openshift:mainfrom
isumitsolanki:hcp-kubevirt-oz-ci
Closed

Hcp kubevirt oz ci#83224
isumitsolanki wants to merge 7 commits into
openshift:mainfrom
isumitsolanki:hcp-kubevirt-oz-ci

Conversation

@isumitsolanki

@isumitsolanki isumitsolanki commented Aug 11, 2026

Copy link
Copy Markdown

Summary

  • Add openshift-e2e-libvirt-vpn-hcp workflow (same install/test/cleanup path as openshift-e2e-libvirt-vpn) for HCP kubevirt CI on IBM Z
  • Add weekly nightly-5.0 periodic ocp-e2e-ovn-remote-libvirt-multi-z-z-hcp (cron: 0 15 * * 6) using libvirt-s390x-vpn
  • Regenerate prow periodics for the new job

Follows Boskos/profile work in #83082 / #83138 for dedicated HCP libvirt capacity.

Test plan

  • make update / generated jobs match the config target
  • ci-operator-config / pj-rehearse as needed for the new periodic
  • Confirm rehearsal (or first periodic run) can lease libvirt-s390x-vpn and complete install

Summary by CodeRabbit

  • Adds IBM Z CI coverage for disconnected IPv6 UPI tests and HCP KubeVirt tests on remote libvirt.
  • Adds weekly nightly-5.0 HCP testing with the libvirt-s390x-vpn capacity pool.
  • Adds IPv6 single-stack support to libvirt UPI network and install configuration.
  • Adds release mirroring for disconnected IBM Z installations.
  • Adds workflow metadata and ownership for the new CI workflows and step registry entries.

isumitsolanki and others added 7 commits April 10, 2026 18:46
- Add openshift-e2e-libvirt-upi-ipv6-disconnected (VPN path) mirroring VPN
  install/test/post plus optional oc adm release mirror from CI.
- Add upi-libvirt-s390x-ipv6-disconnected-release-mirror ref and s390x dir.
- Add IPV6_SINGLESTACK support in upi-conf-libvirt and network steps for
  IPv6-only lease-driven install-config and network.xml.
- Wire ocp-e2e-ovn-upi-remote-libvirt-ipv6-disconnected-s390x periodic in
  openshift-multiarch-main__nightly-4.22 with image-ecosystem and USE_EXTERNAL_DNS.

Made-with: Cursor
Align workflow and ref names with ci-operator path-derived prefixes:
- Rename openshift-e2e-libvirt-upi-ipv6-disconnected to
  openshift-e2e-libvirt-vpn-ipv6-disconnected under vpn/ipv6-disconnected.
- Rename upi-libvirt-s390x-ipv6-disconnected-release-mirror ref and
  use upi-libvirt-s390x-ipv6-disconnected-commands.sh per registry rules.

Update multiarch nightly config and regenerate periodic jobs.
Signed-off-by: Sumit Solanki <sumit.solanki@ibm.com>
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Added scheduled s390x IPv6-disconnected and HCP libvirt tests. Added IPv6 single-stack UPI network generation, agent-install validation, and optional disconnected release mirroring.

Changes

s390x libvirt test coverage

Layer / File(s) Summary
IPv6 single-stack UPI networking
ci-operator/step-registry/upi/conf/libvirt/...
Added IPV6_SINGLESTACK, IPv6 install-config.yaml settings, IPv6-only libvirt network generation, and agent-install validation.
Disconnected release mirroring
ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/...
Added release mirroring, configuration-fragment extraction, shared-storage outputs, step metadata, and ownership.
IPv6-disconnected workflow and schedule
ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/..., ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-4.22.yaml
Added the IPv6-disconnected workflow and a scheduled s390x remote-libvirt job.
HCP workflow and schedule
ci-operator/step-registry/openshift/e2e/libvirt/vpn/hcp/..., ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-5.0.yaml
Added the HCP workflow and a scheduled s390x HCP remote-libvirt job.

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

Sequence Diagram(s)

sequenceDiagram
  participant ScheduledJob
  participant IPv6Workflow
  participant UPIIPv6Step
  participant ReleaseMirror
  participant SharedStorage
  ScheduledJob->>IPv6Workflow: Start scheduled IPv6-disconnected test
  IPv6Workflow->>UPIIPv6Step: Run UPI preparation
  UPIIPv6Step->>ReleaseMirror: Execute oc adm release mirror
  ReleaseMirror-->>UPIIPv6Step: Return mirrored release pullspec and log
  UPIIPv6Step->>SharedStorage: Write pullspec and install-config fragments
  IPv6Workflow->>UPIIPv6Step: Continue IPv6 libvirt installation and testing
Loading

Possibly related PRs


Important

Pre-merge checks failed

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

❌ Failed checks (1 error, 1 warning, 1 inconclusive)

Check name Status Explanation Resolution
No-Sensitive-Data-In-Logs ❌ Error The new mirror step logs MIRROR_RELEASE_IMAGE_REPO and full oc mirror output (lines 27, 54-55), while network.xml logging prints lease-derived internal hostnames and node addresses (line 191). Redact registry and lease-derived hostnames, addresses, and pullspecs before logging; disable set -x and do not cat raw mirror or network output to CI logs.
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.
Title check ❓ Inconclusive The title references HCP KubeVirt CI, but its abbreviations and wording do not clearly describe the workflow and IPv6 libvirt changes. Use a concise title that names the primary change, such as "Add HCP KubeVirt libvirt VPN workflow for IBM Z CI".
✅ Passed checks (12 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
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 PR adds CI YAML, workflow metadata, and shell scripts only; searches found no Ginkgo It, Describe, Context, or When declarations or dynamic test titles in the affected paths.
Test Structure And Quality ✅ Passed The PR changes only YAML, JSON, OWNERS, and shell files; it adds or modifies no Ginkgo test code, It blocks, cluster waits, or assertions, so this check is not applicable.
Microshift Test Compatibility ✅ Passed The patch adds no Ginkgo e2e tests or Go files; it adds CI YAML/JSON/OWNERS and reuses the existing openshift-e2e-libvirt-test chain, so MicroShift API compatibility review is not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR adds CI configuration and a workflow that invokes the pre-existing openshift-e2e-libvirt-test chain; it adds no Ginkgo tests or multi-node test assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed The changes add CI/Prow configuration and a step-registry workflow only; no deployment/controller scheduling constraints, node selectors, affinity, spread constraints, or PDBs were added.
Ote Binary Stdout Contract ✅ Passed The pull request changes only CI YAML, generated Prow YAML, metadata, and OWNERS files; it adds no OTE binary or process-level Go suite code to inspect.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The complete PR diff adds only YAML, JSON, shell, and generated periodic files; it adds no Go/test files or Ginkgo declarations to assess.
No-Weak-Crypto ✅ Passed PR diff scan found no MD5, SHA1, DES, 3DES, RC4, Blowfish, ECB, crypto APIs, custom crypto, or secret/token comparisons; secret values are referenced by file path.
Container-Privileges ✅ Passed The added workflow and generated Prow pod contain no privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, allowPrivilegeEscalation, or root settings; capabilities: intranet is a scheduling label.
✨ 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 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: isumitsolanki
Once this PR has been reviewed and has the lgtm label, please assign prb112 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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 requested review from andymcc and chidanandbh August 11, 2026 05:11
@v78singh

Copy link
Copy Markdown

/ok-to-test

@openshift-ci openshift-ci Bot added the ok-to-test Indicates a non-member PR verified by an org member that is safe to test. label Aug 11, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

[REHEARSALNOTIFIER]
@isumitsolanki: the pj-rehearse plugin accommodates running rehearsal tests for the changes in this PR. Expand 'Interacting with pj-rehearse' for usage details. The following rehearsable tests have been affected by this change:

Test name Repo Type Reason
periodic-ci-openshift-multiarch-main-nightly-5.0-ocp-e2e-ovn-remote-libvirt-s390x N/A periodic Registry content changed
periodic-ci-openshift-operator-framework-operator-controller-release-4.21-periodics-e2e-compact-ovn-remote-libvirt-s390x-extended-f2 N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-5.0-ocp-fips-ovn-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.19-ocp-image-ecosystem-ovn-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-5.0-ocp-e2e-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.22-ocp-e2e-serial-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.23-ocp-image-ecosystem-ovn-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-5.0-ocp-e2e-serial-ovn-techpreview-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.17-ocp-e2e-ovn-remote-libvirt-s390x N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.19-ocp-e2e-serial-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.23-upgrade-from-nightly-4.22-ocp-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.17-ocp-e2e-serial-ovn-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.16-ocp-e2e-ovn-remote-libvirt-s390x N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.16-ocp-e2e-ovn-agent-remote-s2s-libvirt-ppc64le N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.20-upgrade-from-nightly-4.19-ocp-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.18-ocp-e2e-serial-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.18-ocp-e2e-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.19-ocp-e2e-ovn-agent-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-operator-framework-operator-controller-release-5.0-periodics-e2e-compact-ovn-remote-libvirt-s390x-extended-f2 N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.19-ocp-e2e-serial-ovn-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.22-ocp-e2e-ovn-remote-s2s-libvirt-ppc64le N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.23-ocp-e2e-ovn-techpreview-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-5.1-ocp-e2e-serial-ovn-techpreview-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-4.23-ocp-image-ecosystem-ovn-remote-libvirt-multi-z-z N/A periodic Registry content changed
periodic-ci-openshift-multiarch-main-nightly-5.1-ocp-e2e-ovn-techpreview-remote-s2s-libvirt-multi-p-p N/A periodic Registry content changed

A total of 166 jobs have been affected by this change. The above listing is non-exhaustive and limited to 25 jobs.

A full list of affected jobs can be found here
Prior to this PR being merged, you will need to either run and acknowledge or opt to skip these rehearsals.

Interacting with pj-rehearse

Comment: /pj-rehearse to run up to 5 rehearsals
Comment: /pj-rehearse skip to opt-out of rehearsals
Comment: /pj-rehearse {test-name}, with each test separated by a space, to run one or more specific rehearsals
Comment: /pj-rehearse more to run up to 10 rehearsals
Comment: /pj-rehearse max to run up to 25 rehearsals
Comment: /pj-rehearse auto-ack to run up to 5 rehearsals, and add the rehearsals-ack label on success
Comment: /pj-rehearse list to get an up-to-date list of affected jobs
Comment: /pj-rehearse abort to abort all active rehearsals
Comment: /pj-rehearse network-access-allowed to allow rehearsals of tests that have the restrict_network_access field set to false. This must be executed by an openshift org member who is not the PR author

Once you are satisfied with the results of the rehearsals, comment: /pj-rehearse ack to unblock merge. When the rehearsals-ack label is present on your PR, merge will no longer be blocked by rehearsals.
If you would like the rehearsals-ack label removed, comment: /pj-rehearse reject to re-block merging.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 2

🤖 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
`@ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-4.22.yaml`:
- Around line 467-475: Add IPV6_SINGLESTACK set to "true" in the environment for
the job using the openshift-e2e-libvirt-vpn-ipv6-disconnected workflow,
alongside the existing ARCH and network configuration variables.

In
`@ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh`:
- Around line 58-77: Update the workflow after the mirror fragments are
generated so the later configuration step consumes them before installation:
ensure upi-conf-libvirt applies the mirrored release image from
mirrored-release-image.txt and merges install-config-mirror-fragment.yaml into
install-config.yaml, while preserving the existing behavior when
ENABLE_RELEASE_MIRROR is false. Keep upi-install-libvirt’s copy-only behavior
unchanged.
🪄 Autofix

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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: fae0a518-614c-425c-8c70-aca13bd6f33e

📥 Commits

Reviewing files that changed from the base of the PR and between add2700 and 32d4494.

⛔ Files ignored due to path filters (1)
  • ci-operator/jobs/openshift/multiarch/openshift-multiarch-main-periodics.yaml is excluded by !ci-operator/jobs/**
📒 Files selected for processing (16)
  • ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-4.22.yaml
  • ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-5.0.yaml
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/hcp/OWNERS
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/hcp/openshift-e2e-libvirt-vpn-hcp-workflow.metadata.json
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/hcp/openshift-e2e-libvirt-vpn-hcp-workflow.yaml
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/OWNERS
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/openshift-e2e-libvirt-vpn-ipv6-disconnected-workflow.metadata.json
  • ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/openshift-e2e-libvirt-vpn-ipv6-disconnected-workflow.yaml
  • ci-operator/step-registry/upi/conf/libvirt/network/upi-conf-libvirt-network-commands.sh
  • ci-operator/step-registry/upi/conf/libvirt/network/upi-conf-libvirt-network-ref.yaml
  • ci-operator/step-registry/upi/conf/libvirt/upi-conf-libvirt-commands.sh
  • ci-operator/step-registry/upi/conf/libvirt/upi-conf-libvirt-ref.yaml
  • ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/OWNERS
  • ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh
  • ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-ref.metadata.json
  • ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-ref.yaml

Comment on lines +467 to +475
env:
ARCH: s390x
BRANCH: "4.22"
ENABLE_RELEASE_MIRROR: "false"
ETCD_DISK_SPEED: slow
NODE_TUNING: "true"
TEST_TYPE: image-ecosystem
USE_EXTERNAL_DNS: "true"
workflow: openshift-e2e-libvirt-vpn-ipv6-disconnected

@coderabbitai coderabbitai Bot Aug 11, 2026

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Enable IPv6 for this IPv6 periodic.

upi-conf-libvirt and upi-conf-libvirt-network default IPV6_SINGLESTACK to "false". This job does not override that value. The workflow therefore uses the IPv4 install-config and network paths.

Add IPV6_SINGLESTACK: "true" to this job environment.

Proposed fix
     env:
       ARCH: s390x
       BRANCH: "4.22"
       ENABLE_RELEASE_MIRROR: "false"
       ETCD_DISK_SPEED: slow
+      IPV6_SINGLESTACK: "true"
       NODE_TUNING: "true"
📝 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
env:
ARCH: s390x
BRANCH: "4.22"
ENABLE_RELEASE_MIRROR: "false"
ETCD_DISK_SPEED: slow
NODE_TUNING: "true"
TEST_TYPE: image-ecosystem
USE_EXTERNAL_DNS: "true"
workflow: openshift-e2e-libvirt-vpn-ipv6-disconnected
env:
ARCH: s390x
BRANCH: "4.22"
ENABLE_RELEASE_MIRROR: "false"
ETCD_DISK_SPEED: slow
IPV6_SINGLESTACK: "true"
NODE_TUNING: "true"
TEST_TYPE: image-ecosystem
USE_EXTERNAL_DNS: "true"
workflow: openshift-e2e-libvirt-vpn-ipv6-disconnected
🤖 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
`@ci-operator/config/openshift/multiarch/openshift-multiarch-main__nightly-4.22.yaml`
around lines 467 - 475, Add IPV6_SINGLESTACK set to "true" in the environment
for the job using the openshift-e2e-libvirt-vpn-ipv6-disconnected workflow,
alongside the existing ARCH and network configuration variables.

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.

Nice catch

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.

@ibm-adarsh, thank you.

You are interacting with an AI system.

Comment on lines +58 to +77
echo "${target_release_image}" > "${SHARED_DIR}/mirrored-release-image.txt"
echo "Mirrored release image pullspec written to SHARED_DIR/mirrored-release-image.txt"

install_patch="${SHARED_DIR}/install-config-mirror-fragment.yaml"
line_num=$(grep -n "To use the new mirrored repository for upgrades" "${mirror_log}" | head -1 | cut -d: -f1 || true)
if [[ -n "${line_num}" ]] && [[ "${line_num}" =~ ^[0-9]+$ ]]; then
install_end_line_num=$((line_num - 3))
upgrade_start_line_num=$((line_num + 2))
if [[ ${install_end_line_num} -gt 0 ]]; then
sed -n "/^${regex_keyword}/,${install_end_line_num}p" "${mirror_log}" > "${install_patch}" || true
fi
sed -n "${upgrade_start_line_num},\$p" "${mirror_log}" > "${SHARED_DIR}/cluster-mirror-upgrade-fragment.txt" || true
else
echo "Could not parse mirror log for install-config fragment; see ${mirror_log}"
cp "${mirror_log}" "${SHARED_DIR}/release-mirror-full.log"
fi

if [[ -f "${install_patch}" ]] && [[ -s "${install_patch}" ]]; then
echo "--- install-config mirror fragment ---"
cat "${install_patch}"

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

rg -n -C 4 \
  'mirrored-release-image\.txt|install-config-mirror-fragment\.yaml|cluster-mirror-upgrade-fragment\.txt|OPENSHIFT_INSTALL_RELEASE_IMAGE_OVERRIDE|imageContentSources' \
  ci-operator/step-registry

Repository: openshift/release

Length of output: 50374


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

target='ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh'

printf '%s\n' '--- target references and workflow chain ---'
rg -n -C 5 \
  'mirrored-release-image\.txt|install-config-mirror-fragment\.yaml|cluster-mirror-upgrade-fragment\.txt|upi-conf-libvirt|upi-install-libvirt|install-config\.yaml|imageContentSources|imageDigestSources|OPENSHIFT_INSTALL_RELEASE_IMAGE_OVERRIDE' \
  "$target" ci-operator/step-registry/upi/libvirt ci-operator/step-registry/upi/conf/libvirt ci-operator/step-registry/upi/install/libvirt 2>/dev/null || true

printf '%s\n' '--- matching files ---'
fd -i 'libvirt|mirror' ci-operator/step-registry/upi | head -200

Repository: openshift/release

Length of output: 46485


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- exact output-file consumers across the repository ---'
rg -n -C 3 \
  'mirrored-release-image\.txt|install-config-mirror-fragment\.yaml|cluster-mirror-upgrade-fragment\.txt|release-mirror-full\.log' \
  . --glob '!*.metadata.json' || true

printf '%s\n' '--- references to the disconnected step and relevant chains ---'
rg -n -C 5 \
  'upi-libvirt-s390x-ipv6-disconnected|ipv6-disconnected|upi-conf-libvirt|upi-install-libvirt' \
  ci-operator/config ci-operator/jobs ci-operator/step-registry 2>/dev/null || true

printf '%s\n' '--- target script tail ---'
cat -n ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh | sed -n '70,120p'

printf '%s\n' '--- configuration and install tails ---'
cat -n ci-operator/step-registry/upi/conf/libvirt/upi-conf-libvirt-commands.sh | sed -n '110,190p'
cat -n ci-operator/step-registry/upi/install/libvirt/upi-install-libvirt-commands.sh | sed -n '160,230p'

Repository: openshift/release

Length of output: 50373


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

root = Path(".")
producer = root / "ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh"
workflow = root / "ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/openshift-e2e-libvirt-vpn-ipv6-disconnected-workflow.yaml"
conf = root / "ci-operator/step-registry/upi/conf/libvirt/upi-conf-libvirt-commands.sh"
install = root / "ci-operator/step-registry/upi/install/libvirt/upi-install-libvirt-commands.sh"

outputs = [
    "mirrored-release-image.txt",
    "install-config-mirror-fragment.yaml",
    "cluster-mirror-upgrade-fragment.txt",
]

tracked = {p: {"producer": [], "consumer": []} for p in outputs}
files = [p for p in root.rglob("*") if p.is_file() and ".git" not in p.parts]

for path in files:
    try:
        text = path.read_text(errors="replace")
    except OSError:
        continue
    for name in outputs:
        if name not in text:
            continue
        for line_no, line in enumerate(text.splitlines(), 1):
            if name in line:
                role = "producer" if path == producer and (">" in line or ">" in line) else "consumer"
                if path != producer:
                    role = "consumer"
                tracked[name][role].append(f"{path}:{line_no}: {line.strip()}")

print("OUTPUT_USAGE")
for name, roles in tracked.items():
    print(f"{name}")
    print(f"  producers={len(roles['producer'])}")
    for item in roles["producer"]:
        print(f"    {item}")
    print(f"  consumers={len(roles['consumer'])}")
    for item in roles["consumer"]:
        print(f"    {item}")

workflow_lines = workflow.read_text(errors="replace").splitlines()
mirror_line = next((i + 1 for i, line in enumerate(workflow_lines)
                    if "upi-libvirt-s390x-ipv6-disconnected" in line), None)
conf_line = next((i + 1 for i, line in enumerate(workflow_lines)
                  if "chain: upi-conf-libvirt" in line), None)
install_line = next((i + 1 for i, line in enumerate(workflow_lines)
                     if "chain: upi-install-libvirt" in line), None)

print("WORKFLOW_ORDER")
print(f"  mirror={mirror_line}")
print(f"  conf={conf_line}")
print(f"  install={install_line}")
print(f"  mirror_before_conf={mirror_line is not None and conf_line is not None and mirror_line < conf_line}")

for label, path in [("CONF", conf), ("INSTALL", install)]:
    text = path.read_text(errors="replace")
    print(f"{label}_REFERENCES")
    for name in outputs:
        print(f"  {name}={name in text}")
    print(f"  writes_install_config={'install-config.yaml' in text}")
PY

Repository: openshift/release

Length of output: 1584


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path

root = Path(".")
producer = root / "ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh"
workflow = root / "ci-operator/step-registry/openshift/e2e/libvirt/vpn/ipv6-disconnected/openshift-e2e-libvirt-vpn-ipv6-disconnected-workflow.yaml"
conf = root / "ci-operator/step-registry/upi/conf/libvirt/upi-conf-libvirt-commands.sh"
install = root / "ci-operator/step-registry/upi/install/libvirt/upi-install-libvirt-commands.sh"

outputs = [
    "mirrored-release-image.txt",
    "install-config-mirror-fragment.yaml",
    "cluster-mirror-upgrade-fragment.txt",
]

tracked = {p: {"producer": [], "consumer": []} for p in outputs}
files = [p for p in root.rglob("*") if p.is_file() and ".git" not in p.parts]

for path in files:
    try:
        text = path.read_text(errors="replace")
    except OSError:
        continue
    for name in outputs:
        for line_no, line in enumerate(text.splitlines(), 1):
            if name in line:
                role = "producer" if path == producer else "consumer"
                tracked[name][role].append(f"{path}:{line_no}: {line.strip()}")

print("OUTPUT_USAGE")
for name, roles in tracked.items():
    print(name)
    print(f"  producers={len(roles['producer'])}")
    for item in roles["producer"]:
        print(f"    {item}")
    print(f"  consumers={len(roles['consumer'])}")
    for item in roles["consumer"]:
        print(f"    {item}")

workflow_lines = workflow.read_text(errors="replace").splitlines()
mirror_line = next((i + 1 for i, line in enumerate(workflow_lines)
                    if "upi-libvirt-s390x-ipv6-disconnected" in line), None)
conf_line = next((i + 1 for i, line in enumerate(workflow_lines)
                  if "chain: upi-conf-libvirt" in line), None)
install_line = next((i + 1 for i, line in enumerate(workflow_lines)
                     if "chain: upi-install-libvirt" in line), None)

print("WORKFLOW_ORDER")
print(f"  mirror={mirror_line}")
print(f"  conf={conf_line}")
print(f"  install={install_line}")
print(f"  mirror_before_conf={mirror_line is not None and conf_line is not None and mirror_line < conf_line}")

for label, path in [("CONF", conf), ("INSTALL", install)]:
    text = path.read_text(errors="replace")
    print(f"{label}_REFERENCES")
    for name in outputs:
        print(f"  {name}={name in text}")
    print(f"  writes_install_config={'install-config.yaml' in text}")
PY

Repository: openshift/release

Length of output: 1584


Apply the mirror outputs during configuration

When ENABLE_RELEASE_MIRROR=true, no later step reads the mirrored release or configuration fragments. upi-conf-libvirt creates install-config.yaml after the mirror step, and upi-install-libvirt only copies it. Consume these files before installation; otherwise the install uses the original release and lacks imageContentSources.

🤖 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
`@ci-operator/step-registry/upi/libvirt/s390x/ipv6-disconnected/upi-libvirt-s390x-ipv6-disconnected-commands.sh`
around lines 58 - 77, Update the workflow after the mirror fragments are
generated so the later configuration step consumes them before installation:
ensure upi-conf-libvirt applies the mirrored release image from
mirrored-release-image.txt and merges install-config-mirror-fragment.yaml into
install-config.yaml, while preserving the existing behavior when
ENABLE_RELEASE_MIRROR is false. Keep upi-install-libvirt’s copy-only behavior
unchanged.

@openshift-ci

openshift-ci Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

@isumitsolanki: The following tests 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/owners 32d4494 link true /test owners
ci/prow/step-registry-metadata 32d4494 link true /test step-registry-metadata

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

ok-to-test Indicates a non-member PR verified by an org member that is safe to test.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants