Allow to persist H2 databases of Gerrit master If using a H2-database for Gerrit, it was not persisted, leading to data-loss, if the pod was restarted. This change adds the option to persist the H2 databases stored in the <Gerrit site>/db-directory. Change-Id: I918898bed7e9e8b464fc5b2dc322362386ae9cea
diff --git a/helm-charts/gerrit-master/README.md b/helm-charts/gerrit-master/README.md index c6e2405..1ae4497 100644 --- a/helm-charts/gerrit-master/README.md +++ b/helm-charts/gerrit-master/README.md
@@ -146,27 +146,29 @@ is mandatory, if access to Gerrit is required! *** -| Parameter | Description | Default | -|--------------------------------------------|-------------------------------------------------------------------------------------------------|-----------------------------------| -| `gerritMaster.images.gerritInit` | Image name of the Gerrit init container image | `k8s-gerrit/gerrit-slave-init` | -| `gerritMaster.images.gerritMaster` | Image name of the Gerrit master container image | `k8s-gerrit/gerrit-master` | -| `gerritMaster.resources` | Configure the amount of resources the pod requests/is allowed | `requests.cpu: 1` | -| | | `requests.memory: 5Gi` | -| | | `limits.cpu: 1` | -| | | `limits.memory: 6Gi` | -| `gerritMaster.logging.persistence.enabled` | Whether to persist logs | `true` | -| `gerritMaster.logging.persistence.size` | Storage size for persisted logs | `1Gi` | -| `gerritMaster.service.type` | Which kind of Service to deploy | `NodePort` | -| `gerritMaster.service.http.port` | Port over which to expose HTTP | `80` | -| `gerritMaster.ingress.host` | REQUIRED: Host name to use for the Ingress (required for Ingress) | `nil` | -| `gerritMaster.ingress.alias` | Optional: ALias host name for the Ingress | `nil` | -| `gerritMaster.ingress.tls.enabled` | Whether to enable TLS termination in the Ingress | `false` | -| `gerritMaster.ingress.tls.cert` | Public SSL server certificate | `-----BEGIN CERTIFICATE-----` | -| `gerritMaster.ingress.tls.key` | Private SSL server certificate | `-----BEGIN RSA PRIVATE KEY-----` | -| `gerritMaster.keystore` | base64-encoded Java keystore (`cat keystore.jks | base64`) to be used by Gerrit, when using SSL | `nil` | -| `gerritMaster.config.gerrit` | The contents of the gerrit.config | [see here](#Gerrit-config-files) | -| `gerritMaster.config.secure` | The contents of the secure.config | [see here](#Gerrit-config-files) | -| `gerritMaster.config.replication` | The contents of the replication.config | [see here](#Gerrit-config-files) | +| Parameter | Description | Default | +|-----------------------------------------------|-------------------------------------------------------------------------------------------------|-----------------------------------| +| `gerritMaster.images.gerritInit` | Image name of the Gerrit init container image | `k8s-gerrit/gerrit-slave-init` | +| `gerritMaster.images.gerritMaster` | Image name of the Gerrit master container image | `k8s-gerrit/gerrit-master` | +| `gerritMaster.resources` | Configure the amount of resources the pod requests/is allowed | `requests.cpu: 1` | +| | | `requests.memory: 5Gi` | +| | | `limits.cpu: 1` | +| | | `limits.memory: 6Gi` | +| `gerritMaster.logging.persistence.enabled` | Whether to persist logs | `true` | +| `gerritMaster.logging.persistence.size` | Storage size for persisted logs | `1Gi` | +| `gerritMaster.h2Database.persistence.enabled` | Whether to persist h2 databases | `true` | +| `gerritMaster.h2Database.persistence.size` | Storage size for persisted h2 databases | `1Gi` | +| `gerritMaster.service.type` | Which kind of Service to deploy | `NodePort` | +| `gerritMaster.service.http.port` | Port over which to expose HTTP | `80` | +| `gerritMaster.ingress.host` | REQUIRED: Host name to use for the Ingress (required for Ingress) | `nil` | +| `gerritMaster.ingress.alias` | Optional: ALias host name for the Ingress | `nil` | +| `gerritMaster.ingress.tls.enabled` | Whether to enable TLS termination in the Ingress | `false` | +| `gerritMaster.ingress.tls.cert` | Public SSL server certificate | `-----BEGIN CERTIFICATE-----` | +| `gerritMaster.ingress.tls.key` | Private SSL server certificate | `-----BEGIN RSA PRIVATE KEY-----` | +| `gerritMaster.keystore` | base64-encoded Java keystore (`cat keystore.jks | base64`) to be used by Gerrit, when using SSL | `nil` | +| `gerritMaster.config.gerrit` | The contents of the gerrit.config | [see here](#Gerrit-config-files) | +| `gerritMaster.config.secure` | The contents of the secure.config | [see here](#Gerrit-config-files) | +| `gerritMaster.config.replication` | The contents of the replication.config | [see here](#Gerrit-config-files) | ### Gerrit config files
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml b/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml index 356e779..d4b5e90 100644 --- a/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml +++ b/helm-charts/gerrit-master/templates/gerrit-master.deployment.yaml
@@ -78,6 +78,8 @@ ports: - containerPort: 8080 volumeMounts: + - name: gerrit-db + mountPath: "/var/gerrit/db" - name: git-filesystem mountPath: "/var/gerrit/git" - name: gerrit-logs @@ -99,6 +101,13 @@ resources: {{ toYaml .Values.gerritMaster.resources | indent 10 }} volumes: + - name: gerrit-db + {{ if .Values.gerritMaster.h2Database.persistence.enabled -}} + persistentVolumeClaim: + claimName: {{ .Release.Name }}-gerrit-master-db-pvc + {{ else -}} + emptyDir: {} + {{- end }} - name: git-filesystem persistentVolumeClaim: claimName: {{ .Release.Name }}-git-filesystem-pvc
diff --git a/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml b/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml index 70f70f5..3d4db07 100644 --- a/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml +++ b/helm-charts/gerrit-master/templates/gerrit-master.storage.yaml
@@ -15,4 +15,23 @@ requests: storage: {{ .Values.gerritMaster.logging.persistence.size }} storageClassName: {{ .Values.storageClasses.default.name }} +{{- end }} +--- +{{ if .Values.gerritMaster.h2Database.persistence.enabled -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ .Release.Name }}-gerrit-master-db-pvc + labels: + app: gerrit-master + chart: {{ template "gerrit-master.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.gerritMaster.h2Database.persistence.size }} + storageClassName: {{ .Values.storageClasses.default.name }} {{- end }} \ No newline at end of file
diff --git a/helm-charts/gerrit-master/values.yaml b/helm-charts/gerrit-master/values.yaml index a6cfa9a..30a9cc3 100644 --- a/helm-charts/gerrit-master/values.yaml +++ b/helm-charts/gerrit-master/values.yaml
@@ -89,6 +89,11 @@ http: port: 80 + h2Database: + persistence: + enabled: true + size: 1Gi + ingress: host: # Provide a second host name used as an alias. Leave empty, if no alias is
diff --git a/helm-charts/gerrit-slave/README.md b/helm-charts/gerrit-slave/README.md index 8041dc5..44e4cef 100644 --- a/helm-charts/gerrit-slave/README.md +++ b/helm-charts/gerrit-slave/README.md
@@ -195,27 +195,29 @@ is mandatory, if access to the Gerrit slave is required! *** -| Parameter | Description | Default | -|-------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-----------------------------------| -| `gerritMaster.images.gerritInit` | Image name of the Gerrit init container image | `k8s-gerrit/gerrit-slave-init` | -| `gerritMaster.images.gerritSlave` | Image name of the Gerrit slave container image | `k8s-gerrit/gerrit-slave` | -| `gerritSlave.initializeTestSite.enabled` | Enable the initialization of a site. USE ONLY for testing, if you do not plan to replicate repositories or the database. | `true` | -| `gerritSlave.resources` | Configure the amount of resources the pod requests/is allowed | `requests.cpu: 1` | -| | | `requests.memory: 5Gi` | -| | | `limits.cpu: 1` | -| | | `limits.memory: 6Gi` | -| `gerritSlave.logging.persistence.enabled` | Whether to persist logs | `true` | -| `gerritSlave.logging.persistence.size` | Storage size for persisted logs | `1Gi` | -| `gerritSlave.service.type` | Which kind of Service to deploy | `NodePort` | -| `gerritSlave.service.http.port` | Port over which to expose HTTP | `80` | -| `gerritSlave.ingress.host` | REQUIRED: Host name to use for the Ingress (required for Ingress) | `nil` | -| `gerritSlave.ingress.alias` | Optional: Alias host name for the Ingress | `nil` | -| `gerritSlave.ingress.tls.enabled` | Whether to enable TLS termination in the Ingress | `false` | -| `gerritSlave.ingress.tls.cert` | Public SSL server certificate | `-----BEGIN CERTIFICATE-----` | -| `gerritSlave.ingress.tls.key` | Private SSL server certificate | `-----BEGIN RSA PRIVATE KEY-----` | -| `gerritSlave.keystore` | base64-encoded Java keystore (`cat keystore.jks | base64`) to be used by Gerrit, when using SSL | `nil` | -| `gerritSlave.config.gerrit` | The contents of the gerrit.config | [see here](#Gerrit-config-files) | -| `gerritSlave.config.secure` | The contents of the secure.config | [see here](#Gerrit-config-files) | +| Parameter | Description | Default | +|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-----------------------------------| +| `gerritMaster.images.gerritInit` | Image name of the Gerrit init container image | `k8s-gerrit/gerrit-slave-init` | +| `gerritMaster.images.gerritSlave` | Image name of the Gerrit slave container image | `k8s-gerrit/gerrit-slave` | +| `gerritSlave.initializeTestSite.enabled` | Enable the initialization of a site. USE ONLY for testing, if you do not plan to replicate repositories or the database. | `true` | +| `gerritSlave.resources` | Configure the amount of resources the pod requests/is allowed | `requests.cpu: 1` | +| | | `requests.memory: 5Gi` | +| | | `limits.cpu: 1` | +| | | `limits.memory: 6Gi` | +| `gerritSlave.logging.persistence.enabled` | Whether to persist logs | `true` | +| `gerritSlave.logging.persistence.size` | Storage size for persisted logs | `1Gi` | +| `gerritSlave.h2Database.persistence.enabled` | Whether to persist h2 databases | `true` | +| `gerritSlave.h2Database.persistence.size` | Storage size for persisted h2 databases | `1Gi` | +| `gerritSlave.service.type` | Which kind of Service to deploy | `NodePort` | +| `gerritSlave.service.http.port` | Port over which to expose HTTP | `80` | +| `gerritSlave.ingress.host` | REQUIRED: Host name to use for the Ingress (required for Ingress) | `nil` | +| `gerritSlave.ingress.alias` | Optional: Alias host name for the Ingress | `nil` | +| `gerritSlave.ingress.tls.enabled` | Whether to enable TLS termination in the Ingress | `false` | +| `gerritSlave.ingress.tls.cert` | Public SSL server certificate | `-----BEGIN CERTIFICATE-----` | +| `gerritSlave.ingress.tls.key` | Private SSL server certificate | `-----BEGIN RSA PRIVATE KEY-----` | +| `gerritSlave.keystore` | base64-encoded Java keystore (`cat keystore.jks | base64`) to be used by Gerrit, when using SSL | `nil` | +| `gerritSlave.config.gerrit` | The contents of the gerrit.config | [see here](#Gerrit-config-files) | +| `gerritSlave.config.secure` | The contents of the secure.config | [see here](#Gerrit-config-files) | ### Gerrit config files
diff --git a/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml b/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml index 145996a..238c8bb 100644 --- a/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml +++ b/helm-charts/gerrit-slave/templates/gerrit-slave.deployment.yaml
@@ -46,6 +46,8 @@ name: {{ .Release.Name }}-gerrit-slave-configmap key: test-mode volumeMounts: + - name: gerrit-db + mountPath: "/var/gerrit/db" - name: git-filesystem mountPath: "/var/gerrit/git" - name: gerrit-logs @@ -115,6 +117,8 @@ ports: - containerPort: 8080 volumeMounts: + - name: gerrit-db + mountPath: "/var/gerrit/db" - name: git-filesystem mountPath: "/var/gerrit/git" - name: gerrit-logs @@ -133,6 +137,13 @@ resources: {{ toYaml .Values.gerritSlave.resources | indent 10 }} volumes: + - name: gerrit-db + {{ if .Values.gerritSlave.h2Database.persistence.enabled -}} + persistentVolumeClaim: + claimName: {{ .Release.Name }}-gerrit-slave-db-pvc + {{ else -}} + emptyDir: {} + {{- end }} - name: git-filesystem persistentVolumeClaim: claimName: {{ .Release.Name }}-git-filesystem-pvc
diff --git a/helm-charts/gerrit-slave/templates/gerrit-slave.storage.yaml b/helm-charts/gerrit-slave/templates/gerrit-slave.storage.yaml index 2f1d2ce..83cbba0 100644 --- a/helm-charts/gerrit-slave/templates/gerrit-slave.storage.yaml +++ b/helm-charts/gerrit-slave/templates/gerrit-slave.storage.yaml
@@ -15,4 +15,23 @@ requests: storage: {{ .Values.gerritSlave.logging.persistence.size }} storageClassName: {{ .Values.storageClasses.default.name }} +{{- end }} +--- +{{ if .Values.gerritSlave.h2Database.persistence.enabled -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ .Release.Name }}-gerrit-slave-db-pvc + labels: + app: gerrit-slave + chart: {{ template "gerrit-slave.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.gerritSlave.h2Database.persistence.size }} + storageClassName: {{ .Values.storageClasses.default.name }} {{- end }} \ No newline at end of file
diff --git a/helm-charts/gerrit-slave/values.yaml b/helm-charts/gerrit-slave/values.yaml index 43c804e..06a77f3 100644 --- a/helm-charts/gerrit-slave/values.yaml +++ b/helm-charts/gerrit-slave/values.yaml
@@ -174,6 +174,11 @@ enabled: true size: 1Gi + h2Database: + persistence: + enabled: true + size: 1Gi + service: type: NodePort http: