From 65bdb7bd7b5617a7f377df23d77fd47fdda91b43 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Tue, 8 Oct 2024 10:56:51 +0200 Subject: [PATCH] Introduce optional components (#391) This PR introduces an extra option to cozystack configmap. It allows to enable components that are optional to specific bundle name, example usage: ```yaml bundle-enable: telepresence,external-dns,external-secrets-operator ``` ## Summary by CodeRabbit - **New Features** - Added optional attributes to several release entries, allowing for more flexible deployment configurations. - Enhanced Helm release generation logic to consider both enabled and disabled states for components. - Improved namespace management by incorporating checks for optional components based on enablement and disablement. - **Bug Fixes** - Updated dependencies for `external-dns` to include `cilium` and `kubeovn`. - **Documentation** - Clarified the configurability of deployment components with the introduction of optional attributes. --------- Signed-off-by: Andrei Kvapil --- .../core/platform/bundles/distro-full.yaml | 3 +++ .../core/platform/bundles/distro-hosted.yaml | 3 +++ packages/core/platform/bundles/paas-full.yaml | 3 +++ .../core/platform/bundles/paas-hosted.yaml | 3 +++ .../core/platform/templates/helmreleases.yaml | 3 +++ .../core/platform/templates/namespaces.yaml | 20 ++++++++++++------- 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/core/platform/bundles/distro-full.yaml b/packages/core/platform/bundles/distro-full.yaml index 6cd88fbb..88772cbe 100644 --- a/packages/core/platform/bundles/distro-full.yaml +++ b/packages/core/platform/bundles/distro-full.yaml @@ -140,16 +140,19 @@ releases: releaseName: traffic-manager chart: cozy-telepresence namespace: cozy-telepresence + optional: true dependsOn: [] - name: external-dns releaseName: external-dns chart: cozy-external-dns namespace: cozy-external-dns + optional: true dependsOn: [cilium] - name: external-secrets-operator releaseName: external-secrets-operator chart: cozy-external-secrets-operator namespace: cozy-external-secrets-operator + optional: true dependsOn: [cilium] diff --git a/packages/core/platform/bundles/distro-hosted.yaml b/packages/core/platform/bundles/distro-hosted.yaml index 09f6f1f5..2dd5535a 100644 --- a/packages/core/platform/bundles/distro-hosted.yaml +++ b/packages/core/platform/bundles/distro-hosted.yaml @@ -91,16 +91,19 @@ releases: releaseName: traffic-manager chart: cozy-telepresence namespace: cozy-telepresence + optional: true dependsOn: [] - name: external-dns releaseName: external-dns chart: cozy-external-dns namespace: cozy-external-dns + optional: true dependsOn: [] - name: external-secrets-operator releaseName: external-secrets-operator chart: cozy-external-secrets-operator namespace: cozy-external-secrets-operator + optional: true dependsOn: [] diff --git a/packages/core/platform/bundles/paas-full.yaml b/packages/core/platform/bundles/paas-full.yaml index 78481828..0ecf1527 100644 --- a/packages/core/platform/bundles/paas-full.yaml +++ b/packages/core/platform/bundles/paas-full.yaml @@ -175,6 +175,7 @@ releases: releaseName: traffic-manager chart: cozy-telepresence namespace: cozy-telepresence + optional: true dependsOn: [cilium,kubeovn] - name: dashboard @@ -221,10 +222,12 @@ releases: releaseName: external-dns chart: cozy-external-dns namespace: cozy-external-dns + optional: true dependsOn: [cilium,kubeovn] - name: external-secrets-operator releaseName: external-secrets-operator chart: cozy-external-secrets-operator namespace: cozy-external-secrets-operator + optional: true dependsOn: [cilium,kubeovn] diff --git a/packages/core/platform/bundles/paas-hosted.yaml b/packages/core/platform/bundles/paas-hosted.yaml index 63500982..21af835f 100644 --- a/packages/core/platform/bundles/paas-hosted.yaml +++ b/packages/core/platform/bundles/paas-hosted.yaml @@ -97,18 +97,21 @@ releases: releaseName: traffic-manager chart: cozy-telepresence namespace: cozy-telepresence + optional: true dependsOn: [] - name: external-dns releaseName: external-dns chart: cozy-external-dns namespace: cozy-external-dns + optional: true dependsOn: [cilium,kubeovn] - name: external-secrets-operator releaseName: external-secrets-operator chart: cozy-external-secrets-operator namespace: cozy-external-secrets-operator + optional: true dependsOn: [] - name: dashboard diff --git a/packages/core/platform/templates/helmreleases.yaml b/packages/core/platform/templates/helmreleases.yaml index 06ef0463..7b438932 100644 --- a/packages/core/platform/templates/helmreleases.yaml +++ b/packages/core/platform/templates/helmreleases.yaml @@ -3,6 +3,7 @@ {{- $bundle := tpl (.Files.Get (printf "bundles/%s.yaml" $bundleName)) . | fromYaml }} {{- $dependencyNamespaces := dict }} {{- $disabledComponents := splitList "," ((index $cozyConfig.data "bundle-disable") | default "") }} +{{- $enabledComponents := splitList "," ((index $cozyConfig.data "bundle-enable") | default "") }} {{/* collect dependency namespaces from releases */}} {{- range $x := $bundle.releases }} @@ -11,6 +12,7 @@ {{- range $x := $bundle.releases }} {{- if not (has $x.name $disabledComponents) }} +{{- if and ($x.optional) (has $x.name $enabledComponents) }} --- apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease @@ -65,3 +67,4 @@ spec: {{- end }} {{- end }} {{- end }} +{{- end }} diff --git a/packages/core/platform/templates/namespaces.yaml b/packages/core/platform/templates/namespaces.yaml index 669d852c..c7b174bd 100644 --- a/packages/core/platform/templates/namespaces.yaml +++ b/packages/core/platform/templates/namespaces.yaml @@ -1,17 +1,23 @@ {{- $cozyConfig := lookup "v1" "ConfigMap" "cozy-system" "cozystack" }} {{- $bundleName := index $cozyConfig.data "bundle-name" }} {{- $bundle := tpl (.Files.Get (printf "bundles/%s.yaml" $bundleName)) . | fromYaml }} +{{- $disabledComponents := splitList "," ((index $cozyConfig.data "bundle-disable") | default "") }} +{{- $enabledComponents := splitList "," ((index $cozyConfig.data "bundle-enable") | default "") }} {{- $namespaces := dict }} {{/* collect namespaces from releases */}} {{- range $x := $bundle.releases }} -{{- if not (hasKey $namespaces $x.namespace) }} -{{- $_ := set $namespaces $x.namespace false }} -{{- end }} -{{/* if at least one release requires a privileged namespace, then it should be privileged */}} -{{- if or $x.privileged (index $namespaces $x.namespace) }} -{{- $_ := set $namespaces $x.namespace true }} -{{- end }} + {{- if not (hasKey $namespaces $x.namespace) }} + {{- if not (has $x.name $disabledComponents) }} + {{- if and ($x.optional) (has $x.name $enabledComponents) }} + {{- $_ := set $namespaces $x.namespace false }} + {{- end }} + {{- end }} + {{- end }} + {{/* if at least one release requires a privileged namespace, then it should be privileged */}} + {{- if or $x.privileged (index $namespaces $x.namespace) }} + {{- $_ := set $namespaces $x.namespace true }} + {{- end }} {{- end }} {{/* Add extra namespaces */}}