From 67ead0cdfb46d757785ce190c263a00461cbfb09 Mon Sep 17 00:00:00 2001 From: Kjeld Schouten-Lebbing Date: Sat, 10 Apr 2021 16:33:51 +0200 Subject: [PATCH] Add postgres-operator and basic common postgres-manifest (#303) * Add postgres-operator and basic common postgres-manifest * move postgres to dev train --- .github/ct-install.yaml | 2 + .github/ct-lint.yaml | 2 + dev/postgres-operator/0.0.1/.helmignore | 24 ++ dev/postgres-operator/0.0.1/CONFIG.md | 9 + dev/postgres-operator/0.0.1/Chart.lock | 12 + dev/postgres-operator/0.0.1/Chart.yaml | 44 +++ dev/postgres-operator/0.0.1/README.md | 56 ++++ dev/postgres-operator/0.0.1/app-readme.md | 2 + .../0.0.1/charts/common-2.0.2.tgz | Bin 0 -> 22596 bytes .../0.0.1/charts/postgres-operator-1.6.2.tgz | Bin 0 -> 19963 bytes .../charts/postgres-operator-ui-1.6.2.tgz | Bin 0 -> 4047 bytes dev/postgres-operator/0.0.1/ix_values.yaml | 12 + dev/postgres-operator/0.0.1/questions.yaml | 317 ++++++++++++++++++ .../0.0.1/templates/common.yaml | 2 + .../0.0.1/templates/envconfig.yaml | 7 + dev/postgres-operator/0.0.1/test_values.yaml | 37 ++ dev/postgres-operator/0.0.1/values.yaml | 1 + dev/postgres-operator/item.yaml | 3 + docs/_static/img/postgres-operator-icon.png | Bin 0 -> 23434 bytes library/common/Chart.yaml | 2 +- library/common/templates/_all.tpl | 2 + library/common/templates/_pvc.tpl | 15 + library/common/templates/classes/_pvc.tpl | 6 +- .../templates/classes/ingress/_ingress.tpl | 5 + .../templates/lib/resources/_postgres.tpl | 112 +++++++ library/common/values.yaml | 79 +++++ 26 files changed, 749 insertions(+), 2 deletions(-) create mode 100644 dev/postgres-operator/0.0.1/.helmignore create mode 100644 dev/postgres-operator/0.0.1/CONFIG.md create mode 100644 dev/postgres-operator/0.0.1/Chart.lock create mode 100644 dev/postgres-operator/0.0.1/Chart.yaml create mode 100644 dev/postgres-operator/0.0.1/README.md create mode 100644 dev/postgres-operator/0.0.1/app-readme.md create mode 100644 dev/postgres-operator/0.0.1/charts/common-2.0.2.tgz create mode 100644 dev/postgres-operator/0.0.1/charts/postgres-operator-1.6.2.tgz create mode 100644 dev/postgres-operator/0.0.1/charts/postgres-operator-ui-1.6.2.tgz create mode 100644 dev/postgres-operator/0.0.1/ix_values.yaml create mode 100644 dev/postgres-operator/0.0.1/questions.yaml create mode 100644 dev/postgres-operator/0.0.1/templates/common.yaml create mode 100644 dev/postgres-operator/0.0.1/templates/envconfig.yaml create mode 100644 dev/postgres-operator/0.0.1/test_values.yaml create mode 100644 dev/postgres-operator/0.0.1/values.yaml create mode 100644 dev/postgres-operator/item.yaml create mode 100644 docs/_static/img/postgres-operator-icon.png create mode 100644 library/common/templates/lib/resources/_postgres.tpl diff --git a/.github/ct-install.yaml b/.github/ct-install.yaml index 195cf0c86b9..8e382db17af 100644 --- a/.github/ct-install.yaml +++ b/.github/ct-install.yaml @@ -5,3 +5,5 @@ excluded-charts: common chart-yaml-schema: .github/chart_schema.yaml chart-repos: - truecharts=https://truecharts.org +- postgres-operator-ui=https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator-ui/ +- postgres-operator=https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator/ diff --git a/.github/ct-lint.yaml b/.github/ct-lint.yaml index 1afc7f5273d..11cb7743569 100644 --- a/.github/ct-lint.yaml +++ b/.github/ct-lint.yaml @@ -4,3 +4,5 @@ helm-extra-args: --timeout 600s chart-yaml-schema: .github/chart_schema.yaml chart-repos: - truecharts=https://truecharts.org +- postgres-operator-ui=https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator-ui/ +- postgres-operator=https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator/ diff --git a/dev/postgres-operator/0.0.1/.helmignore b/dev/postgres-operator/0.0.1/.helmignore new file mode 100644 index 00000000000..e559de0a012 --- /dev/null +++ b/dev/postgres-operator/0.0.1/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS diff --git a/dev/postgres-operator/0.0.1/CONFIG.md b/dev/postgres-operator/0.0.1/CONFIG.md new file mode 100644 index 00000000000..dddbce20079 --- /dev/null +++ b/dev/postgres-operator/0.0.1/CONFIG.md @@ -0,0 +1,9 @@ +# Configuration Options + +##### Connecting to other apps +If you need to connect this App to other Apps on TrueNAS SCALE, please refer to our "Linking Apps Together" guide: +https://truecharts.org/manual/linking/ + + +##### Available config options +In the future this page is going to contain an automated list of options available in the installation/edit UI. diff --git a/dev/postgres-operator/0.0.1/Chart.lock b/dev/postgres-operator/0.0.1/Chart.lock new file mode 100644 index 00000000000..7bc7823c824 --- /dev/null +++ b/dev/postgres-operator/0.0.1/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: common + repository: https://truecharts.org/ + version: 2.0.2 +- name: postgres-operator-ui + repository: https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator-ui/ + version: 1.6.2 +- name: postgres-operator + repository: https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator/ + version: 1.6.2 +digest: sha256:b0769cce163a0786257b00dd3a19e7406b56ccba4724666c8819e2af186ce1e4 +generated: "2021-04-09T21:00:02.3236431+02:00" diff --git a/dev/postgres-operator/0.0.1/Chart.yaml b/dev/postgres-operator/0.0.1/Chart.yaml new file mode 100644 index 00000000000..cf08e35eb9b --- /dev/null +++ b/dev/postgres-operator/0.0.1/Chart.yaml @@ -0,0 +1,44 @@ +apiVersion: v2 +kubeVersion: ">=1.16.0-0" +name: postgres-operator +version: 0.0.1 +upstream_version: 1.6.2 +appVersion: "auto" +description: Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes +type: application +deprecated: false +home: https://github.com/truecharts/apps/tree/master/incubator/postgres-operator +icon: https://truecharts.org/_static/img/postgres-operator-icon.png +keywords: + - database + - HA + - postgresql + - SQL + - postgres + - operator + - cloud-native + - patroni + - spilo +sources: + - https://github.com/zalando/postgres-operator +dependencies: + - name: common + repository: https://truecharts.org/ + version: 2.0.2 + # condition: + - name: postgres-operator-ui + repository: https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator-ui/ + version: 1.6.2 + # condition: + - name: postgres-operator + repository: https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator/ + version: 1.6.2 + # condition: +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: truecharts.org + - name: Ornias1993 + email: kjeld@schouten-lebbing.nl + url: truecharts.org +# annotations: diff --git a/dev/postgres-operator/0.0.1/README.md b/dev/postgres-operator/0.0.1/README.md new file mode 100644 index 00000000000..f30a6de8a54 --- /dev/null +++ b/dev/postgres-operator/0.0.1/README.md @@ -0,0 +1,56 @@ +# Introduction + +![Version: 0.0.1](https://img.shields.io/badge/Version-0.0.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: auto](https://img.shields.io/badge/AppVersion-auto-informational?style=flat-square) + +Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes + +TrueCharts are designed to be installed as TrueNAS SCALE app only. We can not guarantee this charts works as a stand-alone helm installation. +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/apps/issues/new/choose)** + +## Source Code + +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator-ui/ | postgres-operator-ui | 1.6.2 | +| https://raw.githubusercontent.com/zalando/postgres-operator/master/charts/postgres-operator/ | postgres-operator | 1.6.2 | +| https://truecharts.org/ | common | 2.0.0 | + +## Installing the Chart + +To install the chart with the release name `postgresql` + +- Open TrueNAS SCALE +- Go to Apps +- Click "Install" for this specific Apps +- Fill out the configuration form + +## Uninstalling the Chart + +To uninstall the `postgresql` deployment + +- Open TrueNAS SCALE +- Go to Apps +- Go to "Installed Apps" +- Expand the menu in the top-right corner of this App +- Click "Remove" for this specific Apps + +The command removes all the Kubernetes components associated with the chart **including storage volumes** _(Except hostPath Storage)_ and deletes the release. + +## Support + +- See the [Wiki](https://truecharts.org) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) +- Ask a [question](https://github.com/truecharts/apps/discussions) + + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) +All Rights Reserved - The TrueCharts Project diff --git a/dev/postgres-operator/0.0.1/app-readme.md b/dev/postgres-operator/0.0.1/app-readme.md new file mode 100644 index 00000000000..05fae63c56d --- /dev/null +++ b/dev/postgres-operator/0.0.1/app-readme.md @@ -0,0 +1,2 @@ +Postgres Operator creates and manages PostgreSQL clusters running in Kubernetes +This App is supplied by TrueCharts, for more information please visit https://truecharts.org diff --git a/dev/postgres-operator/0.0.1/charts/common-2.0.2.tgz b/dev/postgres-operator/0.0.1/charts/common-2.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3f0a16c757e91c399bfb71b21ecbdeb5b8e99aef GIT binary patch literal 22596 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

F0C>j8Lz>Ew0!WiP&Gg(L|5-DWLtZ<#} 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 A;{X5v literal 0 HcmV?d00001 diff --git a/dev/postgres-operator/0.0.1/charts/postgres-operator-ui-1.6.2.tgz b/dev/postgres-operator/0.0.1/charts/postgres-operator-ui-1.6.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2e5298164ecfbc25a5e9f16b227163df122cf264 GIT binary patch literal 4047 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 B{38GW literal 0 HcmV?d00001 diff --git a/dev/postgres-operator/0.0.1/ix_values.yaml b/dev/postgres-operator/0.0.1/ix_values.yaml new file mode 100644 index 00000000000..d8da27e62bb --- /dev/null +++ b/dev/postgres-operator/0.0.1/ix_values.yaml @@ -0,0 +1,12 @@ +image: + registry: registry.opensource.zalan.do + repository: acid/postgres-operator + tag: v1.6.2 + pullPolicy: "IfNotPresent" + +postgres-operator-ui: + # configure UI ENVs + envs: + targetNamespace: "*" + teams: + - "apps" diff --git a/dev/postgres-operator/0.0.1/questions.yaml b/dev/postgres-operator/0.0.1/questions.yaml new file mode 100644 index 00000000000..9b16a06991d --- /dev/null +++ b/dev/postgres-operator/0.0.1/questions.yaml @@ -0,0 +1,317 @@ +groups: + - name: "Container Image" + description: "Image to be used for container" + - name: "Workload Configuration" + description: "Configure workload deployment" + - name: "Configuration" + description: "additional container configuration" + - name: "Networking" + description: "Configure / service for container" + - name: "Storage and Devices" + description: "Persist and share data that is separate from the lifecycle of the container" + - name: "Resource Reservation" + description: "Specify resources to be allocated to workload" + - name: "Reverse Proxy Configuration" + description: "Reverse Proxy configuration" + - name: "Advanced" + description: "Advanced Configuration" + - name: "WARNING" + description: "WARNING" + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + +questions: + + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true + + # Update Policy + - variable: strategyType + group: "Container Image" + label: "Update Strategy" + schema: + type: string + default: "Recreate" + enum: + - value: "RollingUpdate" + description: "Create new pods and then kill old ones" + - value: "Recreate" + description: "Kill existing pods before creating new ones" + + # Configure Time Zone + # Configure Time Zone + - variable: timezone + group: "Container Image" + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + + - variable: postgres-operator + label: "Postgres-Operator Settings" + description: "These settings can be used to customise the postgres-operator" + group: "Configuration" + schema: + type: dict + attrs: + - variable: fullnameOverride + label: "fullnameOverride" + schema: + hidden: true + type: string + default: "postgres-operator" + - variable: configUsers + label: "" + schema: + hidden: true + type: dict + attrs: + - variable: replication_username + label: "replication_username" + schema: + hidden: true + type: string + default: "postgres" + - variable: configMajorVersionUpgrade + label: "" + schema: + hidden: true + type: dict + attrs: + - variable: major_version_upgrade_mode + label: "major_version_upgrade_mode" + schema: + hidden: true + type: string + default: "full" + - variable: configKubernetes + label: "" + schema: + hidden: true + type: dict + attrs: + - variable: watched_namespace + label: "watched_namespace" + schema: + hidden: true + type: string + default: "*" + - variable: inherited_labels + label: "inherited_labels" + schema: + hidden: true + type: string + default: "application, environment" + - variable: pod_environment_configmap + label: "pod_environment_configmap" + schema: + hidden: true + type: string + default: "default/envconfig" + + - variable: configGeneral + label: "" + schema: + hidden: true + type: dict + attrs: + - variable: kubernetes_use_configmaps + label: "kubernetes_use_configmaps" + schema: + hidden: false + type: string + default: "false" + - variable: securityContext + label: "" + schema: + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: configLogicalBackup + label: "Setup Logical Backup (s3)" + schema: + type: dict + attrs: + - variable: logical_backup_s3_access_key_id + label: "S3 Access Key ID" + schema: + type: string + default: "" + - variable: logical_backup_s3_bucket + label: "S3 bucket" + schema: + type: string + default: "my-bucket-url" + - variable: logical_backup_s3_endpoint + label: "S3 Endpoint" + schema: + type: string + default: "" + - variable: logical_backup_s3_region + label: "S3 Region" + schema: + type: string + default: "" + - variable: logical_backup_s3_secret_access_key + label: "S3 Secret Access Key" + schema: + type: string + default: "" + - variable: logical_backup_s3_sse + label: "S3 SSE" + schema: + type: string + default: "AES256" + - variable: logical_backup_schedule + label: "Cron format Schedule" + schema: + type: string + default: "30 00 * * *" + + # Configure Enviroment Variables + - variable: environmentVariables + label: "Image environment" + group: "Configuration" + schema: + type: list + default: [] + items: + - variable: environmentVariable + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + +## TrueCharts Specific + + - variable: ingress + label: "" + group: "Reverse Proxy Configuration" + schema: + type: dict + attrs: + - variable: main + label: "WebUI" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Web Reverse Proxy" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + label: "Reverse Proxy Type" + schema: + type: string + default: "HTTP" + hidden: true + editable: false + required: true + - variable: dynamicServiceName + label: "Service name to proxy to" + schema: + hidden: true + editable: false + type: string + default: "postgres-operator-ui" + - variable: servicePort + label: "Service port to proxy to" + schema: + hidden: true + editable: false + type: int + default: 80 + - variable: entrypoint + label: "Select Entrypoint" + schema: + type: string + default: "websecure" + required: true + enum: + - value: "websecure" + description: "Websecure: HTTPS/TLS port 443" + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "Domain Name" + required: true + schema: + type: string + - variable: path + label: "path" + schema: + type: string + required: true + hidden: true + default: "/" + - variable: certType + label: "Select Certificate Type" + schema: + type: string + default: "selfsigned" + enum: + - value: "" + description: "No Encryption/TLS/Certificates" + - value: "selfsigned" + description: "Self-Signed Certificate" + - value: "ixcert" + description: "TrueNAS SCALE Certificate" + - variable: certificate + label: "Select TrueNAS SCALE Certificate" + schema: + type: int + show_if: [["certType", "=", "ixcert"]] + $ref: + - "definitions/certificate" + - variable: authForwardURL + label: "Forward Authentication URL" + schema: + type: string + default: "" diff --git a/dev/postgres-operator/0.0.1/templates/common.yaml b/dev/postgres-operator/0.0.1/templates/common.yaml new file mode 100644 index 00000000000..2c57198c45c --- /dev/null +++ b/dev/postgres-operator/0.0.1/templates/common.yaml @@ -0,0 +1,2 @@ +{{ include "common.ingress" . }} +{{ include "common.resources.portal" . }} diff --git a/dev/postgres-operator/0.0.1/templates/envconfig.yaml b/dev/postgres-operator/0.0.1/templates/envconfig.yaml new file mode 100644 index 00000000000..983855e9b42 --- /dev/null +++ b/dev/postgres-operator/0.0.1/templates/envconfig.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: envconfig + namespace: default +data: + KUBERNETES_BYPASS_API_SERVICE: "false" diff --git a/dev/postgres-operator/0.0.1/test_values.yaml b/dev/postgres-operator/0.0.1/test_values.yaml new file mode 100644 index 00000000000..3298d8c8562 --- /dev/null +++ b/dev/postgres-operator/0.0.1/test_values.yaml @@ -0,0 +1,37 @@ +image: + registry: registry.opensource.zalan.do + repository: acid/postgres-operator + tag: v1.6.2 + pullPolicy: "IfNotPresent" + +postgres-operator: + fullnameOverride: "postgres-operator" + configUsers: + # postgres username used for replication between instances + replication_username: postgres + configMajorVersionUpgrade: + # "off": no upgrade, "manual": manifest triggers action, "full": minimal version violation triggers too + major_version_upgrade_mode: "full" + configKubernetes: + # enable_pod_antiaffinity: true + # pod_environment_configmap: "postgres-pod-config" + watched_namespace: "*" + # list of labels that can be inherited from the cluster manifest + inherited_labels: application, environment + +ingress: + main: + enabled: true + type: "HTTP" + entrypoint: "websecure" + certType: "selfsigned" + dynamicServiceName: "postgres-operator-ui" + servicePort: 8081 + annotations: {} + labels: {} + hosts: + - host: chart-example.local + paths: + - path: / + # Ignored if not kubeVersion >= 1.14-0 + pathType: Prefix diff --git a/dev/postgres-operator/0.0.1/values.yaml b/dev/postgres-operator/0.0.1/values.yaml new file mode 100644 index 00000000000..58eb9c684b0 --- /dev/null +++ b/dev/postgres-operator/0.0.1/values.yaml @@ -0,0 +1 @@ +# This file is empty on purpose, as it should not be used with TrueNAS SCALE diff --git a/dev/postgres-operator/item.yaml b/dev/postgres-operator/item.yaml new file mode 100644 index 00000000000..60074b1209d --- /dev/null +++ b/dev/postgres-operator/item.yaml @@ -0,0 +1,3 @@ +categories: + - media +icon_url: https://truecharts.org/_static/img/postgres-operator-icon.png diff --git a/docs/_static/img/postgres-operator-icon.png b/docs/_static/img/postgres-operator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1165736a4e1868522d801b11e04622ef1b446a4a GIT binary patch literal 23434 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�H-^<;5W# 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 Vh1VE7by^AjHn0NLo%P^m{|ADcv$X&K literal 0 HcmV?d00001 diff --git a/library/common/Chart.yaml b/library/common/Chart.yaml index 62f09101076..89d7b26e27e 100644 --- a/library/common/Chart.yaml +++ b/library/common/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 kubeVersion: ">=1.16.0-0" name: common -version: 2.0.3 +version: 2.1.0 # upstream_version: appVersion: none description: Function library for TrueCharts diff --git a/library/common/templates/_all.tpl b/library/common/templates/_all.tpl index d444582c15c..71ff1560547 100644 --- a/library/common/templates/_all.tpl +++ b/library/common/templates/_all.tpl @@ -42,4 +42,6 @@ Main entrypoint for the common library chart. It will render all underlying temp {{ include "common.ingress" . | nindent 0 }} {{ include "common.resources.portal" . | nindent 0 }} {{ include "common.storage.permissions" . | nindent 0 }} + {{ include "common.resources.postgres" . | nindent 0 }} + {{- end -}} diff --git a/library/common/templates/_pvc.tpl b/library/common/templates/_pvc.tpl index 1e00d3e44fa..3cae71c7897 100644 --- a/library/common/templates/_pvc.tpl +++ b/library/common/templates/_pvc.tpl @@ -33,4 +33,19 @@ of all the entries of the persistence key. {{- include "common.classes.pvc" $ -}} {{- end }} {{- end }} + + {{/* + This is kept seperate, to enable us ot add "persistence" to questions.yaml and keep this out of it + */}} + {{- range $index, $PVC := .Values.backupPersistence }} + {{- if and $PVC.enabled (not (or $PVC.emptyDir $PVC.existingClaim)) -}} + {{- $persistenceValues := $PVC -}} + {{- if not $persistenceValues.nameSuffix -}} + {{- $_ := set $persistenceValues "nameSuffix" "buildinBackup" -}} + {{- end -}} + {{- $_ := set $ "ObjectValues" (dict "persistence" $persistenceValues) -}} + {{- print ("---") | nindent 0 -}} + {{- include "common.classes.pvc" $ -}} + {{- end }} + {{- end }} {{- end }} diff --git a/library/common/templates/classes/_pvc.tpl b/library/common/templates/classes/_pvc.tpl index 45f67f6d5a6..5799ae0a8f8 100644 --- a/library/common/templates/classes/_pvc.tpl +++ b/library/common/templates/classes/_pvc.tpl @@ -28,7 +28,9 @@ within the common library. {{- end -}} {{ end -}} {{- $pvcName := include "common.names.fullname" . -}} -{{- if hasKey $values "nameSuffix" -}} +{{- if hasKey $values "nameOverride" -}} + {{- $pvcName = $values.nameOverride -}} +{{- else if hasKey $values "nameSuffix" -}} {{- $pvcName = printf "%v-%v" $pvcName $values.nameSuffix -}} {{ end -}} kind: PersistentVolumeClaim @@ -54,5 +56,7 @@ spec: storage: {{ required (printf "size is required for PVC %v" $pvcName) $values.size | quote }} {{- if $values.storageClass }} storageClassName: {{ include "common.storage.class" . }} + {{- else }} + storageClassName: {{ ( printf "%v-%v" "ix-storage-class" .Release.Name ) }} {{- end }} {{- end -}} diff --git a/library/common/templates/classes/ingress/_ingress.tpl b/library/common/templates/classes/ingress/_ingress.tpl index f419986de58..18d9b68a71d 100644 --- a/library/common/templates/classes/ingress/_ingress.tpl +++ b/library/common/templates/classes/ingress/_ingress.tpl @@ -28,6 +28,11 @@ within the common library. {{- $svcName := $values.serviceName | default $ingressName -}} +{{- if $values.dynamicServiceName }} + {{- $dynamicServiceName := printf "%v-%v" .Release.Name $values.dynamicServiceName -}} + {{- $svcName = $dynamicServiceName -}} +{{- end }} + {{- if $values.servicePort }} {{- $svcPort = $values.servicePort -}} {{- end }} diff --git a/library/common/templates/lib/resources/_postgres.tpl b/library/common/templates/lib/resources/_postgres.tpl new file mode 100644 index 00000000000..4dc66d7c5ab --- /dev/null +++ b/library/common/templates/lib/resources/_postgres.tpl @@ -0,0 +1,112 @@ +{{- define "common.resources.postgres" -}} +{{- if .Values.enableDB -}} + +{{- $instanceName := ( printf "%v%v" ( include "common.names.fullname" .|lower ) "-postgres" ) -}} +{{- $superuser := ( default (keys .Values.postgresql.users | first ) .Values.dbsuperuser.user ) -}} +{{- $secretName := ( printf "%s.%s.credentials.postgresql.acid.zalan.do" ( $superuser ) ( $instanceName ) ) -}} +{{- $backupPVCSubpath := ( default (printf "%s/%s" .Values.dbBackup.subpathPrefix (include "common.names.fullname" .)) .Values.dbBackup.subpath ) -}} +{{- $storageClass := ( printf "%v-%v" "ix-storage-class" .Release.Name ) -}} + +{{- if not .Values.postgresql.teamId -}} + {{- $_ := set .Values.postgresql "teamId" (include "common.names.fullname" .) }} +{{- end}} + +--- + +apiVersion: v1 +kind: Secret +metadata: + labels: + {{- include "common.labels" . | nindent 4 }} + application: spilo + team: {{ include "common.names.fullname" . }} + "helm.sh/hook": "pre-install" + "helm.sh/hook-delete-policy": "pre-delete" + name: {{ $secretName }} +stringData: + username: {{ $superuser }} + password: {{ default (randAlphaNum 50) .Values.dbsuperuser.password }} +type: Opaque + +--- +{{/* +CRD that requiests postgres-operator to spin-up a postgresql instance (or multiple in HA) +*/}} +apiVersion: "acid.zalan.do/v1" +kind: postgresql +metadata: + name: {{ $instanceName }} + labels: + {{- include "common.labels" . | nindent 4 }} +spec: + volume: + size: "100Gi" + storageClass: {{ $storageClass | quote }} + {{- .Values.postgresql | toYaml | nindent 2 }} + + +{{/* +Special magic cronjob that does a extra backup in addition to postgres-operator to a PVC of your choice. +*/}} +{{- if .Values.dbBackup.existingClaim -}} +--- +# ------------------- CronJob ------------------- # +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: {{ include "common.names.fullname" . }}-backup + labels: + {{- include "common.labels" . | nindent 4 }} +spec: + schedule: {{ .Values.dbBackup.schedule | quote }} + concurrencyPolicy: Replace + jobTemplate: + spec: + template: + metadata: + name: {{ include "common.names.fullname" . }}-backup + labels: + {{- include "common.labels.selectorLabels" . | nindent 12 }} + spec: + containers: + - name: backup + image: "{{ .Values.dbBackup.image.repository}}:{{ .Values.dbBackup.image.tag}}" + imagePullPolicy: {{ .Values.dbBackup.image.imagePullPolicy}} + command: + - /bin/sh + - -ce + - | + echo "$(date) - Start dump" + pg_dumpall > /backup/new && mv /backup/new /backup/backup + echo "$(date) - End dump" + ls -lh /backup + resources: + {{- .Values.dbBackup.resources | toYaml | nindent 16 }} + env: + - name: PGHOST + value: {{ $instanceName }} + - name: PGUSER + valueFrom: + secretKeyRef: + name: {{ $secretName }} + key: username + - name: PGPASSWORD + valueFrom: + secretKeyRef: + name: {{ $secretName }} + key: password + volumeMounts: + - mountPath: /backup + name: backup-volume + subPath: {{ $backupPVCSubpath }} + restartPolicy: OnFailure + volumes: + - name: backup-volume + persistentVolumeClaim: + claimName: {{ .Values.dbBackup.existingClaim }} +{{- end -}} + + + +{{- end -}} +{{- end -}} diff --git a/library/common/values.yaml b/library/common/values.yaml index 0f8dfbc4fff..e89a5fe68ea 100644 --- a/library/common/values.yaml +++ b/library/common/values.yaml @@ -32,6 +32,7 @@ serviceAccount: # If not set and create is true, a name is generated using the fullname template name: "" + env: {} # TZ: UTC @@ -240,6 +241,29 @@ persistence: emptyDir: true mountPath: /shared +# Special PVC instance, that does get affected by putting "persistence" into questions.yaml +backupPersistence: + buildinBackup: + enabled: true + nameOverride: "buildinBackup" + ## configuration data Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + ## storageClass: "-" + ## + ## If you want to reuse an existing claim, you can pass the name of the PVC using + ## the existingClaim variable + # existingClaim: your-claim + # subPath: some-subpath + accessMode: ReadWriteOnce + size: 100Gi + ## Set to true to retain the PVC upon helm uninstall + skipuninstall: false + additionalVolumes: [] additionalVolumeMounts: [] @@ -312,3 +336,58 @@ fixMountPermissions: true # hostPathEnabled: false # hostPath: "" # setPermissions: true + + +#### DB Values + +# See all operator values at https://github.com/zalando/postgres-operator/blob/master/docs/reference/cluster_manifest.md +postgresql: + # -- team Id for the DB cluster + teamId: + # -- Number of replicas + # It will be automatically set with the number of replicaNodes so any values set here are ignored. + numberOfInstances: 1 + # -- DB users to create (see operator) + users: + postgres: + - superuser + - createdb + + # -- databases to create and their user + databases: + postgres: postgres + postgresql: + # -- Postgres version to deploy - see which versions are supported by the operator + version: "13" + +dbsuperuser: + # -- Superuser user used for cronjobs + # @default -- first user in postgresql.users + user: + # -- Superuser password + # @default -- randomly generated on first install of the chart + password: + # -- Superuser k8s secret name. It must match the patter used by the operator + # @default -- ..credentials.postgresql.acid.zalan.do + secret: + + +dbBackup: + # Enable backups to a PVC + # defaults to our default buildinBackup PVC, but can be overridden in the future + existingClaim: buildinBackup + # -- Backup schedule for postgres dumps + schedule: "@daily" + # -- Persistent volume claim subpath prefix for the backups + subpathPrefix: "backup/db" + # -- Persistent volume claim subpath for the backups + # @default: + subpath: + image: + repository: postgres + pullPolicy: IfNotPresent + tag: latest + resources: + requests: + memory: "10Mi" + cpu: "5m"