openova/products/catalyst
e3mrah 3b88dfa75f
hotfix(catalyst-api): drop k8scache discovery probe — unblocks contabo startup (#975) (#981)
Bug: contabo mothership stuck during catalyst-api boot, "iterating dead
clusters". Root cause is a regression introduced by the k8scache PR:
AddCluster gained a synchronous `core.Discovery().ServerResourcesForGroupVersion(gv)`
call to gate Optional kinds (metrics.k8s.io/PodMetrics) — that call
issues a REST GET against the cluster's apiserver with NO context
timeout. On a kubeconfig pointing at a dead machine (a decommissioned
otech whose <id>.yaml was never removed) the call hangs until the
underlying TCP connect times out (often minutes). With many dead
kubeconfigs in /var/lib/catalyst/kubeconfigs the boot path serially
blocks for tens of minutes.

Fix:
- Drop the discovery probe block entirely. AddCluster is again
  synchronous-network-free; informers spawn unconditionally and
  reflectors handle missing GVRs (404 from the apiserver) with their
  own backoff retry loop in goroutines that don't block startup.
- Drop PodMetrics from DefaultKinds. With the probe gone, an
  always-registered PodMetrics informer would log retry warnings
  forever on every Sovereign without metrics-server. Until a non-
  blocking activation path lands the dashboard's color_by=utilization
  returns null when no PodMetrics indexer exists; health/age/size
  paths still ride the Pod + PVC indexers untouched.
- Drop Kind.Optional field, the two probe-specific tests, and the
  fakediscovery import. Update TestDefaultKinds_GraphAndDashboardSurface
  to assert PodMetrics is *absent* from the defaults.
- Update dashboard_test.go's local Optional kind registration accordingly.

Co-authored-by: hatiyildiz <hatiyildiz@users.noreply.github.com>
2026-05-05 21:35:12 +04:00
..
bootstrap hotfix(catalyst-api): drop k8scache discovery probe — unblocks contabo startup (#975) (#981) 2026-05-05 21:35:12 +04:00
chart deploy: update catalyst images to 953ef82 2026-05-05 17:27:02 +00:00
README.md feat(consolidation): Phase 1 — move Catalyst-Zero apps + CI + manifests into public monorepo 2026-04-28 12:08:09 +02:00

OpenOva Catalyst (composite Blueprint)

The umbrella Blueprint bp-catalyst-platform — composes the Catalyst control plane.

Status: Deployed. Updated: 2026-04-28.

This product directory contains:

  • chart/ — the Helm chart that deploys Catalyst-Zero on a Kubernetes cluster (and every franchised Sovereign).
  • chart/templates/{ui,api}-deployment.yaml + service + ingress — the catalyst-ui (React SPA wizard scaffold) and catalyst-api (Go bootstrap API) workloads.
  • chart/templates/sme-services/ — 11 manifests for the legacy SME backend services + the consolidated console, admin, marketplace UI workloads (sourced from core/{console,admin,marketplace}/).
  • chart/templates/marketplace-api/ — manifests for the Go marketplace-api backend (sourced from core/marketplace-api/).
  • bootstrap/{ui,api}/ — the source code for catalyst-ui and catalyst-api (deployed via the catalyst-build CI workflow).

For the unified architecture and the wizard's target shape, see docs/PROVISIONING-PLAN.md, docs/ARCHITECTURE.md, and docs/SOVEREIGN-PROVISIONING.md.


How Catalyst-Zero is deployed today

A Flux Kustomization on the Catalyst-Zero cluster (Contabo k3s) reconciles products/catalyst/chart/templates/ from this public repo. CI workflows (.github/workflows/{catalyst,console,admin,marketplace,marketplace-api}-build.yaml) build and push images on every push to main, then the deploy step pins the image SHA into the corresponding manifest in this directory and commits back. Flux picks up the commit and rolls the deployment.

Image registry: ghcr.io/openova-io/openova/{catalyst-ui,catalyst-api,console,admin,marketplace,marketplace-api}:<sha>.

Migration status (per docs/PROVISIONING-PLAN.md)

Component Source location Image Status
catalyst-ui products/catalyst/bootstrap/ui/ ghcr.io/openova-io/openova/catalyst-ui public repo
catalyst-api products/catalyst/bootstrap/api/ ghcr.io/openova-io/openova/catalyst-api public repo
console core/console/ ghcr.io/openova-io/openova/console public repo (Phase 1)
admin core/admin/ ghcr.io/openova-io/openova/admin public repo (Phase 1)
marketplace core/marketplace/ ghcr.io/openova-io/openova/marketplace public repo (Phase 1)
marketplace-api core/marketplace-api/ ghcr.io/openova-io/openova/marketplace-api public repo (Phase 1)
sme-{auth,billing,catalog,domain,gateway,notification,provisioning,tenant} (still in openova-private/services/) ghcr.io/openova-io/openova-private/sme-* follow-up phase — source not yet moved