From fe367a91682ac51fcbae82cce38bf70a57a4b1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20J=2E=20Salmer=C3=B3n-Garc=C3=ADa?= Date: Wed, 21 Nov 2018 13:10:06 +0100 Subject: [PATCH] [stable/suitecrm] Add service.type to values.yaml (#9439) Signed-off-by: Javier J. Salmeron Garcia --- stable/suitecrm/Chart.yaml | 2 +- stable/suitecrm/README.md | 10 +++++-- stable/suitecrm/templates/NOTES.txt | 19 +++++++------ stable/suitecrm/templates/_helpers.tpl | 2 +- stable/suitecrm/templates/deployment.yaml | 3 +- stable/suitecrm/templates/svc.yaml | 28 +++++++++++-------- stable/suitecrm/values.yaml | 34 ++++++++++++++--------- 7 files changed, 59 insertions(+), 39 deletions(-) diff --git a/stable/suitecrm/Chart.yaml b/stable/suitecrm/Chart.yaml index 955e6c3fcd..8afdec8541 100644 --- a/stable/suitecrm/Chart.yaml +++ b/stable/suitecrm/Chart.yaml @@ -1,5 +1,5 @@ name: suitecrm -version: 4.1.0 +version: 5.0.0 appVersion: 7.10.10 description: SuiteCRM is a completely open source enterprise-grade Customer Relationship Management (CRM) application. SuiteCRM is a software fork of the popular customer relationship management (CRM) system SugarCRM. keywords: diff --git a/stable/suitecrm/README.md b/stable/suitecrm/README.md index b32bd5ddf8..1e44d5d889 100644 --- a/stable/suitecrm/README.md +++ b/stable/suitecrm/README.md @@ -56,7 +56,6 @@ The following table lists the configurable parameters of the SuiteCRM chart and | `image.pullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | | `image.pullSecrets` | Specify image pull secrets | `nil` | | `suitecrmHost` | SuiteCRM host to create application URLs | `nil` | -| `suitecrmLoadBalancerIP` | `loadBalancerIP` for the SuiteCRM Service | `nil` | | `suitecrmUsername` | User of the application | `user` | | `suitecrmPassword` | Application password | _random 10 character alphanumeric string_ | | `suitecrmEmail` | Admin email | `user@example.com` | @@ -78,8 +77,13 @@ The following table lists the configurable parameters of the SuiteCRM chart and | `mariadb.db.user` | Database user to create | `bn_suitecrm` | | `mariadb.db.password` | Password for the database | `nil` | | `mariadb.rootUser.password` | MariaDB admin password | `nil` | -| `serviceType` | Kubernetes Service type | `LoadBalancer` | -| `externalTrafficPolicy` | Set to `Local` to preserve the client source IP | `Cluster` | +| `service.type` | Kubernetes Service type | `LoadBalancer` | +| `service.port` | Service HTTP port | `80` | +| `service.httpsPort` | Service HTTPS port | `443` | +| `service.nodePorts.http` | Kubernetes http node port | `""` | +| `service.nodePorts.https` | Kubernetes https node port | `""` | +| `service.externalTrafficPolicy` | Enable client source IP preservation | `Cluster` | +| `service.loadBalancerIP` | `loadBalancerIP` for the SuiteCRM Service | `nil` | | `persistence.enabled` | Enable persistence using PVC | `true` | | `persistence.storageClass` | PVC Storage Class for SuiteCRM volume | `nil` (uses alpha storage class annotation) | | `persistence.existingClaim` | An Existing PVC name for SuiteCRM volume | `nil` (uses alpha storage class annotation) | diff --git a/stable/suitecrm/templates/NOTES.txt b/stable/suitecrm/templates/NOTES.txt index 10457248f9..e3e0780cf5 100644 --- a/stable/suitecrm/templates/NOTES.txt +++ b/stable/suitecrm/templates/NOTES.txt @@ -10,12 +10,12 @@ host. To configure SuiteCRM with the URL of your service: 1. Get the SuiteCRM URL by running: - {{- if contains "NodePort" .Values.serviceType }} + {{- if contains "NodePort" .Values.service.type }} export APP_PORT=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "suitecrm.fullname" . }} -o jsonpath="{.spec.ports[0].nodePort}") export APP_HOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - {{- else if contains "LoadBalancer" .Values.serviceType }} + {{- else if contains "LoadBalancer" .Values.service.type }} 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 "suitecrm.fullname" . }}' @@ -40,20 +40,21 @@ host. To configure SuiteCRM with the URL of your service: ## PLEASE UPDATE THE EXTERNAL DATABASE CONNECTION PARAMETERS IN THE FOLLOWING COMMAND AS NEEDED ## helm upgrade {{ .Release.Name }} stable/suitecrm \ - --set suitecrmPassword=$APP_PASSWORD,suitecrmHost=$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 }} + --set suitecrmPassword=$APP_PASSWORD,suitecrmHost=$APP_HOST,service.type={{ .Values.service.type }},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 SuiteCRM URL by running: -{{- if eq .Values.serviceType "ClusterIP" }} +{{- if eq .Values.service.type "ClusterIP" }} echo "SuiteCRM URL: http://127.0.0.1:8080/" - kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ template "suitecrm.fullname" . }} $POD_NAME 8080:80 + kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ template "suitecrm.fullname" . }} $POD_NAME 8080:{{ .Values.service.port }} {{- else }} - echo "SuiteCRM URL: http://{{ include "host" . }}/" +{{- $port:=.Values.service.port | toString }} + echo "SuiteCRM URL: http://{{ include "host" . }}{{- if ne $port "80" }}:{{ .Values.service.port }}{{ end }}/" {{- end }} @@ -75,9 +76,9 @@ host. To configure SuiteCRM to use and external database host: 1. Complete your SuiteCRM deployment by running: -{{- if contains "NodePort" .Values.serviceType }} +{{- if contains "NodePort" .Values.service.type }} export APP_HOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") -{{- else if contains "LoadBalancer" .Values.serviceType }} +{{- else if contains "LoadBalancer" .Values.service.type }} 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 "suitecrm.fullname" . }}' @@ -92,5 +93,5 @@ host. To configure SuiteCRM to use and external database host: ## PLEASE UPDATE THE EXTERNAL DATABASE CONNECTION PARAMETERS IN THE FOLLOWING COMMAND AS NEEDED ## helm upgrade {{ .Release.Name }} stable/suitecrm \ - --set suitecrmPassword=$APP_PASSWORD,suitecrmHost=$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 + --set suitecrmPassword=$APP_PASSWORD,suitecrmHost=$APP_HOST,service.type={{ .Values.service.type }},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/suitecrm/templates/_helpers.tpl b/stable/suitecrm/templates/_helpers.tpl index b3b4e56c4f..fea5e30a30 100644 --- a/stable/suitecrm/templates/_helpers.tpl +++ b/stable/suitecrm/templates/_helpers.tpl @@ -28,7 +28,7 @@ Get the user defined LoadBalancerIP for this release. Note, returns 127.0.0.1 if using ClusterIP. */}} {{- define "serviceIP" -}} -{{- if eq .Values.serviceType "ClusterIP" -}} +{{- if eq .Values.service.type "ClusterIP" -}} 127.0.0.1 {{- else -}} {{- index .Values (printf "%sLoadBalancerIP" .Chart.Name) | default "" -}} diff --git a/stable/suitecrm/templates/deployment.yaml b/stable/suitecrm/templates/deployment.yaml index 0dd991547e..3b9acc22c2 100644 --- a/stable/suitecrm/templates/deployment.yaml +++ b/stable/suitecrm/templates/deployment.yaml @@ -78,7 +78,8 @@ spec: key: db-password {{- end }} - name: SUITECRM_HOST - value: {{ include "host" . | quote }} +{{- $port:=.Values.service.port | toString }} + value: "{{ include "host" . }}:{{- if ne $port "80" }}:{{ .Values.service.port }}{{ end }}" - name: SUITECRM_USERNAME value: {{ .Values.suitecrmUsername | quote }} - name: SUITECRM_PASSWORD diff --git a/stable/suitecrm/templates/svc.yaml b/stable/suitecrm/templates/svc.yaml index 582dd67fe0..3086e99f7f 100644 --- a/stable/suitecrm/templates/svc.yaml +++ b/stable/suitecrm/templates/svc.yaml @@ -8,20 +8,26 @@ metadata: release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" spec: - type: {{ .Values.serviceType }} - {{- if (and (eq .Values.serviceType "LoadBalancer") (not (empty .Values.suitecrmLoadBalancerIP))) }} - loadBalancerIP: {{ .Values.suitecrmLoadBalancerIP }} + type: {{ .Values.service.type }} + {{- if (and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP))) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} {{- end }} - {{- if (or (eq .Values.serviceType "LoadBalancer") (eq .Values.serviceType "NodePort")) }} - externalTrafficPolicy: {{ .Values.externalTrafficPolicy | quote }} + {{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} {{- end }} ports: - - name: http - port: 80 - targetPort: http - - name: https - port: 443 - targetPort: https + - name: http + port: {{ .Values.service.port }} + targetPort: http + {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePorts.http)))}} + nodePort: {{ .Values.service.nodePorts.http }} + {{- end }} + - name: https + port: {{ .Values.service.httpsPort }} + targetPort: https + {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePorts.https)))}} + nodePort: {{ .Values.service.nodePorts.https }} + {{- end }} selector: app: {{ template "suitecrm.name" . }} release: "{{ .Release.Name }}" diff --git a/stable/suitecrm/values.yaml b/stable/suitecrm/values.yaml index f21a2b8ca1..9f395dbd9a 100644 --- a/stable/suitecrm/values.yaml +++ b/stable/suitecrm/values.yaml @@ -33,11 +33,6 @@ image: ## suitecrmValidateUserIP: "no" -## loadBalancerIP for the SuiteCRM Service (optional, cloud specific) -## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer -## -# suitecrmLoadBalancerIP: - ## User of the application ## ref: https://github.com/bitnami/bitnami-docker-suitecrm#configuration ## @@ -137,14 +132,27 @@ mariadb: accessMode: ReadWriteOnce size: 8Gi -## Kubernetes configuration -## For minikube, set this to NodePort, elsewhere use LoadBalancer -## -serviceType: LoadBalancer - -## Set external traffic policy to: "Local" to preserve source IP on providers supporting it -## ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-type-nodeport -externalTrafficPolicy: Cluster +service: + type: LoadBalancer + # HTTP Port + port: 80 + # HTTPS Port + httpsPort: 443 + ## loadBalancerIP for the SuiteCRM Service (optional, cloud specific) + ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer + ## + ## loadBalancerIP: + ## + ## nodePorts: + ## http: + ## https: + nodePorts: + http: "" + https: "" + ## Enable client source IP preservation + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster ## Enable persistence using Persistent Volume Claims ## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/