Skip to content

OSAC-3234: CaaS local storage — LVMS on guest cluster workers - #199

Merged
omer-vishlitzky merged 10 commits into
osac-project:mainfrom
zszabo-rh:feat/OSAC-3234-caas-lvms
Aug 13, 2026
Merged

OSAC-3234: CaaS local storage — LVMS on guest cluster workers#199
omer-vishlitzky merged 10 commits into
osac-project:mainfrom
zszabo-rh:feat/OSAC-3234-caas-lvms

Conversation

@zszabo-rh

@zszabo-rh zszabo-rh commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Enable developers without VAST to provision CaaS clusters and create PVCs
using LVMS — no external storage backend required.

This is a temporary approach using LVMS directly on guest cluster workers.
A CSI-based approach is planned for a later phase (OSAC-3702).

Design: LVMS directly on guest cluster workers
The dispatcher already passes _remote_kubeconfig (from admin_kubeconfig
in the storage event for ClusterOrder resources). The ensure_storage_class
role is extended to use it when present, keeping the hub path unchanged.

Changes

osac-aap — lvms_storage/tasks/ensure_storage_class.yaml

New CaaS block (gated on _remote_kubeconfig is defined):

  • Auto-detects the LVMS OLM channel from the guest cluster's
    PackageManifest.status.defaultChannel (OLM sets this per cluster version).
    Explicit lvms_storage_operator_channel override still works for pinning.
  • Installs LVMS operator on guest cluster via OLM subscription
  • Applies LVMCluster CR with overprovisionRatio (required field in LVMS 4.16+)
    and optional deviceSelector.paths for explicit disk binding
  • Waits for LVMCluster to reach Ready state — fails immediately if
    Failed (e.g. no eligible block device found on the worker node)
  • Waits for StorageClass to become available
  • Creates per-tenant StorageClass on guest cluster (topolvm.io provisioner
    • OSAC labels)

Hub path is unchanged.

osac-aap — lvms_storage/defaults/main.yaml

New variables:

  • lvms_storage_operator_channel — defaults to "" (auto-detect from
    PackageManifest); set explicitly to pin a channel (e.g. stable-4.18)
  • lvms_storage_operator_catalog_source/namespace — configurable for
    disconnected clusters
  • lvms_storage_data_device — bind LVMCluster to a specific device path;
    empty (default) = auto-discover

osac-installer — scripts/setup-caas-agents.sh

AGENT_VM_DATA_DISK_SIZE (opt-in): when set, creates a second qcow2 image and
passes it to virt-install. Required for LVMS in the setup-caas-agents.sh
path (bare metal nodes have physical data disks; cluster-tool already adds
a second disk via its own workflow).

osac-operator — charts/operator/templates/clusterrole.yaml

Adds hostedcontrolplanes to the existing hypershift RBAC rule.

The storage controller's getClusterKubeconfig() reads the HostedControlPlane
resource to locate the admin kubeconfig secret for a CaaS guest cluster
(pre-existing code, not added by this PR). The kubebuilder marker at
storage_controller.go:111 already declared this permission, so
config/rbac/role.yaml was correct — but the Helm chart was out of sync.
This PR exercises the CaaS kubeconfig path for the first time and surfaces
the gap.

Test Plan

  • Provision CaaS cluster via ClusterOrder with AGENT_VM_DATA_DISK_SIZE=50G
  • Verify LVMS operator installs on guest cluster via OLM
  • Verify LVMCluster CR reaches Ready state on guest cluster
  • Verify topolvm.io StorageClass available on guest cluster
  • Create PVC on guest cluster — verify it binds
  • Point LVMCluster at non-existent device (/dev/vdc) — verify job fails
    immediately on first retry (attempts: 1) with state: Failed and a clear
    lstat /dev/vdc: no such file or directory reason; no 30-retry silent timeout

