Skip to content

Control Center: DR forms and site storage deployment from the hub - #621

Merged
schmidt-scaled merged 3 commits into
feature/control-center-uifrom
feat/control-center-dr-forms
Oct 3, 2026
Merged

schmidt-scaled merged 3 commits into
feature/control-center-uifrom
feat/control-center-dr-forms

Conversation

@schmidt-scaled

Copy link
Copy Markdown
Contributor

What

Two commits on top of #512's branch.

d04d9c2: the DR configuration is edited in the console

  • The plan's per-site S3 stores and Velero namespace.
  • An application's tiers (boot order, ready-when gates) and health probes.
  • Site-profile bindings: logical networks, guest networks, DHCP server.
  • DHCP server registration, with an option to bind it as the site's server.

abcb640: a managed site's storage from the hub

  • New screen Disaster recovery → Site storage. It is a client of the operator's new StorageSiteDeployment kind (operator: StorageSiteDeployment — deploy a managed site's storage from the hub #620).
  • Deploy storage creates the request: managed cluster, discovery scope and sizing. The operator then runs the discovery on the site through OCM.
  • The detail shows the draft the site wrote next to the requested sizing. Once deployed, it shows the storage cluster's id, pool and nodes.
  • Size the draft changes the sizing. Approve and deploy sets the one-way approval behind a typed confirmation.
  • The console ClusterRole, in the chart and in deploy/k8s/rbac.yaml, may manage the kind and read ManagedClusters.
  • The mock serves two fixtures, one Online and one Drafted.

Why

The DR UI run must be done entirely in the console once the hub and the sites exist. Step a), deploying the sites' storage, was the remaining non-UI step. Design: docs/design/control-center-managed-discovery.md in simplyblock-dr.

Tests

  • dist/ was rebuilt with node deploy/build/bundle.mjs using the Dockerfile's pinned babel 7.29.7. Babel 8 emits the automatic JSX runtime, which the console cannot load.
  • A jsdom smoke run of the built bundle against the mock passed, with no script errors:
    • the screen lists both fixtures
    • the drafted fixture prompts for approval
    • the deploy dialog opens
    • the detail renders the storage cluster and its nodes
  • Not yet clicked through against a live hub. That needs operator: StorageSiteDeployment — deploy a managed site's storage from the hub #620 deployed.

🤖 Generated with Claude Code

michixs and others added 3 commits October 2, 2026 23:45
…re edited in the console

From the moment the hub and the sites are deployed, everything but the
workload itself is meant to be done here. Three things were still notes
saying "with kubectl": the plan's per-site S3 stores and Velero
namespace, an application's tiers (boot order) and health probes, and a
site profile's bindings (logical networks, guest networks, DHCP server).

- ProtectionPlan: "New plan" takes the S3 stores (site, bucket, endpoint,
  region, secret) and the Velero namespace; "Edit S3 stores" on a plan
  patches them (spec.s3Profiles, spec.veleroNamespace are mutable).
- ProtectedApplication: "Protect an application" takes tiers (name,
  selector by labels or resource types, ready gates incl. exec) and
  probes (http/tcp, target, timeout, status); "Edit tiers & probes"
  patches them.
- SiteProfile: "Edit bindings" patches logicalNetworks, guestNetworks and
  dhcpServerRef; "Register a DHCP server" binds it to the site profile.
- Field type "rows": a generic table editor the three dialogs share.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…loyed from the hub

Disaster recovery -> Site storage lists the hub's StorageSiteDeployments
(storage.simplyblock.io/v1alpha2, operator PR #620): one per managed site,
with its phase, the nodes the discovery found and, once approved, the
storage cluster with its id, pool and nodes.

- "Deploy storage" picks a managed cluster (ManagedClusters, else the site
  profiles), the discovery scope and the sizing (name, vCPUs, hugepages,
  subsystems, stripe, drive format) and creates the request; the operator
  runs the discovery on the site through OCM.
- The detail shows the draft as the site wrote it next to the requested
  sizing; "Size the draft" changes the sizing, "Approve and deploy" flips
  the one-way approval (typed confirmation).
- The console's ClusterRole (chart and plain manifests) may manage the kind
  and read ManagedClusters; the mock serves two fixtures (Online, Drafted)
  and its personas carry the rule.

Checked with a jsdom smoke run of the built bundle against the mock: the
layer lists both fixtures, the drafted one prompts for approval, the deploy
dialog opens, the detail renders the cluster and its nodes, no script error.
dist/ rebuilt with the Dockerfile's pinned babel (7.29.7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ageClass

The New plan form gains the plan's storageProfile.provision (simplyblock-dr
feat/plan-storageclass-delivery): a class name, and optionally the pool and
filesystem. dr-hub then writes the class on every site with the selector's
labels and the site's storage cluster, so the workload deployment needs no
StorageClass step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@schmidt-scaled
schmidt-scaled merged commit bbdb7b4 into feature/control-center-ui Oct 3, 2026
9 checks passed
@schmidt-scaled
schmidt-scaled deleted the feat/control-center-dr-forms branch October 3, 2026 15:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants