Add option to provide external PVC for git repositories

If the helm chart was deleted, the volume containing the git
repositories was removed and could not be mounted anymore into a Gerrit
pod, if the chart was reinstalled.

This change provides an option to provide an external PVC for the volume
containing git repositories. Since this PVC is not managed by helm, it
will not be deleted with the chart and can be mounted again. This
feature is optional and disabled by default, meaning that the helm chart
will create its own PVC by default.

Change-Id: I3bb966095970caf96be65bfb8c05faf83500b795
diff --git a/helm-charts/gerrit-master/README.md b/helm-charts/gerrit-master/README.md
index 6cb5149..933b5c1 100644
--- a/helm-charts/gerrit-master/README.md
+++ b/helm-charts/gerrit-master/README.md
@@ -104,9 +104,17 @@
 
 ### Storage for Git repositories
 
-| Parameter                   | Description                                     | Default |
-|-----------------------------|-------------------------------------------------|---------|
-| `gitRepositoryStorage.size` | Size of the volume storing the Git repositories | `5Gi`   |
+| Parameter                               | Description                                     | Default              |
+|-----------------------------------------|-------------------------------------------------|----------------------|
+| `gitRepositoryStorage.externalPVC.use`  | Whether to use a PVC deployed outside the chart | `false`              |
+| `gitRepositoryStorage.externalPVC.name` | Name of the external PVC                        | `git-filesystem-pvc` |
+| `gitRepositoryStorage.size`             | Size of the volume storing the Git repositories | `5Gi`                |
+
+If the git repositories should be persisted even if the chart is deleted and in
+a way that the volume containing them can be mounted by the reinstalled chart,
+the PVC claiming the volume has to be created independently of the chart. To use
+the external PVC, set `gitRepositoryStorage.externalPVC.enabled` to `true` and
+give the name of the PVC under `gitRepositoryStorage.externalPVC.name`.
 
 ### Git garbage collection
 
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml b/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
index 71c22e1..3a2ab0b 100644
--- a/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
+++ b/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
@@ -143,7 +143,11 @@
       {{- end }}
       - name: git-filesystem
         persistentVolumeClaim:
+          {{- if .Values.gitRepositoryStorage.externalPVC.use }}
+          claimName: {{ .Values.gitRepositoryStorage.externalPVC.name }}
+          {{- else }}
           claimName: {{ .Release.Name }}-git-filesystem-pvc
+          {{- end }}
       - name: gerrit-config
         configMap:
           name: {{ .Release.Name }}-gerrit-master-configmap
diff --git a/helm-charts/gerrit-master/templates/git-gc.cronjob.yaml b/helm-charts/gerrit-master/templates/git-gc.cronjob.yaml
index c0b5426..a0bf240 100644
--- a/helm-charts/gerrit-master/templates/git-gc.cronjob.yaml
+++ b/helm-charts/gerrit-master/templates/git-gc.cronjob.yaml
@@ -35,7 +35,11 @@
           volumes:
           - name: git-filesystem
             persistentVolumeClaim:
+              {{- if .Values.gitRepositoryStorage.externalPVC.use }}
+              claimName: {{ .Values.gitRepositoryStorage.externalPVC.name }}
+              {{- else }}
               claimName: {{ .Release.Name }}-git-filesystem-pvc
+              {{- end }}
           - name: git-gc-logs
             {{ if .Values.gitGC.logging.persistence.enabled -}}
             persistentVolumeClaim:
diff --git a/helm-charts/gerrit-master/templates/git-repositories.storage.yaml b/helm-charts/gerrit-master/templates/git-repositories.storage.yaml
index bb786b2..cc6d9cb 100644
--- a/helm-charts/gerrit-master/templates/git-repositories.storage.yaml
+++ b/helm-charts/gerrit-master/templates/git-repositories.storage.yaml
@@ -1,7 +1,13 @@
+{{- if not .Values.gitRepositoryStorage.externalPVC.use }}
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
   name: {{ .Release.Name }}-git-filesystem-pvc
+  labels:
+    app: gerrit-master
+    chart: {{ template "gerrit-master.chart" . }}
+    heritage: {{ .Release.Service }}
+    release: {{ .Release.Name }}
 spec:
   accessModes:
   - ReadWriteMany
@@ -9,3 +15,4 @@
     requests:
       storage: {{ .Values.gitRepositoryStorage.size }}
   storageClassName: {{ .Values.storageClasses.shared.name }}
+{{- end }}
diff --git a/helm-charts/gerrit-master/values.yaml b/helm-charts/gerrit-master/values.yaml
index e055e91..2084334 100644
--- a/helm-charts/gerrit-master/values.yaml
+++ b/helm-charts/gerrit-master/values.yaml
@@ -43,6 +43,9 @@
 
 
 gitRepositoryStorage:
+  externalPVC:
+    use: false
+    name: git-filesystem-pvc
   size: 5Gi