From c70d9529b05c52691c6135711d08253ffbf860bd Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 16:05:37 +0530 Subject: [PATCH 01/15] Add optional s390x e2e CI for ClusterResourceOverride operator. Introduce a separate main__s390x variant that provisions libvirt-s390x-vpn-oz on OCP 5.0.0-ec.5, installs the operator via OLM (optional IDMS), creates the CR, and runs a placeholder test step. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 60 +++++++++ ...de-admission-operator-main-presubmits.yaml | 86 ++++++++++++ .../cluster-resource-override/OWNERS | 4 + .../cluster-resource-override/s390x/OWNERS | 4 + .../s390x/cleanup/OWNERS | 4 + ...esource-override-s390x-cleanup-commands.sh | 14 ++ ...e-override-s390x-cleanup-ref.metadata.json | 11 ++ ...r-resource-override-s390x-cleanup-ref.yaml | 29 +++++ ...urce-override-s390x-workflow.metadata.json | 11 ++ ...ster-resource-override-s390x-workflow.yaml | 25 ++++ .../s390x/install-operator/OWNERS | 4 + ...verride-s390x-install-operator-commands.sh | 122 ++++++++++++++++++ ...e-s390x-install-operator-ref.metadata.json | 11 ++ ...e-override-s390x-install-operator-ref.yaml | 77 +++++++++++ .../s390x/run-tests/OWNERS | 4 + ...ource-override-s390x-run-tests-commands.sh | 21 +++ ...override-s390x-run-tests-ref.metadata.json | 11 ++ ...resource-override-s390x-run-tests-ref.yaml | 22 ++++ .../s390x/test/OWNERS | 4 + ...ce-override-s390x-test-chain.metadata.json | 11 ++ ...er-resource-override-s390x-test-chain.yaml | 11 ++ 21 files changed, 546 insertions(+) create mode 100644 ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml create mode 100644 ci-operator/step-registry/cluster-resource-override/OWNERS create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/OWNERS create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/cleanup/OWNERS create mode 100755 ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.yaml create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/install-operator/OWNERS create mode 100755 ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/run-tests/OWNERS create mode 100755 ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/test/OWNERS create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json create mode 100644 ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml new file mode 100644 index 0000000000000..6f5ce3531508c --- /dev/null +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -0,0 +1,60 @@ +base_images: + cli: + name: "5.0" + namespace: ocp + tag: cli + libvirt-installer: + name: "5.0" + namespace: ocp + tag: libvirt-installer + upi-installer: + name: "5.0" + namespace: ocp + tag: upi-installer +build_root: + image_stream_tag: + name: release + namespace: openshift + tag: rhel-9-release-golang-1.26-openshift-5.0 +releases: + latest: + release: + architecture: s390x + channel: candidate + version: 5.0.0-ec.5 + s390x-latest: + release: + architecture: s390x + channel: candidate + version: 5.0.0-ec.5 +resources: + '*': + limits: + memory: 8Gi + requests: + cpu: "2" + memory: 2Gi +tests: +- always_run: false + as: e2e + capabilities: + - intranet + optional: true + steps: + cluster_profile: libvirt-s390x-vpn-oz + dependencies: + OPENSHIFT_INSTALL_TARGET: release:s390x-latest + env: + ARCH: s390x + BRANCH: "5.0" + COMPUTE_COUNT: "2" + CONTROL_COUNT: "3" + ETCD_DISK_SPEED: slow + NODE_TUNING: "true" + USE_EXTERNAL_DNS: "true" + workflow: cluster-resource-override-s390x +zz_generated_metadata: + branch: main + org: openshift + repo: cluster-resource-override-admission-operator + variant: s390x diff --git a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml index 64dde4b8edd91..1ba413a4011a1 100644 --- a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml +++ b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml @@ -376,6 +376,92 @@ presubmits: secret: secretName: result-aggregator trigger: (?m)^/test( | .* )images,?($|\s.*) + - agent: kubernetes + always_run: false + branches: + - ^main$ + - ^main- + cluster: build07 + context: ci/prow/s390x-e2e + decorate: true + decoration_config: + skip_cloning: true + labels: + capability/intranet: intranet + ci-operator.openshift.io/cloud: libvirt-s390x-vpn-oz + ci-operator.openshift.io/cloud-cluster-profile: libvirt-s390x-vpn-oz + ci-operator.openshift.io/variant: s390x + ci.openshift.io/generator: prowgen + pj-rehearse.openshift.io/can-be-rehearsed: "true" + name: pull-ci-openshift-cluster-resource-override-admission-operator-main-s390x-e2e + optional: true + rerun_command: /test s390x-e2e + spec: + containers: + - args: + - --gcs-upload-secret=/secrets/gcs/service-account.json + - --image-import-pull-secret=/etc/pull-secret/.dockerconfigjson + - --lease-server-credentials-file=/etc/boskos/credentials + - --report-credentials-file=/etc/report/credentials + - --secret-dir=/secrets/ci-pull-credentials + - --target=e2e + - --variant=s390x + command: + - ci-operator + env: + - name: HTTP_SERVER_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + image: quay-proxy.ci.openshift.org/openshift/ci:ci_ci-operator_latest + imagePullPolicy: Always + name: "" + ports: + - containerPort: 8080 + name: http + resources: + requests: + cpu: 10m + volumeMounts: + - mountPath: /etc/boskos + name: boskos + readOnly: true + - mountPath: /secrets/ci-pull-credentials + name: ci-pull-credentials + readOnly: true + - mountPath: /secrets/gcs + name: gcs-credentials + readOnly: true + - mountPath: /secrets/manifest-tool + name: manifest-tool-local-pusher + readOnly: true + - mountPath: /etc/pull-secret + name: pull-secret + readOnly: true + - mountPath: /etc/report + name: result-aggregator + readOnly: true + serviceAccountName: ci-operator + volumes: + - name: boskos + secret: + items: + - key: credentials + path: credentials + secretName: boskos-credentials + - name: ci-pull-credentials + secret: + secretName: ci-pull-credentials + - name: manifest-tool-local-pusher + secret: + secretName: manifest-tool-local-pusher + - name: pull-secret + secret: + secretName: registry-pull-credentials + - name: result-aggregator + secret: + secretName: result-aggregator + trigger: (?m)^/test( | .* )s390x-e2e,?($|\s.*) - agent: kubernetes always_run: false branches: diff --git a/ci-operator/step-registry/cluster-resource-override/OWNERS b/ci-operator/step-registry/cluster-resource-override/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/OWNERS b/ci-operator/step-registry/cluster-resource-override/s390x/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/OWNERS b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh new file mode 100755 index 0000000000000..45f8a020b764a --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euo pipefail + +echo "=== Cleaning up ClusterResourceOverride s390x test components (best effort) ===" + +oc delete clusterresourceoverride cluster -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true +oc delete subscription "${CRO_SUBSCRIPTION_NAME}" -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true +oc delete csv --all -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true +oc delete operatorgroup --all -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true +oc delete imagedigestmirrorset "${CRO_IDMS_NAME}" --ignore-not-found || true +oc delete ns "${CRO_NAMESPACE}" --ignore-not-found --timeout=180s || true + +echo "=== Component cleanup complete ===" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json new file mode 100644 index 0000000000000..8b27acd2974f8 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml", + "owners": { + "approvers": [ + "multiarch-approvers" + ], + "reviewers": [ + "multiarch-reviewers" + ] + } +} diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml new file mode 100644 index 0000000000000..b859889ee6a3a --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml @@ -0,0 +1,29 @@ +ref: + as: cluster-resource-override-s390x-cleanup + from_image: + namespace: ocp + name: cli-jq + tag: latest + commands: cluster-resource-override-s390x-cleanup-commands.sh + grace_period: 1m0s + resources: + requests: + cpu: 100m + memory: 200Mi + timeout: 15m0s + env: + - name: CRO_NAMESPACE + default: "openshift-cluster-resource-override" + documentation: |- + Namespace where the ClusterResourceOverride operator was installed. + - name: CRO_SUBSCRIPTION_NAME + default: "clusterresourceoverride" + documentation: |- + Subscription name to delete during cleanup. + - name: CRO_IDMS_NAME + default: "cluster-resource-override-idms" + documentation: |- + ImageDigestMirrorSet name to delete during cleanup. + documentation: |- + Best-effort cleanup of ClusterResourceOverride operator resources created by + the s390x install step (CR, Subscription, CSVs, namespace, IDMS). diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json new file mode 100644 index 0000000000000..f9b864d233281 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.yaml", + "owners": { + "approvers": [ + "multiarch-approvers" + ], + "reviewers": [ + "multiarch-reviewers" + ] + } +} diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.yaml new file mode 100644 index 0000000000000..af72556a6f20d --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.yaml @@ -0,0 +1,25 @@ +workflow: + as: cluster-resource-override-s390x + steps: + allow_best_effort_post_steps: true + pre: + - ref: upi-libvirt-cleanup-pre + - chain: upi-conf-libvirt + - ref: ipi-debug-missing-static-pod-controller-degraded + - ref: ipi-conf-etcd-on-ramfs + - chain: upi-install-libvirt + test: + - chain: cluster-resource-override-s390x-test + post: + - ref: cluster-resource-override-s390x-cleanup + - ref: ipi-conf-debug-kdump-gather-logs + - chain: gather + - ref: upi-libvirt-cleanup-post + documentation: |- + End-to-end workflow for the ClusterResourceOverride operator on s390x (IBM Z). + Provisions an OCP cluster on the VPN'd IBM Z CI environment using the same + UPI/libvirt pre and post steps as openshift-e2e-libvirt-vpn, installs the + ClusterResourceOverride operator via OLM (with optional ImageDigestMirrorSet + image source changes), creates the ClusterResourceOverride CR, then runs the + test step. Component cleanup runs first in post, followed by gather and + cluster deprovisioning. diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/OWNERS b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh new file mode 100755 index 0000000000000..f6d3aa6be81ca --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +set -euo pipefail + +wait_for_csv() { + local ns="$1" sub="$2" csv phase + echo "Waiting for CSV of subscription ${sub} in ${ns} ..." + for _ in $(seq 1 90); do + csv="$(oc get subscription "${sub}" -n "${ns}" -o jsonpath='{.status.installedCSV}' 2>/dev/null || true)" + if [[ -n "${csv}" ]]; then + phase="$(oc get csv "${csv}" -n "${ns}" -o jsonpath='{.status.phase}' 2>/dev/null || true)" + echo " ${csv} phase: ${phase:-}" + [[ "${phase}" == "Succeeded" ]] && return 0 + fi + sleep 10 + done + echo "ERROR: CSV for ${sub} did not reach Succeeded" >&2 + oc get subscription "${sub}" -n "${ns}" -o yaml >&2 || true + oc get csv -n "${ns}" -o yaml >&2 || true + oc get events -n "${ns}" --sort-by='.lastTimestamp' | tail -30 >&2 || true + return 1 +} + +apply_idms_if_configured() { + if [[ -z "${CRO_MIRROR_OPERATOR_IMAGE}" && -z "${CRO_MIRROR_OPERAND_IMAGE}" ]]; then + echo "=== Skipping ImageDigestMirrorSet (no mirror images configured) ===" + return 0 + fi + + echo "=== Applying ImageDigestMirrorSet ${CRO_IDMS_NAME} (image source change) ===" + { + echo "apiVersion: config.openshift.io/v1" + echo "kind: ImageDigestMirrorSet" + echo "metadata:" + echo " name: ${CRO_IDMS_NAME}" + echo "spec:" + echo " imageDigestMirrors:" + if [[ -n "${CRO_MIRROR_OPERATOR_IMAGE}" ]]; then + echo " - source: ${CRO_SOURCE_OPERATOR_IMAGE}" + echo " mirrors:" + echo " - ${CRO_MIRROR_OPERATOR_IMAGE}" + fi + if [[ -n "${CRO_MIRROR_OPERAND_IMAGE}" ]]; then + echo " - source: ${CRO_SOURCE_OPERAND_IMAGE}" + echo " mirrors:" + echo " - ${CRO_MIRROR_OPERAND_IMAGE}" + fi + } | oc apply -f - +} + +echo "=== Ensuring operator namespace ${CRO_NAMESPACE} ===" +oc get ns "${CRO_NAMESPACE}" >/dev/null 2>&1 || oc create ns "${CRO_NAMESPACE}" + +apply_idms_if_configured + +echo "=== Waiting for PackageManifest ${CRO_PACKAGE_NAME} from ${CRO_CATALOG_SOURCE} ===" +for i in $(seq 1 36); do + if oc get packagemanifest -n openshift-marketplace "${CRO_PACKAGE_NAME}" >/dev/null 2>&1; then + echo "PackageManifest found." + break + fi + echo "Waiting for PackageManifest... (${i}/36)" + sleep 10 +done + +if ! oc get packagemanifest -n openshift-marketplace "${CRO_PACKAGE_NAME}" >/dev/null 2>&1; then + echo "ERROR: PackageManifest '${CRO_PACKAGE_NAME}' not found in openshift-marketplace" >&2 + oc get packagemanifest -n openshift-marketplace 2>/dev/null | grep -i clusterresource || true + oc get catalogsource -n "${CRO_CATALOG_SOURCE_NAMESPACE}" -o wide >&2 || true + exit 1 +fi + +echo "=== Creating OperatorGroup and Subscription ===" +cat < "${ARTIFACT_DIR}/clusterresourceoverride-cr.yaml" || true +fi + +echo "=== ClusterResourceOverride operator install complete ===" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json new file mode 100644 index 0000000000000..08c8197f25519 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml", + "owners": { + "approvers": [ + "multiarch-approvers" + ], + "reviewers": [ + "multiarch-reviewers" + ] + } +} diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml new file mode 100644 index 0000000000000..e99791ec3962b --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -0,0 +1,77 @@ +ref: + as: cluster-resource-override-s390x-install-operator + from_image: + namespace: ocp + name: cli-jq + tag: latest + commands: cluster-resource-override-s390x-install-operator-commands.sh + grace_period: 1m0s + resources: + requests: + cpu: 100m + memory: 200Mi + timeout: 40m0s + env: + - name: CRO_NAMESPACE + default: "openshift-cluster-resource-override" + documentation: |- + Namespace where the ClusterResourceOverride operator is installed. + - name: CRO_PACKAGE_NAME + default: "clusterresourceoverride" + documentation: |- + OLM package name to subscribe to. Product catalogs often use + "clusterresourceoverride"; upstream bundle annotations use + "clusterresourceoverride-operator". + - name: CRO_SUBSCRIPTION_NAME + default: "clusterresourceoverride" + documentation: |- + Name of the Subscription object created in CRO_NAMESPACE. + - name: CRO_CHANNEL + default: "stable" + documentation: |- + Subscription channel for the ClusterResourceOverride operator. + - name: CRO_CATALOG_SOURCE + default: "redhat-operators" + documentation: |- + CatalogSource name used for the Subscription (in openshift-marketplace + unless CRO_CATALOG_SOURCE_NAMESPACE is overridden). + - name: CRO_CATALOG_SOURCE_NAMESPACE + default: "openshift-marketplace" + documentation: |- + Namespace of the CatalogSource referenced by the Subscription. + - name: CRO_CREATE_CR + default: "true" + documentation: |- + When "true", create the ClusterResourceOverride CR after the CSV is Ready. + - name: CRO_IDMS_NAME + default: "cluster-resource-override-idms" + documentation: |- + Name of the ImageDigestMirrorSet created when mirror env vars are set. + - name: CRO_SOURCE_OPERATOR_IMAGE + default: "registry.redhat.io/openshift4/ose-clusterresourceoverride-rhel9-operator" + documentation: |- + Source operator image repository for ImageDigestMirrorSet. Ignored when + CRO_MIRROR_OPERATOR_IMAGE is empty. + - name: CRO_MIRROR_OPERATOR_IMAGE + default: "" + documentation: |- + Mirror repository for the operator image. When non-empty, an + ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERATOR_IMAGE + to this mirror (image source change). + - name: CRO_SOURCE_OPERAND_IMAGE + default: "registry.redhat.io/openshift4/ose-clusterresourceoverride-rhel9" + documentation: |- + Source operand image repository for ImageDigestMirrorSet. Ignored when + CRO_MIRROR_OPERAND_IMAGE is empty. + - name: CRO_MIRROR_OPERAND_IMAGE + default: "" + documentation: |- + Mirror repository for the operand (admission webhook) image. When non-empty, + an ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERAND_IMAGE + to this mirror. + documentation: |- + Installs the ClusterResourceOverride operator via OLM Subscription on a + provisioned s390x cluster. Optionally applies an ImageDigestMirrorSet to + redirect registry.redhat.io operator/operand pulls to mirror repositories + (image source change). Waits for the CSV to Succeed, then optionally creates + the ClusterResourceOverride CR (name: cluster). diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/OWNERS b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh new file mode 100755 index 0000000000000..933d0ac1244e1 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -euo pipefail + +echo "=== ClusterResourceOverride s390x placeholder test ===" +echo "Namespace: ${CRO_NAMESPACE}" + +echo "=== Operator status ===" +oc get deployment,pods,csv,subscription -n "${CRO_NAMESPACE}" -o wide || true +oc get clusterresourceoverride -A -o wide || true + +echo "=== Checking operator Deployment Available ===" +oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=300s + +oc get deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" -o yaml \ + > "${ARTIFACT_DIR}/clusterresourceoverride-operator-deployment.yaml" || true +oc get csv -n "${CRO_NAMESPACE}" -o yaml \ + > "${ARTIFACT_DIR}/clusterresourceoverride-csv.yaml" || true + +echo "=== Placeholder test passed (replace with real testsuite later) ===" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json new file mode 100644 index 0000000000000..d0b6d63a8bac8 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml", + "owners": { + "approvers": [ + "multiarch-approvers" + ], + "reviewers": [ + "multiarch-reviewers" + ] + } +} diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml new file mode 100644 index 0000000000000..216aa52724ee7 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml @@ -0,0 +1,22 @@ +ref: + as: cluster-resource-override-s390x-run-tests + from_image: + namespace: ocp + name: cli-jq + tag: latest + commands: cluster-resource-override-s390x-run-tests-commands.sh + grace_period: 1m0s + resources: + requests: + cpu: 100m + memory: 200Mi + timeout: 30m0s + env: + - name: CRO_NAMESPACE + default: "openshift-cluster-resource-override" + documentation: |- + Namespace where the ClusterResourceOverride operator is installed. + documentation: |- + Placeholder test step for ClusterResourceOverride on s390x. Currently verifies + the operator Deployment is Available and dumps basic status for artifacts. + Replace with the real testsuite when ready. diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/test/OWNERS b/ci-operator/step-registry/cluster-resource-override/s390x/test/OWNERS new file mode 100644 index 0000000000000..68eeddf0cd187 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/test/OWNERS @@ -0,0 +1,4 @@ +approvers: +- multiarch-approvers +reviewers: +- multiarch-reviewers diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json new file mode 100644 index 0000000000000..e17195e146be9 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json @@ -0,0 +1,11 @@ +{ + "path": "cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml", + "owners": { + "approvers": [ + "multiarch-approvers" + ], + "reviewers": [ + "multiarch-reviewers" + ] + } +} diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml new file mode 100644 index 0000000000000..b0cccc76d4a68 --- /dev/null +++ b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml @@ -0,0 +1,11 @@ +chain: + as: cluster-resource-override-s390x-test + steps: + - ref: cluster-resource-override-s390x-install-operator + - ref: cluster-resource-override-s390x-run-tests + documentation: |- + Installs the ClusterResourceOverride operator via OLM on a provisioned s390x + OCP cluster (optional ImageDigestMirrorSet + Subscription), creates the + ClusterResourceOverride CR, then runs the placeholder test step. + Component and cluster cleanup are handled by the post phase of the + cluster-resource-override-s390x workflow. From b8064e957ac73d5b38f8f212addfb63e8c07268e Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 16:18:09 +0530 Subject: [PATCH 02/15] Run operator repo make e2e in the s390x test step. Use the pipeline src image so the ClusterResourceOverride Go e2e suite runs against the OLM-installed operator, skipping upgrade-only tests by default. Co-authored-by: Cursor --- ...ource-override-s390x-run-tests-commands.sh | 20 +++++++++-------- ...resource-override-s390x-run-tests-ref.yaml | 22 +++++++++++-------- ...er-resource-override-s390x-test-chain.yaml | 3 ++- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh index 933d0ac1244e1..c7952e487e187 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh @@ -2,20 +2,22 @@ set -euo pipefail -echo "=== ClusterResourceOverride s390x placeholder test ===" +echo "=== ClusterResourceOverride s390x e2e ===" echo "Namespace: ${CRO_NAMESPACE}" +echo "E2E_SKIP: ${E2E_SKIP:-}" -echo "=== Operator status ===" +echo "=== Operator status before tests ===" oc get deployment,pods,csv,subscription -n "${CRO_NAMESPACE}" -o wide || true oc get clusterresourceoverride -A -o wide || true -echo "=== Checking operator Deployment Available ===" oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ - -n "${CRO_NAMESPACE}" --timeout=300s + -n "${CRO_NAMESPACE}" --timeout=600s -oc get deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" -o yaml \ - > "${ARTIFACT_DIR}/clusterresourceoverride-operator-deployment.yaml" || true -oc get csv -n "${CRO_NAMESPACE}" -o yaml \ - > "${ARTIFACT_DIR}/clusterresourceoverride-csv.yaml" || true +# make e2e expects OPERATOR_NAMESPACE and KUBECONFIG; KUBECONFIG is injected by ci-operator. +export OPERATOR_NAMESPACE="${CRO_NAMESPACE}" +export KUBECTL="$(which oc)" -echo "=== Placeholder test passed (replace with real testsuite later) ===" +echo "=== Running make e2e ===" +make e2e E2E_SKIP="${E2E_SKIP}" OPERATOR_NAMESPACE="${CRO_NAMESPACE}" KUBECTL="${KUBECTL}" + +echo "=== e2e complete ===" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml index 216aa52724ee7..835c98cde0e4e 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml @@ -1,22 +1,26 @@ ref: as: cluster-resource-override-s390x-run-tests - from_image: - namespace: ocp - name: cli-jq - tag: latest + from: src + cli: latest commands: cluster-resource-override-s390x-run-tests-commands.sh grace_period: 1m0s resources: requests: cpu: 100m memory: 200Mi - timeout: 30m0s + timeout: 60m0s env: - name: CRO_NAMESPACE default: "openshift-cluster-resource-override" documentation: |- - Namespace where the ClusterResourceOverride operator is installed. + Namespace where the ClusterResourceOverride operator is installed. Must match + OPERATOR_NAMESPACE expected by make e2e (default openshift-cluster-resource-override). + - name: E2E_SKIP + default: "TestUpgradePre|TestUpgradePost" + documentation: |- + Regex passed to go test -skip. Defaults to skipping upgrade-only tests that + require the dedicated pre/post upgrade flow. documentation: |- - Placeholder test step for ClusterResourceOverride on s390x. Currently verifies - the operator Deployment is Available and dumps basic status for artifacts. - Replace with the real testsuite when ready. + Runs the ClusterResourceOverride admission operator Go e2e suite from this + repository (make e2e / ./test/e2e/...) against the operator already installed + on the s390x cluster. Skips upgrade-only tests by default. diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml index b0cccc76d4a68..4d03aa84e266c 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.yaml @@ -6,6 +6,7 @@ chain: documentation: |- Installs the ClusterResourceOverride operator via OLM on a provisioned s390x OCP cluster (optional ImageDigestMirrorSet + Subscription), creates the - ClusterResourceOverride CR, then runs the placeholder test step. + ClusterResourceOverride CR, then runs the repository Go e2e suite + (make e2e / ./test/e2e/...), skipping upgrade-only tests by default. Component and cluster cleanup are handled by the post phase of the cluster-resource-override-s390x workflow. From 58ad158ee46654817327dce36503341f02bc915b Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 16:25:33 +0530 Subject: [PATCH 03/15] Override CRO operator/operand images to public quay builds on s390x. After OLM install, patch the CSV and Deployment to use the s390x quay.io images so the job exercises those builds without a custom pull secret. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 2 + ...verride-s390x-install-operator-commands.sh | 74 ++++++++++++++++++- ...e-override-s390x-install-operator-ref.yaml | 25 +++++-- 3 files changed, 94 insertions(+), 7 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index 6f5ce3531508c..d10a77f0581b7 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -49,6 +49,8 @@ tests: BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" + CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 + CRO_OPERATOR_IMAGE: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 ETCD_DISK_SPEED: slow NODE_TUNING: "true" USE_EXTERNAL_DNS: "true" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh index f6d3aa6be81ca..a3443cc46a1ef 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh @@ -23,7 +23,7 @@ wait_for_csv() { apply_idms_if_configured() { if [[ -z "${CRO_MIRROR_OPERATOR_IMAGE}" && -z "${CRO_MIRROR_OPERAND_IMAGE}" ]]; then - echo "=== Skipping ImageDigestMirrorSet (no mirror images configured) ===" + echo "=== Skipping ImageDigestMirrorSet (no mirror repositories configured) ===" return 0 fi @@ -48,6 +48,72 @@ apply_idms_if_configured() { } | oc apply -f - } +patch_operator_images() { + local csv + if [[ -z "${CRO_OPERATOR_IMAGE}" && -z "${CRO_OPERAND_IMAGE}" ]]; then + echo "=== Skipping image overrides (CRO_OPERATOR_IMAGE / CRO_OPERAND_IMAGE unset) ===" + return 0 + fi + + csv="$(oc get subscription "${CRO_SUBSCRIPTION_NAME}" -n "${CRO_NAMESPACE}" -o jsonpath='{.status.installedCSV}')" + if [[ -z "${csv}" ]]; then + echo "ERROR: no installedCSV for ${CRO_SUBSCRIPTION_NAME}" >&2 + return 1 + fi + + echo "=== Patching CSV ${csv} images ===" + echo " operator: ${CRO_OPERATOR_IMAGE:-}" + echo " operand: ${CRO_OPERAND_IMAGE:-}" + + oc get csv "${csv}" -n "${CRO_NAMESPACE}" -o json \ + | jq \ + --arg op_img "${CRO_OPERATOR_IMAGE}" \ + --arg operand_img "${CRO_OPERAND_IMAGE}" ' + def set_container_image: + if $op_img != "" then + (.spec.install.spec.deployments[]? + | select(.name == "clusterresourceoverride-operator") + | .spec.template.spec.containers[]? + | select(.name == "clusterresourceoverride-operator") + | .image) = $op_img + else . end; + def set_operand_env: + if $operand_img != "" then + (.spec.install.spec.deployments[]? + | select(.name == "clusterresourceoverride-operator") + | .spec.template.spec.containers[]? + | select(.name == "clusterresourceoverride-operator") + | .env[]? + | select(.name == "OPERAND_IMAGE") + | .value) = $operand_img + else . end; + def set_related_images: + if (.spec.relatedImages|type) == "array" then + .spec.relatedImages |= map( + if $op_img != "" and (.name|test("operator";"i")) then .image = $op_img + elif $operand_img != "" and (.name|test("operand|clusterresourceoverride";"i")) and (.name|test("operator";"i")|not) then .image = $operand_img + else . end + ) + else . end; + set_container_image | set_operand_env | set_related_images + ' \ + | oc apply -f - + + if [[ -n "${CRO_OPERATOR_IMAGE}" ]]; then + oc set image deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" \ + "clusterresourceoverride-operator=${CRO_OPERATOR_IMAGE}" + fi + if [[ -n "${CRO_OPERAND_IMAGE}" ]]; then + oc set env deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" \ + "OPERAND_IMAGE=${CRO_OPERAND_IMAGE}" + fi + + oc rollout status deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=600s +} + echo "=== Ensuring operator namespace ${CRO_NAMESPACE} ===" oc get ns "${CRO_NAMESPACE}" >/dev/null 2>&1 || oc create ns "${CRO_NAMESPACE}" @@ -97,6 +163,12 @@ EOF wait_for_csv "${CRO_NAMESPACE}" "${CRO_SUBSCRIPTION_NAME}" echo "=== Waiting for operator Deployment Available ===" +oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=600s || true +oc get deployment,pods -n "${CRO_NAMESPACE}" + +patch_operator_images + oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ -n "${CRO_NAMESPACE}" --timeout=600s oc get deployment,pods -n "${CRO_NAMESPACE}" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml index e99791ec3962b..ff7d346a08beb 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -43,6 +43,18 @@ ref: default: "true" documentation: |- When "true", create the ClusterResourceOverride CR after the CSV is Ready. + - name: CRO_OPERATOR_IMAGE + default: "" + documentation: |- + Optional override for the clusterresourceoverride-operator container image + (CSV + Deployment). When set, patches the installed CSV and Deployment after + OLM install. Example: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 + - name: CRO_OPERAND_IMAGE + default: "" + documentation: |- + Optional override for OPERAND_IMAGE on the operator Deployment/CSV. When set, + patches relatedImages and the OPERAND_IMAGE env after OLM install. + Example: quay.io/tdudhade/clusterresourceoverride:0.0.5 - name: CRO_IDMS_NAME default: "cluster-resource-override-idms" documentation: |- @@ -57,7 +69,8 @@ ref: documentation: |- Mirror repository for the operator image. When non-empty, an ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERATOR_IMAGE - to this mirror (image source change). + to this mirror (image source change). Prefer CRO_OPERATOR_IMAGE when using + a full pullspec override (tag or digest). - name: CRO_SOURCE_OPERAND_IMAGE default: "registry.redhat.io/openshift4/ose-clusterresourceoverride-rhel9" documentation: |- @@ -68,10 +81,10 @@ ref: documentation: |- Mirror repository for the operand (admission webhook) image. When non-empty, an ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERAND_IMAGE - to this mirror. + to this mirror. Prefer CRO_OPERAND_IMAGE when using a full pullspec override. documentation: |- Installs the ClusterResourceOverride operator via OLM Subscription on a - provisioned s390x cluster. Optionally applies an ImageDigestMirrorSet to - redirect registry.redhat.io operator/operand pulls to mirror repositories - (image source change). Waits for the CSV to Succeed, then optionally creates - the ClusterResourceOverride CR (name: cluster). + provisioned s390x cluster. Optionally applies an ImageDigestMirrorSet and/or + patches the installed CSV/Deployment to use CRO_OPERATOR_IMAGE and + CRO_OPERAND_IMAGE. Waits for the CSV to Succeed, then optionally creates the + ClusterResourceOverride CR (name: cluster). From cd2ec0fd9144ffe3cb073bf7e0b7be5e11561cd9 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 21:03:08 +0530 Subject: [PATCH 04/15] Use OCP 4.22 nightly for ClusterResourceOverride s390x e2e. Match the Kuadrant s390x release pin so install pulls latest 4.22 s390x nightlies instead of 5.0.0-ec.5. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index d10a77f0581b7..a0bc980a6bf46 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -1,32 +1,34 @@ base_images: cli: - name: "5.0" + name: "4.22" namespace: ocp tag: cli libvirt-installer: - name: "5.0" + name: "4.22" namespace: ocp tag: libvirt-installer upi-installer: - name: "5.0" + name: "4.22" namespace: ocp tag: upi-installer build_root: image_stream_tag: name: release namespace: openshift - tag: rhel-9-release-golang-1.26-openshift-5.0 + tag: rhel-9-release-golang-1.24-openshift-4.22 releases: latest: - release: - architecture: s390x - channel: candidate - version: 5.0.0-ec.5 + candidate: + architecture: multi + product: ocp + stream: nightly + version: "4.22" s390x-latest: - release: + candidate: architecture: s390x - channel: candidate - version: 5.0.0-ec.5 + product: ocp + stream: nightly + version: "4.22" resources: '*': limits: @@ -46,7 +48,7 @@ tests: OPENSHIFT_INSTALL_TARGET: release:s390x-latest env: ARCH: s390x - BRANCH: "5.0" + BRANCH: "4.22" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 From 3e44dbd0e8d9fd0d0040f90c2b51aff24c67733b Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 21:21:39 +0530 Subject: [PATCH 05/15] Pin ClusterResourceOverride s390x e2e to build12. build07 lacks VPN reachability to the IBM OZ libvirt pool; match other libvirt-s390x-vpn jobs on build12. Co-authored-by: Cursor --- ...er-resource-override-admission-operator-main-presubmits.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml index 1ba413a4011a1..bb6683b182a7b 100644 --- a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml +++ b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml @@ -381,7 +381,7 @@ presubmits: branches: - ^main$ - ^main- - cluster: build07 + cluster: build12 context: ci/prow/s390x-e2e decorate: true decoration_config: From 523b98f77fa7c2327459dde09dea73beb03579f0 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 21:31:27 +0530 Subject: [PATCH 06/15] Fix generated-config, registry metadata, and shellcheck for s390x e2e. Add the prowgen job-release label, strip metadata EOF newlines, and split KUBECTL export so required release PR checks and rehearse can proceed. Co-authored-by: Cursor --- ...r-resource-override-admission-operator-main-presubmits.yaml | 1 + .../cluster-resource-override-s390x-cleanup-ref.metadata.json | 2 +- .../cluster-resource-override-s390x-workflow.metadata.json | 2 +- ...-resource-override-s390x-install-operator-ref.metadata.json | 2 +- .../cluster-resource-override-s390x-run-tests-commands.sh | 3 ++- ...cluster-resource-override-s390x-run-tests-ref.metadata.json | 2 +- .../cluster-resource-override-s390x-test-chain.metadata.json | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml index bb6683b182a7b..d40b72ec75c70 100644 --- a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml +++ b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml @@ -392,6 +392,7 @@ presubmits: ci-operator.openshift.io/cloud-cluster-profile: libvirt-s390x-vpn-oz ci-operator.openshift.io/variant: s390x ci.openshift.io/generator: prowgen + job-release: "4.22" pj-rehearse.openshift.io/can-be-rehearsed: "true" name: pull-ci-openshift-cluster-resource-override-admission-operator-main-s390x-e2e optional: true diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json index 8b27acd2974f8..b8ca129058121 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.metadata.json @@ -8,4 +8,4 @@ "multiarch-reviewers" ] } -} +} \ No newline at end of file diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json index f9b864d233281..f037d9d487b7d 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cluster-resource-override-s390x-workflow.metadata.json @@ -8,4 +8,4 @@ "multiarch-reviewers" ] } -} +} \ No newline at end of file diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json index 08c8197f25519..24eca770cbcd2 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.metadata.json @@ -8,4 +8,4 @@ "multiarch-reviewers" ] } -} +} \ No newline at end of file diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh index c7952e487e187..a5591a221ff3a 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-commands.sh @@ -15,7 +15,8 @@ oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ # make e2e expects OPERATOR_NAMESPACE and KUBECONFIG; KUBECONFIG is injected by ci-operator. export OPERATOR_NAMESPACE="${CRO_NAMESPACE}" -export KUBECTL="$(which oc)" +KUBECTL="$(which oc)" +export KUBECTL echo "=== Running make e2e ===" make e2e E2E_SKIP="${E2E_SKIP}" OPERATOR_NAMESPACE="${CRO_NAMESPACE}" KUBECTL="${KUBECTL}" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json index d0b6d63a8bac8..3b116b91923c6 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.metadata.json @@ -8,4 +8,4 @@ "multiarch-reviewers" ] } -} +} \ No newline at end of file diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json index e17195e146be9..8f18fe9bbca86 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json +++ b/ci-operator/step-registry/cluster-resource-override/s390x/test/cluster-resource-override-s390x-test-chain.metadata.json @@ -8,4 +8,4 @@ "multiarch-reviewers" ] } -} +} \ No newline at end of file From 56a503a2e578bf8add3db48507a89847a3673483 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Fri, 7 Aug 2026 23:58:35 +0530 Subject: [PATCH 07/15] Pin s390x e2e to OCP 5.0.0-ec.5 and dump deploy failure artifacts. Return the libvirt job to the EC.5 candidate release and capture deployment/pod/event diagnostics when catalog or image-patch rollouts fail. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 26 +++-- ...de-admission-operator-main-presubmits.yaml | 2 +- ...verride-s390x-install-operator-commands.sh | 97 +++++++++++++++++-- 3 files changed, 101 insertions(+), 24 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index a0bc980a6bf46..d10a77f0581b7 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -1,34 +1,32 @@ base_images: cli: - name: "4.22" + name: "5.0" namespace: ocp tag: cli libvirt-installer: - name: "4.22" + name: "5.0" namespace: ocp tag: libvirt-installer upi-installer: - name: "4.22" + name: "5.0" namespace: ocp tag: upi-installer build_root: image_stream_tag: name: release namespace: openshift - tag: rhel-9-release-golang-1.24-openshift-4.22 + tag: rhel-9-release-golang-1.26-openshift-5.0 releases: latest: - candidate: - architecture: multi - product: ocp - stream: nightly - version: "4.22" + release: + architecture: s390x + channel: candidate + version: 5.0.0-ec.5 s390x-latest: - candidate: + release: architecture: s390x - product: ocp - stream: nightly - version: "4.22" + channel: candidate + version: 5.0.0-ec.5 resources: '*': limits: @@ -48,7 +46,7 @@ tests: OPENSHIFT_INSTALL_TARGET: release:s390x-latest env: ARCH: s390x - BRANCH: "4.22" + BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 diff --git a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml index d40b72ec75c70..10db759050301 100644 --- a/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml +++ b/ci-operator/jobs/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main-presubmits.yaml @@ -392,7 +392,7 @@ presubmits: ci-operator.openshift.io/cloud-cluster-profile: libvirt-s390x-vpn-oz ci-operator.openshift.io/variant: s390x ci.openshift.io/generator: prowgen - job-release: "4.22" + job-release: "5.0" pj-rehearse.openshift.io/can-be-rehearsed: "true" name: pull-ci-openshift-cluster-resource-override-admission-operator-main-s390x-e2e optional: true diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh index a3443cc46a1ef..9b6f4f2aca81a 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh @@ -18,9 +18,66 @@ wait_for_csv() { oc get subscription "${sub}" -n "${ns}" -o yaml >&2 || true oc get csv -n "${ns}" -o yaml >&2 || true oc get events -n "${ns}" --sort-by='.lastTimestamp' | tail -30 >&2 || true + dump_deployment_debug "csv-not-succeeded" return 1 } +dump_deployment_debug() { + local reason="${1:-deployment-failure}" + local out="${ARTIFACT_DIR}/cro-deploy-debug-${reason}" + mkdir -p "${out}" + + echo "=== DEBUG (${reason}): dumping operator deployment state to ${out} ===" >&2 + + { + echo "=== reason: ${reason} ===" + echo "=== namespace: ${CRO_NAMESPACE} ===" + echo "=== CRO_OPERATOR_IMAGE=${CRO_OPERATOR_IMAGE:-} ===" + echo "=== CRO_OPERAND_IMAGE=${CRO_OPERAND_IMAGE:-} ===" + date -u +"=== timestamp: %Y-%m-%dT%H:%M:%SZ ===" + } >"${out}/summary.txt" 2>&1 || true + + oc get all,csv,subscription,installplan,operatorgroup -n "${CRO_NAMESPACE}" -o wide \ + >"${out}/get-all-wide.txt" 2>&1 || true + oc get deployment,rs,pods -n "${CRO_NAMESPACE}" -o yaml \ + >"${out}/workload.yaml" 2>&1 || true + oc describe deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" \ + >"${out}/describe-deployment.txt" 2>&1 || true + oc get pods -n "${CRO_NAMESPACE}" -o wide \ + >"${out}/pods-wide.txt" 2>&1 || true + oc get pods -n "${CRO_NAMESPACE}" -o json \ + >"${out}/pods.json" 2>&1 || true + oc get events -n "${CRO_NAMESPACE}" --sort-by='.lastTimestamp' \ + >"${out}/events.txt" 2>&1 || true + + # Per-pod details (image pull / crashloop) + local pod + for pod in $(oc get pods -n "${CRO_NAMESPACE}" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null || true); do + oc describe pod "${pod}" -n "${CRO_NAMESPACE}" \ + >"${out}/describe-pod-${pod}.txt" 2>&1 || true + oc logs "${pod}" -n "${CRO_NAMESPACE}" --all-containers --tail=200 \ + >"${out}/logs-pod-${pod}.txt" 2>&1 || true + oc get pod "${pod}" -n "${CRO_NAMESPACE}" -o jsonpath='{.spec.containers[*].image}{"\n"}{.status.containerStatuses[*].image}{"\n"}{.status.containerStatuses[*].imageID}{"\n"}{.status.containerStatuses[*].state}{"\n"}' \ + >"${out}/images-pod-${pod}.txt" 2>&1 || true + done + + local csv + csv="$(oc get subscription "${CRO_SUBSCRIPTION_NAME}" -n "${CRO_NAMESPACE}" -o jsonpath='{.status.installedCSV}' 2>/dev/null || true)" + if [[ -n "${csv}" ]]; then + oc get csv "${csv}" -n "${CRO_NAMESPACE}" -o yaml >"${out}/csv.yaml" 2>&1 || true + oc describe csv "${csv}" -n "${CRO_NAMESPACE}" >"${out}/describe-csv.txt" 2>&1 || true + fi + + # Also echo a short digest into the build log for quick triage + echo "=== DEBUG (${reason}): deployments/pods ===" >&2 + oc get deployment,pods -n "${CRO_NAMESPACE}" -o wide >&2 || true + echo "=== DEBUG (${reason}): recent events ===" >&2 + oc get events -n "${CRO_NAMESPACE}" --sort-by='.lastTimestamp' | tail -40 >&2 || true + echo "=== DEBUG (${reason}): pod images/state ===" >&2 + oc get pods -n "${CRO_NAMESPACE}" -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\t"}{range .status.containerStatuses[*]}{.image}{"\t"}{.state}{"\n"}{end}{end}' >&2 || true + echo "=== DEBUG (${reason}): full dump under ${out} ===" >&2 +} + apply_idms_if_configured() { if [[ -z "${CRO_MIRROR_OPERATOR_IMAGE}" && -z "${CRO_MIRROR_OPERAND_IMAGE}" ]]; then echo "=== Skipping ImageDigestMirrorSet (no mirror repositories configured) ===" @@ -65,6 +122,10 @@ patch_operator_images() { echo " operator: ${CRO_OPERATOR_IMAGE:-}" echo " operand: ${CRO_OPERAND_IMAGE:-}" + echo "=== Pre-override deployment images ===" + oc get deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" \ + -o jsonpath='{.spec.template.spec.containers[*].name}{" -> "}{.spec.template.spec.containers[*].image}{"\n"}' || true + oc get csv "${csv}" -n "${CRO_NAMESPACE}" -o json \ | jq \ --arg op_img "${CRO_OPERATOR_IMAGE}" \ @@ -110,8 +171,16 @@ patch_operator_images() { "OPERAND_IMAGE=${CRO_OPERAND_IMAGE}" fi - oc rollout status deployment/clusterresourceoverride-operator \ - -n "${CRO_NAMESPACE}" --timeout=600s + echo "=== Post-override deployment images ===" + oc get deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" \ + -o jsonpath='{.spec.template.spec.containers[*].name}{" -> "}{.spec.template.spec.containers[*].image}{"\n"}' || true + oc set env deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" --list 2>/dev/null | grep -E 'OPERAND_IMAGE|RELATED' || true + + if ! oc rollout status deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=600s; then + dump_deployment_debug "rollout-after-image-patch" + return 1 + fi } echo "=== Ensuring operator namespace ${CRO_NAMESPACE} ===" @@ -162,16 +231,26 @@ EOF wait_for_csv "${CRO_NAMESPACE}" "${CRO_SUBSCRIPTION_NAME}" -echo "=== Waiting for operator Deployment Available ===" -oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ - -n "${CRO_NAMESPACE}" --timeout=600s || true -oc get deployment,pods -n "${CRO_NAMESPACE}" +echo "=== Waiting for operator Deployment Available (catalog images, pre-patch) ===" +if ! oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=600s; then + dump_deployment_debug "pre-patch-not-available" + exit 1 +fi +oc get deployment,pods -n "${CRO_NAMESPACE}" -o wide +echo "=== Catalog (pre-patch) operator image ===" +oc get deployment/clusterresourceoverride-operator -n "${CRO_NAMESPACE}" \ + -o jsonpath='{.spec.template.spec.containers[*].image}{"\n"}' || true patch_operator_images -oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ - -n "${CRO_NAMESPACE}" --timeout=600s -oc get deployment,pods -n "${CRO_NAMESPACE}" +echo "=== Waiting for operator Deployment Available (post-patch) ===" +if ! oc wait --for=condition=Available deployment/clusterresourceoverride-operator \ + -n "${CRO_NAMESPACE}" --timeout=600s; then + dump_deployment_debug "post-patch-not-available" + exit 1 +fi +oc get deployment,pods -n "${CRO_NAMESPACE}" -o wide if [[ "${CRO_CREATE_CR}" == "true" ]]; then echo "=== Creating ClusterResourceOverride CR ===" From 6b31f8c9a0877b9effd0f26f96ba1b06472751f1 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 00:14:17 +0530 Subject: [PATCH 08/15] Use ocp-s390x payload CRO images instead of quay overrides. Wire cro-operator/cro-operand from ocp-s390x:5.0 into the install step via dependencies so e2e patches ART s390x images after OLM subscribe. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 12 ++++++++-- ...e-override-s390x-install-operator-ref.yaml | 22 +++++++------------ 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index d10a77f0581b7..59897ca33a9a7 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -3,6 +3,14 @@ base_images: name: "5.0" namespace: ocp tag: cli + cro-operand: + name: "5.0" + namespace: ocp-s390x + tag: cluster-resource-override-admission + cro-operator: + name: "5.0" + namespace: ocp-s390x + tag: cluster-resource-override-admission-operator libvirt-installer: name: "5.0" namespace: ocp @@ -43,14 +51,14 @@ tests: steps: cluster_profile: libvirt-s390x-vpn-oz dependencies: + CRO_OPERAND_IMAGE: cro-operand + CRO_OPERATOR_IMAGE: cro-operator OPENSHIFT_INSTALL_TARGET: release:s390x-latest env: ARCH: s390x BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" - CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 - CRO_OPERATOR_IMAGE: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 ETCD_DISK_SPEED: slow NODE_TUNING: "true" USE_EXTERNAL_DNS: "true" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml index ff7d346a08beb..03187389d94cb 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -43,18 +43,6 @@ ref: default: "true" documentation: |- When "true", create the ClusterResourceOverride CR after the CSV is Ready. - - name: CRO_OPERATOR_IMAGE - default: "" - documentation: |- - Optional override for the clusterresourceoverride-operator container image - (CSV + Deployment). When set, patches the installed CSV and Deployment after - OLM install. Example: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 - - name: CRO_OPERAND_IMAGE - default: "" - documentation: |- - Optional override for OPERAND_IMAGE on the operator Deployment/CSV. When set, - patches relatedImages and the OPERAND_IMAGE env after OLM install. - Example: quay.io/tdudhade/clusterresourceoverride:0.0.5 - name: CRO_IDMS_NAME default: "cluster-resource-override-idms" documentation: |- @@ -82,9 +70,15 @@ ref: Mirror repository for the operand (admission webhook) image. When non-empty, an ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERAND_IMAGE to this mirror. Prefer CRO_OPERAND_IMAGE when using a full pullspec override. + dependencies: + - name: cro-operator + env: CRO_OPERATOR_IMAGE + - name: cro-operand + env: CRO_OPERAND_IMAGE documentation: |- Installs the ClusterResourceOverride operator via OLM Subscription on a provisioned s390x cluster. Optionally applies an ImageDigestMirrorSet and/or - patches the installed CSV/Deployment to use CRO_OPERATOR_IMAGE and - CRO_OPERAND_IMAGE. Waits for the CSV to Succeed, then optionally creates the + patches the installed CSV/Deployment using CRO_OPERATOR_IMAGE and + CRO_OPERAND_IMAGE (typically wired from ocp-s390x base_images via the + job dependencies). Waits for the CSV to Succeed, then optionally creates the ClusterResourceOverride CR (name: cluster). From 21cd71814ba08842bc2c315fbec91c0ce769121d Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 00:41:19 +0530 Subject: [PATCH 09/15] Pull CRO s390x overrides from ocp-s390x 4.22 imagestreams. 5.0 ocp-s390x CRO tags are missing; keep the cluster on 5.0.0-ec.5 and source operator/operand images from the 4.22 s390x ART tags instead. Co-authored-by: Cursor --- ...ster-resource-override-admission-operator-main__s390x.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index 59897ca33a9a7..1a081429939c0 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -4,11 +4,11 @@ base_images: namespace: ocp tag: cli cro-operand: - name: "5.0" + name: "4.22" namespace: ocp-s390x tag: cluster-resource-override-admission cro-operator: - name: "5.0" + name: "4.22" namespace: ocp-s390x tag: cluster-resource-override-admission-operator libvirt-installer: From c8f82a3342408bcf3ba5ba5144a015db35070cc9 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 00:42:44 +0530 Subject: [PATCH 10/15] Install CRO on s390x from OLM catalog only. Drop ocp-s390x cro-operator/cro-operand base images; leave image overrides optional so the job uses redhat-operators CSV images on 5.0.0-ec.5. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 10 -------- ...e-override-s390x-install-operator-ref.yaml | 24 +++++++++++-------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index 1a081429939c0..6f5ce3531508c 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -3,14 +3,6 @@ base_images: name: "5.0" namespace: ocp tag: cli - cro-operand: - name: "4.22" - namespace: ocp-s390x - tag: cluster-resource-override-admission - cro-operator: - name: "4.22" - namespace: ocp-s390x - tag: cluster-resource-override-admission-operator libvirt-installer: name: "5.0" namespace: ocp @@ -51,8 +43,6 @@ tests: steps: cluster_profile: libvirt-s390x-vpn-oz dependencies: - CRO_OPERAND_IMAGE: cro-operand - CRO_OPERATOR_IMAGE: cro-operator OPENSHIFT_INSTALL_TARGET: release:s390x-latest env: ARCH: s390x diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml index 03187389d94cb..ca4f374c51fe6 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -43,6 +43,16 @@ ref: default: "true" documentation: |- When "true", create the ClusterResourceOverride CR after the CSV is Ready. + - name: CRO_OPERATOR_IMAGE + default: "" + documentation: |- + Optional override for the clusterresourceoverride-operator container image + (CSV + Deployment). When empty, the image from the OLM catalog CSV is used. + - name: CRO_OPERAND_IMAGE + default: "" + documentation: |- + Optional override for OPERAND_IMAGE on the operator Deployment/CSV. When + empty, the catalog/CSV value is left unchanged. - name: CRO_IDMS_NAME default: "cluster-resource-override-idms" documentation: |- @@ -70,15 +80,9 @@ ref: Mirror repository for the operand (admission webhook) image. When non-empty, an ImageDigestMirrorSet entry is created mapping CRO_SOURCE_OPERAND_IMAGE to this mirror. Prefer CRO_OPERAND_IMAGE when using a full pullspec override. - dependencies: - - name: cro-operator - env: CRO_OPERATOR_IMAGE - - name: cro-operand - env: CRO_OPERAND_IMAGE documentation: |- Installs the ClusterResourceOverride operator via OLM Subscription on a - provisioned s390x cluster. Optionally applies an ImageDigestMirrorSet and/or - patches the installed CSV/Deployment using CRO_OPERATOR_IMAGE and - CRO_OPERAND_IMAGE (typically wired from ocp-s390x base_images via the - job dependencies). Waits for the CSV to Succeed, then optionally creates the - ClusterResourceOverride CR (name: cluster). + provisioned s390x cluster (redhat-operators by default). Optionally applies + an ImageDigestMirrorSet and/or patches CSV/Deployment when CRO_OPERATOR_IMAGE + / CRO_OPERAND_IMAGE are set. Waits for the CSV to Succeed, then optionally + creates the ClusterResourceOverride CR (name: cluster). From e1c36a7ff12ce00f98fbc4660ebb86231f746470 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 00:43:15 +0530 Subject: [PATCH 11/15] Restore quay CRO image overrides after OLM install on s390x. Keep catalog subscribe on 5.0.0-ec.5, then patch operator/operand to the public tdudhade quay builds for the rollout under test. Co-authored-by: Cursor --- ...luster-resource-override-admission-operator-main__s390x.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index 6f5ce3531508c..d10a77f0581b7 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -49,6 +49,8 @@ tests: BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" + CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 + CRO_OPERATOR_IMAGE: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 ETCD_DISK_SPEED: slow NODE_TUNING: "true" USE_EXTERNAL_DNS: "true" From 9771c8a0da28640ceef1826abd5f18780808442a Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 01:10:54 +0530 Subject: [PATCH 12/15] Pin ClusterResourceOverride s390x e2e to OCP 5.0 nightly. Use the multi/s390x nightly candidate streams instead of the 5.0.0-ec.5 release pin. Co-authored-by: Cursor --- ...-override-admission-operator-main__s390x.yaml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index d10a77f0581b7..e3916172d0673 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -18,15 +18,17 @@ build_root: tag: rhel-9-release-golang-1.26-openshift-5.0 releases: latest: - release: - architecture: s390x - channel: candidate - version: 5.0.0-ec.5 + candidate: + architecture: multi + product: ocp + stream: nightly + version: "5.0" s390x-latest: - release: + candidate: architecture: s390x - channel: candidate - version: 5.0.0-ec.5 + product: ocp + stream: nightly + version: "5.0" resources: '*': limits: From c880880ad55ea61d3b3705ec9aae46fc8823b613 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 10:43:03 +0530 Subject: [PATCH 13/15] Install ClusterResourceOverride on s390x from ART FBC CatalogSource. redhat-operators on 5.0 nightlies does not publish the package yet, so create a cro-art-fbc CatalogSource from the ART FBC index and drop quay image overrides. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 4 +- ...esource-override-s390x-cleanup-commands.sh | 4 + ...r-resource-override-s390x-cleanup-ref.yaml | 12 ++- ...verride-s390x-install-operator-commands.sh | 82 +++++++++++++++++-- ...e-override-s390x-install-operator-ref.yaml | 19 +++-- 5 files changed, 107 insertions(+), 14 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index e3916172d0673..74636b8c74049 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -51,8 +51,8 @@ tests: BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" - CRO_OPERAND_IMAGE: quay.io/tdudhade/clusterresourceoverride:0.0.5 - CRO_OPERATOR_IMAGE: quay.io/tdudhade/cluster-resource-override-admission-operator:0.0.5 + CRO_CATALOG_IMAGE: quay.io/redhat-user-workloads/ocp-art-tenant/art-fbc:ocp__5.0__ose-clusterresourceoverride-rhel9-operator + CRO_CATALOG_SOURCE: cro-art-fbc ETCD_DISK_SPEED: slow NODE_TUNING: "true" USE_EXTERNAL_DNS: "true" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh index 45f8a020b764a..0043b00b77ff9 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-commands.sh @@ -9,6 +9,10 @@ oc delete subscription "${CRO_SUBSCRIPTION_NAME}" -n "${CRO_NAMESPACE}" --ignore oc delete csv --all -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true oc delete operatorgroup --all -n "${CRO_NAMESPACE}" --ignore-not-found --timeout=60s || true oc delete imagedigestmirrorset "${CRO_IDMS_NAME}" --ignore-not-found || true +# Only delete custom catalogs we created; never remove stock redhat-operators. +if [[ -n "${CRO_CATALOG_SOURCE:-}" && "${CRO_CATALOG_SOURCE}" != "redhat-operators" && "${CRO_CATALOG_SOURCE}" != "certified-operators" && "${CRO_CATALOG_SOURCE}" != "community-operators" && "${CRO_CATALOG_SOURCE}" != "redhat-marketplace" ]]; then + oc delete catalogsource "${CRO_CATALOG_SOURCE}" -n "${CRO_CATALOG_SOURCE_NAMESPACE:-openshift-marketplace}" --ignore-not-found || true +fi oc delete ns "${CRO_NAMESPACE}" --ignore-not-found --timeout=180s || true echo "=== Component cleanup complete ===" diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml index b859889ee6a3a..a7000d031c760 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/cleanup/cluster-resource-override-s390x-cleanup-ref.yaml @@ -24,6 +24,16 @@ ref: default: "cluster-resource-override-idms" documentation: |- ImageDigestMirrorSet name to delete during cleanup. + - name: CRO_CATALOG_SOURCE + default: "redhat-operators" + documentation: |- + CatalogSource name. Custom sources (not stock marketplace catalogs) are + deleted during cleanup. + - name: CRO_CATALOG_SOURCE_NAMESPACE + default: "openshift-marketplace" + documentation: |- + Namespace of CRO_CATALOG_SOURCE. documentation: |- Best-effort cleanup of ClusterResourceOverride operator resources created by - the s390x install step (CR, Subscription, CSVs, namespace, IDMS). + the s390x install step (CR, Subscription, CSVs, namespace, IDMS, custom + CatalogSource). diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh index 9b6f4f2aca81a..a74ccd82f0f57 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh @@ -105,6 +105,71 @@ apply_idms_if_configured() { } | oc apply -f - } +ensure_catalog_source() { + if [[ -z "${CRO_CATALOG_IMAGE}" ]]; then + echo "=== Using existing CatalogSource ${CRO_CATALOG_SOURCE} (CRO_CATALOG_IMAGE unset) ===" + return 0 + fi + + echo "=== Creating CatalogSource ${CRO_CATALOG_SOURCE} from ${CRO_CATALOG_IMAGE} ===" + oc delete catalogsource "${CRO_CATALOG_SOURCE}" -n "${CRO_CATALOG_SOURCE_NAMESPACE}" --ignore-not-found=true + + # OCP 4.15+ / modern kube: use extractContent cache (OCPBUGS-31427) + cat </dev/null || true)" + if [[ "${status}" == "READY" ]]; then + echo "CatalogSource ${CRO_CATALOG_SOURCE} is READY" + return 0 + fi + echo "Waiting for CatalogSource READY... (${i}/60) state=${status:-}" + sleep 10 + done + + echo "ERROR: CatalogSource ${CRO_CATALOG_SOURCE} did not become READY" >&2 + oc -n "${CRO_CATALOG_SOURCE_NAMESPACE}" get catalogsource "${CRO_CATALOG_SOURCE}" -o yaml >&2 || true + oc -n "${CRO_CATALOG_SOURCE_NAMESPACE}" get pods -l "olm.catalogSource=${CRO_CATALOG_SOURCE}" -o wide >&2 || true + oc -n "${CRO_CATALOG_SOURCE_NAMESPACE}" get pods -l "olm.catalogSource=${CRO_CATALOG_SOURCE}" -o yaml >&2 || true + return 1 +} + +package_manifest_ready() { + oc get packagemanifest -n openshift-marketplace -o json \ + | jq -e \ + --arg pkg "${CRO_PACKAGE_NAME}" \ + --arg src "${CRO_CATALOG_SOURCE}" ' + .items[] + | select(.status.catalogSource == $src) + | select( + .metadata.name == $pkg + or (.status.packageName // "") == $pkg + ) + ' >/dev/null 2>&1 +} + patch_operator_images() { local csv if [[ -z "${CRO_OPERATOR_IMAGE}" && -z "${CRO_OPERAND_IMAGE}" ]]; then @@ -187,20 +252,25 @@ echo "=== Ensuring operator namespace ${CRO_NAMESPACE} ===" oc get ns "${CRO_NAMESPACE}" >/dev/null 2>&1 || oc create ns "${CRO_NAMESPACE}" apply_idms_if_configured +ensure_catalog_source -echo "=== Waiting for PackageManifest ${CRO_PACKAGE_NAME} from ${CRO_CATALOG_SOURCE} ===" +echo "=== Waiting for PackageManifest ${CRO_PACKAGE_NAME} from CatalogSource ${CRO_CATALOG_SOURCE} ===" for i in $(seq 1 36); do - if oc get packagemanifest -n openshift-marketplace "${CRO_PACKAGE_NAME}" >/dev/null 2>&1; then - echo "PackageManifest found." + if package_manifest_ready; then + echo "PackageManifest found from ${CRO_CATALOG_SOURCE}." break fi echo "Waiting for PackageManifest... (${i}/36)" sleep 10 done -if ! oc get packagemanifest -n openshift-marketplace "${CRO_PACKAGE_NAME}" >/dev/null 2>&1; then - echo "ERROR: PackageManifest '${CRO_PACKAGE_NAME}' not found in openshift-marketplace" >&2 - oc get packagemanifest -n openshift-marketplace 2>/dev/null | grep -i clusterresource || true +if ! package_manifest_ready; then + echo "ERROR: PackageManifest '${CRO_PACKAGE_NAME}' not found from CatalogSource '${CRO_CATALOG_SOURCE}'" >&2 + oc get packagemanifest -n openshift-marketplace -o wide 2>/dev/null | grep -i clusterresource || true + oc get packagemanifest -n openshift-marketplace -o json \ + | jq -r --arg pkg "${CRO_PACKAGE_NAME}" \ + '.items[] | select(.metadata.name == $pkg) | [.metadata.name, .status.catalogSource, .status.catalogSourceNamespace] | @tsv' \ + >&2 || true oc get catalogsource -n "${CRO_CATALOG_SOURCE_NAMESPACE}" -o wide >&2 || true exit 1 fi diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml index ca4f374c51fe6..6345455d71905 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -34,11 +34,19 @@ ref: default: "redhat-operators" documentation: |- CatalogSource name used for the Subscription (in openshift-marketplace - unless CRO_CATALOG_SOURCE_NAMESPACE is overridden). + unless CRO_CATALOG_SOURCE_NAMESPACE is overridden). When CRO_CATALOG_IMAGE + is set, this CatalogSource is created/replaced before subscribing. - name: CRO_CATALOG_SOURCE_NAMESPACE default: "openshift-marketplace" documentation: |- Namespace of the CatalogSource referenced by the Subscription. + - name: CRO_CATALOG_IMAGE + default: "" + documentation: |- + Optional index/FBC image for a custom CatalogSource. When set, the step + creates CRO_CATALOG_SOURCE from this image (ART FBC recommended for 5.0 + s390x where redhat-operators may not list clusterresourceoverride yet). + Example: quay.io/redhat-user-workloads/ocp-art-tenant/art-fbc:ocp__5.0__ose-clusterresourceoverride-rhel9-operator - name: CRO_CREATE_CR default: "true" documentation: |- @@ -82,7 +90,8 @@ ref: to this mirror. Prefer CRO_OPERAND_IMAGE when using a full pullspec override. documentation: |- Installs the ClusterResourceOverride operator via OLM Subscription on a - provisioned s390x cluster (redhat-operators by default). Optionally applies - an ImageDigestMirrorSet and/or patches CSV/Deployment when CRO_OPERATOR_IMAGE - / CRO_OPERAND_IMAGE are set. Waits for the CSV to Succeed, then optionally - creates the ClusterResourceOverride CR (name: cluster). + provisioned s390x cluster. Optionally creates a CatalogSource from + CRO_CATALOG_IMAGE (ART FBC), applies an ImageDigestMirrorSet, and/or patches + CSV/Deployment when CRO_OPERATOR_IMAGE / CRO_OPERAND_IMAGE are set. Waits + for the CSV to Succeed, then optionally creates the ClusterResourceOverride + CR (name: cluster). From f226f60d78b009516ce95612305753973bf5250a Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 12:38:02 +0530 Subject: [PATCH 14/15] Mirror CRO ART FBC bundles via art-images-share on s390x. Merge Konflux ART pull credentials and IDMS so registry.redhat.io openshift4/5 ClusterResourceOverride digests resolve from art-images-share, matching the secrets-store weekly Konflux pattern. Co-authored-by: Cursor --- ...erride-admission-operator-main__s390x.yaml | 1 + ...verride-s390x-install-operator-commands.sh | 68 ++++++++++++++++++- ...e-override-s390x-install-operator-ref.yaml | 33 +++++++-- 3 files changed, 94 insertions(+), 8 deletions(-) diff --git a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml index 74636b8c74049..47b0696c4d252 100644 --- a/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml +++ b/ci-operator/config/openshift/cluster-resource-override-admission-operator/openshift-cluster-resource-override-admission-operator-main__s390x.yaml @@ -51,6 +51,7 @@ tests: BRANCH: "5.0" COMPUTE_COUNT: "2" CONTROL_COUNT: "3" + CRO_ART_IMAGE_SHARE: quay.io/redhat-user-workloads/ocp-art-tenant/art-images-share CRO_CATALOG_IMAGE: quay.io/redhat-user-workloads/ocp-art-tenant/art-fbc:ocp__5.0__ose-clusterresourceoverride-rhel9-operator CRO_CATALOG_SOURCE: cro-art-fbc ETCD_DISK_SPEED: slow diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh index a74ccd82f0f57..96d9040e203e3 100755 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-commands.sh @@ -80,7 +80,7 @@ dump_deployment_debug() { apply_idms_if_configured() { if [[ -z "${CRO_MIRROR_OPERATOR_IMAGE}" && -z "${CRO_MIRROR_OPERAND_IMAGE}" ]]; then - echo "=== Skipping ImageDigestMirrorSet (no mirror repositories configured) ===" + echo "=== Skipping ImageDigestMirrorSet (no CRO_MIRROR_* repositories configured) ===" return 0 fi @@ -105,6 +105,71 @@ apply_idms_if_configured() { } | oc apply -f - } +# Match secrets-store / Konflux ART weekly jobs: pull-secret for art-images-share + +# IDMS so registry.redhat.io/openshift{4,5}/ose-clusterresourceoverride-* digests +# resolve from quay.io/redhat-user-workloads/ocp-art-tenant/art-images-share. +setup_art_image_share_access() { + if [[ -z "${CRO_ART_IMAGE_SHARE}" ]]; then + echo "=== Skipping ART image-share access (CRO_ART_IMAGE_SHARE unset) ===" + return 0 + fi + + local art_pull_secret="${CRO_ART_PULL_SECRET_PATH}" + if [[ ! -f "${art_pull_secret}" ]]; then + echo "ERROR: ART image-share pull secret not found at ${art_pull_secret}" >&2 + echo "Mount credentials secret deploy-konflux-operator-art-image-share (test-credentials)." >&2 + return 1 + fi + + echo "=== Merging ART image-share credentials into cluster pull-secret ===" + # Disable tracing due to pull-secret handling + [[ $- == *x* ]] && WAS_TRACING=true || WAS_TRACING=false + set +x + mkdir -p /tmp/cro-pull-secret + oc extract secret/pull-secret -n openshift-config --confirm --to /tmp/cro-pull-secret + jq -s '.[0].auths += .[1].auths | .[0]' \ + /tmp/cro-pull-secret/.dockerconfigjson \ + "${art_pull_secret}" > /tmp/cro-merged-pullsecret.json + oc set data secret/pull-secret -n openshift-config \ + --from-file=.dockerconfigjson=/tmp/cro-merged-pullsecret.json + rm -rf /tmp/cro-pull-secret /tmp/cro-merged-pullsecret.json + $WAS_TRACING && set -x + + echo "=== Applying ImageDigestMirrorSet ${CRO_IDMS_NAME} -> ${CRO_ART_IMAGE_SHARE} ===" + cat </dev/null 2>&1 || oc create ns "${CRO_NAMESPACE}" +setup_art_image_share_access apply_idms_if_configured ensure_catalog_source diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml index 6345455d71905..547254869e96e 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/install-operator/cluster-resource-override-s390x-install-operator-ref.yaml @@ -10,7 +10,12 @@ ref: requests: cpu: 100m memory: 200Mi - timeout: 40m0s + # Pull-secret/IDMS MCP rollout + OLM subscribe; keep tighter than a padded 90m. + timeout: 60m0s + credentials: + - namespace: test-credentials + name: deploy-konflux-operator-art-image-share + mount_path: /var/run/secrets/pull-secret env: - name: CRO_NAMESPACE default: "openshift-cluster-resource-override" @@ -61,10 +66,23 @@ ref: documentation: |- Optional override for OPERAND_IMAGE on the operator Deployment/CSV. When empty, the catalog/CSV value is left unchanged. + - name: CRO_ART_IMAGE_SHARE + default: "" + documentation: |- + When set (e.g. quay.io/redhat-user-workloads/ocp-art-tenant/art-images-share), + merge deploy-konflux-operator-art-image-share into the cluster pull-secret + and create an ImageDigestMirrorSet mapping registry.redhat.io openshift4/5 + ClusterResourceOverride repos to this mirror (Konflux ART weekly pattern). + - name: CRO_ART_PULL_SECRET_PATH + default: "/var/run/secrets/pull-secret/.dockerconfigjson" + documentation: |- + Path to the mounted ART image-share dockerconfigjson (from credentials + deploy-konflux-operator-art-image-share). - name: CRO_IDMS_NAME default: "cluster-resource-override-idms" documentation: |- - Name of the ImageDigestMirrorSet created when mirror env vars are set. + Name of the ImageDigestMirrorSet created for ART image-share and/or + CRO_MIRROR_* mappings. - name: CRO_SOURCE_OPERATOR_IMAGE default: "registry.redhat.io/openshift4/ose-clusterresourceoverride-rhel9-operator" documentation: |- @@ -90,8 +108,9 @@ ref: to this mirror. Prefer CRO_OPERAND_IMAGE when using a full pullspec override. documentation: |- Installs the ClusterResourceOverride operator via OLM Subscription on a - provisioned s390x cluster. Optionally creates a CatalogSource from - CRO_CATALOG_IMAGE (ART FBC), applies an ImageDigestMirrorSet, and/or patches - CSV/Deployment when CRO_OPERATOR_IMAGE / CRO_OPERAND_IMAGE are set. Waits - for the CSV to Succeed, then optionally creates the ClusterResourceOverride - CR (name: cluster). + provisioned s390x cluster. Optionally merges Konflux ART image-share + credentials + IDMS (CRO_ART_IMAGE_SHARE), creates a CatalogSource from + CRO_CATALOG_IMAGE (ART FBC), and/or patches CSV/Deployment when + CRO_OPERATOR_IMAGE / CRO_OPERAND_IMAGE are set. Waits for the CSV to + Succeed, then optionally creates the ClusterResourceOverride CR. + From 54edc1a7c3d2a8e5dd5f9aa8d33a805f0148fe48 Mon Sep 17 00:00:00 2001 From: vinayakray19 Date: Sat, 8 Aug 2026 14:30:54 +0530 Subject: [PATCH 15/15] Skip CRO exempt-namespace e2e until ART ships VAP. TestResourceOverrideExemptNamespace expects a ValidatingAdmissionPolicy that is not yet in the installed ART CSV (pre-ce7ec28d). Co-authored-by: Cursor --- .../cluster-resource-override-s390x-run-tests-ref.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml index 835c98cde0e4e..2e41874b90448 100644 --- a/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml +++ b/ci-operator/step-registry/cluster-resource-override/s390x/run-tests/cluster-resource-override-s390x-run-tests-ref.yaml @@ -16,10 +16,12 @@ ref: Namespace where the ClusterResourceOverride operator is installed. Must match OPERATOR_NAMESPACE expected by make e2e (default openshift-cluster-resource-override). - name: E2E_SKIP - default: "TestUpgradePre|TestUpgradePost" + default: "TestUpgradePre|TestUpgradePost|TestResourceOverrideExemptNamespace" documentation: |- Regex passed to go test -skip. Defaults to skipping upgrade-only tests that - require the dedicated pre/post upgrade flow. + require the dedicated pre/post upgrade flow, and TestResourceOverrideExemptNamespace + until ART ships an operator build that creates ValidatingAdmissionPolicy + resourceoverride-exempt-namespace (landed on main after CSV 202608041944). documentation: |- Runs the ClusterResourceOverride admission operator Go e2e suite from this repository (make e2e / ./test/e2e/...) against the operator already installed