Use a StatefulSet to manage Gerrit pods in the gerrit-master chart

So far a Deployment was used to manage Gerrit pods in the gerrit-master
chart. This did not give the pods a stable, discoverable address and
stable volume association, which would be required to use multiple
Gerrit masters, e.g. with the HA-plugin.

With this change a StatefulSet is used instead to manage the
Gerrit-pods. The StatefulSet provides each pod with a stable name and
stable RWO volumes.

So far only one pod replica is fully supported, since Gerrit is not
configured for a multi-master setup.

The RWM-volume used to store git repositories is not yet stable, since
StatefulSets are not able to manage volumes that are shared between pods
of the StatefulSet. Thus, this volume will not survive chart-deletion
and there is no guarantee that the exact volume is reattached during
a pod restart.

Change-Id: I814d1be16a0723b01d731525f8185f299d38b3ea
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml b/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
similarity index 86%
rename from helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
rename to helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
index 01243b7..71c22e1 100644
--- a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
+++ b/helm-charts/gerrit-master/templates/gerrit-master.stateful-set.yaml
@@ -1,13 +1,14 @@
 apiVersion: apps/v1
-kind: Deployment
+kind: StatefulSet
 metadata:
-  name: {{ .Release.Name }}-gerrit-master-deployment
+  name: {{ .Release.Name }}-gerrit-master-stateful-set
   labels:
     app: gerrit-master
     chart: {{ template "gerrit-master.chart" . }}
     heritage: {{ .Release.Service }}
     release: {{ .Release.Name }}
 spec:
+  serviceName: {{ .Release.Name }}-gerrit-master-service
   replicas: {{ .Values.gerritMaster.replicas | default 1 }}
   strategy:
     rollingUpdate:
@@ -136,13 +137,10 @@
             port: gerrit-port
 {{ toYaml .Values.gerritMaster.readinessProbe | indent 10 }}
       volumes:
+      {{ if not .Values.gerritMaster.persistence.enabled -}}
       - name: gerrit-site
-        {{ if .Values.gerritMaster.persistence.enabled -}}
-        persistentVolumeClaim:
-          claimName: {{ .Release.Name }}-gerrit-master-pvc
-        {{ else -}}
         emptyDir: {}
-        {{- end }}
+      {{- end }}
       - name: git-filesystem
         persistentVolumeClaim:
           claimName: {{ .Release.Name }}-git-filesystem-pvc
@@ -152,3 +150,20 @@
       - name: gerrit-master-secure-config
         secret:
           secretName: {{ .Release.Name }}-gerrit-master-secure-config
+  volumeClaimTemplates:
+  {{ if .Values.gerritMaster.persistence.enabled -}}
+  - metadata:
+      name: gerrit-site
+      labels:
+        app: gerrit-master
+        chart: {{ template "gerrit-master.chart" . }}
+        heritage: {{ .Release.Service }}
+        release: {{ .Release.Name }}
+    spec:
+      accessModes:
+      - ReadWriteOnce
+      resources:
+        requests:
+          storage: {{ .Values.gerritMaster.persistence.size }}
+      storageClassName: {{ .Values.storageClasses.default.name }}
+  {{- end }}
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml b/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml
deleted file mode 100644
index 2dc4f56..0000000
--- a/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-{{ if .Values.gerritMaster.persistence.enabled -}}
-kind: PersistentVolumeClaim
-apiVersion: v1
-metadata:
-  name: {{ .Release.Name }}-gerrit-master-pvc
-  labels:
-    app: gerrit-master
-    chart: {{ template "gerrit-master.chart" . }}
-    heritage: {{ .Release.Service }}
-    release: {{ .Release.Name }}
-spec:
-  accessModes:
-  - ReadWriteOnce
-  resources:
-    requests:
-      storage: {{ .Values.gerritMaster.persistence.size }}
-  storageClassName: {{ .Values.storageClasses.default.name }}
-{{- end }}