tower 0.61.13 / tower-ui 0.61.13 — substrate readiness gate

Servers connected via the URL-token flow take ~5 min for the
cluster-platform-v3 chart to install. Without a gate, an over-eager
operator could click Deploy on a fresh server and land an instance
on a half-built cluster — Argo sync errors on missing CRDs, Pod
ImagePullBackOff on the in-cluster registry that doesn't exist yet.

Two layers, both shipped here:

Backend (defensive, non-bypassable):
  - argoCluster gains substrateStatus enum (ready | preparing |
    degraded | unknown) and substrateETA (RFC3339, when preparing)
    derived from the per-cluster <name>-platform Argo App's
    health+sync + the App's createdAt + 5min budget.
  - handleCreateInstance + handleApplyMigration refuse with 409 +
    "server still preparing — please wait" when the gate fails.
    Same posture as the in-flight-delete check we shipped in 0.61.11.

Frontend (visible UX, prevents the user reaching the gate):
  - DeployInstanceDrawer + MigrateDrawer server pickers disable
    rows where substrateStatus !== ready/unknown. Disabled rows
    show "Preparing · ~Xm" with a live countdown.
  - Default-server selection prefers a deployable row.
  - PlatformAppBadge shows the same countdown on the server card +
    detail vitals panel — operator can watch it tick down without
    leaving the Servers list.
  - Drawers auto-poll listServers() while a preparing server is
    visible — rows enable themselves the moment the chart lands.
This commit is contained in:
Claude
2026-04-30 14:15:29 +03:00
parent db2dfaae87
commit aefcac742a

View File

@@ -9,7 +9,7 @@ backend:
# so every cluster that runs Tower needs the same imagePullSecret # so every cluster that runs Tower needs the same imagePullSecret
# provisioned out-of-band (until cluster-platform-v3 owns it). # provisioned out-of-band (until cluster-platform-v3 owns it).
repository: registry.odoosky.cloud/odoosky/docker-mirror/tower repository: registry.odoosky.cloud/odoosky/docker-mirror/tower
tag: "0.61.12" tag: "0.61.13"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
imagePullSecrets: imagePullSecrets:
- name: docker-mirror-pull - name: docker-mirror-pull
@@ -29,7 +29,7 @@ frontend:
enabled: true enabled: true
image: image:
repository: registry.odoosky.cloud/odoosky/docker-mirror/tower-ui repository: registry.odoosky.cloud/odoosky/docker-mirror/tower-ui
tag: "0.61.10" tag: "0.61.13"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
imagePullSecrets: imagePullSecrets:
- name: docker-mirror-pull - name: docker-mirror-pull