Application objects. Someone debugging a tenant wants Helm, right now, on one cluster. Celum supports all three, and this group explains which is which.
The three routes
The first two are declarative and survive a cluster rebuild — the repository is the record. Direct Helm is imperative and lives only in the cluster’s own Helm state, which is exactly why it is the right tool for a fix and the wrong tool for a standard.
Declared versus running
Two endpoints answer “what is on this cluster”, and they deliberately do not agree:GET /api/gitlab/clusters/<cluster>/appsreads the cluster’sapps/kustomization.yamlout of the GitOps repository and returns what the committed configuration declares, enriched from the app catalog with chart name, version, repo and target namespace.GET /api/clusters/<cluster>/helm-releasestalks Helm through the tenant’s own kubeconfig and returns what is running.
Where Flux fits
Flux is not the tenant-facing delivery mechanism — ArgoCD is. Flux runs on the supervisor, where it reconciles theHelmRelease objects behind platform components: the CNI, storage backends, monitoring, cert-manager, the Cluster API stack. Every chart panel in the onboarding wizard is ultimately a Flux HelmRelease, which is why installing Flux is a prerequisite step rather than an option.
Three endpoints cover it:
The status probe is deliberately blunt:
installed: false means the flux-system namespace is absent or unreachable — with a message field carrying the reason when it is the latter. installed: true, ready: false means the namespace exists but not all three controllers (source-controller, helm-controller, kustomize-controller) report ready. The install is idempotent: re-running it against a healthy supervisor completes in seconds with every resource unchanged.
Tenant clusters have no Flux. That is not an omission — tenants are reconciled by ArgoCD from the repository, or driven directly over Helm. Flux’s job stops at the supervisor boundary.
Repositories are the anchor
Everything on the first route needs a Git source. A repository registered under Settings → Repositories carries a URL, a branch, a token and a default flag; the default is the repository new clusters commit into. Celum writes to it through GitLab’s own API —repository/tree, repository/files, repository/commits — so adding an app to a cluster produces a real commit with a real SHA, reviewable and revertible like any other change.
See Repositories & manifests for the file layout and the commit mechanics.
Permissions
The four families in this group are independent, so you can grant catalog authoring without granting the ability to commit to a cluster, or vice versa:
Chart discovery reads (
GET /api/charts/versions, GET /api/charts/mirror-status) use platform:GetDefaults on krn:vks:platform:charts, and ArtifactHub search reuses app:List.
The GitOps pages
App catalog
Authoring app definitions — chart source, values template, render preview, chart validation, import and export.
ArgoCD
Instance discovery across supervisors, onboarding, Applications and ApplicationSets.
Repositories & manifests
Registering Git sources and how per-cluster app manifests become commits.
Charts & the mirror
Finding charts, the platform catalogue’s pinned versions, and mirror health.
Celum AI answers these questions from the same endpoints —
list_apps for the catalog, list_cluster_gitops_apps for what a cluster’s repository declares, and list_argocd for the ArgoCD inventory.