Skip to content

CNTRLPLANE-3201: ci(hypershift): add self-managed Azure OADP backup/restore E2E test - #82796

Open
mgencur wants to merge 3 commits into
openshift:mainfrom
mgencur:CNTRLPLANE-3201_backup_restore_self_managed_azure
Open

CNTRLPLANE-3201: ci(hypershift): add self-managed Azure OADP backup/restore E2E test#82796
mgencur wants to merge 3 commits into
openshift:mainfrom
mgencur:CNTRLPLANE-3201_backup_restore_self_managed_azure

Conversation

@mgencur

@mgencur mgencur commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

https://redhat.atlassian.net/browse/CNTRLPLANE-3201

Summary by CodeRabbit

  • Adds optional and weekly Azure CI jobs for HyperShift self-managed OADP backup and restore testing across supported release configurations.
  • Adds a workflow that provisions management and guest clusters, configures Azure Blob Storage and OADP, runs backup, restore, and conformance tests, and cleans up resources.
  • Adds Azure OADP setup and destroy steps with service-principal authentication, storage-account management, retry logic, and cleanup metadata.

@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 3, 2026
@openshift-ci
openshift-ci Bot requested review from bryan-cox and enxebre August 3, 2026 10:06
@openshift-ci

openshift-ci Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: mgencur
Once this PR has been reviewed and has the lgtm label, please assign jparrill 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

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Changes

Azure self-managed backup and restore

Layer / File(s) Summary
Configure Azure OADP prerequisites
ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/*
Creates Azure storage, generates credentials, configures OADP, and creates backup and snapshot location resources.
Run the self-managed backup and restore workflow
ci-operator/step-registry/hypershift/self-managed-azure/e2e-backuprestore/*
Adds the workflow and metadata for nested cluster setup, OADP testing, backup and restore tests, conformance tests, and cleanup.
Clean up storage and register CI jobs
ci-operator/step-registry/hypershift/self-managed-azure/oadp-destroy/*, ci-operator/config/openshift/hypershift/*
Adds bounded Azure storage deletion and optional or weekly Azure backup and restore jobs for HyperShift configurations.

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

Sequence Diagram(s)

sequenceDiagram
  participant CIJob
  participant BackupRestoreWorkflow
  participant OADPSetup
  participant Azure
  participant GuestCluster
  participant OADPDestroy
  CIJob->>BackupRestoreWorkflow: Start Azure backup and restore workflow
  BackupRestoreWorkflow->>OADPSetup: Configure OADP prerequisites
  OADPSetup->>Azure: Create storage account and blob container
  OADPSetup->>GuestCluster: Apply credentials and OADP resources
  BackupRestoreWorkflow->>GuestCluster: Run backup, restore, and conformance tests
  BackupRestoreWorkflow->>OADPDestroy: Clean up Azure OADP storage
  OADPDestroy->>Azure: Delete storage account
Loading

Possibly related PRs

  • openshift/release#82438: Adds HyperShift E2E CI jobs with cloud-specific workflow and step-registry configuration.

Suggested reviewers: enxebre

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning The new workflow runs Azure CLI login and storage operations, and defaults to pulling the OADP plugin from public quay.io; both require external connectivity. Apply the prescribed IPv6/disconnected compatibility notice, add a disconnected skip where adaptation is not possible, and verify with the required IPv6 CI job.
✅ Passed checks (14 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 CI workflow/job identifiers only; no Ginkgo It/Describe/Context/When titles are introduced. The invoked test binary is external, and all new names are static literals.
Test Structure And Quality ✅ Passed The PR adds CI YAML, workflow, and shell steps only; it adds no Ginkgo test code or It blocks to review. The workflow delegates testing to the existing hypershift-e2e-backuprestore chain.
Microshift Test Compatibility ✅ Passed The PR adds YAML and shell workflow wiring only. The full PR diff adds no Go files or Ginkgo declarations; it invokes the existing test-backuprestore chain.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR adds no Go files or Ginkgo declarations; the Azure workflow invokes the existing hypershift-e2e-backuprestore chain.
Topology-Aware Scheduling Compatibility ✅ Passed The PR adds CI workflows and OADP resources only; the added content has no anti-affinity, topology spread, node selectors, tolerations, replica, or PDB scheduling constraints.
Ote Binary Stdout Contract ✅ Passed PR changes only YAML, metadata, OWNERS, and Bash; no OTE Go process-level code or stdout writes were added. Bash echo output is step logging, not an OTE binary.
No-Weak-Crypto ✅ Passed The PR adds Azure credential handling and OADP configuration, but scans of all added files found no MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB, custom crypto, or secret comparisons.
Container-Privileges ✅ Passed The changed workflow, step references, Prow jobs, and embedded Kubernetes objects declare no privileged mode, hostPID/hostNetwork/hostIPC, SYS_ADMIN, allowPrivilegeEscalation, or root settings.
No-Sensitive-Data-In-Logs ✅ Passed Credential values are not explicitly logged; Azure login and storage-key output are suppressed or captured, and tracing is disabled around secret-file creation and secret application.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding a self-managed Azure OADP backup/restore end-to-end test.
✨ Finishing Touches 💡 1
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch CNTRLPLANE-3201_backup_restore_self_managed_azure
🧪 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: 4

🤖 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/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml`:
- Around line 406-413: Set NODEPOOL_N1_VERSION to "4.22" in both periodic job
definitions:
ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml
lines 406-413 and
ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml
lines 437-444. Add the value under each job’s env section while preserving the
existing job configuration.

In
`@ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-commands.sh`:
- Around line 113-115: Update the Velero readiness check in the setup command so
oc wait --for=condition=Available deployment/velero returns a nonzero status
when the deployment is missing or unavailable. Remove the trailing || true,
preserving the existing timeout and namespace settings so setup fails
immediately with the readiness error.
- Around line 22-23: Update the STORAGE_ACCOUNT_NAME generation to retain a
valid lowercase alphanumeric cluster stem and append a job-unique suffix derived
from PROW_JOB_ID, ensuring the complete Azure storage account name is no longer
than 24 characters. Preserve writing the generated name to SHARED_DIR so cleanup
continues to work.

In
`@ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-ref.yaml`:
- Around line 16-18: Update the documentation block for the Azure Blob Storage
container name to state that an empty value defaults to a container named using
the hypershift-oadp-${CLUSTER_NAME} pattern, matching the command script
behavior.
🪄 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: e190f3be-245f-405c-b8c9-3fa5684dc5eb

📥 Commits

Reviewing files that changed from the base of the PR and between a996379 and a15b3ae.

⛔ Files ignored due to path filters (5)
  • ci-operator/jobs/openshift/hypershift/openshift-hypershift-main-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/hypershift/openshift-hypershift-release-4.23-periodics.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/hypershift/openshift-hypershift-release-4.23-presubmits.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/hypershift/openshift-hypershift-release-5.0-periodics.yaml is excluded by !ci-operator/jobs/**
  • ci-operator/jobs/openshift/hypershift/openshift-hypershift-release-5.0-presubmits.yaml is excluded by !ci-operator/jobs/**
📒 Files selected for processing (17)
  • ci-operator/config/openshift/hypershift/openshift-hypershift-main.yaml
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23.yaml
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0.yaml
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml
  • ci-operator/step-registry/hypershift/self-managed-azure/OWNERS
  • ci-operator/step-registry/hypershift/self-managed-azure/e2e-backuprestore/OWNERS
  • ci-operator/step-registry/hypershift/self-managed-azure/e2e-backuprestore/hypershift-self-managed-azure-e2e-backuprestore-workflow.metadata.json
  • ci-operator/step-registry/hypershift/self-managed-azure/e2e-backuprestore/hypershift-self-managed-azure-e2e-backuprestore-workflow.yaml
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-destroy/OWNERS
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-destroy/hypershift-self-managed-azure-oadp-destroy-commands.sh
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-destroy/hypershift-self-managed-azure-oadp-destroy-ref.metadata.json
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-destroy/hypershift-self-managed-azure-oadp-destroy-ref.yaml
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/OWNERS
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-commands.sh
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-ref.metadata.json
  • ci-operator/step-registry/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-ref.yaml

Comment on lines +406 to +413
- as: e2e-v2-azure-self-managed-backuprestore
cron: 0 6 * * 0
steps:
cluster_profile: hypershift-azure
env:
HYPERSHIFT_AZURE_LOCATION: centralus
TEST_SUITE: openshift/conformance/parallel/minimal
workflow: hypershift-self-managed-azure-e2e-backuprestore

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.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 \
  'as: e2e-v2-azure-self-managed-backuprestore|NODEPOOL_N1_VERSION|workflow: hypershift-self-managed-azure-e2e-backuprestore' \
  ci-operator/config/openshift/hypershift

rg -n -C 4 \
  'NODEPOOL_N1_VERSION|HYPERSHIFT_NODE_COUNT' \
  ci-operator/step-registry/hypershift/self-managed-azure \
  ci-operator/step-registry/hypershift/e2e-backuprestore

Repository: openshift/release

Length of output: 38651


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- workflow and step definitions ---'
fd -i 'backuprestore' ci-operator/step-registry/hypershift/self-managed-azure ci-operator/step-registry/hypershift/e2e-backuprestore 2>/dev/null || true
rg -n -C 8 \
  'NODEPOOL_N[1-9]_VERSION|env:|workflow: hypershift-self-managed-azure-e2e-backuprestore|chain:|ref:|from:' \
  ci-operator/step-registry/hypershift/self-managed-azure \
  ci-operator/step-registry/hypershift/e2e-backuprestore

printf '%s\n' '--- all matching jobs and inherited configuration ---'
rg -n -C 12 \
  'as: e2e-v2-azure-self-managed-backuprestore|workflow: hypershift-self-managed-azure-e2e-backuprestore|NODEPOOL_N1_VERSION' \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-main.yaml

printf '%s\n' '--- repository guidance for periodic configuration generation ---'
rg -n -C 4 \
  'make update|__periodics|zz_generated_metadata|source of truth' \
  ci-operator/config README.md Makefile 2>/dev/null || true

Repository: openshift/release

Length of output: 50374


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- relevant workflow file ---'
cat -n ci-operator/step-registry/hypershift/self-managed-azure/e2e-backuprestore/hypershift-self-managed-azure-e2e-backuprestore-workflow.yaml

printf '%s\n' '--- NODEPOOL_N1_VERSION references in the step registry ---'
rg -n -C 3 --glob '*.yaml' --glob '*.yml' \
  'NODEPOOL_N1_VERSION' ci-operator/step-registry/hypershift ci-operator/step-registry/clusterbot 2>/dev/null || true

printf '%s\n' '--- exact job definitions in source configs ---'
sed -n '225,255p' ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23.yaml
sed -n '398,418p' ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml
sed -n '228,256p' ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0.yaml
sed -n '429,449p' ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml

printf '%s\n' '--- references to the workflow and variable outside generated job listings ---'
rg -n -C 3 \
  'hypershift-self-managed-azure-e2e-backuprestore|NODEPOOL_N1_VERSION' \
  ci-operator/step-registry/hypershift/self-managed-azure \
  ci-operator/step-registry/hypershift/e2e-backuprestore \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0.yaml \
  ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml

Repository: openshift/release

Length of output: 24764


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- resolver definition ---'
cat -n ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml

printf '%s\n' '--- resolver implementation and consumers ---'
rg -n -C 8 \
  'resolve-nodepool-releases|NODEPOOL_N1_VERSION|NODEPOOL_N2_VERSION|NODEPOOL_N3_VERSION|NODEPOOL_N4_VERSION' \
  ci-operator/step-registry/hypershift \
  --glob '*.yaml' --glob '*.yml' --glob '*.sh' --glob '*.py' --glob '*.go'

printf '%s\n' '--- all files in the resolver directory ---'
find ci-operator/step-registry/hypershift/resolve-nodepool-releases -maxdepth 1 -type f -print

Repository: openshift/release

Length of output: 24085


🏁 Script executed:

#!/bin/bash
set -euo pipefail

cat -n ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.sh

printf '%s\n' '--- related node pool image consumers ---'
rg -n -C 6 \
  'nodepool_release_images|NODEPOOL_N1_VERSION|NODEPOOL_N2_VERSION|NODEPOOL_N3_VERSION|NODEPOOL_N4_VERSION' \
  ci-operator/step-registry/hypershift \
  --glob '*.sh' --glob '*.yaml' --glob '*.yml' \
  --glob '!**/resolve-nodepool-releases/**'

Repository: openshift/release

Length of output: 13668


Set NODEPOOL_N1_VERSION: "4.22" in both periodic jobs.

The resolver skips empty version inputs, so these jobs omit the 4.22 node pool coverage present in the matching optional jobs.

📍 Affects 2 files
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml#L406-L413 (this comment)
  • ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml#L437-L444
🤖 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/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml`
around lines 406 - 413, Set NODEPOOL_N1_VERSION to "4.22" in both periodic job
definitions:
ci-operator/config/openshift/hypershift/openshift-hypershift-release-4.23__periodics.yaml
lines 406-413 and
ci-operator/config/openshift/hypershift/openshift-hypershift-release-5.0__periodics.yaml
lines 437-444. Add the value under each job’s env section while preserving the
existing job configuration.

Comment on lines +22 to +23
STORAGE_ACCOUNT_NAME="oadp${CLUSTER_NAME:0:20}"
STORAGE_ACCOUNT_NAME="$(echo "${STORAGE_ACCOUNT_NAME}" | tr -cd '[:lower:][:digit:]' | cut -c1-24)"

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
file="$(fd -t f 'hypershift-self-managed-azure-oadp-setup-commands\.sh$' . | head -n 1)"
printf '%s\n' "FILE=$file"
cat -n "$file" | sed -n '1,140p'
printf '%s\n' '--- related storage-account name logic ---'
rg -n -C 3 'STORAGE_ACCOUNT_NAME|storage account|storageaccount|SHARED_DIR' ci-operator/step-registry ci-operator 2>/dev/null | head -n 240
printf '%s\n' '--- script metadata ---'
stat -c '%n %s bytes' "$file"

Repository: openshift/release

Length of output: 36362


🌐 Web query:

Azure Storage account naming requirements globally unique lowercase alphanumeric 24 characters

💡 Result:

To create an Azure Storage account, you must adhere to the following naming requirements: 1. Length: The name must be between 3 and 24 characters in length [1][2][3]. 2. Characters: The name may contain only numbers and lowercase letters [1][2][3]. 3. Uniqueness: The name must be globally unique within Azure [2]. No two storage accounts can share the same name [2]. In addition to these rules, the name must not contain reserved words or trademarks [4]. Because these accounts have a public endpoint, these naming restrictions are necessary to ensure the generated URL is valid and unique across the global Azure platform [2][4].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import re

def current(name):
    value = "oadp" + name[:20]
    return re.sub(r"[^a-z0-9]", "", value)[:24]

def proposed(name, suffix="0123456789abcdef"):
    stem = re.sub(r"[^a-z0-9]", "", name)[:12]
    return "oadp" + stem + suffix

names = [
    "public-hostedcluster-alpha-aaaaaaaa",
    "public-hostedcluster-alpha-bbbbbbbb",
    "PUBLIC-hostedcluster-alpha-aaaaaaaa",
]
for name in names:
    print(f"{name!r}: current={current(name)!r}, proposed={proposed(name)!r}, proposed_length={len(proposed(name))}")

print("current collision:", current(names[0]) == current(names[1]))
print("proposed length:", len(proposed(names[0])))
PY

printf '%s\n' '--- CI job identity variables used by step-registry scripts ---'
rg -n -g '*-commands.sh' \
  '\b(BUILD_ID|JOB_ID|BUILD_NUMBER|JOB_NAME|PROW_JOB_ID|POD_NAME|BUILD_TAG|JOB_SPEC)\b' \
  ci-operator/step-registry | head -n 160

printf '%s\n' '--- cleanup consumers ---'
rg -n -C 5 'oadp-storage-account-name|oadp-storage-resourcegroup|STORAGE_ACCOUNT_NAME' \
  ci-operator/step-registry | head -n 200

Repository: openshift/release

Length of output: 46089


Make the storage account name collision-resistant.

The current logic can produce the same name for different CLUSTER_NAME values. Use a job-unique lowercase alphanumeric suffix, such as a short hash of ${PROW_JOB_ID}, and keep the complete name within 24 characters. The proposed 12-character stem plus 16-character suffix would produce 32 characters and fail Azure validation. Continue writing the generated name to ${SHARED_DIR} for cleanup.

🤖 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/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-commands.sh`
around lines 22 - 23, Update the STORAGE_ACCOUNT_NAME generation to retain a
valid lowercase alphanumeric cluster stem and append a job-unique suffix derived
from PROW_JOB_ID, ensuring the complete Azure storage account name is no longer
than 24 characters. Preserve writing the generated name to SHARED_DIR so cleanup
continues to work.

Comment on lines +113 to +115
# Wait for Velero pod to be ready
echo "Waiting for Velero pod to be ready..."
oc wait --for=condition=Available deployment/velero -n openshift-adp --timeout=300s || true

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

Fail setup when Velero does not become available.

Line 115 ignores a missing or unavailable deployment/velero. The workflow runs the backup and restore test immediately after this step. The job then fails later with less useful diagnostics.

Remove || true. If diagnostic output is required, collect it before returning a nonzero status.

🤖 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/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-commands.sh`
around lines 113 - 115, Update the Velero readiness check in the setup command
so oc wait --for=condition=Available deployment/velero returns a nonzero status
when the deployment is missing or unavailable. Remove the trailing || true,
preserving the existing timeout and namespace settings so setup fails
immediately with the readiness error.

Comment on lines +16 to +18
documentation: |-
The Azure Blob Storage container (bucket) name used for OADP backups.
If empty, a container will be created using the target cluster name.

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the default container-name documentation.

Lines 16-18 state that the default uses only the target cluster name. The command script uses hypershift-oadp-${CLUSTER_NAME}. Update the documentation to describe the actual default.

🤖 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/hypershift/self-managed-azure/oadp-setup/hypershift-self-managed-azure-oadp-setup-ref.yaml`
around lines 16 - 18, Update the documentation block for the Azure Blob Storage
container name to state that an empty value defaults to a container named using
the hypershift-oadp-${CLUSTER_NAME} pattern, matching the command script
behavior.

@mgencur

mgencur commented Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

/pj-rehearse periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-v2-azure-self-managed-backuprestore

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

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

@bryan-cox

Copy link
Copy Markdown
Member

/uncc @bryan-cox

@mgencur feel free to add me when its ready for review.

@openshift-ci
openshift-ci Bot removed the request for review from bryan-cox August 3, 2026 12:54
@mgencur
mgencur force-pushed the CNTRLPLANE-3201_backup_restore_self_managed_azure branch from a15b3ae to 97f100e Compare August 4, 2026 08:05
@mgencur mgencur changed the title [WIP] ci(hypershift): add self-managed Azure OADP backup/restore E2E test CNTRLPLANE-3201: ci(hypershift): add self-managed Azure OADP backup/restore E2E test Aug 4, 2026
@openshift-ci-robot

openshift-ci-robot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@mgencur: This pull request references CNTRLPLANE-3201 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 story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

https://redhat.atlassian.net/browse/CNTRLPLANE-3201

Summary by CodeRabbit

  • Adds optional and weekly periodic Azure CI jobs for HyperShift self-managed OADP backup and restore testing across supported release configurations.
  • Adds a workflow that provisions management and guest clusters, configures Azure Blob Storage and OADP, runs backup/restore and conformance tests, and cleans up resources.
  • Adds Azure OADP setup and destroy steps, including service-principal authentication, storage-account management, retry logic, and cleanup metadata.

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-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Aug 4, 2026
@openshift-ci openshift-ci Bot added needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. and removed do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. labels Aug 4, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@mgencur, 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 82a39e70663333d086deffc9a9007c5059301571 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.

mgencur added 3 commits August 4, 2026 10:44
Add hypershift-self-managed-azure-oadp-setup and -oadp-destroy steps
that discover the public self-managed-Azure guest cluster and create/
tear down an Azure Storage Account and Blob container for OADP, along
with a DataProtectionApplication, BackupStorageLocation, and
VolumeSnapshotLocation, mirroring the existing AWS OADP setup.

Wire these into a new hypershift-self-managed-azure-e2e-backuprestore
workflow (reusing e2e-v2-azure-self-managed's pre-steps) and a new
e2e-v2-azure-self-managed-backuprestore test running the minimal
conformance suite after backup/restore.
Branch the e2e-v2-azure-self-managed-backuprestore presubmit to
release-4.23 and release-5.0, and add a weekly periodic version of it
to both release branches' __periodics.yaml files.
…dp-setup

Make the target guest cluster name filter configurable via
CLUSTER_PREFIX (default "public") and remove the stray [default]
header from the Azure credentials file.
@mgencur
mgencur force-pushed the CNTRLPLANE-3201_backup_restore_self_managed_azure branch from 97f100e to b3e25be Compare August 4, 2026 08:51
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 4, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

[REHEARSALNOTIFIER]
@mgencur: 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-openshift-hypershift-main-e2e-v2-azure-self-managed-backuprestore openshift/hypershift presubmit Presubmit changed
pull-ci-openshift-hypershift-release-4.23-e2e-v2-azure-self-managed-backuprestore openshift/hypershift presubmit Presubmit changed
pull-ci-openshift-hypershift-release-5.0-e2e-v2-azure-self-managed-backuprestore openshift/hypershift presubmit Presubmit changed
periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-v2-azure-self-managed-backuprestore N/A periodic Periodic changed
periodic-ci-openshift-hypershift-release-4.23-periodics-e2e-v2-azure-self-managed-backuprestore N/A periodic Periodic changed
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-ci

openshift-ci Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@mgencur: The following test 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/periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-v2-azure-self-managed-backuprestore a15b3ae link unknown /pj-rehearse periodic-ci-openshift-hypershift-release-5.0-periodics-e2e-v2-azure-self-managed-backuprestore

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

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants