[stable/redmine] Add JSON Schema & standardize ingress configuration (#19300)

* [stable/redmine] Add JSON Schema & standardize ingress configuration

Signed-off-by: juan131 <juan@bitnami.com>

* '-databaseType' as a string

Signed-off-by: juan131 <juan@bitnami.com>

* Support both ways to setup ingress deprecating previous one

Signed-off-by: juan131 <juan@bitnami.com>

* Bump minor version

Signed-off-by: juan131 <juan@bitnami.com>

* Fix issue with databaseType

Signed-off-by: juan131 <juan@bitnami.com>

* Rebase from master and bump version

Signed-off-by: juan131 <juan@bitnami.com>

* Bump major version

Signed-off-by: juan131 <juan@bitnami.com>
This commit is contained in:
Juan Ariza Toledano
2019-12-11 04:06:05 -08:00
committed by Kubernetes Prow Robot
parent a605c9c912
commit 827f27f838
16 changed files with 429 additions and 213 deletions
+12 -12
View File
@@ -1,22 +1,22 @@
apiVersion: v1
name: redmine
version: 13.8.0
version: 14.0.0
appVersion: 4.0.5
description: A flexible project management web application.
keywords:
- redmine
- project management
- www
- http
- web
- application
- ruby
- rails
- redmine
- project management
- www
- http
- web
- application
- ruby
- rails
home: http://www.redmine.org/
icon: https://bitnami.com/assets/stacks/redmine/img/redmine-stack-220x234.png
sources:
- https://github.com/bitnami/bitnami-docker-redmine
- https://github.com/bitnami/bitnami-docker-redmine
maintainers:
- name: Bitnami
email: containers@bitnami.com
- name: Bitnami
email: containers@bitnami.com
engine: gotpl
+91 -84
View File
@@ -47,98 +47,98 @@ The command removes all the Kubernetes components associated with the chart and
## Using PostgreSQL instead of MariaDB
This chart includes the option to use a PostgreSQL database for Redmine instead of MariaDB. To use this, MariaDB must be explicitly disabled and PostgreSQL enabled:
This chart includes the option to use a PostgreSQL database for Redmine instead of MariaDB. To use this, set the `databaseType` parameter to `postgresql`:
```
helm install --name my-release stable/redmine --set databaseType.mariadb=false,databaseType.postgresql=true
helm install --name my-release stable/redmine --set databaseType=postgresql
```
## Parameters
The following table lists the configurable parameters of the Redmine chart and their default values.
| Parameter | Description | Default |
| ----------------------------------- | ------------------------------------------ | ------------------------------------------------------- |
| `global.imageRegistry` | Global Docker image registr y | `nil` |
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
| `global.storageClass` | Global storage class for dynamic provisioning | `nil` |
| `image.registry` | Redmine image registry | `docker.io` |
| `image.repository` | Redmine image name | `bitnami/redmine` |
| `image.tag` | Redmine image tag | `{TAG_NAME}` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
| `nameOverride` | String to partially override redmine.fullname template with a string (will prepend the release name) | `nil` |
| `fullnameOverride` | String to fully override redmine.fullname template with a string | `nil` |
| `redmineUsername` | User of the application | `user` |
| `redminePassword` | Application password | _random 10 character long alphanumeric string_ |
| `redmineEmail` | Admin email | `user@example.com` |
| `redmineLanguage` | Redmine default data language | `en` |
| `extraVars` | Environment variables, passed to redmine | `nil` |
| `smtpHost` | SMTP host | `nil` |
| `smtpPort` | SMTP port | `nil` |
| `smtpUser` | SMTP user | `nil` |
| `smtpPassword` | SMTP password | `nil` |
| `smtpTls` | Use TLS encryption with SMTP | `nil` |
| `existingSecret` | Use existing secret for password details (`redminePassword`, `smtpPassword` and `externalDatabase.password` will be ignored and picked up from this secret). It must contain the keys `redmine-password` and `smtp-password` when `postgresql.enabled=true` or `mariadb.enabled=true`. In case `postgresql.enabled=false` and `mariadb.enabled=false` it must contain the key `external-db-password`.
| `nil` |
| `databaseType.postgresql` | Select PostgreSQL as database | `false` |
| `databaseType.mariadb` | Select MariaDB as database | `true` |
| `mariadb.enabled` | Whether to deploy a MariaDB server to satisfy the applications database requirements | `true` |
| `mariadb.rootUser.password` | MariaDB admin password | `nil` |
| `postgresql.enabled` | Whether to deploy a PostgreSQL server to satisfy the applications database requirements | `false` |
| `postgresql.postgresqlDatabase` | PostgreSQL database | `bitnami_redmine` |
| `postgresql.postgresqlUsername` | PostgreSQL user | `bn_redmine` |
| `postgresql.postgresqlPassword` | PostgreSQL password | `nil` |
| `externalDatabase.host` | Host of the external database | `localhost` |
| `externalDatabase.name` | Name of the external database | `localhost` |
| `externalDatabase.user` | External db user | `user` |
| `externalDatabase.password` | Password for the db user | `""` |
| `externalDatabase.port` | Database port number | `3306` |
| `service.type` | Kubernetes Service type | `LoadBalancer` |
| `service.port` | Service HTTP port | `80` |
| `service.nodePorts.http` | Kubernetes http node port | `""` |
| `service.externalTrafficPolicy` | Enable client source IP preservation | `Cluster` |
| `service.loadBalancerIP` | LoadBalancer service IP address | `""` |
| `service.loadBalancerSourceRanges` | An array of load balancer sources | `0.0.0.0/0` |
| `serviceAccount.create` | Specifies whether a ServiceAccount should be created | `false` |
| `serviceAccount.name` | The name of the ServiceAccount to create | Generated using the redmine.fullname template |
| `ingress.enabled` | Enable or disable the ingress | `false` |
| `ingress.hosts[0].name` | Hostname to your Redmine installation | `redmine.local` |
| `ingress.hosts[0].path` | Path within the url structure | `/` |
| `ingress.hosts[0].tls` | Utilize TLS backend in ingress | `false` |
| `ingress.hosts[0].certManager` | Add annotations for cert-manager | `false` |
| `ingress.hosts[0].tlsSecret` | TLS Secret (certificates) | `redmine.local-tls-secret` |
| `ingress.hosts[0].annotations` | Annotations for this host's ingress record | `[]` |
| `ingress.secrets[0].name` | TLS Secret Name | `nil` |
| `ingress.secrets[0].certificate` | TLS Secret Certificate | `nil` |
| `ingress.secrets[0].key` | TLS Secret Key | `nil` |
| `nodeSelector` | Node labels for pod assignment | `{}` |
| `tolerations` | List of node taints to tolerate | `{}` |
| `affinity` | Map of node/pod affinities | `{}` |
| `podAnnotations` | Pod annotations | `{}` |
| `persistence.enabled` | Enable persistence using PVC | `true` |
| `persistence.existingClaim` | The name of an existing PVC | `nil` |
| `persistence.storageClass` | PVC Storage Class | `nil` (uses alpha storage class annotation) |
| `persistence.accessMode` | PVC Access Mode | `ReadWriteOnce` |
| `persistence.size` | PVC Storage Request | `8Gi` |
| `podDisruptionBudget.enabled` | Pod Disruption Budget toggle | `false` |
| `podDisruptionBudget.minAvailable` | Minimum available pods | `nil` |
| `podDisruptionBudget.maxUnavailable`| Maximum unavailable pods | `nil` |
| `replicas` | The number of pod replicas | `1` |
| `resources` | Resources allocation (Requests and Limits) | `{}` |
| `securityContext` | SecurityContext | `{}` |
| `livenessProbe.enabled` | would you like a livenessProbe to be enabled | `true` |
| `livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | 300 |
| `livenessProbe.periodSeconds` | How often to perform the probe | 10 |
| `livenessProbe.timeoutSeconds` | When the probe times out | 5 |
| `livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
| `livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | 3 |
| `readinessProbe.enabled` | would you like a readinessProbe to be enabled | `true` |
| `readinessProbe.initialDelaySeconds`| Delay before readiness probe is initiated | 5 |
| `readinessProbe.periodSeconds` | How often to perform the probe | 10 |
| `readinessProbe.timeoutSeconds` | When the probe times out | 1 |
| `readinessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed | 1 |
| `readinessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | 3 |
| Parameter | Description | Default |
| ------------------------------------ | -------------------------------------------------------------------------- | ------------------------------------------------------- |
| `global.imageRegistry` | Global Docker image registr y | `nil` |
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
| `global.storageClass` | Global storage class for dynamic provisioning | `nil` |
| `image.registry` | Redmine image registry | `docker.io` |
| `image.repository` | Redmine image name | `bitnami/redmine` |
| `image.tag` | Redmine image tag | `{TAG_NAME}` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `image.pullSecrets` | Specify docker-registry secret names as an array | `[]` (does not add image pull secrets to deployed pods) |
| `nameOverride` | String to partially override redmine.fullname template | `nil` |
| `fullnameOverride` | String to fully override redmine.fullname template | `nil` |
| `redmineUsername` | User of the application | `user` |
| `redminePassword` | Application password | _random 10 character long alphanumeric string_ |
| `redmineEmail` | Admin email | `user@example.com` |
| `redmineLanguage` | Redmine default data language | `en` |
| `extraVars` | Environment variables, passed to redmine | `nil` |
| `smtpHost` | SMTP host | `nil` |
| `smtpPort` | SMTP port | `nil` |
| `smtpUser` | SMTP user | `nil` |
| `smtpPassword` | SMTP password | `nil` |
| `smtpTls` | Use TLS encryption with SMTP | `nil` |
| `existingSecret` | Use existing secret for password details (`redminePassword`, `smtpPassword` and `externalDatabase.password` will be ignored and picked up from this secret). It must contain the keys `redmine-password` and `smtp-password` when `postgresql.enabled=true` or `mariadb.enabled=true`. In case `postgresql.enabled=false` and `mariadb.enabled=false` it must contain the key `external-db-password` | `nil` |
| `databaseType` | Select database type | `mariadb` (allowed values: "mariadb" and "postgresql") |
| `mariadb.enabled` | Whether to deploy a MariaDB server to satisfy the database requirements | `true` |
| `mariadb.rootUser.password` | MariaDB admin password | `nil` |
| `postgresql.enabled` | Whether to deploy a PostgreSQL server to satisfy the database requirements | `false` |
| `postgresql.postgresqlDatabase` | PostgreSQL database | `bitnami_redmine` |
| `postgresql.postgresqlUsername` | PostgreSQL user | `bn_redmine` |
| `postgresql.postgresqlPassword` | PostgreSQL password | `nil` |
| `externalDatabase.host` | Host of the external database | `localhost` |
| `externalDatabase.name` | Name of the external database | `localhost` |
| `externalDatabase.user` | External db user | `user` |
| `externalDatabase.password` | Password for the db user | `""` |
| `externalDatabase.port` | Database port number | `3306` |
| `service.type` | Kubernetes Service type | `LoadBalancer` |
| `service.port` | Service HTTP port | `80` |
| `service.nodePorts.http` | Kubernetes http node port | `""` |
| `service.externalTrafficPolicy` | Enable client source IP preservation | `Cluster` |
| `service.loadBalancerIP` | LoadBalancer service IP address | `""` |
| `service.loadBalancerSourceRanges` | An array of load balancer sources | `0.0.0.0/0` |
| `serviceAccount.create` | Specifies whether a ServiceAccount should be created | `false` |
| `serviceAccount.name` | The name of the ServiceAccount to create | Generated using the `redmine.fullname` macro |
| `ingress.enabled` | Enable ingress controller resource | `false` |
| `ingress.certManager` | Add annotations for cert-manager | `false` |
| `ingress.hostname` | Default host for the ingress resource | `redmine.local` |
| `ingress.tls` | Enable TLS configuration | `false` |
| `ingress.annotations` | Ingress annotations | `{}` |
| `ingress.extraHosts[0].name` | Extra hosts for your Redmine installation | `nil` |
| `ingress.extraHosts[0].path` | Path within the url structure | `nil` |
| `ingress.extraTls[0].hosts[0]` | Extra TLS hosts | `nil` |
| `ingress.extraTls[0].secretName` | TLS Secret (certificates) for extra TLS hosts | `nil` |
| `ingress.secrets[0].name` | TLS Secret Name | `nil` |
| `ingress.secrets[0].certificate` | TLS Secret Certificate | `nil` |
| `ingress.secrets[0].key` | TLS Secret Key | `nil` |
| `nodeSelector` | Node labels for pod assignment | `{}` |
| `tolerations` | List of node taints to tolerate | `{}` |
| `affinity` | Map of node/pod affinities | `{}` |
| `podAnnotations` | Pod annotations | `{}` |
| `persistence.enabled` | Enable persistence using PVC | `true` |
| `persistence.existingClaim` | The name of an existing PVC | `nil` |
| `persistence.storageClass` | PVC Storage Class | `nil` (uses alpha storage class annotation) |
| `persistence.accessMode` | PVC Access Mode | `ReadWriteOnce` |
| `persistence.size` | PVC Storage Request | `8Gi` |
| `podDisruptionBudget.enabled` | Pod Disruption Budget toggle | `false` |
| `podDisruptionBudget.minAvailable` | Minimum available pods | `nil` |
| `podDisruptionBudget.maxUnavailable` | Maximum unavailable pods | `nil` |
| `replicas` | The number of pod replicas | `1` |
| `resources` | Resources allocation (Requests and Limits) | `{}` |
| `securityContext` | SecurityContext | `{}` |
| `livenessProbe.enabled` | would you like a livenessProbe to be enabled | `true` |
| `livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | 300 |
| `livenessProbe.periodSeconds` | How often to perform the probe | 10 |
| `livenessProbe.timeoutSeconds` | When the probe times out | 5 |
| `livenessProbe.successThreshold` | Minimum consecutive successes for the probe | 1 |
| `livenessProbe.failureThreshold` | Minimum consecutive failures for the probe | 3 |
| `readinessProbe.enabled` | would you like a readinessProbe to be enabled | `true` |
| `readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated | 5 |
| `readinessProbe.periodSeconds` | How often to perform the probe | 10 |
| `readinessProbe.timeoutSeconds` | When the probe times out | 1 |
| `readinessProbe.successThreshold` | Minimum consecutive successes for the probe | 1 |
| `readinessProbe.failureThreshold` | Minimum consecutive failures for the probe | 3 |
The above parameters map to the env variables defined in [bitnami/redmine](http://github.com/bitnami/bitnami-docker-redmine). For more information please refer to the [bitnami/redmine](http://github.com/bitnami/bitnami-docker-redmine) image documentation.
@@ -195,6 +195,13 @@ $ helm install --name test --set persistence.existingClaim=PVC_REDMINE,mariadb.p
## Upgrading
### 14.0.0
- Backwards compatibility is not guaranteed unless you modify the labels used on the chart's deployments.
- The `databaseType` parameters is no longer an object but a string. Allowed values are "mariadb" and "postgresql".
- Ingress configuration was standardized to simplify the way to configure the main host.
- Ports names were prefixed with the protocol to comply with Istio (see https://istio.io/docs/ops/deployment/requirements/).
### 13.0.0
Helm performs a lookup for the object based on its group (apps), version (v1), and kind (Deployment). Also known as its GroupVersionKind, or GVK. Changing the GVK is considered a compatibility breaker from Kubernetes' point of view, so you cannot "upgrade" those objects to the new GVK in-place. Earlier versions of Helm 3 did not perform the lookup correctly which has since been fixed to match the spec.
+4 -4
View File
@@ -1,9 +1,9 @@
dependencies:
- name: mariadb
repository: https://kubernetes-charts.storage.googleapis.com/
version: 7.0.1
version: 7.3.0
- name: postgresql
repository: https://kubernetes-charts.storage.googleapis.com/
version: 7.1.0
digest: sha256:c5ed9aba5b8df7c81b029047541d0b75e26b4d7eaf34ea03e09f4d76ac4cc6d4
generated: 2019-11-13T14:28:05.572733842Z
version: 8.0.0
digest: sha256:35e88b466a4a45bf4e8c4a69a2738788dbc73168a37218e524c7fe3a18650e9e
generated: "2019-12-11T12:51:11.722378+01:00"
+1 -1
View File
@@ -4,6 +4,6 @@ dependencies:
repository: https://kubernetes-charts.storage.googleapis.com/
condition: mariadb.enabled
- name: postgresql
version: 7.x.x
version: 8.x.x
repository: https://kubernetes-charts.storage.googleapis.com/
condition: postgresql.enabled
+13 -12
View File
@@ -1,4 +1,4 @@
{{- if and (not .Values.databaseType.mariadb) (not .Values.databaseType.postgresql) }}
{{- if and (not (eq .Values.databaseType "mariadb")) (not (eq .Values.databaseType "postgresql")) }}
################################################################################
### ERROR: You did not indicate MariaDB nor PostgreSQL as the database ###
### server to use. ###
@@ -6,16 +6,23 @@
You have 4 alternatives:
a) Use MariaDB as database creating a new MariaDB server: set `databaseType.mariadb=true` and `mariadb.enabled=true`
b) Use MariaDB as database using a external MariaDB server: set `databaseType.mariadb=true` and `mariadb.enabled=false`
c) Use PostgreSQL as database creating a new PostgreSQL server: set `databaseType.postgresql=true` and `postgresql.enabled=true`
d) Use PostgreSQL as database using a external PostgreSQL server: `databaseType.postgresql=true` and `postgresql.enabled=false`
a) Use MariaDB as database creating a new MariaDB server: set `databaseType=mariadb` and `mariadb.enabled=true`
b) Use MariaDB as database using a external MariaDB server: set `databaseType=mariadb` and `mariadb.enabled=false`
c) Use PostgreSQL as database creating a new PostgreSQL server: set `databaseType=postgresql` and `postgresql.enabled=true`
d) Use PostgreSQL as database using a external PostgreSQL server: `databaseType=postgresql` and `postgresql.enabled=false`
{{- else }}
1. Get the Redmine URL:
{{- if contains "NodePort" .Values.service.type }}
{{- if and .Values.ingress.enabled .Values.ingress.hostname }}
export CLUSTER_IP=$(minikube ip) # On Minikube. Use: `kubectl cluster-info` on others K8s clusters
echo "Redmine URL: http{{ if .Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.hostname }}/"
echo "$CLUSTER_IP {{ .Values.ingress.hostname }}" | sudo tee -a /etc/hosts
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "redmine.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
@@ -32,12 +39,6 @@ You have 4 alternatives:
{{- $port:=.Values.service.port | toString }}
echo "Redmine URL: http://$SERVICE_IP{{- if ne $port "80" }}:{{ .Values.service.port }}{{ end }}/"
{{- else if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
echo "Redmine URL: http://{{ .name }}/"
{{- end }}
{{- else if contains "ClusterIP" .Values.service.type }}
echo "Redmine URL: http://127.0.0.1:{{ .Values.service.port }}/"
+18
View File
@@ -46,6 +46,24 @@ Create chart name and version as used by the chart label.
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "redmine.labels" -}}
app.kubernetes.io/name: {{ template "redmine.name" . }}
helm.sh/chart: {{ template "redmine.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{/*
Labels to use on deploy.spec.selector.matchLabels and svc.spec.selector
*/}}
{{- define "redmine.matchLabels" -}}
app.kubernetes.io/name: {{ template "redmine.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
Return the proper Redmine image name
*/}}
+9 -20
View File
@@ -1,25 +1,15 @@
{{- if or .Values.databaseType.mariadb .Values.databaseType.postgresql }}
apiVersion: {{ template "redmine.deployment.apiVersion" . }}
kind: Deployment
metadata:
name: {{ template "redmine.fullname" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
labels: {{- include "redmine.labels" . | nindent 4 }}
spec:
selector:
matchLabels:
app: {{ template "redmine.fullname" . }}
release: "{{ .Release.Name }}"
matchLabels: {{- include "redmine.matchLabels" . | nindent 6 }}
replicas: {{ .Values.replicas }}
template:
metadata:
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
labels: {{- include "redmine.labels" . | nindent 8 }}
{{- if .Values.podAnnotations }}
annotations:
{{ toYaml .Values.podAnnotations | indent 8 }}
@@ -48,7 +38,7 @@ spec:
{{- if .Values.extraVars }}
{{ toYaml .Values.extraVars | indent 8 }}
{{- end }}
{{- if .Values.databaseType.mariadb }}
{{- if eq .Values.databaseType "mariadb" }}
- name: REDMINE_DB_MYSQL
{{- if .Values.mariadb.enabled }}
value: {{ template "redmine.mariadb.fullname" . }}
@@ -64,7 +54,7 @@ spec:
{{- else }}
value: {{ .Values.externalDatabase.host | quote }}
{{- end }}
{{- else if .Values.databaseType.postgresql }}
{{- else if eq .Values.databaseType "postgresql" }}
- name: REDMINE_DB_POSTGRES
{{- if .Values.postgresql.enabled }}
value: {{ template "redmine.postgresql.fullname" . }}
@@ -81,7 +71,7 @@ spec:
value: {{ .Values.externalDatabase.host | quote }}
{{- end }}
{{- end }}
{{- if or (and .Values.databaseType.mariadb (not .Values.mariadb.enabled)) (and .Values.databaseType.postgresql (not .Values.postgresql.enabled)) }}
{{- if or (and (eq .Values.databaseType "mariadb") (not .Values.mariadb.enabled)) (and (eq .Values.databaseType "postgresql") (not .Values.postgresql.enabled)) }}
- name: REDMINE_DB_NAME
value: {{ .Values.externalDatabase.name | quote }}
- name: REDMINE_DB_USERNAME
@@ -129,13 +119,13 @@ spec:
value: {{ .Values.smtpTls | quote }}
{{- end }}
ports:
- name: http
- name: http-redmine
containerPort: 3000
{{- if .Values.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /
port: http
port: http-redmine
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
@@ -146,7 +136,7 @@ spec:
readinessProbe:
httpGet:
path: /
port: http
port: http-redmine
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
@@ -169,4 +159,3 @@ spec:
securityContext:
{{ toYaml . | indent 8 }}
{{- end }}
{{- end }}
+31 -22
View File
@@ -1,16 +1,11 @@
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "{{- printf "%s-%s" .name $.Release.Name | trunc 63 | trimSuffix "-" | replace "." "-" -}}"
labels:
app: {{ template "redmine.fullname" $ }}
chart: {{ template "redmine.chart" $ }}
release: "{{ $.Release.Name }}"
heritage: "{{ $.Release.Service }}"
name: {{ template "redmine.fullname" . }}
labels: {{- include "redmine.labels" . | nindent 4 }}
annotations:
{{- if .certManager }}
{{- if .Values.ingress.certManager }}
kubernetes.io/tls-acme: "true"
{{- end }}
{{- range $key, $value := .annotations }}
@@ -18,19 +13,33 @@ metadata:
{{- end }}
spec:
rules:
- host: {{ .name }}
http:
paths:
- path: {{ default "/" .path }}
backend:
serviceName: {{ template "redmine.fullname" $ }}
servicePort: 80
{{- if .tls }}
{{- if .Values.ingress.hostname }}
- host: {{ .Values.ingress.hostname }}
http:
paths:
- path: /
backend:
serviceName: "{{ template "redmine.fullname" . }}"
servicePort: http
{{- end }}
{{- range .Values.ingress.extraHosts }}
- host: {{ .name }}
http:
paths:
- path: {{ default "/" .path }}
backend:
serviceName: "{{ template "redmine.fullname" $ }}"
servicePort: http
{{- end }}
{{- if or .Values.ingress.tls .Values.ingress.extraTls .Values.ingress.hosts }}
tls:
- secretName: {{ .tlsSecret }}
hosts:
- {{ .name }}
{{- end }}
---
{{- end }}
{{- if .Values.ingress.tls }}
- hosts:
- {{ .Values.ingress.hostname }}
secretName: {{ printf "%s-tls" .Values.ingress.hostname }}
{{- end }}
{{- if .Values.ingress.extraTls }}
{{- toYaml .Values.ingress.extraTls | nindent 4 }}
{{- end }}
{{- end }}
{{- end }}
+2 -9
View File
@@ -3,11 +3,7 @@ apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: {{ template "redmine.fullname" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
labels: {{- include "redmine.labels" . | nindent 4 }}
spec:
{{- if .Values.podDisruptionBudget.minAvailable }}
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
@@ -16,8 +12,5 @@ spec:
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
{{- end }}
selector:
matchLabels:
app: {{ template "redmine.name" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
matchLabels: {{- include "redmine.matchLabels" . | nindent 6 }}
{{- end }}
+1 -5
View File
@@ -3,11 +3,7 @@ kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ template "redmine.fullname" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
labels: {{- include "redmine.labels" . | nindent 4 }}
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
+2 -6
View File
@@ -3,11 +3,7 @@ apiVersion: v1
kind: Secret
metadata:
name: {{ template "redmine.fullname" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
labels: {{- include "redmine.labels" . | nindent 4 }}
type: Opaque
data:
{{- if .Values.redminePassword }}
@@ -16,7 +12,7 @@ data:
redmine-password: {{ randAlphaNum 10 | b64enc | quote }}
{{- end }}
smtp-password: {{ default "" .Values.smtpPassword | b64enc | quote }}
{{- if or (and .Values.databaseType.mariadb (not .Values.mariadb.enabled)) (and .Values.databaseType.postgresql (not .Values.postgresql.enabled)) }}
{{- if or (and (eq .Values.databaseType "mariadb") (not .Values.mariadb.enabled)) (and (eq .Values.databaseType "postgresql") (not .Values.postgresql.enabled)) }}
{{- if .Values.externalDatabase.password }}
external-db-password: {{ default "" .Values.externalDatabase.password | b64enc | quote }}
{{- else }}
+1 -5
View File
@@ -3,9 +3,5 @@ apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ template "redmine.serviceAccountName" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
labels: {{- include "redmine.labels" . | nindent 4 }}
{{- end }}
+4 -9
View File
@@ -2,11 +2,7 @@ apiVersion: v1
kind: Service
metadata:
name: {{ template "redmine.fullname" . }}
labels:
app: {{ template "redmine.fullname" . }}
chart: {{ template "redmine.chart" . }}
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
labels: {{- include "redmine.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
{{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }}
@@ -19,11 +15,10 @@ spec:
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
{{- end }}
ports:
- name: http
- name: http-redmine
port: {{ .Values.service.port }}
targetPort: http
targetPort: http-redmine
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePorts.http)))}}
nodePort: {{ .Values.service.nodePorts.http }}
{{- end }}
selector:
app: {{ template "redmine.fullname" . }}
selector: {{- include "redmine.matchLabels" . | nindent 4 }}
+14
View File
@@ -0,0 +1,14 @@
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.secrets }}
apiVersion: v1
kind: Secret
metadata:
name: {{ .name }}
labels: {{- include "redmine.labels" . | nindent 4 }}
type: kubernetes.io/tls
data:
tls.crt: {{ .certificate | b64enc }}
tls.key: {{ .key | b64enc }}
---
{{- end }}
{{- end }}
+171
View File
@@ -0,0 +1,171 @@
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"redmineUsername": {
"type": "string",
"title": "Username",
"form": true
},
"redminePassword": {
"type": "string",
"title": "Password",
"form": true,
"description": "Defaults to a random 10-character alphanumeric string if not set"
},
"redmineEmail": {
"type": "string",
"title": "Admin email",
"form": true
},
"persistence": {
"type": "object",
"title": "Persistence for Redmine replicas",
"form": true,
"properties": {
"enabled": {
"type": "boolean",
"form": true,
"title": "Enable persistence",
"description": "Enable persistence using Persistent Volume Claims"
},
"size": {
"type": "string",
"title": "Persistent Volume Size",
"form": true,
"render": "slider",
"sliderMin": 1,
"sliderMax": 100,
"sliderUnit": "Gi",
"hidden": {
"condition": false,
"value": "persistence.enabled"
}
}
}
},
"ingress": {
"type": "object",
"form": true,
"title": "Ingress Details",
"properties": {
"enabled": {
"type": "boolean",
"form": true,
"title": "Use a custom hostname",
"description": "Enable the ingress resource that allows you to access the Redmine installation."
},
"hostname": {
"type": "string",
"form": true,
"title": "Hostname",
"hidden": {
"condition": false,
"value": "ingress.enabled"
}
},
"tls": {
"type": "boolean",
"form": true,
"title": "Enable TLS configuration",
"hidden": {
"condition": false,
"value": "ingress.enabled"
}
},
"certManager": {
"type": "boolean",
"form": true,
"title": "Use cert-manager to auto-generate the TLS certificate",
"description": "Add the corresponding annotations for cert-manager to auto-generate the TLS certificate",
"hidden": {
"condition": false,
"value": "ingress.enabled"
}
}
}
},
"databaseType": {
"type": "string",
"form": true,
"enum": ["mariadb", "postgresql"],
"title": "Database Type",
"description": "Allowed values: \"mariadb\" and \"postgresql\""
},
"mariadb": {
"type": "object",
"title": "MariaDB Details",
"form": true,
"hidden": {
"condition": "postgresql",
"value": "databaseType"
},
"properties": {
"enabled": {
"type": "boolean",
"title": "Use a new MariaDB database hosted in the cluster",
"form": true,
"description": "Whether to deploy a mariadb server to satisfy the applications database requirements. To use an external database switch this off and configure the external database details"
},
"master": {
"type": "object",
"properties": {
"persistence": {
"type": "object",
"properties": {
"size": {
"type": "string",
"title": "Volume Size",
"form": true,
"hidden": {
"condition": false,
"value": "mariadb.enabled"
},
"render": "slider",
"sliderMin": 1,
"sliderMax": 100,
"sliderUnit": "Gi"
}
}
}
}
}
}
},
"postgresql": {
"type": "object",
"title": "PostgreSQL Details",
"form": true,
"hidden": {
"condition": "mariadb",
"value": "databaseType"
},
"properties": {
"enabled": {
"type": "boolean",
"title": "Use a new PostgreSQL database hosted in the cluster",
"form": true,
"description": "Whether to deploy a postgresql server to satisfy the applications database requirements. To use an external database switch this off and configure the external database details"
},
"persistence": {
"type": "object",
"properties": {
"size": {
"type": "string",
"title": "Volume Size",
"form": true,
"hidden": {
"condition": false,
"value": "postgresql.enabled"
},
"render": "slider",
"sliderMin": 1,
"sliderMax": 100,
"sliderUnit": "Gi"
}
}
}
}
}
}
}
+55 -24
View File
@@ -75,12 +75,10 @@ redmineLanguage: en
# - name: NAMI_DEBUG
# value: --log-level trace
## Database configuration. Please note that only one of the following databases should be selected.
## Database type. Allowed values: "mariadb" and "postgresql"
## ref: https://github.com/bitnami/bitnami-docker-redmine#run-the-application-using-postgresql-database
##
databaseType:
mariadb: true
postgresql: false
databaseType: mariadb
##
## MariaDB chart configuration
@@ -167,8 +165,8 @@ postgresql:
size: 8Gi
## All of these values are only used when:
## a) mariadb.enabled is set to false and databaseType.mariadb is set to true
## b) postgresql.enabled is set to false and databaseType.postgresql is set to true
## a) mariadb.enabled is set to false and databaseType=mariadb
## b) postgresql.enabled is set to false and databaseType=postgresql
externalDatabase:
## Database host
host: localhost
@@ -214,30 +212,63 @@ service:
##
ingress:
## Set to true to enable ingress record generation
##
enabled: false
## The list of hostnames to be covered with this ingress record.
## Most likely this will be just one host, but in the event more hosts are needed, this is an array
hosts:
- name: redmine.local
## Set this to true in order to add the corresponding annotations for cert-manager
##
certManager: false
## Set this to true in order to enable TLS on the ingress record
## A side effect of this will be that the backend redmine service will be connected at port 443
tls: false
## When the ingress is enabled, a host pointing to this will be created
##
hostname: redmine.local
## Set this to true in order to add the corresponding annotations for cert-manager
certManager: false
## Enable TLS configuration for the hostname defined at ingress.hostname parameter
## TLS certificates will be retrieved from a TLS secret with name: {{- printf "%s-tls" .Values.ingress.hostname }}
## You can use the ingress.secrets parameter to create this TLS secret or relay on cert-manager to create it
##
tls: false
## If TLS is set to true, you must declare what secret will store the key/certificate for TLS
tlsSecret: redmine.local-tls
## Ingress annotations done as key:value pairs
## For a full list of possible ingress annotations, please see
## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md
## Ingress annotations done as key:value pairs
## For a full list of possible ingress annotations,
## please see https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md
##
## If certManager is set to true, annotation kubernetes.io/tls-acme: "true" will automatically be set
##
annotations:
# kubernetes.io/ingress.class: nginx
## Keep the connection open with the API server even if idle (the default is 60 seconds)
## Setting it to 10 minutes which should be enough for our current use case of deploying/upgrading/deleting apps
##
## If certManager is set to true, annotation kubernetes.io/tls-acme: "true" will automatically be set
annotations:
# kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
## The list of additional hostnames to be covered with this ingress record.
## Most likely the hostname above will be enough, but in the event more hosts are needed, this is an array
## extraHosts:
## - name: redmine.local
## path: /
## The tls configuration for additional hostnames to be covered with this ingress record.
## see: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
## extraTls:
## - hosts:
## - redmine.local
## secretName: redmine.local-tls
## If you're providing your own certificates, please use this to add the certificates as secrets
## key and certificate should start with -----BEGIN CERTIFICATE----- or
## -----BEGIN RSA PRIVATE KEY-----
##
## name should line up with a tlsSecret set further up
## If you're using cert-manager, this is unneeded, as it will create the secret for you if it is not set
##
## It is also possible to create and manage the certificates outside of this helm chart
## Please see README.md for more information
##
secrets: []
## - name: redmine.local-tls
## key:
## certificate:
## Node labels for pod assignment
## Ref: https://kubernetes.io/docs/user-guide/node-selection/