Skip to content

OCPEDGE-2280: mutable topology - #2008

Open
jeff-roche wants to merge 1 commit into
openshift:masterfrom
jeff-roche:mutable-topology
Open

OCPEDGE-2280: mutable topology#2008
jeff-roche wants to merge 1 commit into
openshift:masterfrom
jeff-roche:mutable-topology

Conversation

@jeff-roche

@jeff-roche jeff-roche commented May 11, 2026

Copy link
Copy Markdown

Summary

Introduces the Mutable Topology enhancement proposal, which enables OpenShift clusters to transition between topology modes as a Day 2 operation. This replaces the previous Adaptable Topology proposal.

Key Design Decisions

  • Controller in cluster-config-operator (CCO) — A new topology transition controller in CCO watches spec.desiredTopology on the Infrastructure CR, validates preconditions, coordinates the transition across operators, and updates topology status fields when complete. CCO was chosen over CVO, CEO, and MCO (and over a standalone operator) because it owns the config.openshift.io API group and the Infrastructure CR lifecycle. See Alternatives in the proposal for the full placement analysis.
  • No new topology enum values — Transitions move between existing TopologyMode values (SingleReplica, HighlyAvailable, etc.). Operators continue reacting to fixed topology values they already understand. Transition complexity is concentrated in a single controller rather than distributed across 30+ operators.
  • Spec/status contract — Follows the standard Kubernetes pattern: spec.desiredTopology expresses administrator intent; status.controlPlaneTopology reflects observed state. Mirrors the oc adm upgrade pattern (patch spec, controller does the work).
  • Feature-gatedMutableTopology gate progresses through DevPreview → TechPreview → GA. Controller is not registered when the gate is disabled (zero runtime overhead).

Scope

  • Initial transition: SNO → HA compact (3-node) on platform: none
  • CLI: oc adm transition topology HighlyAvailable
  • etcd scaling: CEO handles sequential 1→2→3 member scaling via existing learner-to-voter promotion
  • Failure handling: CEO attempts etcd rollback
  • Upgrade safety: CCO sets Upgradeable=False while a transition is in progress

What Changed (Revision History)

The proposal was revised to base the controller in CCO rather than proposing a dedicated standalone operator (OTTO). Key changes from the prior revision:

  • Controller placement moved from a standalone operator to CCO, with full alternatives analysis (CVO, CEO, MCO, standalone operator, CLI-only)
  • Expanded graduation criteria with per-operator topology dependency matrix requirement
  • Added monitoring/telemetry requirements (Prometheus metrics, alerts) for GA graduation
  • Added Support Procedures section with team ownership, detection, and recovery procedures
  • Clarified etcd scaling risks: the 2-voter intermediate state is unique to Day 2 transitions (does not occur during bootstrapping)
  • Added Upgradeable=False enforcement during transitions to prevent concurrent upgrades

Out of Scope

  • Bidirectional transitions (HA → SNO)
  • HyperShift / hosted control planes
  • MicroShift
  • Automatic node provisioning
  • Cloud platforms (AWS, Azure, GCP) — design does not preclude future support
  • platform: baremetal — pending keepalived resolution

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added support for transitioning single-replica clusters to a three-node compact highly available topology on platforms without infrastructure integration.
    • Added an administrator-facing setting for requesting supported control plane topology transitions.
    • Introduced the asynchronous oc adm transition topology command.
    • Added transition progress, completion, and failure status reporting.
    • Cluster upgrades are blocked during active transitions, with prerequisite validation and recovery handling.

@openshift-ci
openshift-ci Bot requested review from bn222 and cooktheryan May 11, 2026 19:46
@jeff-roche jeff-roche changed the title enhancements/topologies: mutable topology enhancement proposal OCPEDGE-2280: mutable topology enhancement proposal May 11, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label May 11, 2026
@openshift-ci-robot

openshift-ci-robot commented May 11, 2026

Copy link
Copy Markdown

@jeff-roche: This pull request references OCPEDGE-2280 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target either version "5.0." or "openshift-5.0.", but it targets "openshift-4.22" instead.

Details

In response to this:

Summary

  • Introduces the Mutable Topology enhancement, replacing the previous Adaptable Topology proposal
  • Proposes a new optional payload operator (OTTO) to orchestrate topology transitions between existing fixed topology modes, rather than adding a new topology enum
  • Initial scope: SNO to HA compact (3-node) on platform: none

Test plan

  • markdownlint passes (markdownlint-cli2)
  • Reviewer feedback from control plane, API, and architecture teams
  • Template structure validated against guidelines/enhancement_template.md

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

@jeff-roche jeff-roche changed the title OCPEDGE-2280: mutable topology enhancement proposal OCPEDGE-2280: mutable topology May 11, 2026
@jeff-roche

Copy link
Copy Markdown
Author

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

I'm missing a "why" statement covering why a day 2, out-of-payload operator is the right choice for this. The CVO section towards the bottom hints at the why a bit but more explicit detail is needed.

With that in mind, I haven't reviewed the EP fully because I don't understand why this is the approach we're taking. The assessment of CVO seems very light and not enough to exclude that as a potential option to meet the goals.

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
@openshift-ci

openshift-ci Bot commented May 12, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please ask for approval from dgoodwin. For more information see the Code Review Process.

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

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jeff-roche

jeff-roche commented May 12, 2026

Copy link
Copy Markdown
Author

I'm missing a "why" statement covering why a day 2, out-of-payload operator is the right choice for this. The CVO section towards the bottom hints at the why a bit but more explicit detail is needed.

With that in mind, I haven't reviewed the EP fully because I don't understand why this is the approach we're taking. The assessment of CVO seems very light and not enough to exclude that as a potential option to meet the goals.

@brandisher I've added a new paragraph under the ## Proposal header that explains the why. If you're looking for something specifically beyond what I added, I'd be happy to add some more detail

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated

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

🤖 Generated with Claude Code

There are significant portions of this proposal that assume behaviour of OpenShift that either doesn't exist, or doesn't work in the way proposed. I'm assuming here that this is hallucination of Claude?

The EP as it stands today doesn't actually make sense for implementation. It also doesn't align with what I thought we had agreed on the architecture call.

Has anyone tried to manually take a cluster and scale up and manually transition from a single replica to multiple replicas? IMO this is the most important next step for this project

What I thought we had agreed:

  • To scale from SNO to HA, the user must create two new control plane nodes and join them to the cluster
    • On HighlyAvailable topology - KAS, KCM, etcd, etc all get scheduled automatically as static pods on these nodes - I don't see anything that prevents this based on if it's a SNO cluster today, this needs to be checked (it probably should)
    • MCO still serves ignition for control plane nodes on SNO, so user needs to create the control plane nodes somehow to ignite from here
  • New fields are added to the infrastructure spec to allow the user to say "I intend for this cluster to be HA going forward"
  • A controller is added to cluster config operator
    • This checks that the precondition of having additional control plane nodes in the cluster is met
    • Once the precondition is met, it updates the status to reflect spec
  • Operators now react to the change in status and transition from single to HA
    • etcd operator promotes learners to full members, quorum goes from 1->3 (I don't know if this guard is in place today, we should add if not)
    • KAS/KCM - no change, it already scheduled new KAS/kCM pods
    • Others - Those that previously deploy a single replica of their operand now move to 2 replicas, other changes might be needed on a per operator basis, I was expecting those details in the EP but don't see them yet

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated

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

I know the scope is limited to baremetal/platform:none, but I know there is interest for mutable topologies in cloud platforms as well so as much as appropriate I would to ensure the design leaves a path forward for those cloud platforms.

Also, like the other enhancement I don't see any mention of mastersSchedulable which affects the calculation for infrastructureTopology. How is the mastersSchedulable field handled/taken into account for this solution?

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated

@zaneb zaneb left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This one looks directionally correct 👍

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
@jeff-roche

jeff-roche commented May 15, 2026

Copy link
Copy Markdown
Author

Big update coming next week to realign this with CCO instead of a dedicated operator, add some more technical detail around the flow, and address masters schedulable. Thank you everyone for the quick and thorough reviews, I believe we are rapidly converging on a solid solution!

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
@dhensel-rh

Copy link
Copy Markdown
Contributor

Are there limitations for a SNO to TNF transition ? TNF requires BMC/Redfish so if the SNO bare metal hardware does not have it, does it block the transition? I could see this being a problem trying to match hardware in general (BMC firmware versions, vendor types, etc. ).

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

This is much better than the previous iteration. I still fee like there's some disconnect between the new and old stuff, some stuff may still be hanging over from the previous iteration that doesn't quite make sense now, PTAL at my comments

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
jeff-roche added a commit to jeff-roche/enhancements that referenced this pull request May 29, 2026
Address review feedback from brandisher, JoelSpeed, zaneb,
patrickdillon, DanielFroehlich, and dhensel-rh across 6 categories:

API design:
- Rename desiredTopology to desiredControlPlaneTopology
- Make field empty by default (installer does not populate)
- Replace CEL validation with DesiredTopologyMode named type
- Drop ValidatingAdmissionPolicy for status field protection
- Document spec-to-status mapping (CP topology, infra topology,
  mastersSchedulable)
- Add worker node precondition check (compact clusters only)

Workflow:
- Clarify node-driven vs topology-driven operator reactions
- CLI returns immediately; monitoring is separate
- Failure handling uses standard K8s retry pattern (no spec reset)
- Transition conditions on CCO ClusterOperator status (not infra CR)
- Cancel semantics: only before status update (step 9)
- CEO etcd scaling is independent (unsafe scaling path), not
  orchestrated by transition controller

Accuracy:
- CEO rollback replaced with manual quorum-restore.sh throughout
- "type alias" corrected to "named type" (Go terminology)
- Upgradeable=False blocks upgrades, not all version changes
- "30+ operators" claim removed (uncited)
- mastersSchedulable clarified as unchanged for SNO to HA compact

Scope:
- IBI clusters excluded (non-goal + topology considerations)
- Platform:none rationale expanded (edge computing context)
- Baremetal risk reframed as future scope
- Backup compatibility added as open question

Content:
- Concrete failure examples (quorum loss, node readiness, operator
  reconciliation)
- SLO dimensions defined in GA graduation criteria
- Operational guidance updated (no availability guarantee, backup
  recommendation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
The overall orchestration differs from bootstrapping: bootstrapping uses a temporary bootstrap member that is later removed before the cluster reaches steady state, while a Day 2 transition adds permanent members to a running production cluster. Critically, the 2-voter intermediate state (steps 4–5 below) is unique to Day 2 transitions — it does not occur during bootstrapping.

1. **Starting state**: 1 etcd voting member (quorum=1)
2. CEO adds an etcd learner on the second control-plane node

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.

The CEO uses learners regardless, the "unsafe" aspect is that the CEO doesn't check for quorum or member health on SNO, it just adds the new member as a learner and goes through the normal promotion process.

Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
jeff-roche added a commit to jeff-roche/enhancements that referenced this pull request Jun 11, 2026
Address review feedback from brandisher, JoelSpeed, zaneb,
patrickdillon, DanielFroehlich, and dhensel-rh across 6 categories:

API design:
- Rename desiredTopology to desiredControlPlaneTopology
- Make field empty by default (installer does not populate)
- Replace CEL validation with DesiredTopologyMode named type
- Drop ValidatingAdmissionPolicy for status field protection
- Document spec-to-status mapping (CP topology, infra topology,
  mastersSchedulable)
- Add worker node precondition check (compact clusters only)

Workflow:
- Clarify node-driven vs topology-driven operator reactions
- CLI returns immediately; monitoring is separate
- Failure handling uses standard K8s retry pattern (no spec reset)
- Transition conditions on CCO ClusterOperator status (not infra CR)
- Cancel semantics: only before status update (step 9)
- CEO etcd scaling is independent (unsafe scaling path), not
  orchestrated by transition controller

Accuracy:
- CEO rollback replaced with manual quorum-restore.sh throughout
- "type alias" corrected to "named type" (Go terminology)
- Upgradeable=False blocks upgrades, not all version changes
- "30+ operators" claim removed (uncited)
- mastersSchedulable clarified as unchanged for SNO to HA compact

Scope:
- IBI clusters excluded (non-goal + topology considerations)
- Platform:none rationale expanded (edge computing context)
- Baremetal risk reframed as future scope
- Backup compatibility added as open question

Content:
- Concrete failure examples (quorum loss, node readiness, operator
  reconciliation)
- SLO dimensions defined in GA graduation criteria
- Operational guidance updated (no availability guarantee, backup
  recommendation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jeff-roche
jeff-roche force-pushed the mutable-topology branch 2 times, most recently from 7be83f9 to 0aab1bd Compare June 11, 2026 22:43

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

Lets talk next week about conditions and reporting because I'm still not sure if what you say you want to report is possible, or at least, I'm not following what feeds into those conditions and their true/false states

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md Outdated
@ardaguclu

Copy link
Copy Markdown
Member

From the oc point of view, EP looks good to me.

Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md
@jeff-roche

Copy link
Copy Markdown
Author

@ardaguclu @JoelSpeed if either of you don't have any issues with the enhancement proposal as is, can you lgtm?

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Walkthrough

The proposal defines a feature-gated SNO-to-three-node compact HA transition on platform: none. It adds Infrastructure API fields, CCO controller behavior, CLI operations, status conditions, sequential etcd scaling, upgrade blocking, recovery handling, and testing criteria.

Changes

Mutable topology transition

Layer / File(s) Summary
Scope and topology contract
enhancements/topologies/mutable-topology.md
Defines topology modes, supported deployment scope, exclusions, Infrastructure API fields, transition conditions, and feature-gate behavior.
Transition orchestration
enhancements/topologies/mutable-topology.md
Defines the asynchronous CLI, controller preconditions, sequential etcd expansion, topology status updates, soak period, and operator-health validation.
Recovery and upgrade semantics
enhancements/topologies/mutable-topology.md
Defines upgrade blocking, cancellation, quorum-loss recovery, diagnostics, retry behavior, controller restart handling, and version-skew semantics.
Validation and graduation
enhancements/topologies/mutable-topology.md
Defines rejected alternatives, open questions, CI, QE, recovery, stability, upgrade, and release graduation requirements.

Estimated code review effort: 2 (Simple) | ~15 minutes

Suggested reviewers: cooktheryan, bn222

Sequence Diagram(s)

sequenceDiagram
  participant Administrator
  participant TopologyCLI
  participant InfrastructureAPI
  participant CCOTransitionController
  participant Etcd
  participant ClusterOperators
  Administrator->>TopologyCLI: Request topology transition
  TopologyCLI->>InfrastructureAPI: Set controlPlaneTopology
  InfrastructureAPI->>CCOTransitionController: Reconcile desired topology
  CCOTransitionController->>Etcd: Scale members sequentially
  Etcd-->>CCOTransitionController: Report member and quorum status
  CCOTransitionController->>ClusterOperators: Wait for operator health
  ClusterOperators-->>CCOTransitionController: Report cluster readiness
  CCOTransitionController->>InfrastructureAPI: Update topology conditions and status
Loading
🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly identifies the main change, which is the Mutable Topology enhancement proposal.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed PR adds only a markdown enhancement proposal document with no Ginkgo tests or test code of any kind, making the test name stability check not applicable.
Test Structure And Quality ✅ Passed The PR adds only enhancements/topologies/mutable-topology.md; it contains no Ginkgo test code, It blocks, cluster waits, resource setup, or assertions to review.
Microshift Test Compatibility ✅ Passed The PR adds only enhancements/topologies/mutable-topology.md; no Go files or new Ginkgo e2e tests were added, so MicroShift test compatibility is not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The patch adds only enhancements/topologies/mutable-topology.md; it adds no test source or Ginkgo It/Describe/Context/When declarations, so SNO test compatibility is not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed The PR changes only enhancements/topologies/mutable-topology.md; it adds no manifests, operator code, controllers, or concrete scheduling constraints to assess.
Ote Binary Stdout Contract ✅ Passed PR adds only documentation (mutable-topology.md). The OTE Binary Stdout Contract check applies to test binaries and executable code, not documentation files.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The pull request adds only a Markdown enhancement proposal; it adds no Ginkgo e2e tests or executable networking code requiring IPv4 or external connectivity.
No-Weak-Crypto ✅ Passed The PR adds only a Markdown proposal. Exact searches found no MD5, SHA1, DES, RC4, Blowfish, ECB, custom crypto, or secret/token comparisons.
Container-Privileges ✅ Passed The PR adds only a Markdown proposal. Its Go snippets contain no container manifests or flagged privilege settings such as host namespaces, SYS_ADMIN, root, or privilege escalation.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds only a design proposal. It contains no logging implementation or sensitive log fields; its log references are generic operator diagnostics, with no secrets, PII, or hostnames.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

❤️ Share

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

@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: 6

🤖 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 `@enhancements/topologies/mutable-topology.md`:
- Around line 532-534: Update the CLI interaction test description to verify
that `oc adm transition topology` patches `spec.controlPlaneTopology` and
returns immediately, without requiring progress monitoring. Remove monitoring
from this test and add a separate status-monitoring test only where the
corresponding UX is defined.
- Around line 188-200: The transition design must persist an explicit active
phase or generation through post-transition validation, rather than relying on
spec/status inequality as the reconciliation trigger. Update the documented
controller flow around the topology status update,
`TopologyTransitionCompleted`, and `TopologyTransitionFailed` to define durable
retry state across CCO restarts, and specify when each terminal condition is
cleared when a new retry begins.
- Around line 655-659: Update the “etcd Scaling Failures” resolution guidance to
remove restoring the pre-transition snapshot as a supported fallback. Keep
quorum restoration via standard disaster recovery procedures, and mention
snapshot restoration only as an unvalidated investigation item pending testing
and documentation.
- Line 280: Update the RBAC paragraph in mutable-topology.md to reference the
correct infrastructure field path, spec.controlPlaneTopology, and remove the
extra spec segment while preserving the surrounding access-control guidance.
- Around line 507-513: Renumber the Open Questions entries in the mutable
topology document so the sequence is contiguous and unambiguous. Update the
visible items currently numbered 2 through 5, adding the missing item only if
another question exists immediately before this excerpt; otherwise start this
section at 1 and preserve the existing question text.
- Around line 160-176: Reorder the documented workflow so the CLI admits the
transition and CCO marks it in progress before any additional control-plane
nodes join, preventing CEO from scaling etcd prematurely. Update the
preconditions and sequencing around the transition controller and node-driven
reactions, and define cancellation/recovery behavior for nodes added before
admission or after an abandoned transition.
🪄 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: ad219a06-3919-4200-912f-e211e840d0fa

📥 Commits

Reviewing files that changed from the base of the PR and between 064ac37 and d057722.

📒 Files selected for processing (1)
  • enhancements/topologies/mutable-topology.md

Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
Comment thread enhancements/topologies/mutable-topology.md Outdated
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@enhancements/topologies/mutable-topology.md`:
- Around line 323-329: Reconcile the topology transition workflow with the etcd
scaling contract across the documented workflow, conditions, component
responsibilities, and tests. Choose either CCO-owned orchestration with
admission and an explicit CEO/CCO handshake before scaling, or treat CEO’s
completed three-member scaling as an external prerequisite and remove CCO’s
scaling coordination and failure guarantees; apply the chosen contract
consistently to the transition admission and progress conditions.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: b6220e9d-40e2-4137-8f9e-d8a52290b279

📥 Commits

Reviewing files that changed from the base of the PR and between c79913a and 4e0ac27.

📒 Files selected for processing (1)
  • enhancements/topologies/mutable-topology.md

Comment thread enhancements/topologies/mutable-topology.md
Introduce the Mutable Topology enhancement, which replaces the
previous Adaptable Topology proposal. Instead of a new topology
enum that all operators must interpret, this approach uses a
dedicated operator (OTTO) to orchestrate transitions between
existing fixed topology modes. Initial scope: SNO to HA compact
on platform: none.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

enhancements/topologies: revise mutable topology proposal to base on CCO

Move the topology transition controller from a standalone operator
(OTTO) into cluster-config-operator. CCO owns the config.openshift.io
API group and infrastructure CR lifecycle, making it the natural home.

Key design decisions:
- desiredTopology initialized by installer to match controlPlaneTopology
  (no kubebuilder default — value is cluster-specific)
- Controller triggers on desiredTopology != status.controlPlaneTopology
- On failure, controller resets desiredTopology to current topology
- Upgrade blocked via Upgradeable=False during transitions
- Condition types: TopologyTransitionProgressing, Completed, Failed
- Per-operator topology audit required for Dev Preview entry

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Add additional reviewers for mutable topology

Finalized reviewers for everyone who participated in the final review.

feat: adding SNO to HA compact pre/transition/post steps

Signed-off-by: Jeff Roche <jeroche@redhat.com>
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 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 `@enhancements/topologies/mutable-topology.md`:
- Around line 24-25: Update the tracking metadata for OCPEDGE-2280 to use the
branch’s expected target version, 5.0.* or openshift-5.0.*, or document in the
enhancement why it intentionally targets openshift-4.22.
- Around line 160-175: Update the transition workflow so CCO admits the topology
transition and sets the CCO ClusterOperator Upgradeable=False before
administrator-joined nodes trigger CEO’s 1→2→3 etcd scaling. Ensure the
transition controller’s precondition and progress handling cover this ordering,
and apply the same sequencing correction to the corresponding Failure Handling
workflow.
- Around line 334-340: Define one shared node-role predicate specifying the
exact labels, taints, and count for the three compact control-plane/worker
nodes, then reuse it in preflight checks, post-transition validation, and
transition tests. Update the existing control-plane-only and worker-inclusive
checks so all workflow stages enforce the same role configuration.
- Around line 261-268: Update the transition status contract around
TopologyTransitionControllerProgressing and
TopologyTransitionControllerUpgradeable to use the same condition types
referenced by the workflow and support procedures, including an explicit failed
state. Define the status lifecycle for pending, rejected, admitted, retrying,
cancelled, and completed transitions, and document that CVO observes CCO’s
upgrade-blocking Upgradeable condition while CCO reconciles ClusterOperator
status to preserve it.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e3c539c-b87b-45f6-9998-6cc46b375bbd

📥 Commits

Reviewing files that changed from the base of the PR and between c79913a and eb958cf.

📒 Files selected for processing (1)
  • enhancements/topologies/mutable-topology.md

Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md
Comment thread enhancements/topologies/mutable-topology.md
@openshift-ci

openshift-ci Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

@jeff-roche: 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.

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.