Closes OSAC-3234

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added support for installing and configuring LVMS storage on hub and guest clusters.
    • Added configurable operator channels, namespaces, catalogs, and optional guest-cluster block devices.
    • Added optional VM data-disk creation and attachment during CaaS agent setup.
    • Enabled required access for hosted control plane discovery.
    • Storage classes can now be created and removed on the target cluster.
  • Documentation

    • Documented hub and guest-cluster provisioning requirements and supported targets.

@openshift-ci-robot

openshift-ci-robot commented Aug 7, 2026

Copy link
Copy Markdown

@zszabo-rh: This pull request references OSAC-3234 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

Enable developers without VAST to provision CaaS clusters and create PVCs
using LVMS — no external storage backend required.

This is a temporary approach using LVMS directly on guest cluster workers.
A CSI-based approach is planned for a later phase (OSAC-3702).

Design: LVMS directly on guest cluster workers
The dispatcher already passes _remote_kubeconfig (from admin_kubeconfig
in the storage event for ClusterOrder resources). The ensure_storage_class
role is extended to use it when present, keeping the hub path unchanged.

Changes

osac-aap — lvms_storage/tasks/ensure_storage_class.yaml

New CaaS block (gated on _remote_kubeconfig is defined):

  • Installs LVMS operator on guest cluster via OLM subscription
  • Applies LVMCluster CR (auto-discovers second disk on worker)
  • Waits for LVMCluster to reach Ready state — fails immediately if
    Failed (e.g. no eligible block device found on the worker node)
  • Waits for StorageClass to become available
  • Creates per-tenant StorageClass on guest cluster (topolvm.io provisioner
  • OSAC labels)

Hub path is unchanged.

osac-installer — scripts/setup-caas-agents.sh

Adds AGENT_VM_DATA_DISK_SIZE (optional): when set, creates a second qcow2
disk and attaches it to the agent VM. LVMS requires a raw block device;
the root/boot disk is not claimable. Opt-in with empty default — single-disk
setups are unaffected.

osac-operator — charts/operator/templates/clusterrole.yaml

Adds hostedcontrolplanes to the existing hypershift RBAC rule.

The storage controller's getClusterKubeconfig() reads the HostedControlPlane
resource to locate the admin kubeconfig secret for a CaaS guest cluster
(pre-existing code, not added by this PR). The kubebuilder marker at
storage_controller.go:111 already declared this permission, so
config/rbac/role.yaml was correct — but the Helm chart was out of sync.
This PR exercises the CaaS kubeconfig path for the first time and surfaces
the gap.

Test Plan

  • Provision CaaS cluster via ClusterOrder with AGENT_VM_DATA_DISK_SIZE=50G
  • Verify LVMS operator installs on guest cluster via OLM
  • Verify LVMCluster CR reaches Ready state on guest cluster
  • Verify topolvm.io StorageClass available on guest cluster
  • Create PVC on guest cluster — verify it binds
  • Provision CaaS cluster without AGENT_VM_DATA_DISK_SIZE — verify
    AAP job fails with LVMCluster Failed (not silent success with broken storage)

Closes OSAC-3234

🤖 Generated with Claude Code

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci Bot added the approved label Aug 7, 2026
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@zszabo-rh, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 50 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9b1a5ff3-0fdc-4222-99c9-1581d3120b55

📥 Commits

Reviewing files that changed from the base of the PR and between bdcc30f and 9e3107a.

📒 Files selected for processing (3)
  • osac-aap/collections/ansible_collections/osac/templates/README.md
  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml
  • osac-operator/charts/operator/templates/clusterrole.yaml

Walkthrough

The LVMS role now supports CaaS guest-cluster installation through OLM and remote StorageClass management. Agent VM setup can attach an optional data disk. The operator ClusterRole can read secrets and hostedcontrolplanes.

Changes

LVMS storage provisioning

