Skip to content

Only store Flux resource path without entire CRD reference in the Environments model

In the current Environments model we store a flux_resource_path which looks something like this helm.toolkit.fluxcd.io/v2beta1/namespaces/flux-system/helmreleases/gitlab-agent. This has the format of: <api>/<version>/namespace/<namespace>/<resource-type>/<resource-name>.

This is limiting because we don't want to force the user to update the Environment when they update their Flux in the cluster which may come with a new API (version). In the UI this is also coupled with the kubernetes_namespace field. However, this does not always make sense because the user may want to show a specific namespace which is simply the "target namespace" of a Flux resource located in a different namespace.

For example:

  • HelmRelease at flux-system/gitlab-agent
  • HelmRelease flux-system/gitlab-agent has a target namespace of gitlab-agent

Proposal

The CRD (API) discovery should happen in the Dashboard specific code in the frontend which determines the API (version) and the Environments model on the backend (DB) only stores a flux resource path, for example HelmRelease/<name>.<namespace>. That specific format is used in couple of places by Flux itself, like in the flux CLI tool.

This change would require a database migration. To transform the flux_resource_path from <api>/<version>/namespace/<namespace>/<resource-type>/<resource-name> to <HelmRelease if <api> is "helm.toolkit.fluxcd.io" else Kustomization>/<resource-name>.<namespace>.

We also don't strictly need the API discovery just yet to decouple the two fields, but just hardcode the API and version on the frontend.

Edited by Timo Furrer