W2.5.F — three Catalyst Blueprint umbrella charts at platform/{openmeter,
livekit,matrix}/, each declaring its upstream chart under Chart.yaml
`dependencies:` so `helm dependency build` bundles the upstream payload
into the published OCI artifact (per docs/BLUEPRINT-AUTHORING.md §11.1
— hollow charts forbidden, CI-enforced by issue #181).
Per-chart kind summary
======================
bp-openmeter (closes #272)
default `helm template` kinds: ConfigMap, Deployment, Service, ServiceAccount
upstream chart: openmeter 1.0.0-beta.213 (oci://ghcr.io/openmeterio/helm-charts)
ClickHouse-less profile per docs/BOOTSTRAP-KIT-EXPANSION-PLAN.md §6.4.
The upstream chart's bundled clickhouse / kafka / postgresql / redis /
svix subcharts are all DISABLED — Catalyst supplies CNPG (postgres),
JetStream (event bus), and Valkey (redis-compat) at the platform tier.
Chart-level toggle `catalystBlueprint.backend.kind` (default `cnpg`,
alt `clickhouse`) records the active profile so observability/audit
pipelines can report it. The OpenMeter binary's
`aggregation.clickhouse.address` is left blank — per-Sovereign overlay
supplies it once a host cluster adds bp-clickhouse and the operator
re-rolls with `backend.kind: clickhouse`. Catalyst overlay templates
(NetworkPolicy / ServiceMonitor / HPA) all default OFF per
docs/BLUEPRINT-AUTHORING.md §11.2.
bp-livekit (closes #273)
default `helm template` kinds: ConfigMap, Deployment, Service, ServiceAccount
upstream chart: livekit-server 1.9.0 (https://helm.livekit.io)
WebRTC SFU. Powers the Huawei iFlytek voice demo. Catalyst defaults
pair LiveKit with bp-stunner (the upstream chart's bundled co-located
TURN server is OFF; per-Sovereign overlay points the LiveKit TURN
config at the stunner UDP-gateway Service). RTC UDP port range is
50000-60000 (matches the Hetzner firewall rule the per-Sovereign
overlay opens). Catalyst overlay templates (NetworkPolicy /
ServiceMonitor / HPA) all default OFF; the chart's NetworkPolicy
template documents that LiveKit's hostNetwork mode means pod-level
policies do NOT cover the SFU port range — the firewall rule is the
load-bearing control. blueprint.yaml `depends:` declares bp-stunner +
bp-cert-manager + bp-valkey.
bp-matrix (closes #274)
default `helm template` kinds: ConfigMap, Deployment, Ingress, Job,
PersistentVolumeClaim, Pod, Role, RoleBinding, Secret, Service,
ServiceAccount
upstream chart: matrix-synapse 3.12.25 (https://ananace.gitlab.io/charts)
Synapse (the Matrix server implementation, NOT the retired OpenOva
product noun). Federation OFF by default (Catalyst per-Sovereign
tenancy default — operator overlays flip it on per-Organization).
Postgres backend via bp-cnpg externalPostgresql; OIDC SSO via
bp-keycloak; bundled bitnami postgresql + redis subcharts both
disabled. Catalyst overlay NetworkPolicy gates the federation port
(8448) on `federation.enabled` — verified by Case 5 of the
observability-toggle test. Catalyst-overlay ServiceMonitor (upstream
chart has none) + HPA both default OFF.
Lint
====
All three charts pass `helm lint` clean (only the noisy "icon is
recommended" INFO message).
Observability tests
===================
Each chart's `tests/observability-toggle.sh` enforces the Catalyst
contract from docs/BLUEPRINT-AUTHORING.md §11.2:
Case 1: default render produces zero monitoring.coreos.com/v1
resources (no ServiceMonitor / PrometheusRule).
Case 2: opt-in (--set serviceMonitor.enabled=true --api-versions
monitoring.coreos.com/v1) renders a ServiceMonitor.
Case 3: explicit-off render is clean.
Case 4 (per chart):
- openmeter: ClickHouse-less profile asserts no
clickhouse.altinity.com / Kafka subchart resources leak into the
default render.
- livekit: asserts upstream livekit-server.serviceMonitor.create
defaults false.
- matrix: asserts default render carries an empty
federation_domain_whitelist (the per-Sovereign tenancy default).
Case 5 (matrix only): `--set federation.enabled=true networkPolicy
.enabled=true` opens port 8448 in the Catalyst NetworkPolicy.
All gates green for all three charts.
Closes #272 #273 #274
Co-authored-by: hatiyildiz <hatice.yildiz@openova.io>
224 lines
9.8 KiB
YAML
224 lines
9.8 KiB
YAML
# Catalyst Blueprint umbrella metadata — the upstream matrix-synapse
|
|
# chart is resolved as a Helm subchart via Chart.yaml `dependencies:`.
|
|
# This values.yaml carries:
|
|
# 1. The catalystBlueprint metadata block (provenance + version) so
|
|
# observability/audit pipelines can inspect the artifact.
|
|
# 2. The upstream subchart values overlay under the `matrix-synapse:`
|
|
# key (umbrella-chart convention — the dependency name from
|
|
# Chart.yaml is the values namespace).
|
|
# 3. Catalyst-overlay knobs (networkPolicy, serviceMonitor, hpa) — all
|
|
# DEFAULT OFF per docs/BLUEPRINT-AUTHORING.md §11.2.
|
|
#
|
|
# Per docs/INVIOLABLE-PRINCIPLES.md #4 (never hardcode), every operationally-
|
|
# meaningful value is configurable; cluster overlays in clusters/<sovereign>/
|
|
# may override any of these without rebuilding the Blueprint OCI artifact.
|
|
|
|
catalystBlueprint:
|
|
upstream:
|
|
chart: matrix-synapse
|
|
version: "3.12.25"
|
|
repo: "https://ananace.gitlab.io/charts"
|
|
|
|
# ─── Upstream chart values (subchart key: matrix-synapse) ────────────────
|
|
# `helm dependency build` resolves the upstream as a subchart; values here
|
|
# under the `matrix-synapse:` key flow into that subchart unchanged.
|
|
matrix-synapse:
|
|
|
|
image:
|
|
repository: ghcr.io/element-hq/synapse
|
|
pullPolicy: IfNotPresent
|
|
|
|
# ─── Server identity ───────────────────────────────────────────────────
|
|
# Per-Sovereign overlay supplies the actual hostname (typically
|
|
# chat.<sovereign-fqdn>). Default placeholder so `helm template` smoke
|
|
# renders without `--set` — operator overrides via per-Sovereign
|
|
# overlay. Per docs/INVIOLABLE-PRINCIPLES.md #4 nothing is hardcoded.
|
|
serverName: "matrix.example.local"
|
|
publicServerName: "matrix.example.local"
|
|
|
|
# Signing-key job — generates Synapse's federation signing key on
|
|
# first install. Catalyst's per-Sovereign tenancy default keeps
|
|
# federation OFF, but Synapse still requires a signing key for
|
|
# internal cryptographic operations. Operator overlays can supply an
|
|
# `existingSecret` to preserve the key across re-rolls.
|
|
signingkey:
|
|
job:
|
|
enabled: true
|
|
existingSecret: ""
|
|
|
|
# ─── Federation — OFF by default (per-Sovereign tenancy) ───────────────
|
|
# The upstream chart does not expose a top-level `federation.enabled`
|
|
# toggle; federation is gated by:
|
|
# - whether the chart-rendered ingress includes the federation port,
|
|
# - whether `extraConfig.federation_domain_whitelist` is set,
|
|
# - whether the homeserver.yaml `disable_federation: true` knob is
|
|
# supplied via `extraConfig`.
|
|
# Catalyst's wrapper supplies the OFF posture via `extraConfig` below;
|
|
# operator overlays delete the override (or supply a domain whitelist)
|
|
# to enable federation per-Organization.
|
|
extraConfig:
|
|
# Catalyst per-Sovereign tenancy default — federation OFF.
|
|
federation_domain_whitelist: []
|
|
# Local-account registration OFF — Catalyst standard is OIDC-only
|
|
# accounts (registration handled in Keycloak).
|
|
enable_registration: false
|
|
enable_registration_without_verification: false
|
|
|
|
# ─── Postgres backend — bp-cnpg (external) ─────────────────────────────
|
|
# Disable the bundled bitnami/postgresql; route Synapse at the bp-cnpg
|
|
# Cluster CR via `externalPostgresql`. Per-Sovereign overlay supplies
|
|
# the actual host + ExternalSecret holding the password.
|
|
postgresql:
|
|
enabled: false
|
|
|
|
externalPostgresql:
|
|
host: "matrix-postgres-rw.matrix.svc.cluster.local"
|
|
port: 5432
|
|
username: "synapse"
|
|
database: "synapse"
|
|
# Operator-supplied ExternalSecret holding the postgres password.
|
|
# Default is a placeholder name so the upstream chart's `required`
|
|
# password validation is satisfied at `helm template` smoke render
|
|
# time. The per-Sovereign overlay supplies the real ExternalSecret
|
|
# name (e.g. "matrix-postgres-credentials") at install time. Per
|
|
# docs/INVIOLABLE-PRINCIPLES.md #4 nothing is hardcoded — the
|
|
# placeholder is operator-replaceable.
|
|
existingSecret: "matrix-postgres-credentials"
|
|
existingSecretPasswordKey: "password"
|
|
sslmode: "require"
|
|
|
|
# ─── Redis (signaling-state for workers) ───────────────────────────────
|
|
# Bundled redis OFF — Catalyst routes at bp-valkey when workers are
|
|
# enabled. Default solo-Sovereign topology has no workers, so no
|
|
# Redis is required.
|
|
redis:
|
|
enabled: false
|
|
|
|
externalRedis:
|
|
enabled: false
|
|
host: "valkey-primary.valkey.svc.cluster.local"
|
|
port: 6379
|
|
existingSecret: "" # e.g. "matrix-redis-credentials"
|
|
|
|
# ─── Persistence ───────────────────────────────────────────────────────
|
|
# Synapse media repository — local PVC. Multi-tenant overlays MAY
|
|
# swap to bp-seaweedfs S3-backed media storage via the upstream
|
|
# chart's `media` config block.
|
|
persistence:
|
|
enabled: true
|
|
size: 10Gi
|
|
|
|
# ─── Ingress — Catalyst standard ───────────────────────────────────────
|
|
# The upstream chart renders an Ingress when `ingress.enabled: true`.
|
|
# Per-Sovereign overlay supplies csHosts (chat.<sovereign-fqdn>) +
|
|
# ClusterIssuer annotations. Default placeholder hosts so `helm
|
|
# template` smoke renders without `--set`.
|
|
ingress:
|
|
enabled: true
|
|
annotations: {}
|
|
csHosts: [] # operator-supplied (e.g. ["chat.<sovereign-fqdn>"])
|
|
hosts: []
|
|
wkHosts: []
|
|
tls: []
|
|
|
|
# ─── Synapse main pod ──────────────────────────────────────────────────
|
|
synapse:
|
|
replicaCount: 1
|
|
resources:
|
|
requests:
|
|
cpu: 200m
|
|
memory: 512Mi
|
|
limits:
|
|
memory: 2Gi
|
|
|
|
# ─── Workers (sharding) — DEFAULT OFF ──────────────────────────────────
|
|
# Solo-Sovereign baseline runs Synapse monolithic. Multi-tenant
|
|
# overlays enable workers (and consequently bp-valkey for inter-worker
|
|
# signaling). Per docs/BLUEPRINT-AUTHORING.md §11.2 — DEFAULT OFF.
|
|
workers:
|
|
generic_worker:
|
|
enabled: false
|
|
federation_sender:
|
|
enabled: false
|
|
media_repository:
|
|
enabled: false
|
|
|
|
# ─── ServiceMonitor — upstream chart does NOT publish one ──────────────
|
|
# The Catalyst-overlay ServiceMonitor lives in templates/servicemonitor
|
|
# .yaml (gated by .Values.serviceMonitor.enabled, default false). The
|
|
# upstream chart sets prometheus.io/scrape annotations on the metrics
|
|
# port; the Catalyst overlay turns those into a proper ServiceMonitor.
|
|
|
|
# ─── Catalyst-overlay knobs (consumed by templates/ in this chart) ───────
|
|
# All DEFAULT OFF per docs/BLUEPRINT-AUTHORING.md §11.2.
|
|
|
|
# Catalyst-side OIDC config — applied via the upstream chart's
|
|
# `extraConfig.oidc_providers` block at install time. Operator's
|
|
# per-Sovereign overlay supplies the actual issuer URL + ExternalSecret
|
|
# holding the client secret. Default OFF until operator wires Keycloak.
|
|
oidc:
|
|
enabled: true
|
|
idpId: "keycloak"
|
|
idpName: "Keycloak"
|
|
issuer: "" # operator-supplied (e.g. https://keycloak.<loc>.<sovereign-domain>/realms/<org>)
|
|
clientId: "matrix-synapse"
|
|
scopes: ["openid", "profile", "email"]
|
|
# ExternalSecret name carrying client_secret. Required key:
|
|
# OIDC_CLIENT_SECRET. Operator-supplied.
|
|
existingSecret: "" # e.g. "matrix-oidc-credentials"
|
|
|
|
# Federation toggle — Catalyst-overlay marker. The actual federation
|
|
# behaviour is gated by upstream chart values + the homeserver.yaml
|
|
# config block; this knob is the documentation-level switch operators
|
|
# flip when enabling per-Organization federation. DEFAULT FALSE per
|
|
# Catalyst per-Sovereign tenancy.
|
|
federation:
|
|
enabled: false
|
|
|
|
# Element-Web client — separate Application Blueprint (bp-element-web,
|
|
# slot 47). This block is a documentation-level pointer the per-
|
|
# Sovereign overlay reads when wiring chat-web.<sovereign-fqdn>.
|
|
elementWeb:
|
|
enabled: true
|
|
hostHint: "chat-web.<sovereign-fqdn>"
|
|
|
|
# NetworkPolicy — locks the synapse pods down to the minimum egress /
|
|
# ingress required (kube-dns, cnpg, keycloak, ingress). Default off —
|
|
# operator opts in via per-Sovereign overlay once consumer namespaces
|
|
# are known. Per docs/INVIOLABLE-PRINCIPLES.md #4 every selector /
|
|
# namespace label / port is operator-tunable.
|
|
networkPolicy:
|
|
enabled: false
|
|
cnpgNamespace: "cnpg"
|
|
cnpgPort: 5432
|
|
keycloakNamespace: "keycloak"
|
|
keycloakPort: 8443
|
|
ingressNamespace: "traefik"
|
|
# Federation port (only used when federation.enabled=true) — Synapse
|
|
# listens on 8448 for inbound federation traffic.
|
|
federationPort: 8448
|
|
# Synapse client API port.
|
|
clientPort: 8008
|
|
|
|
# ServiceMonitor — Catalyst-overlay variant. The upstream chart does
|
|
# NOT publish a ServiceMonitor template; this Catalyst-side template is
|
|
# the only path for Prometheus scraping. Per docs/BLUEPRINT-AUTHORING.md
|
|
# §11.2 — DEFAULT OFF.
|
|
serviceMonitor:
|
|
enabled: false
|
|
interval: "30s"
|
|
scrapeTimeout: "10s"
|
|
path: "/_synapse/metrics"
|
|
labels: {}
|
|
|
|
# HorizontalPodAutoscaler for the Synapse main Deployment. Default OFF.
|
|
# Solo-Sovereign baseline runs Synapse monolithic with replicaCount: 1.
|
|
# Multi-tenant overlays enable workers + HPA when room/event throughput
|
|
# warrants. Per docs/BLUEPRINT-AUTHORING.md §11.2 — DEFAULT OFF.
|
|
hpa:
|
|
enabled: false
|
|
minReplicas: 1
|
|
maxReplicas: 4
|
|
targetCPUUtilizationPercentage: 70
|
|
targetMemoryUtilizationPercentage: 80
|