diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1588d18f96528f1e4be991b55bcf5d8d77d1f939..3f797b1041943461a5974f0bd339fbe6480e951c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ include: - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/dummy_job.yml - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml' -.use-kubernetes: +.use_kubernetes: image: name: alpine/k8s:1.22.6 entrypoint: ["/bin/sh", "-c"] @@ -20,6 +20,16 @@ include: - values.yaml - Chart.yaml +.delete_helmrelease: + stage: install-helm-chart + script: + - cd ${CHART_DIR:-"."} + - ./fully-delete-helmrelease.sh "nc$CI_MERGE_REQUEST_IID" "nc$CI_MERGE_REQUEST_IID" + - kubectl delete namespace "nc$CI_MERGE_REQUEST_IID" + extends: + - .use_kubernetes + - .chart_changes_rules + stages: - lint-helm-chart - install-helm-chart @@ -30,23 +40,24 @@ stages: variables: CHART_NAME: nextcloud-onlyoffice - RELEASE_NAME: "nc$CI_MERGE_REQUEST_IID" -delete-helmrelease: - stage: install-helm-chart - script: - - cd ${CHART_DIR:-"."} - - ./fully-delete-helmrelease.sh "$RELEASE_NAME" - environment: - name: helmrelease/$RELEASE_NAME - action: stop +pre-install-delete-helmrelease: extends: - - .use-kubernetes - - .chart_changes_rules + - .delete_helmrelease # This job will fail if a helmrelease didn't exist (yet). For example in a # first pipeline for an MR. allow_failure: true +# This will clean up helmreleases after MRs have been merged, or after some time +post-install-delete-helmrelease: + extends: + - .delete_helmrelease + # Gets triggered by on_stop of install-helmrelease, or manually + when: manual + environment: + name: helmrelease/nc$CI_MERGE_REQUEST_IID + action: stop + install-helmrelease: stage: install-helm-chart needs: @@ -54,31 +65,32 @@ install-helmrelease: - job: lint-helm # We can't install if there's still an installation from a previous run # present. - - job: delete-helmrelease + - job: pre-install-delete-helmrelease script: - cd ${CHART_DIR:-"."} - cp values-local.yaml.example values-ci.yaml # This sets the domains to files-MR_ID.gitlab.stackspin.net and # office-MR_ID.gitlab.stackspin.net - - sed -i "s/\.your\.domain/-$RELEASE_NAME.gitlab.stackspin.net/" values-ci.yaml + - sed -i "s/\.your\.domain/-nc$CI_MERGE_REQUEST_IID.gitlab.stackspin.net/" values-ci.yaml # Make sure TLS certificate secrets for different MRs do not clash - - sed -i "s/files-cert/files-cert-$RELEASE_NAME/" values-ci.yaml - - sed -i "s/office-cert/office-cert-$RELEASE_NAME/" values-ci.yaml - - helm install --wait "$RELEASE_NAME" . -f values-ci.yaml + - sed -i "s/files-cert/files-cert-nc$CI_MERGE_REQUEST_IID/" values-ci.yaml + - sed -i "s/office-cert/office-cert-nc$CI_MERGE_REQUEST_IID/" values-ci.yaml + - kubectl create namespace "nc$CI_MERGE_REQUEST_IID" + - helm install -n nc$CI_MERGE_REQUEST_IID --wait "nc$CI_MERGE_REQUEST_IID" . -f values-ci.yaml environment: - name: helmrelease/$RELEASE_NAME - url: https://files-$RELEASE_NAME.gitlab.stackspin.net + name: helmrelease/nc$CI_MERGE_REQUEST_IID + url: https://files-nc$CI_MERGE_REQUEST_IID.gitlab.stackspin.net auto_stop_in: 1 week - on_stop: delete-helmrelease + on_stop: post-install-delete-helmrelease extends: - - .use-kubernetes + - .use_kubernetes - .chart_changes_rules test-helm-chart: stage: test-helm-chart script: - cd ${CHART_DIR:-"."} - - helm test --logs "$RELEASE_NAME" + - helm test -n nc$CI_MERGE_REQUEST_IID --logs "nc$CI_MERGE_REQUEST_IID" extends: - - .use-kubernetes + - .use_kubernetes - .chart_changes_rules diff --git a/CHANGELOG.md b/CHANGELOG.md index d31e7c426532dd378048fc320a60a6c3b6a20d50..84f5f49e297f7f12c0ac39e98c8e76830bc7a128 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.8.0] - 2022-05-04 + +* Made sure the chart can be installed twice into the same namespace + * **BREAKING**: You need to now specify the ONLYOFFICE database password under + `global.onlyofficeDb.password`. If you have overriden other values from + `onlyoffice.database`, they should also move to `global.onlyofficeDb`. + ## [0.7.39] - 2022-04-29 * Rename configMap to prevent helmRelease to fail when nextcloud.configs diff --git a/Chart.yaml b/Chart.yaml index 88c5b3807f53a6a2fa14fa64fc2129c19e7aed9f..dcb7c010b848908ed3e9b79029bee34af9473e9c 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -3,7 +3,7 @@ apiVersion: v2 description: | A helm chart for installing NextCloud and setting up ONLYOFFICE integration name: nextcloud-onlyoffice -version: 0.7.40 +version: 0.8.0 appVersion: NC-23.0.3-OO-7.0.1.37 icon: https://cdn.rawgit.com/docker-library/docs/defa5ffc7123177acd60ddef6e16bddf694cc35f/nextcloud/logo.svg dependencies: diff --git a/fully-delete-helmrelease.sh b/fully-delete-helmrelease.sh index 59010db490fc25f79c4ab9146cbab6a4e76dbf8c..9fd36c2449db5becda0d3f0c85b25d72d0138301 100755 --- a/fully-delete-helmrelease.sh +++ b/fully-delete-helmrelease.sh @@ -1,18 +1,19 @@ #! /usr/bin/env bash -if [ -z "$1" ]; then - echo "Usage: ./fully-delete-chart RELEASE_NAME" +if [ -z "$2" ]; then + echo "Usage: ./fully-delete-chart NAMESPACE RELEASE_NAME" exit 1 else - release="$1" + namespace="$1" + release="$2" fi -kubectl delete pod "$release-onlyoffice-documentserver-taiko-test" +kubectl delete pod -n "$namespace" "$release-onlyoffice-documentserver-taiko-test" -kubectl delete job "$release-setup-apps" +kubectl delete job -n "$namespace" "$release-setup-apps" # This command can fail, but that is not a problem -kubectl delete pvc \ +kubectl delete pvc -n "$namespace" \ "$release-nextcloud-nextcloud" \ "data-$release-rabbitmq-0" \ "redis-data-$release-redis-master-0" \ @@ -20,13 +21,13 @@ kubectl delete pvc \ "redis-data-$release-redis-slave-1" \ "data-$release-mariadb-0" -helm delete --wait "$release" +helm delete -n "$namespace" --wait "$release" -output=$(kubectl get pod -l "app.kubernetes.io/instance=$release") +output=$(kubectl get pod -n "$namespace" -l "app.kubernetes.io/instance=$release") until [ "$output" == "" ] do echo "waiting for pods to be deleted, pods still running:" echo "$output" sleep 5 - output=$(kubectl get pod -l "app.kubernetes.io/instance=$release") + output=$(kubectl get pod -n "$namespace" -l "app.kubernetes.io/instance=$release") done diff --git a/templates/nextcloud-mariadb-initdbscripts.yaml b/templates/nextcloud-mariadb-initdbscripts.yaml deleted file mode 100644 index 8045598ed2e5fe4778be94441cc4053ad9ff08df..0000000000000000000000000000000000000000 --- a/templates/nextcloud-mariadb-initdbscripts.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: "nextcloud-mariadb-initdbscripts" -data: - setup.sql: | - CREATE USER {{ .Values.onlyoffice.database.user }} IDENTIFIED BY '{{ .Values.onlyoffice.database.password }}'; - CREATE DATABASE {{ .Values.onlyoffice.database.name }}; - GRANT ALL PRIVILEGES ON {{ .Values.onlyoffice.database.name }}.* TO '{{ .Values.onlyoffice.database.user }}'@'%'; diff --git a/templates/onlyoffice-database-secret.yaml b/templates/onlyoffice-database-secret.yaml index e78edcbb4e6fc102d6957a668195ca9e40ec3e6f..eb2f9222f003d0247fc30c7c93c35ae9f55a06d8 100644 --- a/templates/onlyoffice-database-secret.yaml +++ b/templates/onlyoffice-database-secret.yaml @@ -4,4 +4,4 @@ type: Opaque metadata: name: "{{ .Release.Name }}-onlyoffice-database" stringData: - database-password: "{{ .Values.onlyoffice.database.password }}" + database-password: "{{ .Values.global.onlyofficeDb.password }}" diff --git a/templates/onlyoffice-deployment.yaml b/templates/onlyoffice-deployment.yaml index cf1413d724d371f36bcf48f4e967f24e186fa1f6..ab6e3e3723cb8cd3e74dbb7edb3f752d5906512e 100644 --- a/templates/onlyoffice-deployment.yaml +++ b/templates/onlyoffice-deployment.yaml @@ -85,18 +85,18 @@ spec: - name: DB_TYPE value: "mariadb" - name: DB_USER - value: "{{ .Values.onlyoffice.database.user }}" + value: "{{ .Values.global.onlyofficeDb.user }}" - name: DB_PWD valueFrom: secretKeyRef: name: "{{ .Release.Name }}-onlyoffice-database" key: "database-password" - name: DB_HOST - value: {{ .Values.onlyoffice.database.host | default (printf "%s-mariadb" .Release.Name) }} + value: {{ .Values.global.onlyofficeDb.host | default (printf "%s-mariadb" .Release.Name) }} - name: DB_PORT - value: "{{ .Values.onlyoffice.database.port }}" + value: "{{ .Values.global.onlyofficeDb.port }}" - name: DB_NAME - value: "{{ .Values.onlyoffice.database.name }}" + value: "{{ .Values.global.onlyofficeDb.name }}" - name: REDIS_SERVER_HOST value: "{{ .Release.Name }}-redis-master" - name: REDIS_SERVER_PORT diff --git a/values-local.yaml.example b/values-local.yaml.example index e2814d79d70f66eeb580053881e15a90b75ec784..070062e667ecb7464a8ea4683edf1fd4b2e04733 100644 --- a/values-local.yaml.example +++ b/values-local.yaml.example @@ -38,6 +38,10 @@ nextcloud: # enabled: true # size: 2Gi +global: + onlyofficeDb: + password: CHANGE_ME + onlyoffice: server_name: "office.your.domain" jwtSecret: CHANGE_ME @@ -49,8 +53,6 @@ onlyoffice: - hosts: - "office.your.domain" secretName: office-cert - database: - password: CHANGE_ME rabbitmq: auth: diff --git a/values.yaml b/values.yaml index da811d2e4d0d3895e4b95107452ab2f1923c36a3..bf6e26e40f164e5ea15033801cc53efaf3323e41 100644 --- a/values.yaml +++ b/values.yaml @@ -13,7 +13,12 @@ nextcloud: volumePermissions: image: pullSecrets: [] - initdbScriptsConfigMap: "nextcloud-mariadb-initdbscripts" + # initdbScriptsConfigMap: "nextcloud-mariadb-initdbscripts" + initdbScripts: + setup.sql: | + CREATE USER {{ .Values.global.onlyofficeDb.user }} IDENTIFIED BY '{{ .Values.global.onlyofficeDb.password }}'; + CREATE DATABASE {{ .Values.global.onlyofficeDb.name }}; + GRANT ALL PRIVILEGES ON {{ .Values.global.onlyofficeDb.name }}.* TO '{{ .Values.global.onlyofficeDb.user }}'@'%'; # Use 2 GB of storage for NC storage (maybe make configurable later?) persistence: @@ -43,6 +48,15 @@ setupApps: mariadb: enabled: true +global: + onlyofficeDb: + # `host` defaults to "{{ .Release.Name }}-mariadb" + name: onlyoffice + port: 3306 + user: onlyoffice + # password: + + onlyoffice: # Default values for onlyoffice. @@ -102,12 +116,6 @@ onlyoffice: accessMode: ReadWriteOnce size: 2Gi - database: - # `host` defaults to "{{ .Release.Name }}-mariadb" - name: onlyoffice - port: 3306 - user: onlyoffice - # password: nameOverride: '' fullnameOverride: ''