Skip to content

Run oadp-operator e2e against kdm-controller/kdm-plugin PRs (oadp-dev, oadp-1.6) - #83049

Open
kaovilai wants to merge 9 commits into
openshift:mainfrom
kaovilai:kdm-e2e-unit-tests
Open

Run oadp-operator e2e against kdm-controller/kdm-plugin PRs (oadp-dev, oadp-1.6)#83049
kaovilai wants to merge 9 commits into
openshift:mainfrom
kaovilai:kdm-e2e-unit-tests

Conversation

@kaovilai

@kaovilai kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member

Summary

Adds real oadp-operator e2e coverage for migtools/kubevirt-datamover-controller and migtools/kubevirt-datamover-plugin, on both oadp-dev and oadp-1.6, per openshift/oadp-operator#1832 (Group A2: operator-reconciled controllers gated on a DPA feature flag). Each repo's presubmit installs oadp-operator directly from its promoted bundle image via operator-sdk run bundle, substitutes the PR-built controller/plugin image into the running operator, and runs oadp-operator's own e2e suite — including the KubeVirt VM backup/restore specs already in that suite (e.g. openshift/oadp-operator#2350).

This depends on openshift/release#83110 (merged), which first added the promoted oadp-operator-index/oadp-operator-e2e-tests images. This PR replaces the index half of that with a promoted bundle instead — see "Why not an index" below for why the original index-based design didn't actually work.

Design

openshift/oadp-operator (base config for each branch)

operator.bundles[].skip_building_index: true (as: oadp-operator-bundle) builds and promotes just the bundle image (oadp-operator-bundle), no index/catalog at all — see rationale below. oadp-operator-e2e-tests (the e2e test binary) is unchanged.

migtools/kubevirt-datamover-controller + kubevirt-datamover-plugin (oadp-dev and oadp-1.6)

e2e-test-aws presubmit per branch (run_if_changed, not always-on):

  1. ipi-aws-preoptional-operators-operator-sdk-non-ci-bundle-image installs oadp-operator directly from the promoted bundle (OO_BUNDLE: registry.ci.openshift.org/konveyor/oadp-operator-bundle:{oadp-dev,oadp-1.6}) via operator-sdk run bundle — no index/CatalogSource image involved. (operator-sdk still creates a CatalogSource/OperatorGroup/Subscription under the hood — it just serves the catalog from a bundle-backed pod it manages itself, in openshift-adp, rather than pointing at a pre-built index image. The prior index-based design's CatalogSource also lived in openshift-adp, so this isn't a new namespace footprint; verified oadp-operator's e2e suite has no unfiltered pod-count assertions or namespace teardown that this would disturb — its one pod check is scoped by LabelSelector: "component=velero".)
  2. set-related-image: discovers the Subscription OLM created (oc get subscription -n ${OO_INSTALL_NAMESPACE} -o jsonpath=...operator-sdk run bundle doesn't write a SHARED_DIR marker for it the way optional-operators-subscribe does; the namespace is created fresh by this same step script if it doesn't exist, so exactly one Subscription is expected), then oc patch subscription ... RELATED_IMAGE_KUBEVIRT_DATAMOVER_CONTROLLER= (_PLUGIN for the plugin repo) via Subscription.spec.config.env, OLM's supported override mechanism: per OLM's own design doc, values set here overwrite same-named CSV env vars and survive reconciliation, unlike patching the Deployment directly. Polls the Deployment's own env value before calling oc rollout status (checking immediately after the patch is racy — can report the pre-existing rollout as already complete before OLM notices the Subscription change).
  3. make TEST_VIRT=true test-e2e from the promoted test-oadp-operator image, same as before.

Also fixes a real bug in the shared optional-operators-operator-sdk-non-ci-bundle-image step: INSTALL_MODE_ARG=--install-mode="${INSTALL_MODE_ARG}" was self-referential and silently dropped OO_INSTALL_MODE for every consumer of that step. Fixed to reference ${OO_INSTALL_MODE}. Note: for oadp-operator specifically this isn't load-bearing — its CSV only declares OwnNamespace as a supported install mode, so operator-sdk's own fallback logic (pick the first supported mode when none is explicitly forced) would land on OwnNamespace regardless of the bug. It's still a real bug worth fixing (and we set OO_INSTALL_MODE: OwnNamespace explicitly regardless, so behavior here is pinned rather than incidental) — just correcting the record that it wasn't actually blocking this PR.

Why not an index

The original design (this PR's earlier revisions, and #83110) promoted an oadp-operator-index built via ci-operator's operator.bundles (no skip_building_index). Rehearsing against the real promoted images failed with BundleUnpackFailed: Bundle image pull failed. Root cause, confirmed from oadp-operator's own promotion postsubmit log: ci-operator builds the bundle as an image inside the building job's own namespace, then bakes a reference to that bundle's pullspec into the generated index. That reference is reachable only while the building job's namespace is still alive (same-job consumption, e.g. oadp-operator's own periodic e2e, works fine) — we'd promoted only the index, never the bundle, so once oadp-operator's build namespace was torn down, the baked-in bundle reference became permanently unreachable from any other job's namespace.

Fix: promote the bundle itself (precedent: quay/quay-operator uses the same skip_building_index: true pattern) and install directly from it via operator-sdk run bundle (precedent: openshift-file-integrity-operator, which already installs cross-repo from a bundle image this way, no index/catalog needed at all). Confirmed the bundle pull itself is not a concern — the failed rehearsal's CatalogSource already reached READY pulling from registry.ci.openshift.org/konveyor/... (same host, same namespace, same cluster pull secret the bundle now uses).

OLMv1 compatibility

Unaffected by the above — this PR doesn't produce an FBC catalog either. Same underlying gap as before: the bundle is legacy registry+v1 format, and oadp-operator's CSV hasn't yet declared AllNamespaces install mode, both tracked separately for OLMv1 adoption.

Testing

make ci-operator-config/make jobs pass cleanly for all 6 changed configs. Generated job diff confirms the oadp-operator postsubmit's promotion target changed from ci-index to oadp-operator-bundle (and the standalone ci-index presubmit is now ci-bundle-oadp-operator-bundle) — the kdm-side job files are unchanged since multi-stage step graphs (pre/post/workflow) resolve from config at ci-operator runtime, not the static Prow job YAML. coderabbit review --agent against upstream/main reports 0 findings.

Test plan

  • make ci-operator-config / make jobs pass for all 6 changed configs.
  • Generated job diff confirms the promotion target rename (ci-indexoadp-operator-bundle) took effect correctly.
  • CodeRabbit review: 0 findings.
  • /pj-rehearse against the new bundle-direct install path — no BundleUnpackFailed, CSV reaches Succeeded, set-related-image finds exactly one Subscription and its override actually applies (not yet exercised by any prior rehearsal — the previous run died at bundle-unpack, before reaching this step).
  • First real run against an actual kdm-controller/kdm-plugin PR on each branch, once this merges and the new jobs go live.

Note

Responses generated with Claude

@openshift-ci
openshift-ci Bot requested review from Joeavaikath and mpryc August 6, 2026 15:15
@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The CI configurations build and promote OADP images. The datamover controller and plugin configurations add optional AWS virtualized E2E workflows with OADP installation, image injection, rollout checks, credentials, and resource requests.

Changes

OADP development CI and E2E integration

Layer / File(s) Summary
OADP image builds and promotion
ci-operator/config/openshift/oadp-operator/...
The configuration builds the test operator image and operator bundle. Promotion includes ci-index and test-oadp-operator.
Datamover controller AWS E2E workflow
ci-operator/config/migtools/kubevirt-datamover-controller/...
The configuration uses OCP 5.0 nightly builds, installs the dev OADP operator, injects the controller image through the subscription, verifies rollout, mounts credentials, and runs virtualized E2E tests.
Datamover plugin AWS E2E workflow
ci-operator/config/migtools/kubevirt-datamover-plugin/...
The configuration uses OCP 5.0 nightly builds, installs the dev OADP operator, injects the plugin image through the subscription, verifies rollout, mounts credentials, and runs virtualized E2E tests.

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

Sequence Diagram(s)

sequenceDiagram
  participant CI
  participant OADPOperator
  participant OLMSubscription
  participant DatamoverComponent
  participant AWSE2ETests
  CI->>OADPOperator: Install the dev-channel OADP operator
  CI->>OLMSubscription: Set the datamover related image
  OLMSubscription->>DatamoverComponent: Apply the controller or plugin image
  DatamoverComponent-->>CI: Report deployment rollout completion
  CI->>AWSE2ETests: Mount credentials and run TEST_VIRT=true test-e2e
Loading

Possibly related PRs

Suggested labels: rehearsals-ack

Suggested reviewers: mpryc, joeavaikath

🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The PR adds only static CI step names (e2e-test-aws, set-related-image, e2e) and invokes an existing external suite; it adds no Ginkgo test titles or dynamic title values.
Test Structure And Quality ✅ Passed The PR changes only 10 YAML CI/config files; searches found no Ginkgo It blocks, lifecycle hooks, or Ginkgo waits to review.
Microshift Test Compatibility ✅ Passed The commit changes only ci-operator YAML and generated Prow jobs; it adds no Ginkgo tests or test declarations requiring MicroShift API compatibility review.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR changes only ci-operator YAML and generated Prow jobs; it adds no Ginkgo test source or It/Describe/Context bodies, so the SNO assumption check is not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed The cumulative diff changes only ci-operator configs and generated Prow jobs; added lines contain no affinity, spread, node, toleration, replica, or PDB scheduling constraints.
Ote Binary Stdout Contract ✅ Passed The PR changes only YAML CI configs and generated jobs; it invokes the promoted image with make TEST_VIRT=true test-e2e and adds no OTE binary or process-level stdout code.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR changes only CI YAML and generated Prow jobs; it adds no Ginkgo test declarations, IPv4 literals, or explicit public-network access.
No-Weak-Crypto ✅ Passed The full PR adds only YAML CI configuration. No MD5, SHA1, DES, RC4, Blowfish, ECB, custom crypto, or secret/token comparisons were found; checks compare image references only.
Container-Privileges ✅ Passed The complete PR diff adds no privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, allowPrivilegeEscalation, securityContext, or root-user settings.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds only credential mounts and secret file paths; explicit logs show non-secret CI image references, with no password, token, API key, PII, or credential contents emitted.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the new OADP operator E2E presubmit integration for the datamover controller and plugin pull requests.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml`:
- Around line 30-31: Replace the `commands: make test` entry in the `oadp-dev`
test configuration with a direct `go test ./kubevirt-datamover-plugin/...`
invocation, preserving `from: src` and avoiding the Makefile’s container-runtime
prerequisite.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 1448f45b-6cd1-41b8-88b9-4341aa39dd33

📥 Commits

Reviewing files that changed from the base of the PR and between 658e1ba and 396c409.

⛔ Files ignored due to path filters (4)
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
📒 Files selected for processing (2)
  • ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml
  • ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml

Comment on lines +30 to +31
commands: make test
from: src

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

# First, check if the file exists and read its current content
cat -n ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml | head -50

Repository: openshift/release

Length of output: 1115


🏁 Script executed:

# Also search for any related files in the ci-operator config
find ci-operator/config -name "*kubevirt-datamover*" -type f

Repository: openshift/release

Length of output: 1131


🌐 Web query:

kubevirt-datamover-plugin Makefile oadp-dev docker podman check

💡 Result:

The kubevirt-datamover-plugin and its associated kubevirt-datamover-controller are components within the OpenShift API for Data Protection (OADP) ecosystem, primarily developed under the migtools organization with development branches typically tracked under oadp-dev [1][2][3]. Development workflows for these components involve standard Makefile-driven processes that support both Docker and Podman as container runtimes for building and pushing images [4]. Key points regarding the development workflow include: 1. Build and Deployment: The repositories (e.g., kubevirt-datamover-controller) utilize Makefile targets such as make docker-build and make docker-push [4]. These commands facilitate the creation and distribution of container images, often using environment variables like IMG to specify the target registry [4]. 2. Container Runtime Flexibility: While Makefile commands are often documented as docker-build or docker-push, they generally interface with the system's container runtime, which can be Docker or Podman [5][4]. Developers are encouraged to ensure their environment is configured correctly to handle cross-platform builds if necessary (e.g., building amd64 images on arm64 hardware) using --platform flags [4]. 3. Development Environment: Projects are commonly generated using tools like Kubebuilder (e.g., v4.6.0) [2]. The development lifecycle often involves validating changes against the oadp-dev branch of the main oadp-operator repository to ensure compatibility with Velero and other OADP plugins [1][2][3][5]. 4. Checking/Validation: Development validation often involves deploying to a temporary registry like ttl.sh for rapid testing [4], or verifying the generated bundle manifests using the operator-sdk as defined in the operator's main Makefile [6]. For specific implementation details, refer to the Makefile and README.md files located in the respective migtools/kubevirt-datamover-plugin and migtools/kubevirt-datamover-controller repositories [1][2][7].

Citations:


🏁 Script executed:

# Fetch the Makefile from the specified GitHub link to check its content
curl -s https://github.com/migtools/kubevirt-datamover-plugin/raw/refs/heads/oadp-dev/Makefile | head -100

Repository: openshift/release

Length of output: 155


🏁 Script executed:

# Also check if there are any other test-related files in the config
cat -n ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-1.6.yaml | grep -A 20 "unit-test"

Repository: openshift/release

Length of output: 155


🏁 Script executed:

# Try to get the Makefile using git clone or check documentation
# First, let's understand what the ci-operator 'from: src' means by searching for documentation
rg "from: src" ci-operator/config -A 5 -B 5 | head -50

Repository: openshift/release

Length of output: 5670


🏁 Script executed:

# Check if there's documentation about ci-operator test steps
find . -name "*.md" -type f | xargs grep -l "from: src" 2>/dev/null | head -5

Repository: openshift/release

Length of output: 180


🏁 Script executed:

# Look at the oadp-1.6 version to see if it has the same pattern
cat -n ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-1.6.yaml | sed -n '20,50p'

Repository: openshift/release

Length of output: 346


🌐 Web query:

ci-operator test step from: src container image

💡 Result:

In OpenShift CI, the src container image is a specialized pipeline image that contains the source code of the repository being tested, along with its build dependencies [1]. It is generated automatically by the ci-operator as part of the pipeline initialization process [2][1]. To use the src image in a test step, you reference it via the from field within your test configuration [3][4]. Usage in a Container Test: For a simple container test, you specify the image in the container.from field [3][4]: tests: - as: unit-test commands: make test container: from: src Usage in a Multi-Stage Test: For multi-stage tests, you specify from: src within the individual steps of the test definition [5]: tests: - as: e2e-test steps: test: - as: test-step commands: make test from: src Key Characteristics of the src Image: - Automatic Creation: The ci-operator uses a cloning tool (clonerefs) to inject the source code of the repository into a base image (defined by build_root) and tags the resulting image as src in the pipeline ImageStream [2][1]. - Implicit Source: Unlike standard images, when you use the src image, the source code is already present, so you do not need to perform additional cloning steps within the test container [6]. - Usage: It is primarily intended for running tests, binary builds, or other operations that require access to the source code under test [1].

Citations:


🏁 Script executed:

# Check if the kubevirt-datamover-plugin repository is in this repo or if we can look at the Makefile differently
# Let's search for any Makefile references or documentation
find . -type f -name "Makefile" | grep -i "datamover" 2>/dev/null

Repository: openshift/release

Length of output: 155


🏁 Script executed:

# Let's check if there's a reference to the repository content in the release repo
# Look for any OWNER or build info that might hint at the Makefile
rg "oadp-dev" ci-operator/config/migtools/kubevirt-datamover-plugin/ -A 10 -B 10

Repository: openshift/release

Length of output: 4257


🏁 Script executed:

# Let's examine what "src" image is in the build_root context for this repo
cat -n ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml

Repository: openshift/release

Length of output: 1115


🌐 Web query:

kubevirt-datamover-plugin oadp-dev Makefile test target

💡 Result:

In the migtools/kubevirt-datamover-plugin project, the make test target is the standard command used to execute unit tests [1]. This command is typically defined in the repository's Makefile to run the project's Go-based test suite, often utilizing standard Go testing tools. While specific implementation details can evolve, typical development commands in related OADP (OpenShift APIs for Data Protection) projects—such as the kubevirt-datamover-controller—include make test for unit testing and additional targets like make fmt, make vet, and make lint for code quality checks [2][3]. For developers working within the oadp-dev branch or related OADP development environments, make test is a foundational command for validating changes before submission [1][2]. If you are working on a specific fork or a version-controlled branch, it is recommended to inspect the local Makefile directly, as it contains the precise shell commands—such as go test configurations—that are executed when the target is invoked [1][4].

Citations:


🏁 Script executed:

# Let me check the builder image details more carefully and see if there are any other test configs
cat -n ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-1.6.yaml

Repository: openshift/release

Length of output: 832


🌐 Web query:

ubi9-v1.23 konveyor builder image docker podman

💡 Result:

The konveyor/builder is a container image maintained by the Konveyor community, primarily used for building projects and plugins related to Konveyor and OpenShift, such as OADP (OpenShift API for Data Protection) [1][2][3]. The image is based on the Red Hat Universal Base Image 9 (UBI 9) [1][4]. While you may see references to specific UBI9-based tags like ubi9-v1.23, ubi9-v1.24, or ubi9-v1.25 in CI configurations and pull requests (often linked to underlying toolset versions or specific project releases) [2][5], the most common production tag used in Dockerfiles is typically quay.io/konveyor/builder:ubi9-latest [6][3][7]. Usage with Docker or Podman You can use this builder image in your container builds by referencing it in a multi-stage Dockerfile. Both Docker and Podman support this workflow seamlessly as the image follows the standard OCI (Open Container Initiative) format [8]. Example multi-stage Dockerfile pattern: FROM quay.io/konveyor/builder:ubi9-latest AS builder WORKDIR /app COPY.. RUN go build -o my-app. FROM registry.access.redhat.com/ubi9-minimal COPY --from=builder /app/my-app /usr/bin/my-app ENTRYPOINT ["/usr/bin/my-app"] Technical Notes: 1. Compatibility: Because the builder is based on UBI 9, it is designed to be compatible with Red Hat Enterprise Linux 9-based environments [4][9]. 2. Podman/Docker Environments: When building UBI 9 images on non-x86_64 host architectures (like Apple Silicon/macOS ARM64), ensure your container runtime (Podman/Docker) environment is configured correctly for emulation or cross-platform builds, as some older configurations experienced glibc errors related to x86-64-v2 compatibility [10]. 3. Versioning: If you encounter specific versioned tags like ubi9-v1.23, they typically correspond to the specific build environment configuration for a project's CI pipeline [2][5]. For general use, quay.io/konveyor/builder:ubi9-latest is the recommended tag to ensure you are using an updated, UBI 9-based environment [6][3].

Citations:


🏁 Script executed:

# Let me search for any documentation about what the builder image contains
rg "konveyor.*builder" . -A 3 -B 3 | head -50

Repository: openshift/release

Length of output: 3227


🏁 Script executed:

# Let me search for any GitHub references or PRs that mention this issue
rg "make test" . -B 5 -A 5 | grep -i "datamover\|podman\|docker" | head -30

Repository: openshift/release

Length of output: 5675


🏁 Script executed:

# Check if the konveyor builder Dockerfile is available in the release repo
find . -name "Dockerfile*" -type f | xargs grep -l "konveyor" 2>/dev/null | head -5

Repository: openshift/release

Length of output: 155


🌐 Web query:

konveyor builder ubi9 includes podman docker tools

💡 Result:

The Konveyor builder image based on UBI 9 (quay.io/konveyor/builder:ubi9-latest) does not include Podman or Docker tools by default [1]. The Dockerfile.ubi9 for the Konveyor builder image explicitly installs a specific set of development tools: go, git, make, jq, and unzip [1]. It is built upon the standard Red Hat Universal Base Image 9 (ubi9:latest) [1]. While Red Hat Enterprise Linux 9 provides container management tools like Podman, Buildah, and Skopeo as part of the container-tools meta-package [2][3], these are not included in the default configuration of the Konveyor builder image [1]. In many Konveyor-related projects, build processes (such as those defined in Makefiles) are designed to dynamically detect and use whichever container runtime (Podman or Docker) is available on the host system where the build command is executed, rather than relying on tools packaged inside the builder container itself [4].

Citations:


🏁 Script executed:

# Let me check if there are any comments or notes in the release repo about this specific issue
rg "container.runtime\|podman\|docker" ci-operator/config/migtools/ -A 2 -B 2

Repository: openshift/release

Length of output: 155


🏁 Script executed:

# Let me search for patterns in the release repo about NO_DOCKER or similar workarounds
rg "NO_DOCKER\|NO_PODMAN" ci-operator/config/ | head -20

Repository: openshift/release

Length of output: 155


🏁 Script executed:

# Check if there are any other kubevirt or datamover related configs with different commands
rg "datamover\|kubevirt" ci-operator/config/ -A 5 | grep "commands:" | head -10

Repository: openshift/release

Length of output: 155


Avoid the Makefile container-runtime prerequisite by calling go test directly.

The oadp-dev Makefile checks for docker or podman at parse time. The src test image (konveyor/builder:ubi9-v1.23) does not include either tool. When make test runs, the Makefile exits before executing go test ./kubevirt-datamover-plugin/.... Call the Go test command directly instead.

Proposed fix
-      commands: make test
+      commands: go test ./kubevirt-datamover-plugin/...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
commands: make test
from: src
commands: go test ./kubevirt-datamover-plugin/...
from: src
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml`
around lines 30 - 31, Replace the `commands: make test` entry in the `oadp-dev`
test configuration with a direct `go test ./kubevirt-datamover-plugin/...`
invocation, preserving `from: src` and avoiding the Makefile’s container-runtime
prerequisite.

Source: MCP tools

@kaovilai
kaovilai marked this pull request as draft August 6, 2026 18:17
@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 6, 2026
@kaovilai kaovilai changed the title Add unit-test presubmit for kubevirt-datamover-controller/plugin (oadp-dev) Run oadp-operator e2e against kdm-controller/kdm-plugin PRs (oadp-dev) Aug 6, 2026
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 6, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai, pj-rehearse: unable to determine affected jobs. This could be due to a branch that needs to be rebased. ERROR:

couldn't prepare candidate: couldn't rebase candidate onto 608589985b114a921308580870bd60d33e6809c9 due to conflicts
Interacting with pj-rehearse

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

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml`:
- Around line 41-79: Run make update to regenerate and sanitize the CI metadata
and Prow job definitions for the new e2e-test-aws job. Apply the generated
changes for
ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml
lines 41-79 and
ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml
lines 41-79, then commit all resulting generated files so Prow registers both
presubmits.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 57b2a657-6601-4add-84b2-27a8de580657

📥 Commits

Reviewing files that changed from the base of the PR and between 396c409 and 48f6123.

⛔ Files ignored due to path filters (7)
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-dev-periodics.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
📒 Files selected for processing (3)
  • ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml
  • ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml
  • ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-dev.yaml

@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/test all

Note

Responses generated with Claude

@kaovilai
kaovilai force-pushed the kdm-e2e-unit-tests branch from 48f6123 to 0b8ef64 Compare August 6, 2026 18:54
@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/test all

Note

Responses generated with Claude

@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws pull-ci-openshift-oadp-operator-oadp-dev-ci-index

Note

Responses generated with Claude

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml`:
- Around line 62-66: Add --request-timeout=10s to the oc get invocation in the
retry loop so each request is bounded and the existing 60-iteration deadline
remains enforceable.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: b4ec95dc-6677-49a4-9dba-ad5a10e72fc1

📥 Commits

Reviewing files that changed from the base of the PR and between 5597ad9 and eb29584.

⛔ Files ignored due to path filters (4)
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-postsubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev-presubmits.yaml is excluded by !ci-operator/jobs/**
📒 Files selected for processing (2)
  • ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml
  • ci-operator/config/migtools/kubevirt-datamover-plugin/migtools-kubevirt-datamover-plugin-oadp-dev.yaml

Comment on lines +62 to +66
for i in $(seq 1 60); do
CURRENT=$(oc get deployment/openshift-adp-controller-manager -n "${OO_INSTALL_NAMESPACE}" -o jsonpath="{.spec.template.spec.containers[?(@.name=='manager')].env[?(@.name=='RELATED_IMAGE_KUBEVIRT_DATAMOVER_CONTROLLER')].value}" 2>/dev/null || true)
[ "${CURRENT}" = "${KDM_CONTROLLER_IMAGE}" ] && break
sleep 5
done

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
oc options 2>&1 | grep -F -- '--request-timeout'

Repository: openshift/release

Length of output: 155


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml'

printf '%s\n' '--- target lines ---'
sed -n '45,80p' "$file"

printf '%s\n' '--- related timeout and oc usage ---'
rg -n -C 3 --fixed-strings 'openshift-adp-controller-manager' .
rg -n -C 2 'oc (get|wait)|request-timeout|timeout [0-9].*oc|timeout --' "$file" .github ci-operator 2>/dev/null | head -n 240

Repository: openshift/release

Length of output: 50375


🌐 Web query:

OpenShift oc CLI documentation for --request-timeout, including whether oc supports the kubectl request-timeout option and its default behavior

💡 Result:

The OpenShift CLI (oc) supports the --request-timeout option, which functions similarly to the equivalent option in kubectl [1][2][3]. Documentation and Behavior: The --request-timeout flag specifies the length of time the client waits before giving up on a single server request [1][4]. It requires a value with a corresponding time unit (e.g., 1s, 2m, 3h) if a non-zero value is provided [1][3]. Default Behavior: The default value for --request-timeout is "0", which signifies that the client will not timeout requests [1][3]. Compatibility with kubectl: Because oc is built upon the Kubernetes client libraries, it supports the --request-timeout option in the same manner as kubectl [3]. Both tools interpret the flag to control the timeout duration for API server interactions [1][3]. While most commands consistently respect this flag, historical issues have been noted where specific sub-commands (such as oc login in older versions) did not always honor the timeout correctly, necessitating patches to ensure the configuration is properly passed to the underlying REST client [5][6][7].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- oc references and installation/version evidence ---'
rg -n -C 3 '\boc\b|openshift-client|ocp|OPENSHIFT_VERSION|CLUSTER_VERSION' \
  ci-operator/config/migtools/kubevirt-datamover-controller \
  ci-operator/jobs/migtools/kubevirt-datamover-controller \
  .github 2>/dev/null | head -n 300

printf '%s\n' '--- file metadata and nearby job structure ---'
wc -l ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml
sed -n '1,120p' ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml

Repository: openshift/release

Length of output: 4329


🌐 Web query:

site:docs.openshift.com oc request-timeout oc get

💡 Result:

There is no global --request-timeout flag for the oc get command [1][2]. The --timeout option available with oc get is specifically used to set the length of time to wait for a specific operation to complete, such as waiting for a node or a resource to reach a specific state [1]. If you are looking to manage timeouts for network traffic or application routes, you must use different methods depending on the context: 1. Route Timeouts: You can configure timeouts for specific routes using the oc annotate command to add a timeout value to the route's configuration: oc annotate route <route_name> --overwrite haproxy.router.openshift.io/timeout=<time_unit> Supported time units include ms, s, m, h, and d [3][4]. 2. Ingress Controller Timeouts: For global ingress settings, you can configure timeout values within the Ingress Controller's configuration, such as clientTimeout or serverTimeout [5]. If you were referring to a different CLI tool, such as roxctl, that tool does feature a --timeout flag for API requests [6], but this does not apply to the standard oc CLI.

Citations:


Bound each oc request.

Line 63 can block indefinitely because oc get has no request timeout. Add --request-timeout=10s so the loop can enforce its retry deadline.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@ci-operator/config/migtools/kubevirt-datamover-controller/migtools-kubevirt-datamover-controller-oadp-dev.yaml`
around lines 62 - 66, Add --request-timeout=10s to the oc get invocation in the
retry loop so each request is bounded and the existing 60-iteration deadline
remains enforceable.

Source: MCP tools

@kaovilai kaovilai changed the title Run oadp-operator e2e against kdm-controller/kdm-plugin PRs (oadp-dev) Run oadp-operator e2e against kdm-controller/kdm-plugin PRs (oadp-dev, oadp-1.6) Aug 6, 2026
@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/test all

Note

Responses generated with Claude

@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/pj-rehearse ack

Note

Responses generated with Claude

@kaovilai
kaovilai marked this pull request as ready for review August 6, 2026 21:36
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Aug 6, 2026
@openshift-merge-bot openshift-merge-bot Bot added rehearsals-ack Signifies that rehearsal jobs have been acknowledged and removed rehearsals-ack Signifies that rehearsal jobs have been acknowledged labels Aug 6, 2026
@kaovilai

kaovilai commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

/pj-rehearse ack

Jobs cannot rehearse yet need images which will come post merge

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

@openshift-merge-bot openshift-merge-bot Bot added the rehearsals-ack Signifies that rehearsal jobs have been acknowledged label Aug 6, 2026
openshift-merge-bot Bot pushed a commit that referenced this pull request Aug 7, 2026
* Add optional e2e-test-kubevirt-aws presubmit for oadp-dev

oadp-1.5 and oadp-1.6 already run make TEST_VIRT=true test-e2e as a
gating presubmit (e2e-test-kubevirt-aws); oadp-dev only had it as a
daily periodic, with no way to get presubmit signal on a PR before merge.

Adds the same job to the oadp-dev 5.0/5.1 variants, but as optional
(manually triggered via /test, doesn't block merge) rather than gating
like 1.5/1.6 -- oadp-dev is the active development branch and this
KubeVirt path is newer/less proven there.

This is needed for openshift/oadp-operator#2350 (kubevirt-datamover VM
backup/restore e2e coverage) to actually be runnable against a PR before
merge -- without this, those new specs only get exercised by the
existing daily periodic, well after the PR that added them has merged.

Related: #83049 (kdm-controller/kdm-plugin presubmit
e2e using this same TEST_VIRT=true path).

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Make e2e-test-kubevirt-aws gating for oadp-dev

Matches oadp-1.5/oadp-1.6, where this same job is already gating rather
than optional.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Drop 5.1 from this PR, keep only oadp-dev 5.0

Scope this to just the 5.0 variant for now.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

---------

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
TimurMP pushed a commit to TimurMP/release that referenced this pull request Aug 9, 2026
…83110)

Split out of openshift#83049 so it can merge and actually run
its postsubmit first -- the kdm-controller/kdm-plugin presubmit in that
PR depends on oadp-operator-index/oadp-operator-e2e-tests existing in
the registry, which only happens once this merges and oadp-operator's
own postsubmit runs for real. Landing this first lets openshift#83049 rehearse
against real promoted images instead of hitting the bootstrapping gap
(images referenced by a not-yet-merged PR don't exist yet).

For both oadp-dev and oadp-1.6:
- Builds the operator bundle (operator.bundles) and the
  build/ci-Dockerfile e2e test binary (test-oadp-operator) -- previously
  built only ephemerally, per-PR, inside oadp-operator's own jobs.
- Promotes both on every merge via a second promotion.to[] entry
  (additional_images, tag-mode: no name, explicit branch tag) so each
  gets its own destination imagestream (oadp-operator-index,
  oadp-operator-e2e-tests) instead of colliding with the existing
  oadp-operator image promotion or with each other across branches.
- One new lightweight ci-index presubmit per branch confirms the bundle
  still builds on oadp-operator PRs.

No existing oadp-operator job behavior changes -- every pre-existing
operator.substitutions block, and the images/promotion blocks the kdm
repos' own configs feed into those substitutions, is unchanged.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
TimurMP pushed a commit to TimurMP/release that referenced this pull request Aug 9, 2026
* Add optional e2e-test-kubevirt-aws presubmit for oadp-dev

oadp-1.5 and oadp-1.6 already run make TEST_VIRT=true test-e2e as a
gating presubmit (e2e-test-kubevirt-aws); oadp-dev only had it as a
daily periodic, with no way to get presubmit signal on a PR before merge.

Adds the same job to the oadp-dev 5.0/5.1 variants, but as optional
(manually triggered via /test, doesn't block merge) rather than gating
like 1.5/1.6 -- oadp-dev is the active development branch and this
KubeVirt path is newer/less proven there.

This is needed for openshift/oadp-operator#2350 (kubevirt-datamover VM
backup/restore e2e coverage) to actually be runnable against a PR before
merge -- without this, those new specs only get exercised by the
existing daily periodic, well after the PR that added them has merged.

Related: openshift#83049 (kdm-controller/kdm-plugin presubmit
e2e using this same TEST_VIRT=true path).

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Make e2e-test-kubevirt-aws gating for oadp-dev

Matches oadp-1.5/oadp-1.6, where this same job is already gating rather
than optional.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Drop 5.1 from this PR, keep only oadp-dev 5.0

Scope this to just the 5.0 variant for now.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

---------

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
@kaovilai
kaovilai force-pushed the kdm-e2e-unit-tests branch from a1f4171 to 78dca61 Compare August 10, 2026 20:17
@kaovilai

Copy link
Copy Markdown
Member Author

Rebased onto latest upstream/main (now includes #83078 and #83124, both merged). More importantly: oadp-operator's oadp-dev branch just got a fresh postsubmit run (branch-ci-openshift-oadp-operator-oadp-dev-images succeeded on openshift/oadp-operator@ea9340f) — the oadp-operator-index/oadp-operator-e2e-tests images promoted by #83110 should now actually exist. Re-triggering rehearsal for real this time.

/pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws

Note

Responses generated with Claude

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

@kaovilai

Copy link
Copy Markdown
Member Author

oadp-1.6's postsubmit also just succeeded (branch-ci-openshift-oadp-operator-oadp-1.6-images on oadp-operator@e6790c7) — its promoted images should exist now too. Triggering the oadp-1.6 rehearsal.

/pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-e2e-test-aws

Note

Responses generated with Claude

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

jzding pushed a commit to jzding/release that referenced this pull request Aug 11, 2026
…83110)

Split out of openshift#83049 so it can merge and actually run
its postsubmit first -- the kdm-controller/kdm-plugin presubmit in that
PR depends on oadp-operator-index/oadp-operator-e2e-tests existing in
the registry, which only happens once this merges and oadp-operator's
own postsubmit runs for real. Landing this first lets openshift#83049 rehearse
against real promoted images instead of hitting the bootstrapping gap
(images referenced by a not-yet-merged PR don't exist yet).

For both oadp-dev and oadp-1.6:
- Builds the operator bundle (operator.bundles) and the
  build/ci-Dockerfile e2e test binary (test-oadp-operator) -- previously
  built only ephemerally, per-PR, inside oadp-operator's own jobs.
- Promotes both on every merge via a second promotion.to[] entry
  (additional_images, tag-mode: no name, explicit branch tag) so each
  gets its own destination imagestream (oadp-operator-index,
  oadp-operator-e2e-tests) instead of colliding with the existing
  oadp-operator image promotion or with each other across branches.
- One new lightweight ci-index presubmit per branch confirms the bundle
  still builds on oadp-operator PRs.

No existing oadp-operator job behavior changes -- every pre-existing
operator.substitutions block, and the images/promotion blocks the kdm
repos' own configs feed into those substitutions, is unchanged.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
jzding pushed a commit to jzding/release that referenced this pull request Aug 11, 2026
* Add optional e2e-test-kubevirt-aws presubmit for oadp-dev

oadp-1.5 and oadp-1.6 already run make TEST_VIRT=true test-e2e as a
gating presubmit (e2e-test-kubevirt-aws); oadp-dev only had it as a
daily periodic, with no way to get presubmit signal on a PR before merge.

Adds the same job to the oadp-dev 5.0/5.1 variants, but as optional
(manually triggered via /test, doesn't block merge) rather than gating
like 1.5/1.6 -- oadp-dev is the active development branch and this
KubeVirt path is newer/less proven there.

This is needed for openshift/oadp-operator#2350 (kubevirt-datamover VM
backup/restore e2e coverage) to actually be runnable against a PR before
merge -- without this, those new specs only get exercised by the
existing daily periodic, well after the PR that added them has merged.

Related: openshift#83049 (kdm-controller/kdm-plugin presubmit
e2e using this same TEST_VIRT=true path).

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Make e2e-test-kubevirt-aws gating for oadp-dev

Matches oadp-1.5/oadp-1.6, where this same job is already gating rather
than optional.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

* Drop 5.1 from this PR, keep only oadp-dev 5.0

Scope this to just the 5.0 variant for now.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>

---------

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
migtools/kubevirt-datamover-controller and migtools/kubevirt-datamover-plugin
(oadp-dev branch) had zero CI test coverage — only image builds. Both ship
a self-contained `make test` (envtest for the controller, plain go test for
the plugin), so wire that up as a standard unit-test presubmit.

disable_sparse_checkout is required: without it prowgen defaults these repos
to a Dockerfile-only sparse checkout (fine for the image-build job, but it
starves `make test` of the Makefile/go source it needs).

Partial step toward openshift/oadp-operator#1832 (Group A2: controllers
reconciled by the operator, gated on a DPA feature flag). The harder half —
installing oadp-operator via OLM against the PR-built kdm image and running
its e2e suite — is blocked on there being no reusable oadp-dev catalog/index
image (oadp-operator's ci-index is built ephemeral, per-PR, and never
promoted), so that part isn't in this PR.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
The unit-test presubmit added in the previous commit was redundant with
kubevirt-datamover-controller's existing GitHub Actions test.yml, and
missed the actual goal: gating these repos' PRs on oadp-operator's real
e2e suite (openshift/oadp-operator#1832, Group A2), not local unit tests.

Adds the real integration:
- oadp-operator's own oadp-dev config now builds an operator bundle/index
  (operator.bundles) and the ci-Dockerfile e2e test binary, promoting both
  (as oadp-operator-index / oadp-operator-e2e-tests) on every merge. This
  is what kdm-controller/plugin need to install oadp-operator via OLM and
  run its e2e suite — previously only the operator binary was promoted;
  the bundle/index/test-binary were built ephemeral, per-PR, and only
  inside oadp-operator's own job.
- kdm-controller/plugin presubmits: install oadp-operator via
  optional-operators-ci-aws from that promoted index, patch the running
  operator deployment's RELATED_IMAGE_KUBEVIRT_DATAMOVER_CONTROLLER /
  RELATED_IMAGE_KUBEVIRT_DATAMOVER_PLUGIN env to the PR-built image
  (oc set env, not the subscribe ref's OO_CONFIG_ENVVARS -- that can only
  override dependencies a step already declares, not inject a new one),
  then run `make TEST_VIRT=true test-e2e` from the promoted test binary.
  TEST_VIRT=true makes the suite install community KubeVirt/HCO itself
  and run the kubevirt-datamover-labeled specs (incl. VM backup/restore),
  so no separate CNV step-registry chain is needed.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
Patching the Deployment directly (oc set env deployment/...) doesn't
survive OLM's own reconciliation: CSV.spec is what OLM continuously
reconciles the Deployment from, so a direct Deployment edit would very
plausibly get reverted mid-test. Subscription.spec.config.env is OLM's
documented, supported override mechanism instead -- it wins over a
same-named CSV env var and is designed to persist across reconciliation
and upgrades. Patch that instead of hand-editing the CSV's deployment
array.

Also point releases.latest at the 5.0 nightly candidate instead of 4.22,
matching the actual current oadp-dev target.

(Resource sizing for the e2e step was cross-checked against oadp-operator's
own existing e2e-test-kubevirt-aws-periodic job -- already an exact match,
no change needed there.)

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
oc patch subscription ... followed immediately by oc rollout status was
racy: rollout status can report the existing rollout as already-complete
before OLM has even noticed the Subscription change and pushed a new
Deployment generation, letting the e2e suite start against the original
promoted image instead of the PR's. Poll the Deployment's own env value
until it reflects the override before checking rollout status.

Also drop prowgen.disable_sparse_checkout: true -- it was only needed for
the unit-test job's `from: src` step, which no longer exists (the e2e
steps run from `cli` and `test-oadp-operator`, not `src`). Removing it
reverts the images/postsubmit jobs to their original Dockerfile-only
sparse checkout, avoiding unrelated churn and CI runtime.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
additional_images maps {destination-name: pipeline-source-tag} -- I had
it backwards (ci-index: oadp-operator-index instead of
oadp-operator-index: ci-index), and had it on the wrong promotion.to[]
entry. Confirmed via ci-tools source (ImageTargets() inserts the *value*
as a required build target) and two working examples elsewhere in this
repo (quay-operator, vertical-pod-autoscaler-operator): the value must be
a real pipeline tag. With the original ordering, the postsubmit's
generated promote targets were `oadp-operator-e2e-tests`/
`oadp-operator-index` -- neither is a real pipeline image in this config,
so the actual postsubmit run would have failed outright once merged.

Also: the original single promotion.to[] entry has an explicit `name`
(shared-imagestream mode), where each promoted image becomes a *tag*
under that one name rather than its own imagestream -- fine for the
existing lone "oadp-operator" image, but wrong for what I actually want
(oadp-operator-index and oadp-operator-e2e-tests as their own separate
imagestreams, matching the kdm repos' base_images references). Moved
additional_images to a second to[] entry with no `name` and an explicit
`tag: latest`, which is the tag-mode that produces per-key imagestreams
instead. Added excluded_images to the original entry so it doesn't also
try to sweep the newly-added test-oadp-operator image into the shared
"oadp-operator" stream.

Verified: generated postsubmit promote targets are now `ci-index` and
`test-oadp-operator` -- real pipeline tags -- instead of the bogus names.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
oadp-dev and oadp-1.6 both promoting oadp-operator-index/
oadp-operator-e2e-tests to the same konveyor namespace under tag
"latest" would collide -- whichever branch's postsubmit ran last would
clobber the other's promoted image. Give oadp-dev's entry an explicit
tag: oadp-dev instead, matching the branch-specific-tag/shared-name
convention the kdm repos' own promotion already uses. Updated their
base_images tag references to match.

Replicates the same real oadp-operator e2e wiring (see prior commits on
this branch) for the oadp-1.6 branch:
- oadp-operator's oadp-1.6 base config: same two-entry promotion split
  (existing name-mode entry + excluded_images, new tag-mode entry for
  oadp-operator-index/oadp-operator-e2e-tests tagged oadp-1.6).
- kdm-controller/kdm-plugin oadp-1.6 configs: same e2e-test-aws presubmit,
  adjusted for this branch: OO_CHANNEL: stable (matching oadp-operator's
  own oadp-1.6 e2e jobs, vs "dev" for oadp-dev), and dependency names
  pointing at this branch's own local build names
  (kubevirt-datamover-controller-oadp-1.6 / -plugin-oadp-1.6).

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
CodeRabbit flagged the single-quoted @.name=='manager' style filter
comparisons as risky. Kubernetes' JSONPath implementation documents
double-quoted string literals in filter expressions; switch to that
form (escaped, since the outer jsonpath argument is itself
double-quoted) to remove any doubt about whether the polling loop's
match would silently fail to parse.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
…undle

The promoted oadp-operator-index bakes in a reference to the bundle
image from its own building job's ephemeral namespace, which becomes
unreachable once that namespace is torn down - BundleUnpackFailed on
rehearsal confirmed this. Promote the bundle itself instead
(skip_building_index) and install it directly via operator-sdk run
bundle, which needs no index/catalog at all.

Also fixes a self-referential OO_INSTALL_MODE bug in the shared
optional-operators-operator-sdk-non-ci-bundle-image step that silently
dropped the install-mode flag for every consumer.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
@kaovilai
kaovilai force-pushed the kdm-e2e-unit-tests branch from 78dca61 to e28b730 Compare August 11, 2026 14:52
@kaovilai

Copy link
Copy Markdown
Member Author

Pushed the actual fix for the BundleUnpackFailed failure — promoted oadp-operator's bundle directly (skip_building_index) instead of an index, and switched the consuming side to operator-sdk run bundle (optional-operators-operator-sdk-non-ci-bundle-image), which needs no index/catalog at all. Also fixed a real bug in that shared step (OO_INSTALL_MODE was being silently dropped). Details in the updated PR description.

/pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-e2e-test-aws pull-ci-openshift-oadp-operator-oadp-dev-ci-bundle-oadp-operator-bundle

Note

Responses generated with Claude

@openshift-ci

openshift-ci Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

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

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

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

@openshift-ci openshift-ci Bot removed the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 11, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

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

Test name Repo Type Reason
pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-e2e-test-aws migtools/kubevirt-datamover-plugin presubmit Presubmit changed
pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws migtools/kubevirt-datamover-plugin presubmit Presubmit changed
pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-images migtools/kubevirt-datamover-plugin presubmit Ci-operator config changed
pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-images migtools/kubevirt-datamover-plugin presubmit Ci-operator config changed
pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-e2e-test-aws migtools/kubevirt-datamover-controller presubmit Presubmit changed
pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws migtools/kubevirt-datamover-controller presubmit Presubmit changed
pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-images migtools/kubevirt-datamover-controller presubmit Ci-operator config changed
pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-images migtools/kubevirt-datamover-controller presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-1.6-ci-bundle-oadp-operator-bundle openshift/oadp-operator presubmit Presubmit changed
pull-ci-openshift-oadp-operator-oadp-1.6-images openshift/oadp-operator presubmit Presubmit changed
pull-ci-openshift-oadp-operator-oadp-dev-ci-bundle-oadp-operator-bundle openshift/oadp-operator presubmit Presubmit changed
pull-ci-openshift-oadp-operator-oadp-dev-images openshift/oadp-operator presubmit Presubmit changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-ci-index openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-e2e-test-aws openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-e2e-test-cli-aws openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-images openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-tls-pqc-readiness openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.22-tls13-adherence openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.23-ci-index openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.23-e2e-test-aws openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-4.23-images openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-5.0-ci-index openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-5.0-e2e-test-aws openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-5.0-e2e-test-cli-aws openshift/oadp-operator presubmit Ci-operator config changed
pull-ci-openshift-oadp-operator-oadp-dev-5.0-e2e-test-kubevirt-aws openshift/oadp-operator presubmit Ci-operator config changed

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

A full list of affected jobs can be found here

Interacting with pj-rehearse

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

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

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: your /pj-rehearse request was not processed because the request waited in queue for longer than 5 minutes. Please retry in a few minutes.

If the Deployment env poll times out, we can't yet tell whether OLM
failed to propagate Subscription.spec.config.env to an already-Succeeded
CSV (the likely cause) versus the Subscription patch having gone to the
wrong object. Capture both objects as artifacts so a re-run isn't needed
to distinguish them.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
@kaovilai

Copy link
Copy Markdown
Member Author

Added one more small thing: set-related-image now dumps the Subscription and CSV YAML as artifacts if the Deployment-env poll times out, so a failure there is diagnosable without a re-run (distinguishes "OLM didn't propagate the Subscription config to an already-Succeeded CSV" from "the patch went to the wrong Subscription").

Note

Responses generated with Claude

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: pj-rehearse could not automatically process this event because the request waited in queue for longer than 5 minutes. Use /pj-rehearse to trigger rehearsals manually.

@kaovilai

Copy link
Copy Markdown
Member Author

/pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-e2e-test-aws pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-e2e-test-aws

Note

Responses generated with Claude

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel.

@openshift-ci

openshift-ci Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

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

Test name Commit Details Required Rerun command
ci/rehearse/migtools/kubevirt-datamover-controller/oadp-1.6/e2e-test-aws 78dca61 link unknown /pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-1.6-e2e-test-aws
ci/rehearse/migtools/kubevirt-datamover-controller/oadp-dev/e2e-test-aws 78dca61 link unknown /pj-rehearse pull-ci-migtools-kubevirt-datamover-controller-oadp-dev-e2e-test-aws
ci/rehearse/migtools/kubevirt-datamover-plugin/oadp-dev/e2e-test-aws 78dca61 link unknown /pj-rehearse pull-ci-migtools-kubevirt-datamover-plugin-oadp-dev-e2e-test-aws
ci/rehearse/migtools/kubevirt-datamover-plugin/oadp-1.6/e2e-test-aws 78dca61 link unknown /pj-rehearse pull-ci-migtools-kubevirt-datamover-plugin-oadp-1.6-e2e-test-aws

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

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

Labels

do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants