Skip to content

OCPBUGS-83667: inject restoreSnapshotURL into HostedControlPlane during restore - #244

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
jparrill:OCPBUGS-83667
Apr 17, 2026
Merged

openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
jparrill:OCPBUGS-83667

Conversation

@jparrill

@jparrill jparrill commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Backup: Persist etcd-snapshot-url annotation on the HostedControlPlane item (previously only set on HostedCluster)
  • Restore: Inject restoreSnapshotURL into the HCP spec before Velero submits it to the API server, mirroring the existing HC logic
  • Use %w for error wrapping in presign callers to preserve the error chain

Problem

The restore plugin injected restoreSnapshotURL into the HostedCluster but not into the HostedControlPlane. When the HyperShift operator reconciled and tried to propagate the field to the already-created HCP, the immutability webhook rejected it:

HostedControlPlane.hypershift.openshift.io "mgencur-hc1" is invalid:
spec.etcd.managed.storage: Invalid value: "object":
restoreSnapshotURL cannot be added or removed after creation

Root Cause

The Velero RestoreItemAction.Execute() contract mutates items in-memory before API submission. The plugin handled HostedCluster correctly but only validated platform config for HostedControlPlane without injecting the snapshot URL.

Test plan

  • TestRestoreExecuteHCPSnapshotURL — s3 presign, https passthrough, no annotation, presign error (missing BSL)
  • TestExecute — HCP annotation injection during backup
  • Full test suite passes (go test ./...)
  • QE re-run restore scenario on cluster

Fixes: https://issues.redhat.com/browse/OCPBUGS-83667

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Extended etcd snapshot backup/restore support to include HostedControlPlane items, with automatic S3→presigned HTTPS conversion during restores.
  • Improvements

    • Ensure snapshot URL annotation is consistently injected for HostedControlPlane during backup; improved error handling in snapshot presigning paths.
  • Tests

    • Added comprehensive tests covering HostedControlPlane snapshot backup and restore scenarios (S3 and HTTPS).

@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Apr 17, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: This pull request references Jira Issue OCPBUGS-83667, which is invalid:

  • expected the bug to target the "5.0.0" version, but no target version was set

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Summary

  • Backup: Persist etcd-snapshot-url annotation on the HostedControlPlane item (previously only set on HostedCluster)
  • Restore: Inject restoreSnapshotURL into the HCP spec before Velero submits it to the API server, mirroring the existing HC logic
  • Use %w for error wrapping in presign callers to preserve the error chain

Problem

The restore plugin injected restoreSnapshotURL into the HostedCluster but not into the HostedControlPlane. When the HyperShift operator reconciled and tried to propagate the field to the already-created HCP, the immutability webhook rejected it:

HostedControlPlane.hypershift.openshift.io "mgencur-hc1" is invalid:
spec.etcd.managed.storage: Invalid value: "object":
restoreSnapshotURL cannot be added or removed after creation

Root Cause

The Velero RestoreItemAction.Execute() contract mutates items in-memory before API submission. The plugin handled HostedCluster correctly but only validated platform config for HostedControlPlane without injecting the snapshot URL.

Test plan

  • TestRestoreExecuteHCPSnapshotURL — s3 presign, https passthrough, no annotation, presign error (missing BSL)
  • TestExecute — HCP annotation injection during backup
  • Full test suite passes (go test ./...)
  • QE re-run restore scenario on cluster

Fixes: https://issues.redhat.com/browse/OCPBUGS-83667

🤖 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.

@coderabbitai

coderabbitai Bot commented Apr 17, 2026

Copy link
Copy Markdown

Walkthrough

The changes extend etcd snapshot URL handling from HostedCluster to HostedControlPlane items in backup and restore flows: backup annotates completed HostedControlPlane with the snapshot URL; restore reads that annotation and, for s3:// URLs, pre-signs them to HTTPS before injecting into the HCP restore spec.

Changes

Cohort / File(s) Summary
Backup Snapshot URL Annotation
pkg/core/backup.go, pkg/core/backup_test.go
Backup plugin now annotates HostedControlPlane items with common.EtcdSnapshotURLAnnotation when p.etcdSnapshotURL is set after HCPEtcdBackup completion. Added test validating annotation injection for HCP.
Restore Snapshot URL Handling & Tests
pkg/core/restore.go, pkg/core/restore_test.go
Restore plugin reads common.EtcdSnapshotURLAnnotation from HostedControlPlane, pre-signs s3:// URLs via p.presignS3URL (errors wrapped with %w), injects the resulting URL into hcp.Spec.Etcd.Managed.Storage.RestoreSnapshotURL when managed etcd is present, and updates the unstructured item. Added tests, mock validator, and helper to exercise S3 presigning, HTTPS passthrough, and missing-annotation scenarios.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 9 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (9 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: injecting restoreSnapshotURL into HostedControlPlane during restore, which is the core objective addressed across backup.go, restore.go, and their tests.
Stable And Deterministic Test Names ✅ Passed All test names follow stable, deterministic patterns with no dynamic identifiers, timestamps, or generated values embedded in test titles.
Test Structure And Quality ✅ Passed The tests use Go's standard testing framework rather than Ginkgo, making Ginkgo-specific guidelines inapplicable. The test code follows established patterns, includes proper error handling, and demonstrates focused test design with meaningful assertions.
Microshift Test Compatibility ✅ Passed The PR adds only standard Go unit tests, not Ginkgo e2e tests. No Ginkgo test patterns (It, Describe, Context, When) are present.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The pull request adds only standard Go unit tests using testing.T to a Velero plugin repository, with no Ginkgo test patterns present, making the SNO compatibility check inapplicable.
Topology-Aware Scheduling Compatibility ✅ Passed PR modifies a Velero backup/restore plugin for metadata annotations and spec field manipulation with no scheduling constraints, pod templates, or topology-aware code.
Ote Binary Stdout Contract ✅ Passed The pull request modifies only plugin library code and tests, with no process-level functions or stdout-writing code, making the OTE Binary Stdout Contract check inapplicable.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed This PR does not add any Ginkgo e2e tests; it contains only standard Go unit tests using the testing package with mocked objects.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@openshift-ci
openshift-ci Bot requested a review from celebdor April 17, 2026 10:48
@openshift-ci

openshift-ci Bot commented Apr 17, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: jparrill

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

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 17, 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

🧹 Nitpick comments (1)
pkg/core/restore.go (1)

168-193: Extract the snapshot-restore injection flow into a shared helper.

This block now duplicates the HostedCluster path for annotation lookup, optional presigning, and RestoreSnapshotURL mutation. Since this regression came from HC/HCP behavior drifting, centralizing this logic would make the next change much less likely to miss one resource type.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/core/restore.go` around lines 168 - 193, Extract the duplicated
snapshot-restore injection logic into a single helper (e.g.,
injectSnapshotRestoreURL or similar) and call it from both HostedCluster and
HostedControlPlane flows: the helper should accept context, the annotations map
or metav1.Object (used with meta.Accessor), the original snapshotURL string, the
backup and logger (to call p.presignS3URL and p.log), and a target object
mutator that sets Spec.Etcd.Managed.Storage.RestoreSnapshotURL on the resource
and writes back via runtime.DefaultUnstructuredConverter.ToUnstructured plus
input.Item.SetUnstructuredContent; replace the inline code in restore.go that
uses meta.Accessor, strings.HasPrefix(s3://), p.presignS3URL, setting
hcp.Spec.Etcd.Managed.Storage.RestoreSnapshotURL and converting to unstructured
with a call to this helper so both HostedCluster and HostedControlPlane share
the same logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/core/backup.go`:
- Around line 167-173: The log call currently prints p.etcdSnapshotURL verbatim
which can leak sensitive presigned URLs; update the code around where
p.etcdSnapshotURL is used (the block that calls meta.Accessor(item),
common.AddAnnotation(metadata, common.EtcdSnapshotURLAnnotation,
p.etcdSnapshotURL) and p.log.Infof) to avoid logging the full URL — either log
only the HostedControlPlane name via metadata.GetName() or a redacted form
(e.g., replace everything after the host/path with "<REDACTED>" or show only the
scheme+host), and keep the annotation write unchanged; modify the p.log.Infof
invocation to use the redacted value or just the HCP name instead of
p.etcdSnapshotURL.

