From c037e609c5ef79d362fa3ae2124c59c7fccd04d0 Mon Sep 17 00:00:00 2001
From: Rob Kooper <kooper@illinois.edu>
Date: Sat, 24 Sep 2022 16:13:15 -0500
Subject: [PATCH] allow multiple nfs servers

---
 charts/apps/templates/storage/nfs.yaml | 42 +++++++++++++++++---------
 charts/apps/values.yaml                |  9 +++++-
 2 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/charts/apps/templates/storage/nfs.yaml b/charts/apps/templates/storage/nfs.yaml
index 405be9d..95d56b0 100644
--- a/charts/apps/templates/storage/nfs.yaml
+++ b/charts/apps/templates/storage/nfs.yaml
@@ -1,21 +1,23 @@
-{{- if and .Values.nfs .Values.nfs.enabled }}
+{{- if and .Values.nfs .Values.nfs.enabled .Values.nfs.servers }}
+{{- range $k, $v := .Values.nfs.servers }}
+---
 apiVersion: argoproj.io/v1alpha1
 kind: Application
 metadata:
-  name: {{ .Values.cluster.name }}-nfs
+  name: "{{ $.Values.cluster.name }}-nfs-{{ $k }}"
   labels:
-    cluster: {{ .Values.cluster.name | quote }}
+    cluster: {{ $.Values.cluster.name | quote }}
     app: nfs
   namespace: argocd
   annotations:
-    {{- toYaml .Values.notifications | nindent 4 }}
+    {{- toYaml $.Values.notifications | nindent 4 }}
 spec:
-  project: {{ .Values.cluster.name }}
+  project: {{ $.Values.cluster.name }}
   destination:
-    server: {{ .Values.cluster.url }}
-    namespace: nfs-taiga
+    server: {{ $.Values.cluster.url }}
+    namespace: "nfs-{{ $k }}"
   syncPolicy:
-    {{- if .Values.sync }}
+    {{- if $.Values.sync }}
     automated:
       prune: true
       selfHeal: true
@@ -26,23 +28,35 @@ spec:
   source:
     repoURL: https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
     chart: nfs-subdir-external-provisioner
-    targetRevision: {{ .Values.nfs.version | quote }}
+    targetRevision: {{ $.Values.nfs.version | quote }}
     helm:
       version: v3
-      releaseName: nfs-taiga
+      releaseName: "nfs-{{ $k }}"
       values: |
         image:
           repository: kooper/nfs-subdir-external-provisioner
           tag: v4.0.3
 
         storageClass:
-          name: nfs-taiga
+          name: nfs-{{ $k }}
           archiveOnDelete: false
           reclaimPolicy: Retain
-          defaultClass: true
-          pathPattern: {{ .Values.nfs.pathPattern | quote }}
+          {{- if $v.defaultClass }}
+          defaultClass: {{ $v.defaultClass }}
+          {{- end }}
+          {{- if and $v $v.pathPattern }}
+          pathPattern: {{ $v.pathPattern | quote }}
+          {{- else if $.Values.nfs.pathPattern }}
+          pathPattern: {{ $.Values.nfs.pathPattern | quote }}
+          {{- end }}
 
         nfs:
+          {{- if eq $k "taiga" }}
           server: taiga-nfs.ncsa.illinois.edu
-          path: {{ (printf "/taiga/ncsa/radiant/%s" .Values.openstack.project) | quote }}
+          path: {{ (printf "/taiga/ncsa/radiant/%s" $.Values.openstack.project) | quote }}
+          {{- else }}
+          server: {{ $v.server | quote }}
+          path: {{ $v.path | quote }}
+          {{- end }}
+{{- end }}
 {{- end }}
diff --git a/charts/apps/values.yaml b/charts/apps/values.yaml
index 1b951da..7797570 100644
--- a/charts/apps/values.yaml
+++ b/charts/apps/values.yaml
@@ -59,7 +59,14 @@ metallb:
 nfs:
   enabled: false
   version: "4.*"
-  pathPattern:
+  servers:
+    taiga: {}
+      #  pathPattern:
+      #  defaultClass: true
+    # custom:
+    #   server: server1
+    #   path: /export/
+    #   pathPattern:
 
 longhorn:
   enabled: false
-- 
GitLab