From 448d5b6cc59ae7c79cacfb8fd82b16f6a491333d Mon Sep 17 00:00:00 2001 From: Tomas Pizarro Date: Fri, 16 Mar 2018 19:20:24 +0100 Subject: [PATCH] [stable/sugarcrm] Allow use of external database (#4193) * [stable/sugarcrm] Allow use of external database * Fix typo * Update image tag * Update _helpers.tpl --- stable/sugarcrm/Chart.yaml | 2 +- stable/sugarcrm/README.md | 10 ++++ stable/sugarcrm/requirements.lock | 4 +- stable/sugarcrm/requirements.yaml | 1 + stable/sugarcrm/templates/NOTES.txt | 47 ++++++++++++++++++- stable/sugarcrm/templates/_helpers.tpl | 2 +- stable/sugarcrm/templates/deployment.yaml | 30 ++++++++++-- .../templates/externaldb-secrets.yaml | 14 ++++++ stable/sugarcrm/values.yaml | 43 ++++++++++++++++- 9 files changed, 142 insertions(+), 11 deletions(-) create mode 100644 stable/sugarcrm/templates/externaldb-secrets.yaml diff --git a/stable/sugarcrm/Chart.yaml b/stable/sugarcrm/Chart.yaml index ef77396db6..ab6e3bf480 100644 --- a/stable/sugarcrm/Chart.yaml +++ b/stable/sugarcrm/Chart.yaml @@ -1,5 +1,5 @@ name: sugarcrm -version: 0.2.6 +version: 0.3.0 appVersion: 6.5.26 description: SugarCRM enables businesses to create extraordinary customer relationships with the most innovative and affordable CRM solution in the market. keywords: diff --git a/stable/sugarcrm/README.md b/stable/sugarcrm/README.md index 187fe08972..ba9225ba59 100644 --- a/stable/sugarcrm/README.md +++ b/stable/sugarcrm/README.md @@ -60,6 +60,16 @@ The following tables lists the configurable parameters of the SugarCRM chart and | `sugarcrmSmtpProtocol` | SMTP Protocol | `nil` | | `sugarcrmSmtpUser` | SMTP user | `nil` | | `sugarcrmSmtpPassword` | SMTP password | `nil` | +| `allowEmptyPassword` | Allow DB blank passwords | `yes` | +| `externalDatabase.host` | Host of the external database | `nil` | +| `externalDatabase.port` | Port of the external database | `3306` | +| `externalDatabase.user` | Existing username in the external db | `bn_sugarcrm` | +| `externalDatabase.password` | Password for the above username | `nil` | +| `externalDatabase.database` | Name of the existing databse | `bitnami_sugarcrm` | +| `mariadb.enabled` | Wheter to use or not the mariadb chart | `true` | +| `mariadb.mariadbDatabase` | Database name to create | `bitnami_sugarcrm` | +| `mariadb.mariadbUser` | Database user to create | `bn_sugarcrm` | +| `mariadb.mariadbPassword` | Password for the database | `nil` | | `mariadb.mariadbRootPassword` | MariaDB admin password | `nil` | | `serviceType` | Kubernetes Service type | `LoadBalancer` | | `persistence.enabled` | Enable persistence using PVC | `true` | diff --git a/stable/sugarcrm/requirements.lock b/stable/sugarcrm/requirements.lock index b7afb95557..bb468ecd2b 100644 --- a/stable/sugarcrm/requirements.lock +++ b/stable/sugarcrm/requirements.lock @@ -2,5 +2,5 @@ dependencies: - name: mariadb repository: https://kubernetes-charts.storage.googleapis.com/ version: 0.7.0 -digest: sha256:e1af13ac4ac21f67582006f12d2b4eb78a1a2a59b34338fac850f2bec0b08b41 -generated: 2017-08-09T22:53:00.253043673-04:00 +digest: sha256:f59f68030aa5c50b9e776b813804875fac911f91c2aa384e991f37a795c5ae34 +generated: 2018-03-15T17:23:59.5931+01:00 diff --git a/stable/sugarcrm/requirements.yaml b/stable/sugarcrm/requirements.yaml index 4896aa89de..7c0c6a88a9 100644 --- a/stable/sugarcrm/requirements.yaml +++ b/stable/sugarcrm/requirements.yaml @@ -2,3 +2,4 @@ dependencies: - name: mariadb version: 0.7.0 repository: https://kubernetes-charts.storage.googleapis.com/ + condition: mariadb.enabled diff --git a/stable/sugarcrm/templates/NOTES.txt b/stable/sugarcrm/templates/NOTES.txt index 69003d643a..7d6869f588 100644 --- a/stable/sugarcrm/templates/NOTES.txt +++ b/stable/sugarcrm/templates/NOTES.txt @@ -1,3 +1,5 @@ +{{- if or .Values.mariadb.enabled .Values.externalDatabase.host -}} + {{- if empty (include "host" .) -}} ############################################################################### ### ERROR: You did not provide an external host in your 'helm install' call ### @@ -27,8 +29,17 @@ host. To configure SugarCRM with the URL of your service: 2. Complete your SugarCRM deployment by running: - helm upgrade {{ .Release.Name }} \ - --set sugarcrmHost=$APP_HOST,sugarcrmPassword=$APP_PASSWORD{{ if .Values.mariadb.mariadbRootPassword }},mariadb.mariadbRootPassword=$APP_DATABASE_PASSWORD{{ end }} stable/sugarcrm +{{- if .Values.mariadb.enabled }} + + helm upgrade {{ .Release.Name }} stable/sugarcrm \ + --set sugarcrmHost=$APP_HOST,sugarcrmPassword=$APP_PASSWORD{{ if .Values.mariadb.mariadbRootPassword }},mariadb.mariadbRootPassword=$APP_DATABASE_PASSWORD{{ end }} +{{- else }} + + ## PLEASE UPDATE THE EXTERNAL DATABASE CONNECTION PARAMETERS IN THE FOLLOWING COMMAND AS NEEDED ## + + helm upgrade {{ .Release.Name }} stable/sugarcrm \ + --set sugarcrmPassword=$APP_PASSWORD,sugarcrmHost=$APP_HOST,serviceType={{ .Values.serviceType }},mariadb.enabled=false{{- if not (empty .Values.externalDatabase.host) }},externalDatabase.host={{ .Values.externalDatabase.host }}{{- end }}{{- if not (empty .Values.externalDatabase.user) }},externalDatabase.user={{ .Values.externalDatabase.user }}{{- end }}{{- if not (empty .Values.externalDatabase.password) }},externalDatabase.password={{ .Values.externalDatabase.password }}{{- end }}{{- if not (empty .Values.externalDatabase.database) }},externalDatabase.database={{ .Values.externalDatabase.database }}{{- end }} +{{- end }} {{- else -}} 1. Get the SugarCRM URL by running: @@ -48,3 +59,35 @@ host. To configure SugarCRM with the URL of your service: echo Username: {{ .Values.sugarcrmUsername }} echo Password: $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "fullname" . }} -o jsonpath="{.data.sugarcrm-password}" | base64 --decode) {{- end }} + +{{- else -}} + +######################################################################################## +### ERROR: You did not provide an external database host in your 'helm install' call ### +######################################################################################## + +This deployment will be incomplete until you configure SugarCRM with a resolvable database +host. To configure SugarCRM to use and external database host: + + +1. Complete your SugarCRM deployment by running: + +{{- if contains "NodePort" .Values.serviceType }} + export APP_HOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") +{{- else if contains "LoadBalancer" .Values.serviceType }} + + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "sugarcrm.fullname" . }}' + + export APP_HOST=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "sugarcrm.fullname" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}") +{{- else }} + + export APP_HOST=127.0.0.1 +{{- end }} + export APP_PASSWORD=$(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "sugarcrm.fullname" . }} -o jsonpath="{.data.sugarcrm-password}" | base64 --decode) + + ## PLEASE UPDATE THE EXTERNAL DATABASE CONNECTION PARAMETERS IN THE FOLLOWING COMMAND AS NEEDED ## + + helm upgrade {{ .Release.Name }} stable/sugarcrm \ + --set sugarcrmPassword=$APP_PASSWORD,sugarcrmHost=$APP_HOST,serviceType={{ .Values.serviceType }},mariadb.enabled=false{{- if not (empty .Values.externalDatabase.user) }},externalDatabase.user={{ .Values.externalDatabase.user }}{{- end }}{{- if not (empty .Values.externalDatabase.password) }},externalDatabase.password={{ .Values.externalDatabase.password }}{{- end }}{{- if not (empty .Values.externalDatabase.database) }},externalDatabase.database={{ .Values.externalDatabase.database }}{{- end }},externalDatabase.host=YOUR_EXTERNAL_DATABASE_HOST +{{- end }} diff --git a/stable/sugarcrm/templates/_helpers.tpl b/stable/sugarcrm/templates/_helpers.tpl index 2463906531..2e6bc00299 100644 --- a/stable/sugarcrm/templates/_helpers.tpl +++ b/stable/sugarcrm/templates/_helpers.tpl @@ -19,7 +19,7 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this Create a default fully qualified app name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). */}} -{{- define "mariadb.fullname" -}} +{{- define "sugarcrm.mariadb.fullname" -}} {{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}} {{- end -}} diff --git a/stable/sugarcrm/templates/deployment.yaml b/stable/sugarcrm/templates/deployment.yaml index c65a91d407..0a354ceb78 100644 --- a/stable/sugarcrm/templates/deployment.yaml +++ b/stable/sugarcrm/templates/deployment.yaml @@ -20,15 +20,37 @@ spec: image: "{{ .Values.image }}" imagePullPolicy: {{ .Values.imagePullPolicy | quote }} env: + - name: ALLOW_EMPTY_PASSWORD + value: {{ .Values.allowEmptyPassword | quote }} + {{- if .Values.mariadb.enabled }} - name: MARIADB_HOST - value: {{ template "mariadb.fullname" . }} + value: {{ template "sugarcrm.mariadb.fullname" . }} - name: MARIADB_PORT_NUMBER value: "3306" - - name: MARIADB_PASSWORD + - name: SUGARCRM_DATABASE_NAME + value: {{ .Values.mariadb.mariadbDatabase | quote }} + - name: SUGARCRM_DATABASE_USER + value: {{ .Values.mariadb.mariadbUser | quote }} + - name: SUGARCRM_DATABASE_PASSWORD valueFrom: secretKeyRef: - name: {{ template "mariadb.fullname" . }} - key: mariadb-root-password + name: {{ template "jasperreports.mariadb.fullname" . }} + key: mariadb-password + {{- else }} + - name: MARIADB_HOST + value: {{ .Values.externalDatabase.host | quote }} + - name: MARIADB_PORT_NUMBER + value: {{ .Values.externalDatabase.port | quote }} + - name: SUGARCRM_DATABASE_NAME + value: {{ .Values.externalDatabase.database | quote }} + - name: SUGARCRM_DATABASE_USER + value: {{ .Values.externalDatabase.user | quote }} + - name: SUGARCRM_DATABASE_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "externaldb" }} + key: db-password + {{- end }} - name: SUGARCRM_HOST value: {{ include "host" . | quote }} - name: SUGARCRM_USERNAME diff --git a/stable/sugarcrm/templates/externaldb-secrets.yaml b/stable/sugarcrm/templates/externaldb-secrets.yaml new file mode 100644 index 0000000000..4ceb148898 --- /dev/null +++ b/stable/sugarcrm/templates/externaldb-secrets.yaml @@ -0,0 +1,14 @@ +{{- if not .Values.mariadb.enabled }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ printf "%s-%s" .Release.Name "externaldb" }} + labels: + app: {{ printf "%s-%s" .Release.Name "externaldb" }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +type: Opaque +data: + db-password: {{ default "" .Values.externalDatabase.password | b64enc | quote }} +{{- end }} \ No newline at end of file diff --git a/stable/sugarcrm/values.yaml b/stable/sugarcrm/values.yaml index f42ccf1f30..eaecd09174 100644 --- a/stable/sugarcrm/values.yaml +++ b/stable/sugarcrm/values.yaml @@ -1,7 +1,7 @@ ## Bitnami SugarCRM image version ## ref: https://hub.docker.com/r/bitnami/sugarcrm/tags/ ## -image: bitnami/sugarcrm:6.5.26-r2 +image: bitnami/sugarcrm:6.5.26-r3 ## Specify a imagePullPolicy ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -39,6 +39,29 @@ sugarcrmEmail: user@example.com ## sugarcrmLastName: LastName +## Set to `yes` to allow the container to be started with blank passwords +## ref: https://github.com/bitnami/bitnami-docker-sugarcrm#environment-variables +allowEmptyPassword: "yes" + +## +## External database configuration +## +externalDatabase: + ## Database host + host: + + ## Database host + port: 3306 + + ## Database user + user: bn_sugarcrm + + ## Database password + password: + + ## Database name + database: bitnami_sugarcrm + ## SMTP mail delivery configuration ## ref: https://github.com/bitnami/bitnami-docker-orangehrm/#smtp-configuration # sugarcrmSmtpHost: @@ -51,6 +74,24 @@ sugarcrmLastName: LastName ## MariaDB chart configuration ## mariadb: + ## Whether to deploy a mariadb server to satisfy the applications database requirements. To use an external database set this to false and configure the externalDatabase parameters + enabled: true + + ## Create a database + ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run + ## + mariadbDatabase: bitnami_sugarcrm + + ## Create a database user + ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run + ## + mariadbUser: bn_sugarcrm + + ## Password for mariadbUser + ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run + ## + # mariadbPassword: + ## MariaDB admin password ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run ##