Description
The Margo spec does not currently define how a Workload Fleet Management Client should determine:
- The Helm release name to use when installing a chart from a
helm component.
- The Kubernetes namespace to install the chart's manifests into (i.e., the value passed to
helm install --namespace).
These are two inputs that every WFM Client must supply when invoking Helm. With no spec-level fields or derivation rules, each implementation has to choose its own conventions.
Motivation
-
Every Helm-targeting WFM Client must choose some release name and target namespace when invoking Helm. Without spec-level guidance, each implementation invents its own convention. Implementations following different conventions cannot interoperate or be diagnosed consistently by operators.
-
Operators rely on Helm release names and target namespaces for:
- Debugging.
- Upgrade idempotency (the same
ApplicationDeployment reconciled twice must result in helm upgrade against the same release).
- Resource lookup (Helm encodes the release name into the names of generated resources).
For completeness: the same gap also exists for compose deployments. Compose has its own concept of a project name via docker compose -p <project>, probably worth its own issue.
Proposed Solution (optional)
Add two Helm-specific fields under properties for helm components:
properties.namespace (required, string) - the Kubernetes namespace into which the chart's resources are installed. Chosen by the WFM. The WFM Client MUST pass this value as helm install --namespace (and equivalent for upgrade / uninstall / status).
properties.releaseName (optional, string) - the Helm release name to use for this chart. If present, the WFM Client MUST use this exact value. If absent, the WFM Client MUST derive a release name deterministically from the ApplicationDeployment's id and the component's name (exact derivation rule to be agreed in this issue). Determinism is required so reconciliation against the same ApplicationDeployment always targets the same Helm release.
Example shape:
spec:
deploymentProfile:
type: helm
components:
- name: digitron-orchestrator
properties:
repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator
revision: 1.0.9
namespace: northstar-prod # NEW - required, chosen by the WFM
releaseName: digitron # NEW - optional override
Description
The Margo spec does not currently define how a Workload Fleet Management Client should determine:
helmcomponent.helm install --namespace).These are two inputs that every WFM Client must supply when invoking Helm. With no spec-level fields or derivation rules, each implementation has to choose its own conventions.
Motivation
Every Helm-targeting WFM Client must choose some release name and target namespace when invoking Helm. Without spec-level guidance, each implementation invents its own convention. Implementations following different conventions cannot interoperate or be diagnosed consistently by operators.
Operators rely on Helm release names and target namespaces for:
ApplicationDeploymentreconciled twice must result inhelm upgradeagainst the same release).For completeness: the same gap also exists for
composedeployments. Compose has its own concept of a project name viadocker compose -p <project>, probably worth its own issue.Proposed Solution (optional)
Add two Helm-specific fields under
propertiesforhelmcomponents:properties.namespace(required, string) - the Kubernetes namespace into which the chart's resources are installed. Chosen by the WFM. The WFM Client MUST pass this value ashelm install --namespace(and equivalent for upgrade / uninstall / status).properties.releaseName(optional, string) - the Helm release name to use for this chart. If present, the WFM Client MUST use this exact value. If absent, the WFM Client MUST derive a release name deterministically from theApplicationDeployment'sidand the component'sname(exact derivation rule to be agreed in this issue). Determinism is required so reconciliation against the sameApplicationDeploymentalways targets the same Helm release.Example shape: