Skip to content

refactor: manage Artifactory credentials via context manager - #5811

Open
rnetser wants to merge 14 commits into
RedHatQE:mainfrom
rnetser:refactor/artifactory-credentials-context-manager
Open

refactor: manage Artifactory credentials via context manager#5811
rnetser wants to merge 14 commits into
RedHatQE:mainfrom
rnetser:refactor/artifactory-credentials-context-manager

Conversation

@rnetser

@rnetser rnetser commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator
What this PR does / why we need it:

Replace Artifactory Secret/ConfigMap get_* + cleanup_* pairs with an artifactory_credentials context manager (ArtifactoryCredentials dataclass) so lifecycle is tied to with / ExitStack and resources cannot leak on partial create failure.

client: DynamicClient is mandatory on artifactory_credentials, get_artifactory_secret, and get_artifactory_config_map (no implicit get_client()). Call sites pass an explicit client. create_dv composes selective create via ExitStack (create_secret / create_config_map). Unit tests cover the new API and create_dv wiring.

Assisted-by: Cursor Grok 4.5 noreply@cursor.com
Signed-off-by: rnetser rnetser@redhat.com

Which issue(s) this PR fixes:
Special notes for reviewer:
  • Fixed-name Secret/ConfigMap delete-on-exit (even if pre-existing) matches prior get+cleanup semantics intentionally.
  • .flake8 adds enter_context to fcn_exclude_functions so ExitStack.enter_context(...) is allowed (project FCN exception list; not a # noqa).
  • utilities/storage.py is coverage-omitted; added focused TestCreateDvArtifactory unit tests for the new ExitStack/artifactory paths.
jira-ticket:

NONE

Summary by CodeRabbit

  • Refactor

    • Standardized Artifactory credential handling across VM, DataVolume, migration, backup, and chaos workflows.
    • Improved automatic cleanup while preserving existing credentials and resources.
    • Simplified registry-backed test configuration with consistent credential reuse.
    • Improved reliability when creating resources with missing or partially configured credentials.
  • Tests

    • Expanded coverage for credential creation, reuse, selective provisioning, cleanup, and failure handling.
    • Updated workflow validation for consolidated credentials and dependable resource cleanup.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 956a3cab-ee9d-4ac3-8dfd-cadc52cb9cf1

📥 Commits

Reviewing files that changed from the base of the PR and between 258ef69 and a7912fa.

📒 Files selected for processing (1)
  • tests/scale/test_scale_benchmark.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • RedHatQE/openshift-virtualization-tests-design-docs (manual)

📝 Walkthrough

Walkthrough

The change adds managed Artifactory credentials, updates DataVolume and VM helpers to use them, consolidates test fixtures, and adds lifecycle and failure-path tests.

Changes

Artifactory credential lifecycle

Layer / File(s) Summary
Credentials API and lifecycle
utilities/artifactory.py, utilities/unittests/test_artifactory.py
Adds ArtifactoryCredentials, ownership-aware helpers, the artifactory_credentials context manager, and lifecycle tests.
DataVolume lifecycle orchestration
utilities/storage.py, utilities/unittests/test_storage.py, .flake8
create_dv uses ExitStack to create only missing credentials and clean up managed resources. Tests cover partial creation, skipped creation, and failures.
Utility and VM caller migration
utilities/oadp.py, tests/utils.py, tests/virt/..., tests/fixtures/..., tests/scale/..., tests/conftest.py, tests/data_protection/..., tests/observability/..., utilities/unittests/test_oadp.py
VM, DataVolume, scale, image, upgrade, OADP, metrics, and longevity helpers use the credentials context manager.
Fixture credential consolidation
tests/chaos/..., tests/infrastructure/..., tests/storage/...
Separate Artifactory Secret and ConfigMap fixtures are replaced with unified credentials fixtures and name properties.

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

Possibly related PRs

Suggested labels: new-tests

Suggested reviewers: dshchedr, hmeir, ema-aka-young

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Title check ✅ Passed The title is 60 characters, is under 120 characters, and clearly describes the Artifactory credential context-manager refactor.
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.
Pr Template Sections ✅ Passed The template defines all four required headings, and the live PR body includes each; the first section has 687 non-whitespace characters and the Jira section states NONE.
Stp Link Required ✅ Passed No test files were added under tests/, and the diff adds no test_* functions. The STP/RFE/Jira docstring requirement does not apply.
Stp Scenario Coverage ✅ Passed The diff changes only tests/scale/test_scale_benchmark.py among tests/test_*.py, and it has no STP:, Jira:, or RFE: docstring link; utilities/unittests is explicitly skipped.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@openshift-virtualization-qe-bot-3

Copy link
Copy Markdown
Contributor

Report bugs in Issues

Welcome! 🎉

This pull request will be automatically processed with the following features:

🔄 Automatic Actions

  • Reviewer Assignment: Reviewers are automatically assigned based on the OWNERS file in the repository root
  • Size Labeling: PR size labels (XS, S, M, L, XL, XXL) are automatically applied based on changes
  • Issue Creation: A tracking issue is created for this PR and will be closed when the PR is merged or closed
  • Branch Labeling: Branch-specific labels are applied to track the target branch
  • Auto-verification: Auto-verified users have their PRs automatically marked as verified
  • Labels: Enabled categories: branch, can-be-merged, cherry-pick, has-conflicts, hold, needs-rebase, size, verified, wip

📋 Available Commands

PR Status Management

  • /wip - Mark PR as work in progress (adds WIP: prefix to title)
  • /wip cancel - Remove work in progress status
  • /hold - Block PR merging (PR author or approvers)
  • /hold cancel - Unblock PR merging (PR author or approvers)
  • /verified - Mark PR as verified
  • /verified cancel - Remove verification status
  • /reprocess - Trigger complete PR workflow reprocessing (useful if webhook failed or configuration changed)
  • /regenerate-welcome - Regenerate this welcome message
  • /security-override - Set security check runs to pass (maintainers only)
  • /security-override cancel - Re-run security checks

Review & Approval

  • /lgtm - Approve changes (looks good to me)
  • /approve - Approve PR (approvers only)
  • /assign-reviewers - Assign reviewers based on OWNERS file
  • /assign-reviewer @username - Assign specific reviewer
  • /check-can-merge - Check if PR meets merge requirements

Testing & Validation

  • /retest tox - Run Python test suite with tox
  • /retest build-container - Rebuild and test container image
  • /retest verify-bugs-are-open - verify-bugs-are-open
  • /retest all - Run all available tests

Container Operations

  • /build-and-push-container - Build and push container image (tagged with PR number)
    • Supports additional build arguments: /build-and-push-container --build-arg KEY=value

Cherry-pick Operations

  • /cherry-pick <branch> - Schedule cherry-pick to target branch when PR is merged
    • Multiple branches: /cherry-pick branch1 branch2 branch3
  • /cherry-pick-retry <branch> - Retry a failed cherry-pick (merged PRs only)

Branch Management

  • /rebase - Rebase this PR branch onto its base branch

Label Management

  • /<label-name> - Add a label to the PR
  • /<label-name> cancel - Remove a label from the PR

✅ Merge Requirements

This PR will be automatically approved when the following conditions are met:

  1. Approval: /approve from at least one approver
  2. LGTM Count: Minimum 2 /lgtm from reviewers
  3. Status Checks: All required status checks must pass
  4. No Blockers: No wip, hold, has-conflicts labels and PR must be mergeable (no conflicts)
  5. Verified: PR must be marked as verified

📊 Review Process

Approvers and Reviewers

Approvers:

  • dshchedr
  • jpeimer
  • myakove
  • rnetser
  • vsibirsk

Reviewers:

  • Acedus
  • Ahmad-Hafe
  • Dsanatar
  • OhadRevah
  • RoniKishner
  • SamAlber
  • acinko-rh
  • akalenyu
  • akri3i
  • albarker-rh
  • awels
  • dalia-frank
  • dshchedr
  • ema-aka-young
  • geetikakay
  • guchen11
  • hmeir
  • josemacassan
  • jpeimer
  • kgoldbla
  • kshvaika
  • mijankow
  • rlobillo
  • rnetser
  • sarahbx
  • vsibirsk
Available Labels
  • hold
  • verified
  • wip
  • lgtm
  • approve
AI Features
  • Cherry-Pick Conflict Resolution: Enabled (claude/claude-opus-4-6-1m)
Security Checks
  • Suspicious Path Detection: Monitors paths: .claude/, .vscode/, .cursor/, .devcontainer/, .pi/, .github/workflows/, .github/actions/
  • Committer Identity Check: Verifies last committer matches PR author
  • Mandatory: Security checks block merge (use /security-override to bypass — maintainers only)

💡 Tips

  • WIP Status: Use /wip when your PR is not ready for review
  • Verification: The verified label is removed on new commits unless the push is detected as a clean rebase
  • Cherry-picking: Cherry-pick labels are processed when the PR is merged
  • Container Builds: Container images are automatically tagged with the PR number
  • Permission Levels: Some commands require approver permissions
  • Auto-verified Users: Certain users have automatic verification and merge privileges

📌 Additional Information

Custom Commands:

  • /test-plan — Triggers CodeRabbit to analyze the PR's changed files and post a test execution plan
  • /rerun-smoke — Adds retest-smoke label on the PR to trigger smoke tests execution

For more information, please refer to the project documentation or contact the maintainers.

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.91%. Comparing base (f18201a) to head (a7912fa).
⚠️ Report is 26 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5811      +/-   ##
==========================================
+ Coverage   98.89%   98.91%   +0.02%     
==========================================
  Files          42       42              
  Lines        2631     2682      +51     
==========================================
+ Hits         2602     2653      +51     
  Misses         29       29              
Flag Coverage Δ
utilities 98.91% <100.00%> (+0.02%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@rnetser

rnetser commented Aug 9, 2026

Copy link
Copy Markdown
Collaborator Author

@EdDev check this out

@openshift-virtualization-qe-bot-3

Copy link
Copy Markdown
Contributor

/retest all

Auto-triggered: Files in this PR were modified by merged PR #5948.

Overlapping files

tests/conftest.py

@openshift-virtualization-qe-bot-3

Copy link
Copy Markdown
Contributor

/retest all

Auto-triggered: Files in this PR were modified by merged PR #5898.

Overlapping files

tests/conftest.py

@openshift-virtualization-qe-bot-3

Copy link
Copy Markdown
Contributor

/retest all

Auto-triggered: Files in this PR were modified by merged PR #5813.

Overlapping files

tests/storage/conftest.py
utilities/storage.py
utilities/unittests/test_storage.py

rnetser and others added 12 commits August 11, 2026 13:24
Replace get/cleanup pairs with artifactory_credentials so Secret/ConfigMap
lifecycle is tied to with/ExitStack and cannot leak on partial failure.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid implicit get_client() for Secret/ConfigMap create/delete in
chaos, storage, tekton, and instance-types fixtures.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Make DynamicClient mandatory so Secret/ConfigMap create and delete never
rely on implicit get_client().

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop optional DynamicClient defaults so low-level Artifactory helpers
never fall back to implicit get_client().

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Use from-import instead of utilities.artifactory.artifactory_credentials
per project import conventions.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Pass the namespace's own client instead of a separate unprivileged_client
fixture into artifactory_credentials for the Windows DV template.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Use the owning namespace (or resource) client instead of a separate
admin_client/unprivileged_client fixture arg where a Namespace object
is available.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Track whether get_artifactory_* deployed Secret/ConfigMap so nested
artifactory_credentials contexts do not delete pre-existing shared
resources still needed by longer-lived owners.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Ensure artifactory_credentials does not delete a borrowed Secret if
ConfigMap creation raises after Secret lookup.

Assisted-by: Cursor Grok 4.5 <noreply@cursor.com>
Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…failure

When dv.create() or dv.wait_for_dv_success() raises after some DVs are
already created, the post-yield cleanup never runs. Use ExitStack to
register per-DV cleanup via stack.callback immediately after each create,
so partial failures still tear down everything created so far.

Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Update create_dv docstring to document selective Secret/ConfigMap
  creation and cleanup scope accurately
- Extract inline artifactory_credentials in windows_data_volume_template
  into a dedicated windows_instance_type_artifactory_credentials fixture
  for consistency with the pattern used across all other conftest files

Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
ExitStack.callback() has a positional-only 'callback' parameter. Using
callback=dv.clean_up raises TypeError on Python 3.14+. Switch to positional
form and add 'callback' to fcn_exclude_functions in .flake8 to suppress
the false-positive FCN001 lint error (same pattern as enter_context).

Signed-off-by: rnetser <rnetser@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@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 `@tests/storage/conftest.py`:
- Around line 373-375: Update artifactory_credentials_scope_module to satisfy
pytest scope ordering by using a module-scoped namespace fixture, or reduce the
credential fixture to function scope; preserve the existing credential yield and
avoid depending on a narrower-scoped namespace.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8e466e90-3340-4888-b01f-fe822b4cd2be

📥 Commits

Reviewing files that changed from the base of the PR and between 9432313 and c40e5b5.

📒 Files selected for processing (4)
  • tests/conftest.py
  • tests/storage/conftest.py
  • utilities/storage.py
  • utilities/unittests/test_storage.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • RedHatQE/openshift-virtualization-tests-design-docs (manual)

Comment thread tests/storage/conftest.py
- Remove unused @patch decorators from error-path unit tests
- Prefix unused mock args with underscore (ARG002/ARG005)
- Check Secret/ConfigMap existence before reading credentials
- Apply ExitStack pattern to scale DVs for correct teardown order

Signed-off-by: rnetser <rnetser@redhat.com>
@rnetser

rnetser commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai[bot]

The following review comments were reviewed and a decision was made:

utilities/artifactory.py:155 (outside diff) — HIGH: Check resource existence before reading creation-only inputs.

Addressed: Moved existence check before credential reads. Now creates name-only Secret/ConfigMap for the probe, only reads env vars / SSL cert on the deploy path.

tests/scale/test_scale_benchmark.py:253 (outside diff) — HIGH: Credential cleanup can run before DataVolume cleanup — fix the teardown ordering.

Addressed: Applied ExitStack pattern matching dvs_for_upgrade. Credentials cleanup now runs after DV cleanup (LIFO ordering).

utilities/artifactory.py:258 (duplicate) — HIGH: Coordinate overlapping contexts before deleting shared credentials.

Skipped: Duplicate of prior shared-lifetime discussion. Ownership flags handle the common case — Context B sees pre-existing resource and sets owned=False, so Context A's exit deletes only what it created. The creator-before-borrower edge case is prevented by fixture scope ordering (broader scope outlives narrower).


Assisted-by: PI (claude-opus-4-6-1m)

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Artifactory module outline =="
ast-grep outline utilities/artifactory.py --items all --type function,class --match 'get_artifactory_secret|get_artifactory_config_map|artifactory_credentials|ArtifactoryCredentials' --view expanded

echo
echo "== Artifactory credential implementation and helper context =="
rg -n -C 35 \
  '^(def get_artifactory_secret\b|def get_artifactory_config_map\b|def artifactory_credentials\b|class ArtifactoryCredentials\b)|os\.environ|read_text|\.exists\(|\.deploy\(|\.clean_up\(' \
  utilities/artifactory.py

echo
echo "== Scale fixture outline =="
ast-grep outline tests/scale/test_scale_benchmark.py --items all --type function --match 'golden_images_scale_dvs' --view expanded

echo
echo "== Scale fixture implementation =="
rg -n -C 55 \
  '^def golden_images_scale_dvs\b|ExitStack|enter_context|stack\.callback|artifactory_credentials|\.clean_up\(' \
  tests/scale/test_scale_benchmark.py

echo
echo "== All Artifactory credential context usages =="
rg -n -C 4 \
  '\b(artifactory_credentials\s*\(|enter_context\s*\(\s*artifactory_credentials)' \
  --glob '*.py' \
  . || true

Length of output: 37735


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Context-manager cleanup block =="
sed -n '260,320p' utilities/artifactory.py

echo
echo "== Relevant Artifactory context-manager tests =="
rg -n -C 24 \
  'def test_.*(cleanup|existing|overlap|nested|owner|borrower|shared)|artifactory_credentials\(' \
  utilities/unittests/test_artifactory.py

echo
echo "== Direct context-manager callers and their cleanup scope =="
for file in utilities/oadp.py tests/utils.py tests/fixtures/images/validation_os_images.py \
            tests/data_protection/oadp/conftest.py tests/observability/metrics/utils.py \
            tests/virt/cluster/longevity_tests/utils.py; do
  echo "--- $file ---"
  rg -n -C 18 \
    '\bwith artifactory_credentials\b|\byield\b|\.clean_up\(|delete_resources\b|return\b' \
    "$file" || true
done

Length of output: 117050


@rnetser Confirmed for the first two findings.

HIGH — creation-only inputs: Addressed. get_artifactory_secret() checks existing_secret.exists before it reads ARTIFACTORY_USER or ARTIFACTORY_TOKEN. get_artifactory_config_map() checks existing_cm.exists before it reads py_config["server_url"] or retrieves the TLS certificate.

HIGH — cleanup order: Addressed. In golden_images_scale_dvs, ExitStack enters artifactory_credentials before it registers delete_resources. ExitStack uses LIFO cleanup. It deletes the DataVolumes first. It then deletes owned credentials.

HIGH — overlapping contexts: The skipped finding remains valid. I cannot withdraw it.

owned=False protects a borrower only when the owner exits after the borrower. It does not protect this valid sequence:

with artifactory_credentials(namespace, client):  # Context A creates resources.
    with artifactory_credentials(namespace, client):  # Context B borrows resources.
        # If Context A exits before Context B, A deletes the resources.
        # Context B can still require the resources.

The cleanup block in utilities/artifactory.py deletes owned resources unconditionally. It does not track active borrowers. The unit tests do not cover this owner-before-borrower sequence.

Fixture scope ordering can prevent the issue for specific fixtures with enforced scopes. It cannot protect direct calls to artifactory_credentials, which exist in utility and test helper functions. The API documentation also does not restrict the context manager to scoped fixture use.

A coordinated lifetime mechanism, such as per-namespace reference tracking, is required if overlapping contexts are supported. Otherwise, the API must explicitly forbid overlapping contexts and enforce that restriction.

You are interacting with an AI system.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

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

Inline comments:
In `@tests/scale/test_scale_benchmark.py`:
- Around line 258-262: Update the setup flow around artifactory_credentials and
delete_resources so keep_resources governs both credential resources and
DataVolumes: register both cleanup actions, then detach or otherwise disable the
registered cleanup callbacks after successful setup when resources must be
retained. Preserve normal cleanup when keep_resources is false and ensure the
credentials remain available alongside retained DataVolumes.
- Around line 261-262: Update the DataVolume setup flow around DataVolume.deploy
and dvs_list so each DataVolume is registered for cleanup before deployment,
ensuring deploy failures are also cleaned up. Keep setup cleanup active while
deployment is in progress, and disable it only after setup succeeds when
keep_resources is true; rely on delete_resources handling uncreated DataVolumes.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 48f6dd79-4257-4648-b378-6ff69f2e4651

📥 Commits

Reviewing files that changed from the base of the PR and between c40e5b5 and 258ef69.

📒 Files selected for processing (4)
  • tests/scale/test_scale_benchmark.py
  • utilities/artifactory.py
  • utilities/unittests/test_artifactory.py
  • utilities/unittests/test_storage.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • RedHatQE/openshift-virtualization-tests-design-docs (manual)

Comment thread tests/scale/test_scale_benchmark.py
Comment thread tests/scale/test_scale_benchmark.py
- Append DataVolume to cleanup list before deploy() to prevent leaks
- Use stack.pop_all() when keep_resources=True to retain credentials

Signed-off-by: rnetser <rnetser@redhat.com>
@rnetser

rnetser commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@rnetser

rnetser commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@rnetser

rnetser commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@openshift-virtualization-qe-bot-3

Copy link
Copy Markdown
Contributor

/retest all

Auto-triggered: Files in this PR were modified by merged PR #5672.

Overlapping files

tests/conftest.py

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants