Skip to content

OCPBUGS-99534: etcd initialization bugs after etcdctl snapshot restore - #9048

Merged
openshift-merge-bot[bot] merged 3 commits into
openshift:mainfrom
tony-schndr:fix/etcd-snapshot-restore-init
Sep 8, 2026
Merged

OCPBUGS-99534: etcd initialization bugs after etcdctl snapshot restore#9048
openshift-merge-bot[bot] merged 3 commits into
openshift:mainfrom
tony-schndr:fix/etcd-snapshot-restore-init

Conversation

@tony-schndr

@tony-schndr tony-schndr commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

What this PR does / why we need it:

Fix etcd split brain caused by single member initialization.

  • Previously etcd members were being started without any information about the other members in the etcd cluster causing each member to be started individually. added --name --initial-advertise-peer-urls --initial-cluster --initial-cluster-token to etcdctl (and utl) snapshot restore to ensure etcd members are properly initialized during restore.

Fix member ID mismatch on snapshot restore by running etcd-init before reset-member.

  • Previously, reset-member ran first and, if the cluster was already up, would remove and re-add the local member with a new ID. etcd-init then restored the snapshot with the old member ID, causing a WAL/cluster membership mismatch and CrashLoopBackOff. Running etcd-init first ensures the data directory exists when reset-member runs, so it takes the no-op "member has data" path and leaves membership unchanged.

Adds --bump-revision 1000000000 --mark-compacted flags to etcdctl|etcdutl snapshot restore to ensure etcd object revisions are always greater than any revision the cluster has seen. This ensures that all watches are terminated and etcd does not respond to requests about revisions that happened after taking the snapshot - effectively invalidating its informer caches. ref https://etcd.io/docs/v3.5/op-guide/recovery/

Which issue(s) this PR fixes:

Fixes OCPBUGS-99534

Special notes for your reviewer:

Checklist:

  • Subject and description added to both, commit and PR.
  • Relevant issues have been referenced.
  • This change includes docs.
  • This change includes unit tests.

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes
    • Improved managed etcd snapshot restoration with unique pod identities and consistent cluster configuration.
    • Corrected init-container sequencing so snapshot restoration runs before member reset when enabled.
  • Tests
    • Added coverage for etcd snapshot restoration fixtures.
    • Expanded validation of restore configuration and init-container ordering.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@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 Jul 21, 2026
@openshift-ci

openshift-ci Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci openshift-ci Bot added do-not-merge/needs-area needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. labels Jul 21, 2026
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The etcd StatefulSet now computes and reuses its initial cluster configuration. It injects pod and namespace identity into the restore init container. It places etcd-init before reset-member. The restore script passes explicit member and cluster settings to etcdutl and etcdctl. Tests cover environment variables, init-container ordering, and snapshot restoration fixtures.

Sequence Diagram(s)

sequenceDiagram
  participant StatefulSetAdapter
  participant EtcdInitContainer
  participant SnapshotTool
  participant EtcdData
  StatefulSetAdapter->>EtcdInitContainer: Inject member and cluster identity
  StatefulSetAdapter->>EtcdInitContainer: Start before reset-member
  EtcdInitContainer->>SnapshotTool: Restore snapshot with explicit cluster settings
  SnapshotTool->>EtcdData: Stage restored data in /var/lib/restore
Loading

Suggested reviewers: enxebre, sdminonne, bryan-cox

🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Test Structure And Quality ⚠️ Warning The added tests use standalone Gomega assertions without meaningful failure messages. In etcd_test.go, the new environment-variable checks and the new init-container-order test include `g.Expect(...… Add a diagnostic message to every assertion introduced by this change. For example, identify the expected environment variable in each ContainElement assertion, describe the StatefulSet adaptation in the HaveOccurred assertion, and incl…
✅ Passed checks (10 passed)
Check name Status Explanation
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 PASS. The changed tests use static name literals with t.Run(tc.name). They do not include pod names, timestamps, UUIDs, node names, random namespaces, IP addresses, or other run-varying values. Th…
Topology-Aware Scheduling Compatibility ✅ Passed PASS — the changed implementation adds no topology-sensitive scheduling constraint. The diff only changes etcd snapshot-restore arguments, environment variables, and init-container ordering. The exist…
Ipv6 And Disconnected Network Test Compatibility ✅ Passed PASS: The pull request adds standard Go unit tests using testing.T and Gomega. The changed tests contain no Ginkgo It, Describe, Context, or When calls and are not e2e tests. The S3 URL is u…
No-Weak-Crypto ✅ Passed No weak-crypto usage was introduced. The PR diff from the merge base changes etcd restore arguments, environment variables, init-container ordering, tests, and generated fixtures. Exact added-line sea…
Container-Privileges ✅ Passed No pull-request-introduced container privilege violation was found. The changed etcd source adds no privileged, host namespace, SYS_ADMIN, allowPrivilegeEscalation: true, or explicit root settin…
No-Sensitive-Data-In-Logs ✅ Passed PASS. The pull request adds no new logging of passwords, tokens, API keys, PII, or customer data. The changed script passes member and cluster values to etcdutl/etcdctl without shell tracing or ex…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the etcd initialization bugs and the snapshot restore scenario addressed by the changes.
Full details: Stable And Deterministic Test Names

Explanation

PASS. The changed tests use static name literals with t.Run(tc.name). They do not include pod names, timestamps, UUIDs, node names, random namespaces, IP addresses, or other run-varying values. The added snapshot URL is test data, not part of a test title. No Ginkgo It, Describe, Context, or When declarations were added. An existing fmt.Sprintf subtest title is unchanged by this pull request.

Full details: Test Structure And Quality

Explanation

The added tests use standalone Gomega assertions without meaningful failure messages. In etcd_test.go, the new environment-variable checks and the new init-container-order test include g.Expect(...).To(...) and g.Expect(err).ToNot(HaveOccurred()) with no message. The latter is the exact missing-message pattern named by the check. The tests otherwise use table-driven t.Run subtests, do not call Eventually or Consistently, and only create in-memory Kubernetes objects, so no timeout or cleanup failure is introduced.

Resolution

Add a diagnostic message to every assertion introduced by this change. For example, identify the expected environment variable in each ContainElement assertion, describe the StatefulSet adaptation in the HaveOccurred assertion, and include the restore URL or snapshot-restored state in the init-container-order assertion. Keep the existing isolated table-driven subtests.

Full details: Topology-Aware Scheduling Compatibility

Explanation

PASS — the changed implementation adds no topology-sensitive scheduling constraint. The diff only changes etcd snapshot-restore arguments, environment variables, and init-container ordering. The existing DefaultReplicas calculation was moved and reused; it does not change replica selection. The generated EtcdRestore StatefulSet retains the existing 3 replicas, affinity, required anti-affinity, tolerations, and rolling-update settings. The fixture comparison found no scheduling-key additions; the new etcd-init container is the only workload change.

Full details: Ipv6 And Disconnected Network Test Compatibility

Explanation

PASS: The pull request adds standard Go unit tests using testing.T and Gomega. The changed tests contain no Ginkgo It, Describe, Context, or When calls and are not e2e tests. The S3 URL is used as a reconciliation fixture and assertion; the tests do not connect to it. The added 10.0.0.0/16 value is also confined to a unit-test fixture. Therefore, no stated IPv6 or disconnected-network failure condition applies.

Full details: No-Weak-Crypto

Explanation

No weak-crypto usage was introduced. The PR diff from the merge base changes etcd restore arguments, environment variables, init-container ordering, tests, and generated fixtures. Exact added-line searches found no MD5, SHA-1, DES, 3DES, RC4, Blowfish, or ECB usage, and no crypto APIs or constant-time comparison changes. The --initial-cluster-token and revision flags are etcd restore parameters, not cryptographic algorithms.

Full details: Container-Privileges

Explanation

No pull-request-introduced container privilege violation was found. The changed etcd source adds no privileged, host namespace, SYS_ADMIN, allowPrivilegeEscalation: true, or explicit root setting. The EtcdRestore StatefulSet fixture only shows readOnlyRootFilesystem: true; other added security settings are restrictive. The only added runAsUser: 0 is inside a generated ConfigMap fixture for the recycler Pod. Its embedded payload is identical to the pre-existing TechPreview fixture and to the unchanged source asset, so it does not introduce runtime behavior.

Full details: No-Sensitive-Data-In-Logs

Explanation

PASS. The pull request adds no new logging of passwords, tokens, API keys, PII, or customer data. The changed script passes member and cluster values to etcdutl/etcdctl without shell tracing or explicit output of those values. The new informational messages are static. The existing XML error-body logging is unchanged and is not caused by this pull request. Test fixtures use non-secret example URLs and placeholder values.

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

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

@openshift-ci openshift-ci Bot added area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release and removed do-not-merge/needs-area labels Jul 21, 2026

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

🧹 Nitpick comments (1)
control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go (1)

1142-1145: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Use the required test-case description format.

Rename this case to When etcd snapshot restore is configured, it should reconcile the expected components.

🤖 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
`@control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go`
around lines 1142 - 1145, Rename the test case in the relevant test-case table
from “Default feature set, etcd snapshot restore” to “When etcd snapshot restore
is configured, it should reconcile the expected components,” without changing
its featureSet, subDirSuffix, or test behavior.

Source: Coding guidelines

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

Nitpick comments:
In
`@control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go`:
- Around line 1142-1145: Rename the test case in the relevant test-case table
from “Default feature set, etcd snapshot restore” to “When etcd snapshot restore
is configured, it should reconcile the expected components,” without changing
its featureSet, subDirSuffix, or test behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 32129925-6bcc-42aa-afcd-854baa0dae02

📥 Commits

Reviewing files that changed from the base of the PR and between 0a7e9d4 and bee7b14.

📒 Files selected for processing (4)
  • control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/statefulset.go

@tony-schndr
tony-schndr force-pushed the fix/etcd-snapshot-restore-init branch from bee7b14 to 62eb783 Compare July 21, 2026 18:59
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 21, 2026
@tony-schndr
tony-schndr force-pushed the fix/etcd-snapshot-restore-init branch from 62eb783 to 40ce74a Compare July 21, 2026 19:07
@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 47.33%. Comparing base (e1e98a5) to head (6625825).
⚠️ Report is 9 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9048      +/-   ##
==========================================
+ Coverage   47.32%   47.33%   +0.01%     
==========================================
  Files         792      792              
  Lines       99678    99697      +19     
==========================================
+ Hits        47169    47195      +26     
+ Misses      49347    49341       -6     
+ Partials     3162     3161       -1     
Files with missing lines Coverage Δ
...trollers/hostedcontrolplane/v2/etcd/statefulset.go 79.05% <100.00%> (+5.80%) ⬆️

... and 1 file with indirect coverage changes

Flag Coverage Δ
cmd-support 40.94% <ø> (ø)
cpo-hostedcontrolplane 50.44% <100.00%> (+0.09%) ⬆️
cpo-other 48.32% <ø> (ø)
hypershift-operator 57.49% <ø> (ø)
other 34.70% <ø> (ø)

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

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

@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 `@control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh`:
- Around line 26-40: Add fail-fast handling to the etcd-init script before the
restore branches, such as enabling errexit with set -e, so failures from either
the etcdutl or etcdctl snapshot restore commands stop execution. Ensure the
subsequent promotion of /var/lib/restore into /var/lib/data cannot run after a
partial or failed restore.
🪄 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: 7464c0d5-025d-49c5-b037-2d3b3165646d

📥 Commits

Reviewing files that changed from the base of the PR and between 62eb783 and 40ce74a.

📒 Files selected for processing (4)
  • control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/statefulset.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/statefulset.go
  • control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd_test.go

Comment on lines +26 to +40
etcdutl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"
elif [ -x /usr/bin/etcdctl ]; then
echo "INFO: using etcdctl (etcd 3.5.x)"
env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status /tmp/snapshot
env ETCDCTL_API=3 /usr/bin/etcdctl snapshot restore /tmp/snapshot --data-dir=/var/lib/restore
env ETCDCTL_API=3 /usr/bin/etcdctl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"

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

Do not promote a failed or partial restore.

This script does not enable errexit or check either restore command’s exit status. If etcdutl or etcdctl creates partial contents and then fails, Lines [46-47] still move that incomplete database into /var/lib/data, potentially causing etcd corruption or a CrashLoopBackOff. Add set -e near the top or explicitly abort when either restore command fails.

Proposed minimal fix
+set -euo pipefail
+
 # If /var/lib/data is not empty we exit early, since this means an etcd database already exists
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
etcdutl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"
elif [ -x /usr/bin/etcdctl ]; then
echo "INFO: using etcdctl (etcd 3.5.x)"
env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status /tmp/snapshot
env ETCDCTL_API=3 /usr/bin/etcdctl snapshot restore /tmp/snapshot --data-dir=/var/lib/restore
env ETCDCTL_API=3 /usr/bin/etcdctl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"
set -euo pipefail
etcdutl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"
elif [ -x /usr/bin/etcdctl ]; then
echo "INFO: using etcdctl (etcd 3.5.x)"
env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status /tmp/snapshot
env ETCDCTL_API=3 /usr/bin/etcdctl snapshot restore /tmp/snapshot \
--data-dir=/var/lib/restore \
--name "${HOSTNAME}" \
--initial-advertise-peer-urls "${PEER_URL}" \
--initial-cluster "${ETCD_INITIAL_CLUSTER}" \
--initial-cluster-token "${HCP_NAMESPACE}"
🧰 Tools
🪛 ast-grep (0.44.1)

[warning] 33-33: Writing to or reading from a hardcoded, predictable path under /tmp is vulnerable to symlink and TOCTOU attacks: a local attacker can pre-create the file (or a symlink pointing elsewhere) and hijack or corrupt the contents. Generate a unique, unpredictable temporary file with mktemp instead, e.g. tmpfile="$(mktemp)" (or mktemp -d for directories) and reference "$tmpfile".
Context: /tmp/snapshot
Note: [CWE-377] Insecure Temporary File.

(predictable-tmp-file-bash)


[warning] 34-34: Writing to or reading from a hardcoded, predictable path under /tmp is vulnerable to symlink and TOCTOU attacks: a local attacker can pre-create the file (or a symlink pointing elsewhere) and hijack or corrupt the contents. Generate a unique, unpredictable temporary file with mktemp instead, e.g. tmpfile="$(mktemp)" (or mktemp -d for directories) and reference "$tmpfile".
Context: /tmp/snapshot
Note: [CWE-377] Insecure Temporary File.

(predictable-tmp-file-bash)

🤖 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 `@control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh`
around lines 26 - 40, Add fail-fast handling to the etcd-init script before the
restore branches, such as enabling errexit with set -e, so failures from either
the etcdutl or etcdctl snapshot restore commands stop execution. Ensure the
subsequent promotion of /var/lib/restore into /var/lib/data cannot run after a
partial or failed restore.

@tony-schndr
tony-schndr force-pushed the fix/etcd-snapshot-restore-init branch 2 times, most recently from c77b637 to 859b305 Compare July 22, 2026 15:08
@openshift-ci openshift-ci Bot added area/platform/aws PR/issue for AWS (AWSPlatform) platform area/platform/azure PR/issue for Azure (AzurePlatform) platform area/platform/gcp PR/issue for GCP (GCPPlatform) platform area/platform/kubevirt PR/issue for KubeVirt (KubevirtPlatform) platform area/platform/openstack PR/issue for OpenStack (OpenStackPlatform) platform area/platform/powervs PR/issue for PowerVS (PowerVSPlatform) platform labels Jul 22, 2026

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

♻️ Duplicate comments (1)
control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh (1)

26-40: 🩺 Stability & Availability | 🟠 Major

Do not promote a failed or partial restore.

The previous finding remains valid: if etcdutl or etcdctl fails, execution can still reach Line [46] and move incomplete contents into /var/lib/data. Add fail-fast handling or explicit checks around both restore commands before promotion.

🤖 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 `@control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh`
around lines 26 - 40, Update the restore branches in the etcdutl/etcdctl
selection to fail immediately when either snapshot restore command fails, before
execution can reach the promotion that moves contents into /var/lib/data. Enable
fail-fast behavior or explicitly check each restore command’s exit status, while
preserving the existing status inspection and restore arguments.
🤖 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.

Duplicate comments:
In `@control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh`:
- Around line 26-40: Update the restore branches in the etcdutl/etcdctl
selection to fail immediately when either snapshot restore command fails, before
execution can reach the promotion that moves contents into /var/lib/data. Enable
fail-fast behavior or explicitly check each restore command’s exit status, while
preserving the existing status inspection and restore arguments.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 73319c35-161d-469e-9fa1-cfff9f4fbdc2

📥 Commits

Reviewing files that changed from the base of the PR and between c77b637 and 859b305.

⛔ Files ignored due to path filters (240)
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_cloud_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-node-termination-handler/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_node_termination_handler_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-node-termination-handler/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_node_termination_handler_creds_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/aws-node-termination-handler/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_node_termination_handler_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/azure-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_azure_cloud_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/azure-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_azure_cloud_config_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/azure-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_azure_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/azure-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_azure_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/azure-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_azure_cloud_controller_manager_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/catalog-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_catalog_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/catalog-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_catalog_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/catalog-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_catalog_operator_metrics_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/catalog-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_catalog_operator_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/certified-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_certified_operators_catalog_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/certified-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_certified_operators_catalog_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/certified-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_certified_operators_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cloud-credential-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cloud_credential_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cloud-credential-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cloud_credential_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cloud-credential-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cloud_credential_operator_service_account_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_podmonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-autoscaler/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_autoscaler_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-image-registry-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_image_registry_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-image-registry-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_image_registry_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-image-registry-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_image_registry_operator_podmonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-image-registry-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_image_registry_controller_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-network-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_network_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-network-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_network_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-network-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_network_operator_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-network-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_network_operator_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-network-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_network_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_node_tuning_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_node_tuning_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_node_tuning_operator_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_node_tuning_operator_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_node_tuning_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_node_tuning_operator_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-node-tuning-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_node_tuning_operator_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-policy-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_policy_controller_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-policy-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_policy_controller_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-policy-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_policy_controller_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-storage-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_storage_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-storage-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_storage_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-storage-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_storage_operator_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-storage-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_storage_operator_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-storage-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_storage_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-version-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_version_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-version-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_version_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-version-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_version_operator_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/cluster-version-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_cluster_version_operator_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/community-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_community_operators_catalog_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/community-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_community_operators_catalog_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/community-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_community_operators_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/csi-snapshot-controller-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_csi_snapshot_controller_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/csi-snapshot-controller-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_csi_snapshot_controller_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/csi-snapshot-controller-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_csi_snapshot_controller_operator_role_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/csi-snapshot-controller-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_csi_snapshot_controller_operator_role_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/csi-snapshot-controller-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_csi_snapshot_controller_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/dns-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_dns_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/dns-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_dns_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/dns-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_dns_operator_service_account_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_ca_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/endpoint-resolver/EtcdRestore/zz_fixture_TestControlPlaneComponents_endpoint_resolver_serving_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_client_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_discovery_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_self_register_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_self_register_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/etcd/EtcdRestore/zz_fixture_TestControlPlaneComponents_etcd_statefulset.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/featuregate-generator/EtcdRestore/zz_fixture_TestControlPlaneComponents_featuregate_generator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/featuregate-generator/EtcdRestore/zz_fixture_TestControlPlaneComponents_featuregate_generator_job.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/gcp-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_gcp_cloud_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/gcp-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_gcp_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/gcp-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_gcp_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_podmonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/hosted-cluster-config-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_hosted_cluster_config_operator_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_proxy_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_proxy_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_proxy_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_ca_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_podmonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_route.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ignition-server/EtcdRestore/zz_fixture_TestControlPlaneComponents_ignition_server_serving_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ingress-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_ingress_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ingress-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_ingress_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ingress-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_ingress_operator_podmonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/ingress-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_ingress_operator_service_account_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/konnectivity-agent/EtcdRestore/zz_fixture_TestControlPlaneComponents_konnectivity_agent_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/konnectivity-agent/EtcdRestore/zz_fixture_TestControlPlaneComponents_konnectivity_agent_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/konnectivity-agent/EtcdRestore/zz_fixture_TestControlPlaneComponents_konnectivity_agent_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_admin_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_auth_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_aws_pod_identity_webhook_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_bootstrap_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_hcco_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kas_audit_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kas_authentication_token_webhook_config_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kas_bootstrap_container_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kas_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kas_egress_selector_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_konnectivity_server_local_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_apiserver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_apiserver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_apiserver_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_apiserver_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_localhost_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_metadata_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_recording_rules_prometheusrule.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_service_network_admin_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kcm_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_controller_manager_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_controller_manager_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_controller_manager_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_recycler_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-scheduler/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_scheduler_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-storage-version-migrator/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_storage_version_migrator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kube-storage-version-migrator/EtcdRestore/zz_fixture_TestControlPlaneComponents_kube_storage_version_migrator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_controller_manager_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_controller_manager_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_cloud_controller_manager_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_driver_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_controller_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_controller_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_controller_service_account_kubeconfig_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/kubevirt-csi-controller/EtcdRestore/zz_fixture_TestControlPlaneComponents_kubevirt_csi_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/machine-approver/EtcdRestore/zz_fixture_TestControlPlaneComponents_machine_approver_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_ca_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_route.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/metrics-proxy/EtcdRestore/zz_fixture_TestControlPlaneComponents_metrics_proxy_serving_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_audit_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_default_error_template_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_default_login_template_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_default_provider_selection_template_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/oauth-openshift/EtcdRestore/zz_fixture_TestControlPlaneComponents_oauth_openshift_session_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_cronjob.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_role.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_rolebinding.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_collect_profiles_serviceaccount.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-collect-profiles/EtcdRestore/zz_fixture_TestControlPlaneComponents_pprof_cert_secret.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_operator_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_operator_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_operator_metrics_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/olm-operator/EtcdRestore/zz_fixture_TestControlPlaneComponents_olm_operator_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_audit_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_apiserver_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_controller_manager_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_controller_manager_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_controller_manager_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-oauth-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_oauth_apiserver_audit_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-oauth-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_oauth_apiserver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-oauth-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_oauth_apiserver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-oauth-apiserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_oauth_apiserver_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-route-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_route_controller_manager_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-route-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_route_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-route-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_route_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-route-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_route_controller_manager_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openshift-route-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openshift_route_controller_manager_servicemonitor.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openstack-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openstack_cloud_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openstack-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openstack_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openstack-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openstack_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/openstack-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_openstack_trusted_ca_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/packageserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_packageserver_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/packageserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_packageserver_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/packageserver/EtcdRestore/zz_fixture_TestControlPlaneComponents_packageserver_pdb_poddisruptionbudget.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/powervs-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_ccm_config_configmap.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/powervs-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_powervs_cloud_controller_manager_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/powervs-cloud-controller-manager/EtcdRestore/zz_fixture_TestControlPlaneComponents_powervs_cloud_controller_manager_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-marketplace-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_marketplace_catalog_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-marketplace-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_marketplace_catalog_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-marketplace-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_marketplace_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_catalogs_imagestream.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_operators_catalog_controlplanecomponent.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_operators_catalog_deployment.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/redhat-operators-catalog/EtcdRestore/zz_fixture_TestControlPlaneComponents_redhat_operators_service.yaml is excluded by !**/testdata/**
  • control-plane-operator/controllers/hostedcontrolplane/testdata/router/EtcdRestore/zz_fixture_TestControlPlaneComponents_router_controlplanecomponent.yaml is excluded by !**/testdata/**
📒 Files selected for processing (4)
  • control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd-init.sh
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/statefulset.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/statefulset.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/etcd/etcd_test.go

@tony-schndr
tony-schndr marked this pull request as ready for review July 22, 2026 16:22
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 22, 2026
@openshift-ci
openshift-ci Bot requested review from bryan-cox and enxebre July 22, 2026 16:22
@bryan-cox

Copy link
Copy Markdown
Member

@tony-schndr is all the 16k lines of changes really needed to fix this bug?

Could you please use the restructure commit skill in the hypershift repo to split up the changes into appropriate commits?; that would make it much easier to review.

@jparrill

Copy link
Copy Markdown
Contributor

/retitle OCPBUGS-99534: etcd initialization bugs after etcdctl snapshot restore

@openshift-ci openshift-ci Bot changed the title fix: etcd initialization bugs after etcdctl snapshot restore OCPBUGS-99534: etcd initialization bugs after etcdctl snapshot restore Jul 23, 2026
@jparrill

jparrill commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

/test unit

@jparrill

jparrill commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

/hold cancel

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Sep 7, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 292aff7 and 2 for PR HEAD 5f82787 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD f6bf3a4 and 1 for PR HEAD 5f82787 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 025744b and 0 for PR HEAD 5f82787 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/hold

Revision 5f82787 was retested 3 times: holding

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Sep 8, 2026
@jparrill

jparrill commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

/test unit

@jparrill

jparrill commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

looks like unit is failing consistently. @tony-schndr do you mind taking a look?

Fixes OCPBUGS-99310

Fix etcd split brain caused by single member initialization.
- Previously etcd members were started without information about other
  cluster members, causing each to initialize individually. Added
  --name, --initial-advertise-peer-urls, --initial-cluster, and
  --initial-cluster-token to etcdctl (and utl) snapshot restore to
  ensure members are properly initialized during restore.

Fix member ID mismatch on snapshot restore by running etcd-init before reset-member.
- Previously, reset-member ran first and, if the cluster was already
  up, would remove and re-add the local member with a new ID. etcd-init
  then restored the snapshot with the old member ID, causing a
  WAL/cluster membership mismatch and CrashLoopBackOff. Running
  etcd-init first ensures the data directory exists when reset-member
  runs, so it takes the no-op "member has data" path and leaves
  membership unchanged.

Signed-off-by: Tony Schneider <tschneid@redhat.com>
Pass --bump-revision 1000000000 --mark-compacted to etcdutl and etcdctl
snapshot restore invocations so that post-restore revisions are always
greater than any revision the cluster has seen, and all watches are
terminated on startup. Without this, informer caches may observe stale
revisions from before the snapshot was taken.

Ref: https://etcd.io/docs/v3.5/op-guide/recovery/

Signed-off-by: Tony Schneider <tschneid@redhat.com>
… tests

Signed-off-by: Tony Schneider <tschneid@redhat.com>
@tony-schndr
tony-schndr force-pushed the fix/etcd-snapshot-restore-init branch from 5f82787 to 6625825 Compare September 8, 2026 14:00
@openshift-ci-robot openshift-ci-robot removed the verified Signifies that the PR passed pre-merge verification criteria label Sep 8, 2026
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Sep 8, 2026
@jparrill

jparrill commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

/hold cancel

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Sep 8, 2026
@jparrill

jparrill commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Sep 8, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-azure-self-managed
/test e2e-v2-gke

@jparrill

jparrill commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

/verified by @adalrsjr1

10 consecutive backup runs, all completed successfully and no split brain in etcd fleet. All etcd members see each other before backup and after restore.

Being this just a rebase from main I will consider this as verified as @adalrsjr1 did some time ago: #9048 (comment)

@openshift-ci-robot

Copy link
Copy Markdown

@jparrill: This PR has been marked as verified by @adalrsjr1.

Details

In response to this:

/verified by @adalrsjr1

10 consecutive backup runs, all completed successfully and no split brain in etcd fleet. All etcd members see each other before backup and after restore.

Being this just a rebase from main I will consider this as verified as @adalrsjr1 did some time ago: #9048 (comment)

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-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD e1e98a5 and 2 for PR HEAD 6625825 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD e47fbc4 and 1 for PR HEAD 6625825 in total

@openshift-ci

openshift-ci Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: hlipsig, jparrill, tony-schndr

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 commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

@tony-schndr: 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

@tony-schndr: Jira Issue Verification Checks: Jira Issue OCPBUGS-99534
✔️ This pull request was pre-merge verified.
✔️ All associated pull requests have merged.
✔️ All associated, merged pull requests were pre-merge verified.

Jira Issue OCPBUGS-99534 has been moved to the MODIFIED state and will move to the VERIFIED state when the change is available in an accepted nightly payload. 🕓

Details

In response to this:

What this PR does / why we need it:

Fix etcd split brain caused by single member initialization.

  • Previously etcd members were being started without any information about the other members in the etcd cluster causing each member to be started individually. added --name --initial-advertise-peer-urls --initial-cluster --initial-cluster-token to etcdctl (and utl) snapshot restore to ensure etcd members are properly initialized during restore.

Fix member ID mismatch on snapshot restore by running etcd-init before reset-member.

  • Previously, reset-member ran first and, if the cluster was already up, would remove and re-add the local member with a new ID. etcd-init then restored the snapshot with the old member ID, causing a WAL/cluster membership mismatch and CrashLoopBackOff. Running etcd-init first ensures the data directory exists when reset-member runs, so it takes the no-op "member has data" path and leaves membership unchanged.

Adds --bump-revision 1000000000 --mark-compacted flags to etcdctl|etcdutl snapshot restore to ensure etcd object revisions are always greater than any revision the cluster has seen. This ensures that all watches are terminated and etcd does not respond to requests about revisions that happened after taking the snapshot - effectively invalidating its informer caches. ref https://etcd.io/docs/v3.5/op-guide/recovery/

Which issue(s) this PR fixes:

Fixes OCPBUGS-99534

Special notes for your reviewer:

Checklist:

  • Subject and description added to both, commit and PR.
  • Relevant issues have been referenced.
  • This change includes docs.
  • This change includes unit tests.

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes
  • Improved managed etcd snapshot restoration with unique pod identities and consistent cluster configuration.
  • Corrected init-container sequencing so snapshot restoration runs before member reset when enabled.
  • Tests
  • Added coverage for etcd snapshot restoration fixtures.
  • Expanded validation of restore configuration and init-container ordering.

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.

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. area/api Indicates the PR includes changes for the API area/cli Indicates the PR includes changes for CLI area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/documentation Indicates the PR includes changes for documentation area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release area/platform/aws PR/issue for AWS (AWSPlatform) platform area/platform/azure PR/issue for Azure (AzurePlatform) platform area/platform/gcp PR/issue for GCP (GCPPlatform) platform area/platform/kubevirt PR/issue for KubeVirt (KubevirtPlatform) platform area/platform/openstack PR/issue for OpenStack (OpenStackPlatform) platform area/platform/powervs PR/issue for PowerVS (PowerVSPlatform) platform area/testing Indicates the PR includes changes for e2e testing 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. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.