Layer / File(s) Summary
LVMS defaults and guest installation
osac-aap/.../lvms_storage/defaults/main.yaml, osac-aap/.../lvms_storage/meta/osac.yaml, osac-aap/.../lvms_storage/tasks/ensure_storage_class.yaml
Adds configurable LVMS channel, namespace, CatalogSource, catalog namespace, and data-device defaults. Documents CaaS support. Installs LVMS through OLM and waits for the CSV, LVMCluster, and generated StorageClass.
Remote tenant StorageClass access
osac-aap/.../lvms_storage/tasks/ensure_storage_class.yaml, osac-aap/.../lvms_storage/tasks/teardown_cluster_storage.yaml, osac-aap/.../README.md
Uses optional remote kubeconfig and certificate-validation settings for StorageClass discovery and creation. Updates CaaS provisioning and target-cluster documentation.

Agent VM data disk

Layer / File(s) Summary
Optional data disk configuration and attachment
osac-installer/scripts/setup-caas-agents.sh
Validates AGENT_VM_DATA_DISK_SIZE and conditionally creates and attaches a qcow2 data disk.

Operator RBAC

Layer / File(s) Summary
Secret and HostedControlPlane read permissions
osac-operator/charts/operator/templates/clusterrole.yaml
Adds read access for core API secrets and get access for hostedcontrolplanes in the hypershift.openshift.io API group.

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

Sequence Diagram(s)

sequenceDiagram
  participant Ansible
  participant GuestCluster
  participant LVMSOperator
  Ansible->>GuestCluster: Create LVMS namespace, OperatorGroup, and Subscription
  GuestCluster->>LVMSOperator: Install LVMS through OLM
  Ansible->>GuestCluster: Create LVMCluster with device settings
  LVMSOperator->>GuestCluster: Generate StorageClass
  Ansible->>GuestCluster: Discover or create tenant StorageClass
Loading

Suggested reviewers: eliorerz, eranco74

🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the main change: adding CaaS guest-cluster local storage with LVMS on worker nodes.
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.
No-Hardcoded-Secrets ✅ Passed The complete PR diff contains no hardcoded API keys, passwords, private keys, embedded-credential URLs, or long encoded blobs; TOKEN is generated at runtime with oc create token.
No-Weak-Crypto ✅ Passed The PR adds no MD5, SHA1, DES, 3DES, RC4, Blowfish, ECB, custom crypto, or secret/token comparison logic; scans of all added lines found no weak-crypto usage.
No-Injection-Vectors ✅ Passed The cumulative diff adds no listed injection primitive; AGENT_VM_DATA_DISK_SIZE is regex-validated and passed through quoted array arguments, while existing eval use is unchanged.
Container-Privileges ✅ Passed The full PR diff adds no privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, allowPrivilegeEscalation, or root security settings; added Kubernetes resources contain no securityContext.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds no sensitive-data logging. New output contains only disk-size validation; kubeconfig content is stored in a temp file and only its path is passed to LVMS tasks.
Ai-Attribution ✅ Passed The PR names Claude Code; all eight OSAC-3234 commits have Assisted-by: Claude Code trailers, and none uses Co-Authored-By for AI.
✨ 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.

@zszabo-rh

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
✅ 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.

coderabbitai[bot]
coderabbitai Bot previously requested changes Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml (1)

55-56: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Make the CatalogSource configurable.

redhat-operators and openshift-marketplace are hardcoded. A disconnected guest cluster uses a mirrored CatalogSource with a different name. Move both values into defaults/main.yaml next to lvms_storage_operator_channel.

♻️ Proposed change
             name: lvms-operator
-            source: redhat-operators
-            sourceNamespace: openshift-marketplace
+            source: "{{ lvms_storage_operator_catalog_source }}"
+            sourceNamespace: "{{ lvms_storage_operator_catalog_namespace }}"

Add to defaults/main.yaml:

lvms_storage_operator_catalog_source: "redhat-operators"
lvms_storage_operator_catalog_namespace: "openshift-marketplace"
🤖 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
`@osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml`
around lines 55 - 56, Make the CatalogSource configurable by defining
lvms_storage_operator_catalog_source and lvms_storage_operator_catalog_namespace
in defaults/main.yaml with the current values, then update the CatalogSource
resource in the lvms_storage role to reference these variables instead of
hardcoded strings.
🤖 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
`@osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml`:
- Around line 2-12: Update the LVMS provider metadata in osac.yaml to describe
both hub and CaaS guest-cluster support, and add CaaS to
capabilities.provisioning_targets alongside vmaas. Keep the metadata consistent
with ensure_storage_class.yaml’s _remote_kubeconfig path and existing provider
structure.
- Around line 85-92: The LVMCluster specification under thinPoolConfig lacks
selectors tying storage to the required agent data disk. Update the LVMCluster
resource to include deviceSelector.paths for the expected data-device path, and
ensure provisioning fails when that disk is absent if the role requires it; use
the existing lvms_storage configuration symbols and setup-caas-agents disk path
conventions.

In `@osac-installer/scripts/setup-caas-agents.sh`:
- Around line 189-210: Update the generated VM creation script around
_virt_install_args to use an if block for AGENT_VM_DATA_DISK_SIZE, expanding and
quoting AGENT_VM_STORAGE_DIR, AGENT_VM_NAME, and AGENT_VM_DATA_DISK_SIZE when
removing, creating, and appending the optional data disk. Ensure the final
virt-install invocation expands the _virt_install_args array rather than passing
the literal ${_virt_install_args[@]} text.
- Line 43: Replace the character-only validation for AGENT_VM_DATA_DISK_SIZE
with validation that matches the installer’s qemu-img size grammar: a positive
numeric value with an optional k, M, G, T, or b suffix, rejecting zero,
nonnumeric values, and leading hyphens. Confirm the accepted syntax against the
qemu-img version used by the installer before applying the check.

---

Nitpick comments:
In
`@osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml`:
- Around line 55-56: Make the CatalogSource configurable by defining
lvms_storage_operator_catalog_source and lvms_storage_operator_catalog_namespace
in defaults/main.yaml with the current values, then update the CatalogSource
resource in the lvms_storage role to reference these variables instead of
hardcoded strings.
🪄 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: osac-project/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2ee4c358-5d6d-4f4c-b67a-bfe72614d6a7

📥 Commits

Reviewing files that changed from the base of the PR and between 0fec1ac and 9fd9bb7.

📒 Files selected for processing (4)
  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/defaults/main.yaml
  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml
  • osac-installer/scripts/setup-caas-agents.sh
  • osac-operator/charts/operator/templates/clusterrole.yaml

Comment thread osac-installer/scripts/setup-caas-agents.sh Outdated
Comment thread osac-installer/scripts/setup-caas-agents.sh Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes Aug 11, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 `@osac-aap/collections/ansible_collections/osac/templates/README.md`:
- Line 194: Update the generic my_provider documentation example and the
associated provider-capability text to remove the blanket caas claim, or
explicitly state that providers must list only supported targets. Keep caas
documented only where the implementation supports it through lvms_storage and
_remote_kubeconfig.
🪄 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: osac-project/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0e841474-a9cb-4458-9f07-5cb3e11a8619

📥 Commits

Reviewing files that changed from the base of the PR and between a83d950 and bdcc30f.

📒 Files selected for processing (3)
  • osac-aap/collections/ansible_collections/osac/templates/README.md
  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/teardown_cluster_storage.yaml
  • osac-operator/charts/operator/templates/clusterrole.yaml

Comment thread osac-aap/collections/ansible_collections/osac/templates/README.md Outdated
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Zoltan Szabo <zszabo@redhat.com>
- README: remove caas from generic provider example — providers declare
  only targets they implement; update text to reflect that caas is
  lvms_storage-specific, not a universal provider target
- ensure_storage_class: use lvms_storage_operator_catalog_namespace for
  PackageManifest lookup instead of hardcoded openshift-marketplace so
  disconnected clusters with a mirrored catalog query the correct source

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Zoltan Szabo <zszabo@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 2:05 PM UTC · Ended 2:06 PM UTC

Commit: 2bd1c8d · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 11, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:08 PM UTC · Completed 2:26 PM UTC

Commit: 9e3107a · View workflow run →

@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review August 11, 2026 14:26

Superseded by updated review

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

See the review comment for full details.


Note: The following inline comments could not be posted on the diff (GitHub returned 422) and are included here instead:

  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/teardown_cluster_storage.yaml (file-level): Line 13 · [medium] logic-error

teardown_cluster_storage.yaml does not pass kubeconfig/validate_certs to its k8s_info and k8s calls, relying on the dispatcher's module_defaults. The updated ensure_storage_class.yaml adds explicit parameters as defense-in-depth. This creates an inconsistency between the two task files for CaaS path operation.

Suggested fix: Add explicit kubeconfig and validate_certs params to match ensure_storage_class.yaml.

  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml:150: [low] edge-case

Wait for LVMS StorageClass uses until/retries without failed_when. The CSV and LVMCluster wait tasks include failed_when for actionable error messages; this wait would benefit from the same pattern for consistency.

  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/tasks/ensure_storage_class.yaml:18: [low] pattern-violation

validate_certs uses not(_remote_kubeconfig_insecure) (always explicit boolean) rather than the dispatcher's omit-based pattern. Functionally identical but diverges from established convention.

  • osac-installer/scripts/setup-caas-agents.sh:193: [low] naming-convention

_virt_install_args uses leading-underscore naming (Ansible convention) within a shell heredoc where all other variables use SCREAMING_SNAKE_CASE.

  • osac-installer/scripts/setup-caas-agents.sh:42: [low] naming-convention

AGENT_VM_DATA_DISK_SIZE validation uses a purpose-built regex while AGENT_VM_DISK_SIZE uses validate_safe. Different validation styles for similar variables.

  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/defaults/main.yaml:28: [low] edge-case

lvms_storage_data_device defaults to empty (LVMS auto-discovers all eligible block devices). Documented behavior, but operators should set this explicitly in CaaS deployments to avoid accidental disk consumption.

  • osac-aap/collections/ansible_collections/osac/templates/README.md:197: [low] stale-reference

_provisioning_target variable referenced in README step 3 does not exist in the dispatcher code. Pre-existing issue surfaced by this PR's documentation updates.

  • osac-operator/charts/operator/templates/clusterrole.yaml:51: [low] comment-style

hostedcontrolplanes rule has an inline comment; no other rule in the file uses comments. The comment itself is useful but creates a style inconsistency.

  • osac-aap/collections/ansible_collections/osac/templates/roles/lvms_storage/meta/osac.yaml:14: [low] naming-convention

caas provisioning target uses a higher-level abstraction than the existing hcp_* taxonomy. Appears intentional for the LVMS use case.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 11, 2026
@zszabo-rh

Copy link
Copy Markdown
Contributor Author

/retest

@github-actions

Copy link
Copy Markdown

Re-triggered failed runs:

  • label-gate (#31501536749)
  • E2E CaaS Full Install (#31499692166)
  • label-gate (#31499691553)

@akshaynadkarni akshaynadkarni 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.

lgtm

@openshift-ci

openshift-ci Bot commented Aug 12, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: akshaynadkarni, zszabo-rh

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

The pull request process is described 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

@omer-vishlitzky
omer-vishlitzky added this pull request to the merge queue Aug 12, 2026
@omer-vishlitzky
omer-vishlitzky dismissed stale reviews from coderabbitai[bot], coderabbitai[bot], and coderabbitai[bot] August 12, 2026 22:21

Auto-dismissed: only Prow labels gate merging

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 12, 2026
@omer-vishlitzky
omer-vishlitzky added this pull request to the merge queue Aug 12, 2026
Merged via the queue into osac-project:main with commit 72aefaa Aug 13, 2026
145 of 151 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants