Add CNV smoke test CI lane on TNF cluster (OCP 5.0)#80512
Conversation
Add a weekly periodic job that provisions a Two Node OpenShift with Fencing (TNF) cluster, deploys LVMS for local storage, deploys CNV 5.0, and runs CNV smoke tests. This implements continuous validation for the work described in CNV-72458. New step registry components: - baremetalds-cnv-smoke: baremetal-compatible CNV smoke test ref adapted from interop-tests-cnv-tests-smoke (no fwknop, configurable storage class defaulting to lvms-vg1) - baremetalds-two-node-fencing-cnv-smoke: workflow combining TNF cluster provisioning, LVMS deployment (via storage-conf-csi-optional-topolvm), CNV deployment (via interop-tests-deploy-cnv), and CNV smoke tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use LVMS-specific config (global_config_lvms.py) and Block volume mode - Exclude RWX tests (-m 'smoke and not rwx_default_storage') - Add --jira, --html report, and --data-collector flags Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughA new ChangesCNV Smoke Test and Workflow Infrastructure
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Suggested labels
🚥 Pre-merge checks | ✅ 15✅ Passed checks (15 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Remove --jira, --data-collector, --html flags that need credentials or setup not available in CI. Use standard global_config.py with --tc overrides for LVMS storage class and volume mode. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: kasturinarra The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
There was a problem hiding this comment.
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/step-registry/baremetalds/cnv/smoke/baremetalds-cnv-smoke-commands.sh`:
- Around line 16-44: The poetry run pytest command has `|| /bin/true` appended
which suppresses all test failures, allowing the script to continue even when
tests fail. Remove the `|| /bin/true` from the poetry run pytest command to
preserve the actual pytest exit status. Capture the exit code of the pytest
command in a variable, then after the time-based check completes, check that
captured exit code and exit with it if pytest failed, ensuring that test
failures are not silently converted to success when the test duration exceeds
600 seconds.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: ace0d6d4-8771-43e1-a887-bb27c63e75fa
⛔ Files ignored due to path filters (1)
ci-operator/jobs/openshift/release/openshift-release-main-periodics.yamlis excluded by!ci-operator/jobs/**
📒 Files selected for processing (8)
ci-operator/config/openshift/release/openshift-release-main__nightly-5.0.yamlci-operator/step-registry/baremetalds/cnv/smoke/OWNERSci-operator/step-registry/baremetalds/cnv/smoke/baremetalds-cnv-smoke-commands.shci-operator/step-registry/baremetalds/cnv/smoke/baremetalds-cnv-smoke-ref.metadata.jsonci-operator/step-registry/baremetalds/cnv/smoke/baremetalds-cnv-smoke-ref.yamlci-operator/step-registry/baremetalds/two-node/fencing/cnv-smoke/OWNERSci-operator/step-registry/baremetalds/two-node/fencing/cnv-smoke/baremetalds-two-node-fencing-cnv-smoke-workflow.metadata.jsonci-operator/step-registry/baremetalds/two-node/fencing/cnv-smoke/baremetalds-two-node-fencing-cnv-smoke-workflow.yaml
| poetry run pytest tests \ | ||
| -s \ | ||
| -o log_cli=true \ | ||
| -o cache_dir=/tmp/cache-pytest \ | ||
| -m 'smoke and not rwx_default_storage' \ | ||
| --tc-file=tests/global_config_lvms.py \ | ||
| --tc "default_storage_class:${CNV_STORAGE_CLASS}" \ | ||
| --tc "default_volume_mode:${CNV_VOLUME_MODE}" \ | ||
| --storage-class-matrix="${CNV_STORAGE_CLASS}" \ | ||
| --latest-rhel \ | ||
| --tb=native \ | ||
| --data-collector \ | ||
| --jira \ | ||
| --junit-xml="${ARTIFACT_DIR}/xunit_results.xml" \ | ||
| --pytest-log-file="${ARTIFACT_DIR}/pytest-tests.log" \ | ||
| --html="${ARTIFACT_DIR}/report.html" \ | ||
| --self-contained-html || /bin/true | ||
|
|
||
| FINISH_TIME=$(date "+%s") | ||
| DIFF_TIME=$((FINISH_TIME - START_TIME)) | ||
|
|
||
| if [[ ${DIFF_TIME} -le 600 ]]; then | ||
| echo "" | ||
| echo "The tests finished too quickly (took only: ${DIFF_TIME} sec), pausing here to give time to debug" | ||
| sleep 7200 | ||
| exit 1 | ||
| else | ||
| echo "Finished in: ${DIFF_TIME} sec" | ||
| fi |
There was a problem hiding this comment.
Preserve pytest failure status instead of forcing success
Line 32 currently swallows all pytest failures (|| /bin/true), so a failing run that lasts more than 600s is reported as success. This can silently pass broken weekly validation.
Suggested fix
START_TIME=$(date "+%s")
-poetry run pytest tests \
+pytest_rc=0
+poetry run pytest tests \
-s \
-o log_cli=true \
-o cache_dir=/tmp/cache-pytest \
-m 'smoke and not rwx_default_storage' \
--tc-file=tests/global_config_lvms.py \
--tc "default_storage_class:${CNV_STORAGE_CLASS}" \
--tc "default_volume_mode:${CNV_VOLUME_MODE}" \
--storage-class-matrix="${CNV_STORAGE_CLASS}" \
--latest-rhel \
--tb=native \
--data-collector \
--jira \
--junit-xml="${ARTIFACT_DIR}/xunit_results.xml" \
--pytest-log-file="${ARTIFACT_DIR}/pytest-tests.log" \
- --html="${ARTIFACT_DIR}/report.html" \
- --self-contained-html || /bin/true
+ --html="${ARTIFACT_DIR}/report.html" \
+ --self-contained-html || pytest_rc=$?
FINISH_TIME=$(date "+%s")
DIFF_TIME=$((FINISH_TIME - START_TIME))
@@
else
echo "Finished in: ${DIFF_TIME} sec"
fi
+
+if [[ ${pytest_rc} -ne 0 ]]; then
+ exit "${pytest_rc}"
+fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@ci-operator/step-registry/baremetalds/cnv/smoke/baremetalds-cnv-smoke-commands.sh`
around lines 16 - 44, The poetry run pytest command has `|| /bin/true` appended
which suppresses all test failures, allowing the script to continue even when
tests fail. Remove the `|| /bin/true` from the poetry run pytest command to
preserve the actual pytest exit status. Capture the exit code of the pytest
command in a variable, then after the time-based check completes, check that
captured exit code and exit with it if pytest failed, ensuring that test
failures are not silently converted to success when the test duration exceeds
600 seconds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
/pj-rehearse periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-two-node-fencing-cnv-smoke |
|
@kasturinarra: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
/pj-rehearse periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-two-node-fencing-cnv-smoke |
|
@kasturinarra: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
- Set LVM_OPERATOR_SUB_SOURCE to lvm-catalogsource (internal Konflux) - Set LVM_OPERATOR_SUB_CHANNEL to stable-4.22 - Use CNV 4.22 test image (5.0 not available yet) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
/pj-rehearse periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-two-node-fencing-cnv-smoke |
|
@kasturinarra: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
[REHEARSALNOTIFIER]
Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-two-node-fencing-cnv-smoke |
|
@kasturinarra: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
@kasturinarra: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions 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. |
Summary
e2e-metal-ovn-two-node-fencing-cnv-smoke) that provisions a Two Node OpenShift with Fencing (TNF) cluster, deploys LVMS + CNV 5.0, and runs CNV smoke testsbaremetalds-cnv-smoke— baremetal-compatible CNV smoke test using the team's validated pytest command (smoke and not rwx_default_storage, LVMS config, Block volume mode)baremetalds-two-node-fencing-cnv-smoke— combines TNF provisioning, LVMS deployment (viastorage-conf-csi-optional-topolvm), CNV deployment (viainterop-tests-deploy-cnv), and CNV smoke testsTest plan
make updatepasses locallymake registry-metadatavalidates new step registry components🤖 Generated with Claude Code
Summary by CodeRabbit
This PR updates OpenShift CI infrastructure to add continuous, weekly CNV validation for OCP 5.0 on Two-Node OpenShift with Fencing (TNF) clusters running on the
equinix-edge-enablementprofile.Concretely, it adds a new weekly Prow test lane in
ci-operator/config/openshift/release/openshift-release-main__nightly-5.0.yaml:e2e-metal-ovn-two-node-fencing-cnv-smoke(scheduled weekly, configured withCNV_VERSION: "5.0")baremetalds-two-node-fencing-cnv-smokeworkflow and is inserted right after the existinge2e-metal-ovn-two-node-fencingentry.To implement the lane, the PR introduces two new step-registry components:
baremetalds-cnv-smokestep: runs CNV smoke tests usingpoetry run pytestwith a filter of smoke and notrwx_default_storage, defaulting to LVMS-backed local storage (CNV_STORAGE_CLASS=lvms-vg1) and Block volume mode (CNV_VOLUME_MODE=Block). The step also sets up pytest/global config defaults for storage class & volume mode and includes runtime handling intended to keep the job from finishing “too quickly”.baremetalds-two-node-fencing-cnv-smokeworkflow: provisions the TNF cluster (redfish BMC + extra disks), deploys LVMS viastorage-conf-csi-optional-topolvm, deploys CNV viainterop-tests-deploy-cnv, then runs thebaremetalds-cnv-smokestep as part of the fullofcir-postchain. It carriesCNV_VERSION: "5.0"through the workflow.Governance/metadata updates:
OWNERSand workflow metadata soopenshift-edge-approverscan approve the new step/workflow.Context and validation:
make updateandmake registry-metadatapass./pj-rehearse periodic-ci-openshift-release-main-nightly-5.0-e2e-metal-ovn-two-node-fencing-cnv-smoketo run the new periodic lane prior to merge.4.22for the pytest harness (withCNV_VERSIONset to5.0for the workflow), because the 5.0 test image was not available at PR creation time.