---

Nitpick comments:
In `@pkg/core/restore.go`:
- Around line 168-193: Extract the duplicated snapshot-restore injection logic
into a single helper (e.g., injectSnapshotRestoreURL or similar) and call it
from both HostedCluster and HostedControlPlane flows: the helper should accept
context, the annotations map or metav1.Object (used with meta.Accessor), the
original snapshotURL string, the backup and logger (to call p.presignS3URL and
p.log), and a target object mutator that sets
Spec.Etcd.Managed.Storage.RestoreSnapshotURL on the resource and writes back via
runtime.DefaultUnstructuredConverter.ToUnstructured plus
input.Item.SetUnstructuredContent; replace the inline code in restore.go that
uses meta.Accessor, strings.HasPrefix(s3://), p.presignS3URL, setting
hcp.Spec.Etcd.Managed.Storage.RestoreSnapshotURL and converting to unstructured
with a call to this helper so both HostedCluster and HostedControlPlane share
the same logic.
🪄 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: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a56902ec-3350-4399-b333-8fcfee1b6ec9

📥 Commits

Reviewing files that changed from the base of the PR and between 9e14896 and cb85294.

📒 Files selected for processing (4)
  • pkg/core/backup.go
  • pkg/core/backup_test.go
  • pkg/core/restore.go
  • pkg/core/restore_test.go

Comment thread pkg/core/backup.go Outdated
@jparrill

Copy link
Copy Markdown
Contributor Author

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Apr 17, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: This pull request references Jira Issue OCPBUGS-83667, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

/jira refresh

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.

…g OADP restore

The restore plugin was only injecting restoreSnapshotURL into the
HostedCluster but not into the HostedControlPlane. When the HyperShift
operator reconciled the HC and tried to propagate restoreSnapshotURL
to the already-created HCP, the immutability webhook rejected the
mutation with "restoreSnapshotURL cannot be added or removed after
creation".

This fix ensures both the HC and HCP carry the etcd snapshot URL
annotation during backup and have restoreSnapshotURL injected into
their specs during restore, before Velero submits them to the API
server.

Fixes: OCPBUGS-83667

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
@openshift-ci

openshift-ci Bot commented Apr 17, 2026

Copy link
Copy Markdown

@jparrill: all tests passed!

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.

@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: This pull request references Jira Issue OCPBUGS-83667, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

Summary

  • Backup: Persist etcd-snapshot-url annotation on the HostedControlPlane item (previously only set on HostedCluster)
  • Restore: Inject restoreSnapshotURL into the HCP spec before Velero submits it to the API server, mirroring the existing HC logic
  • Use %w for error wrapping in presign callers to preserve the error chain

Problem

The restore plugin injected restoreSnapshotURL into the HostedCluster but not into the HostedControlPlane. When the HyperShift operator reconciled and tried to propagate the field to the already-created HCP, the immutability webhook rejected it:

HostedControlPlane.hypershift.openshift.io "mgencur-hc1" is invalid:
spec.etcd.managed.storage: Invalid value: "object":
restoreSnapshotURL cannot be added or removed after creation

Root Cause

The Velero RestoreItemAction.Execute() contract mutates items in-memory before API submission. The plugin handled HostedCluster correctly but only validated platform config for HostedControlPlane without injecting the snapshot URL.

Test plan

  • TestRestoreExecuteHCPSnapshotURL — s3 presign, https passthrough, no annotation, presign error (missing BSL)
  • TestExecute — HCP annotation injection during backup
  • Full test suite passes (go test ./...)
  • QE re-run restore scenario on cluster

Fixes: https://issues.redhat.com/browse/OCPBUGS-83667

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

  • Extended etcd snapshot backup/restore support to include HostedControlPlane items, with automatic S3→presigned HTTPS conversion during restores.

  • Improvements

  • Ensure snapshot URL annotation is consistently injected for HostedControlPlane during backup; improved error handling in snapshot presigning paths.

  • Tests

  • Added comprehensive tests covering HostedControlPlane snapshot backup and restore scenarios (S3 and HTTPS).

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.

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

🧹 Nitpick comments (1)
pkg/core/restore.go (1)

168-195: Extract shared snapshot URL handling to reduce HC/HCP drift risk.

The presign+inject logic here duplicates the HostedCluster path (Line 211 onward). Consider moving this into a shared helper (e.g., resolve snapshot URL + resource-specific setter) so future fixes don’t diverge across the two flows.

♻️ Refactor sketch
+func (p *RestorePlugin) resolveSnapshotURL(ctx context.Context, backup *velerov1api.Backup, metadata metav1.Object) (string, error) {
+    annotations := metadata.GetAnnotations()
+    snapshotURL := annotations[common.EtcdSnapshotURLAnnotation]
+    if snapshotURL == "" {
+        return "", nil
+    }
+    if strings.HasPrefix(snapshotURL, "s3://") {
+        presigned, err := p.presignS3URL(ctx, backup, snapshotURL)
+        if err != nil {
+            return "", fmt.Errorf("error generating pre-signed URL for etcd snapshot: %w", err)
+        }
+        return presigned, nil
+    }
+    return snapshotURL, nil
+}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/core/restore.go` around lines 168 - 195, The presign+inject logic in
restore.go is duplicated for HostedControlPlane and HostedCluster; extract the
shared URL resolution into a helper (e.g., ResolveSnapshotURL(ctx, backup,
snapshotURL) that calls p.presignS3URL when needed and returns the final URL or
error) and create small resource-specific setter functions (e.g.,
InjectRestoreSnapshotURLIntoHCP(hcp, url) and the existing HC setter) that
mutate the object/unstructured content; replace the duplicated block around
p.presignS3URL and hcp.Spec.Etcd.Managed.Storage.RestoreSnapshotURL with a call
to the resolver and the HCP injector so both flows reuse the same URL logic and
only differ in the setter.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@pkg/core/restore.go`:
- Around line 168-195: The presign+inject logic in restore.go is duplicated for
HostedControlPlane and HostedCluster; extract the shared URL resolution into a
helper (e.g., ResolveSnapshotURL(ctx, backup, snapshotURL) that calls
p.presignS3URL when needed and returns the final URL or error) and create small
resource-specific setter functions (e.g., InjectRestoreSnapshotURLIntoHCP(hcp,
url) and the existing HC setter) that mutate the object/unstructured content;
replace the duplicated block around p.presignS3URL and
hcp.Spec.Etcd.Managed.Storage.RestoreSnapshotURL with a call to the resolver and
the HCP injector so both flows reuse the same URL logic and only differ in the
setter.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 021fec8b-e60b-4c16-b2bf-53c68f4c81ac

📥 Commits

Reviewing files that changed from the base of the PR and between cb85294 and 37780fb.

📒 Files selected for processing (4)
  • pkg/core/backup.go
  • pkg/core/backup_test.go
  • pkg/core/restore.go
  • pkg/core/restore_test.go
✅ Files skipped from review due to trivial changes (1)
  • pkg/core/backup_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • pkg/core/backup.go
  • pkg/core/restore_test.go

@sdminonne

Copy link
Copy Markdown

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Apr 17, 2026
@openshift-merge-bot
openshift-merge-bot Bot merged commit b8bf295 into openshift:main Apr 17, 2026
6 checks passed
@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: Jira Issue OCPBUGS-83667: All pull requests linked via external trackers have merged:

Jira Issue OCPBUGS-83667 has been moved to the MODIFIED state.

Details

In response to this:

Summary

  • Backup: Persist etcd-snapshot-url annotation on the HostedControlPlane item (previously only set on HostedCluster)
  • Restore: Inject restoreSnapshotURL into the HCP spec before Velero submits it to the API server, mirroring the existing HC logic
  • Use %w for error wrapping in presign callers to preserve the error chain

Problem

The restore plugin injected restoreSnapshotURL into the HostedCluster but not into the HostedControlPlane. When the HyperShift operator reconciled and tried to propagate the field to the already-created HCP, the immutability webhook rejected it:

HostedControlPlane.hypershift.openshift.io "mgencur-hc1" is invalid:
spec.etcd.managed.storage: Invalid value: "object":
restoreSnapshotURL cannot be added or removed after creation

Root Cause

The Velero RestoreItemAction.Execute() contract mutates items in-memory before API submission. The plugin handled HostedCluster correctly but only validated platform config for HostedControlPlane without injecting the snapshot URL.

Test plan

  • TestRestoreExecuteHCPSnapshotURL — s3 presign, https passthrough, no annotation, presign error (missing BSL)
  • TestExecute — HCP annotation injection during backup
  • Full test suite passes (go test ./...)
  • QE re-run restore scenario on cluster

Fixes: https://issues.redhat.com/browse/OCPBUGS-83667

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

  • Extended etcd snapshot backup/restore support to include HostedControlPlane items, with automatic S3→presigned HTTPS conversion during restores.

  • Improvements

  • Ensure snapshot URL annotation is consistently injected for HostedControlPlane during backup; improved error handling in snapshot presigning paths.

  • Tests

  • Added comprehensive tests covering HostedControlPlane snapshot backup and restore scenarios (S3 and HTTPS).

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.

@jparrill

Copy link
Copy Markdown
Contributor Author

/jira backport oadp-1.6

@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick oadp-1.6

Details

In response to this:

/jira backport oadp-1.6

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-cherrypick-robot

Copy link
Copy Markdown

@openshift-ci-robot: #244 failed to apply on top of branch "oadp-1.6":

Applying: fix(restore): inject restoreSnapshotURL into HostedControlPlane during OADP restore
Using index info to reconstruct a base tree...
M	pkg/core/backup.go
M	pkg/core/backup_test.go
M	pkg/core/restore.go
A	pkg/core/restore_test.go
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): pkg/core/restore_test.go deleted in HEAD and modified in fix(restore): inject restoreSnapshotURL into HostedControlPlane during OADP restore. Version fix(restore): inject restoreSnapshotURL into HostedControlPlane during OADP restore of pkg/core/restore_test.go left in tree.
Auto-merging pkg/core/restore.go
CONFLICT (content): Merge conflict in pkg/core/restore.go
Auto-merging pkg/core/backup_test.go
CONFLICT (content): Merge conflict in pkg/core/backup_test.go
Auto-merging pkg/core/backup.go
CONFLICT (content): Merge conflict in pkg/core/backup.go
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Patch failed at 0001 fix(restore): inject restoreSnapshotURL into HostedControlPlane during OADP restore

Details

In response to this:

@jparrill: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick oadp-1.6

In response to this:

/jira backport oadp-1.6

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.

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.

@mgencur

mgencur commented Apr 20, 2026

Copy link
Copy Markdown

I have verified this part by running backup/resetore tests from this branch: https://github.com/mgencur/hypershift/tree/CNTRLPLANE-2834_extend
It passed the Restore phase and the Control Plane is healthy.

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants