From f75bbbbf47c850063a1da2e30805f10b3d4e6e35 Mon Sep 17 00:00:00 2001 From: e-minguez Date: Wed, 8 Jul 2026 13:24:28 +0200 Subject: [PATCH] fix(helm): honor release namespace instead of hardcoded ns-aiq The aiq.namespace helper hardcoded ns-, ignoring the Helm release namespace. This broke 'helm install -n ' and GitOps operators (ArgoCD, Fleet) that do not pre-create a ns- namespace. Use .Release.Namespace for all resources, bump chart versions, repackage the umbrella dependency, and add a pytest regression test (issue #290) asserting every namespaced resource honors the release namespace. Signed-off-by: e-minguez --- deploy/helm/deployment-k8s/Chart.yaml | 4 +-- .../helm/deployment-k8s/charts/aiq-0.0.4.tgz | Bin 10548 -> 0 bytes .../helm/deployment-k8s/charts/aiq-0.0.5.tgz | Bin 0 -> 10677 bytes deploy/helm/helm-charts-k8s/aiq/Chart.yaml | 2 +- .../aiq/templates/_helpers.tpl | 10 +++---- .../aiq/templates/namespace.yaml | 2 +- deploy/helm/helm-charts-k8s/aiq/values.yaml | 3 ++ tests/deploy/test_helm_deployment_k8s.py | 26 ++++++++++++++++-- 8 files changed, 36 insertions(+), 11 deletions(-) delete mode 100644 deploy/helm/deployment-k8s/charts/aiq-0.0.4.tgz create mode 100644 deploy/helm/deployment-k8s/charts/aiq-0.0.5.tgz diff --git a/deploy/helm/deployment-k8s/Chart.yaml b/deploy/helm/deployment-k8s/Chart.yaml index e8c1f6276..381c20f91 100644 --- a/deploy/helm/deployment-k8s/Chart.yaml +++ b/deploy/helm/deployment-k8s/Chart.yaml @@ -2,10 +2,10 @@ apiVersion: v2 name: aiq2-web description: AI-Q - WEB Profile () type: application -version: 2.0.0 +version: 2.1.1 appVersion: '1.0' dependencies: - name: aiq - version: 0.0.4 + version: 0.0.5 repository: file://../helm-charts-k8s/aiq alias: aiq diff --git a/deploy/helm/deployment-k8s/charts/aiq-0.0.4.tgz b/deploy/helm/deployment-k8s/charts/aiq-0.0.4.tgz deleted file mode 100644 index 1cc37098b34c568e36bb81e7abdb1d77b079b8d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10548 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 C+v?Q- diff --git a/deploy/helm/deployment-k8s/charts/aiq-0.0.5.tgz b/deploy/helm/deployment-k8s/charts/aiq-0.0.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..22d514e0f077c9b290f2c3dc5af53f864aa3c527 GIT binary patch literal 10677 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 byT|YGd;A{1JAeN_00960JfE}C0Qdj^6*A_+ literal 0 HcmV?d00001 diff --git a/deploy/helm/helm-charts-k8s/aiq/Chart.yaml b/deploy/helm/helm-charts-k8s/aiq/Chart.yaml index 0801e4850..5c0f19f7d 100644 --- a/deploy/helm/helm-charts-k8s/aiq/Chart.yaml +++ b/deploy/helm/helm-charts-k8s/aiq/Chart.yaml @@ -3,4 +3,4 @@ appVersion: 2.0.0 description: AI-Q Helm Chart name: aiq type: application -version: "0.0.4" +version: "0.0.5" diff --git a/deploy/helm/helm-charts-k8s/aiq/templates/_helpers.tpl b/deploy/helm/helm-charts-k8s/aiq/templates/_helpers.tpl index 2a48d8615..677a6df62 100644 --- a/deploy/helm/helm-charts-k8s/aiq/templates/_helpers.tpl +++ b/deploy/helm/helm-charts-k8s/aiq/templates/_helpers.tpl @@ -50,13 +50,13 @@ nspect_id: {{ . }} {{/* Generate namespace name + +Always uses the release namespace (`helm install -n ` / `.Release.Namespace`) +so the chart honors the install namespace and works with GitOps operators such as +ArgoCD and Fleet that do not pre-create a `ns-` namespace. */}} {{- define "aiq.namespace" -}} -{{- if eq (.Values.project.deploymentTarget | default "") "kind" -}} -{{- .Values.appname -}} -{{- else -}} -{{- printf "ns-%s" .Values.appname -}} -{{- end -}} +{{- .Release.Namespace -}} {{- end }} {{/* diff --git a/deploy/helm/helm-charts-k8s/aiq/templates/namespace.yaml b/deploy/helm/helm-charts-k8s/aiq/templates/namespace.yaml index 67638ff93..1e97417e5 100644 --- a/deploy/helm/helm-charts-k8s/aiq/templates/namespace.yaml +++ b/deploy/helm/helm-charts-k8s/aiq/templates/namespace.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: Namespace metadata: - name: {{ .Release.Namespace }} + name: {{ include "aiq.namespace" . }} labels: {{- if and .Values.project.dl (ne (.Values.project.orientation | default "internal") "external") }} sysdev.nvidia.com/dl: {{ .Values.project.dl | quote }} diff --git a/deploy/helm/helm-charts-k8s/aiq/values.yaml b/deploy/helm/helm-charts-k8s/aiq/values.yaml index 91ad807fd..163ba4dc3 100644 --- a/deploy/helm/helm-charts-k8s/aiq/values.yaml +++ b/deploy/helm/helm-charts-k8s/aiq/values.yaml @@ -20,6 +20,9 @@ project: # OPTIONAL: Namespace Configuration # ========================================== namespace: + # All chart resources use the release namespace (helm install -n / + # .Release.Namespace), which is required for GitOps operators such as + # ArgoCD and Fleet. create: false # Set to true to create namespace (useful for ArgoCD) labels: {} # Additional custom labels annotations: diff --git a/tests/deploy/test_helm_deployment_k8s.py b/tests/deploy/test_helm_deployment_k8s.py index bb67f164c..9bc4ae447 100644 --- a/tests/deploy/test_helm_deployment_k8s.py +++ b/tests/deploy/test_helm_deployment_k8s.py @@ -23,9 +23,9 @@ CHART_PATH = REPO_ROOT / "deploy" / "helm" / "deployment-k8s" -def render_chart(*extra_args: str) -> list[dict[str, Any]]: +def render_chart(*extra_args: str, namespace: str = "ns-aiq") -> list[dict[str, Any]]: result = subprocess.run( - ["helm", "template", "aiq", str(CHART_PATH), "-n", "ns-aiq", *extra_args], + ["helm", "template", "aiq", str(CHART_PATH), "-n", namespace, *extra_args], check=True, capture_output=True, text=True, @@ -68,6 +68,28 @@ def test_default_chart_renders_referenced_configmaps_and_uses_user_supplied_secr assert "aiq-credentials" not in rendered_secrets +def test_all_namespaced_resources_honor_release_namespace(): + """Regression test for #290: resources must use the Helm release namespace + (``helm install -n ``) instead of a hardcoded ``ns-aiq``, so ``helm + install -n`` and GitOps operators (ArgoCD, Fleet) target the right namespace. + """ + release_namespace = "my-namespace" + manifests = render_chart(namespace=release_namespace) + + namespaced = [manifest for manifest in manifests if manifest.get("metadata", {}).get("namespace") is not None] + + # The chart must render at least one namespaced resource, otherwise this + # test would pass vacuously if templating silently stopped emitting them. + assert namespaced, "expected the chart to render namespaced resources" + + offenders = { + (manifest.get("kind"), manifest["metadata"].get("name")): manifest["metadata"]["namespace"] + for manifest in namespaced + if manifest["metadata"]["namespace"] != release_namespace + } + assert not offenders, f"resources not pinned to release namespace {release_namespace!r}: {offenders}" + + def test_chart_renders_app_host_aliases(tmp_path: Path): values_file = tmp_path / "host-aliases.yaml" values_file.write_text(