From cdc3450b7932274b397664a68ac479e6e3d239b1 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Thu, 9 Sep 2021 20:08:30 +0000 Subject: [PATCH] Commit new App releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/postgresql/2.0.0/CHANGELOG.md | 8 + stable/postgresql/2.0.0/CONFIG.md | 8 + stable/postgresql/2.0.0/Chart.lock | 6 + stable/postgresql/2.0.0/Chart.yaml | 28 + stable/postgresql/2.0.0/README.md | 37 + stable/postgresql/2.0.0/app-readme.md | 3 + .../postgresql/2.0.0/charts/common-7.0.0.tgz | Bin 0 -> 36366 bytes stable/postgresql/2.0.0/helm-values.md | 40 + stable/postgresql/2.0.0/ix_values.yaml | 28 + stable/postgresql/2.0.0/questions.yaml | 1071 +++++++++++++++++ .../templates/backup-postgres-config.yaml | 15 + stable/postgresql/2.0.0/templates/common.yaml | 2 + stable/postgresql/2.0.0/templates/secret.yaml | 13 + .../upgrade-backup-postgres-hook.yaml | 56 + stable/postgresql/2.0.0/test_values.yaml | 50 + stable/postgresql/2.0.0/values.yaml | 0 16 files changed, 1365 insertions(+) create mode 100644 stable/postgresql/2.0.0/CHANGELOG.md create mode 100644 stable/postgresql/2.0.0/CONFIG.md create mode 100644 stable/postgresql/2.0.0/Chart.lock create mode 100644 stable/postgresql/2.0.0/Chart.yaml create mode 100644 stable/postgresql/2.0.0/README.md create mode 100644 stable/postgresql/2.0.0/app-readme.md create mode 100644 stable/postgresql/2.0.0/charts/common-7.0.0.tgz create mode 100644 stable/postgresql/2.0.0/helm-values.md create mode 100644 stable/postgresql/2.0.0/ix_values.yaml create mode 100644 stable/postgresql/2.0.0/questions.yaml create mode 100644 stable/postgresql/2.0.0/templates/backup-postgres-config.yaml create mode 100644 stable/postgresql/2.0.0/templates/common.yaml create mode 100644 stable/postgresql/2.0.0/templates/secret.yaml create mode 100644 stable/postgresql/2.0.0/templates/upgrade-backup-postgres-hook.yaml create mode 100644 stable/postgresql/2.0.0/test_values.yaml create mode 100644 stable/postgresql/2.0.0/values.yaml diff --git a/stable/postgresql/2.0.0/CHANGELOG.md b/stable/postgresql/2.0.0/CHANGELOG.md new file mode 100644 index 00000000000..fe7a1b9e6e2 --- /dev/null +++ b/stable/postgresql/2.0.0/CHANGELOG.md @@ -0,0 +1,8 @@ + + +### [postgresql-2.0.0](https://github.com/truecharts/apps/compare/postgresql-1.6.6...postgresql-2.0.0) (2021-09-09) + +#### Chore + +* fix postgresql version + diff --git a/stable/postgresql/2.0.0/CONFIG.md b/stable/postgresql/2.0.0/CONFIG.md new file mode 100644 index 00000000000..fc9b2fa2d5f --- /dev/null +++ b/stable/postgresql/2.0.0/CONFIG.md @@ -0,0 +1,8 @@ +# 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 Internally" quick-start guide: +https://truecharts.org/manual/Quick-Start%20Guides/14-linking-apps/ + +##### 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/stable/postgresql/2.0.0/Chart.lock b/stable/postgresql/2.0.0/Chart.lock new file mode 100644 index 00000000000..dcc9f0f2e78 --- /dev/null +++ b/stable/postgresql/2.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://truecharts.org/ + version: 7.0.0 +digest: sha256:9de1379f70136c415820876d19a11e9d6b9e3ae220fbeb6f5bbe08fcb072382e +generated: "2021-09-09T20:07:27.262472758Z" diff --git a/stable/postgresql/2.0.0/Chart.yaml b/stable/postgresql/2.0.0/Chart.yaml new file mode 100644 index 00000000000..0b4640022c0 --- /dev/null +++ b/stable/postgresql/2.0.0/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +appVersion: "13.4" +dependencies: +- name: common + repository: https://truecharts.org/ + version: 7.0.0 +deprecated: false +description: PostgresSQL +home: https://github.com/truecharts/apps/tree/master/stable/postgres +icon: https://d1q6f0aelx0por.cloudfront.net/product-logos/library-postgres-logo.png +keywords: +- postgres +- postgressql +- dtabase +- sql +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: truecharts.org +- email: kjeld@schouten-lebbing.nl + name: Ornias1993 + url: truecharts.org +name: postgresql +sources: +- https://www.postgresql.org/ +type: application +version: 2.0.0 diff --git a/stable/postgresql/2.0.0/README.md b/stable/postgresql/2.0.0/README.md new file mode 100644 index 00000000000..ff3c1088d00 --- /dev/null +++ b/stable/postgresql/2.0.0/README.md @@ -0,0 +1,37 @@ +# Introduction + +PostgresSQL + +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://truecharts.org/ | common | 7.0.0 | + +## Installing the Chart + +To install this App on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/03-Installing-an-App/). + +## Uninstalling the Chart + +To remove this App from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/07-Deleting-an-App/). + +## Support + +- Please check our [quick-start guides](https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/) first. +- See the [Wiki](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) +--- +All Rights Reserved - The TrueCharts Project diff --git a/stable/postgresql/2.0.0/app-readme.md b/stable/postgresql/2.0.0/app-readme.md new file mode 100644 index 00000000000..88e9ec74b99 --- /dev/null +++ b/stable/postgresql/2.0.0/app-readme.md @@ -0,0 +1,3 @@ +PostgresSQL + +This App is supplied by TrueCharts, for more information please visit https://truecharts.org diff --git a/stable/postgresql/2.0.0/charts/common-7.0.0.tgz b/stable/postgresql/2.0.0/charts/common-7.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..da0df7eb101e3ee019b01c72d206405798fb0162 GIT binary patch literal 36366 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 literal 0 HcmV?d00001 diff --git a/stable/postgresql/2.0.0/helm-values.md b/stable/postgresql/2.0.0/helm-values.md new file mode 100644 index 00000000000..c4ee872e772 --- /dev/null +++ b/stable/postgresql/2.0.0/helm-values.md @@ -0,0 +1,40 @@ +# Default Helm-Values + +TrueCharts is primarily build to supply TrueNAS SCALE Apps. +However, we also supply all Apps as standard Helm-Charts. In this document we aim to document the default values in our values.yaml file. + +Most of our Apps also consume our "common" Helm Chart. +If this is the case, this means that all values.yaml values are set to the common chart values.yaml by default. This values.yaml file will only contain values that deviate from the common chart. +You will, however, be able to use all values referenced in the common chart here, besides the values listed in this document. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| enableUpgradeBackup | bool | `false` | | +| envTpl.POSTGRES_DB | string | `"{{ .Values.postgresqlDatabase }}"` | | +| envTpl.POSTGRES_USER | string | `"{{ .Values.postgresqlUsername }}"` | | +| envValueFrom.POSTGRES_PASSWORD.secretKeyRef.key | string | `"postgresql-password"` | | +| envValueFrom.POSTGRES_PASSWORD.secretKeyRef.name | string | `"{{ ( tpl .Values.existingSecret $ ) | default ( include \"common.names.fullname\" . ) }}"` | | +| existingSecret | string | `""` | | +| image.pullPolicy | string | `"IfNotPresent"` | | +| image.repository | string | `"postgres"` | | +| image.tag | string | `"13.4"` | | +| persistence.db.accessMode | string | `"ReadWriteOnce"` | | +| persistence.db.enabled | bool | `true` | | +| persistence.db.mountPath | string | `"/var/lib/postgresql/data"` | | +| persistence.db.size | string | `"100Gi"` | | +| persistence.db.type | string | `"pvc"` | | +| persistence.dbbackups.accessMode | string | `"ReadWriteOnce"` | | +| persistence.dbbackups.enabled | bool | `true` | | +| persistence.dbbackups.mountPath | string | `"/dbbackups"` | | +| persistence.dbbackups.size | string | `"100Gi"` | | +| persistence.dbbackups.type | string | `"pvc"` | | +| postgresqlDatabase | string | `"test"` | | +| postgresqlPassword | string | `"testpass"` | | +| postgresqlUsername | string | `"test"` | | +| service.main.enabled | bool | `true` | | +| service.main.ports.main.port | int | `5432` | | +| strategy.type | string | `"Recreate"` | | + +All Rights Reserved - The TrueCharts Project diff --git a/stable/postgresql/2.0.0/ix_values.yaml b/stable/postgresql/2.0.0/ix_values.yaml new file mode 100644 index 00000000000..d0916814ae0 --- /dev/null +++ b/stable/postgresql/2.0.0/ix_values.yaml @@ -0,0 +1,28 @@ +## +# This file contains Values.yaml content that gets added to the output of questions.yaml +# It's ONLY meant for content that the user is NOT expected to change. +# Example: Everything under "image" is not included in questions.yaml but is included here. +## + +image: + repository: postgres + pullPolicy: IfNotPresent + tag: "13.4" + + +envValueFrom: + POSTGRES_PASSWORD: + secretKeyRef: + name: '{{ .Values.existingSecret | default ( include "common.names.fullname" . ) }}' + key: "postgresql-password" + +envTpl: + POSTGRES_USER: "{{ .Values.postgresqlUsername }}" + POSTGRES_DB: "{{ .Values.postgresqlDatabase }}" +# POSTGRESQL_POSTGRES_PASSWORD: "{{ .Values.postgrespassword }}" +# POSTGRESQL_PASSWORD: "{{ .Values.password }}" + +## +# Most other defaults are set in questions.yaml +# For other options please refer to the wiki, default_values.yaml or the common library chart +## diff --git a/stable/postgresql/2.0.0/questions.yaml b/stable/postgresql/2.0.0/questions.yaml new file mode 100644 index 00000000000..0eac2b92df5 --- /dev/null +++ b/stable/postgresql/2.0.0/questions.yaml @@ -0,0 +1,1071 @@ +groups: + - name: "Container Image" + description: "Image to be used for container" + - name: "Controller" + description: "Configure workload deployment" + - name: "Container Configuration" + description: "additional container configuration" + - name: "App Configuration" + description: "App specific config options" + - name: "Networking and Services" + description: "Configure Network and Services for container" + - name: "Storage and Persistence" + description: "Persist and share data that is separate from the container" + - name: "Ingress" + description: "Ingress Configuration" + - name: "Security and Permissions" + description: "Configure security context and permissions" + - name: "Resources and Devices" + description: "Specify resources/devices to be allocated to workload" + - name: "Advanced" + description: "Advanced Configuration" +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: false + - variable: controller + group: "Controller" + label: "" + schema: + type: dict + attrs: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + required: true + enum: + - value: "Recreate" + description: "Recreate: Kill existing pods before creating new ones" + - value: "RollingUpdate" + description: "RollingUpdate: Create new pods and then kill old ones" + - value: "OnDelete" + description: "(Legacy) OnDelete: ignore .spec.template changes" + - variable: labelsList + label: "Controller Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: annotationsList + label: " Controller Annotations" + schema: + type: list + default: [] + items: + - variable: annotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + + - variable: podLabelsList + group: "Container Configuration" + label: "Pod Labels" + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: podAnnotationsList + group: "Container Configuration" + label: "Pod Annotations" + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: termination + group: "Container Configuration" + label: "Termination settings" + schema: + type: dict + attrs: + - variable: gracePeriodSeconds + label: "Grace Period Seconds" + schema: + type: int + default: 10 + + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + type: dict + attrs: + - variable: TZ + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + + # Configure Enviroment Variables + - variable: envList + label: "Image environment" + group: "Container Configuration" + schema: + type: list + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: postgresqlDatabase + group: "App Configuration" + label: "Database Name" + schema: + type: string + default: "mydatabase" + required: true + - variable: postgresqlUsername + group: "App Configuration" + label: "Database User" + schema: + type: string + default: "mydatabaseuser" + required: true + - variable: postgresqlPassword + group: "App Configuration" + label: "Database Password" + schema: + type: string + default: "" + required: true + + - variable: hostNetwork + group: "Networking and Services" + label: "Enable Host Networking" + schema: + type: boolean + default: false + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the service" + schema: + type: boolean + default: true + hidden: true + - variable: type + label: "Service Type" + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: "ClusterIP" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + - value: "LoadBalancer" + description: "LoadBalancer" + - variable: loadBalancerIP + label: "LoadBalancer IP" + description: "LoadBalancerIP" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: "External IP" + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the port" + schema: + type: boolean + default: true + hidden: true + - variable: protocol + label: "Port Type" + schema: + type: string + default: "TCP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: targetPort + label: "Target Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 5432 + editable: false + hidden: true + - variable: port + label: "Container Port" + schema: + type: int + default: 5432 + editable: true + required: true + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort" + schema: + type: int + min: 9000 + max: 65535 + default: 36009 + + + - variable: serviceList + label: "Additional Services" + group: "Networking and Services" + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: "Custom Service" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the service" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Name" + schema: + type: string + default: "" + - variable: type + label: "Service Type" + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: "NodePort" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + - value: "LoadBalancer" + description: "LoadBalancer" + - variable: loadBalancerIP + label: "LoadBalancer IP" + description: "LoadBalancerIP" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: "External IP" + schema: + type: string + - variable: portsList + label: "Additional Service Ports" + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: "Custom ports" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the port" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Port Name" + schema: + type: string + default: "" + - variable: protocol + label: "Port Type" + schema: + type: string + default: "TCP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: targetPort + label: "Target Port" + description: "This port exposes the container port on the service" + schema: + type: int + required: true + - variable: port + label: "Container Port" + schema: + type: int + required: true + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort" + schema: + type: int + min: 9000 + max: 65535 + + - variable: persistence + label: "Integrated Persistent Storage" + group: "Storage and Persistence" + schema: + type: dict + attrs: + - variable: db + label: "App db Storage" + description: "Stores the Application Database." + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "pvc" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/var/lib/postgresql/data" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PV" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + - variable: dbbackups + label: "App backup Storage" + description: "Stores the Application backups." + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "pvc" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/dbbackups" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PV" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + - variable: persistenceList + label: "Additional app storage" + group: "Storage and Persistence" + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: "Custom Storage" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the storage" + schema: + type: boolean + default: true + - variable: type + label: "(Advanced) Type of Storage" + description: "Sets the persistence type" + schema: + type: string + default: "hostPath" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "hostPath Type" + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "DirectoryOrCreate" + description: "DirectoryOrCreate" + - value: "Directory" + description: "Directory" + - value: "FileOrCreate" + description: "FileOrCreate" + - value: "File" + description: "File" + - value: "Socket" + description: "Socket" + - value: "CharDevice" + description: "CharDevice" + - value: "BlockDevice" + description: "BlockDevice" + - variable: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + required: true + default: "" + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PVC" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + + - variable: ingressList + label: "Additional Ingress" + group: "Ingress" + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: "Custom Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Ingress" + schema: + type: boolean + default: true + hidden: true + - variable: name + label: "Name" + schema: + type: string + default: "" + - variable: ingressClassName + label: "IngressClass Name" + schema: + type: string + default: "" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: annotationsList + label: "Annotations" + schema: + type: list + default: [] + items: + - variable: annotationItem + label: "Label" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: hostEntry + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "HostName" + schema: + type: string + default: "" + required: true + - variable: paths + label: "Paths" + schema: + type: list + default: [] + items: + - variable: pathEntry + label: "Host" + schema: + type: dict + attrs: + - variable: path + label: "path" + schema: + type: string + required: true + default: "/" + - variable: pathType + label: "pathType" + schema: + type: string + required: true + default: "Prefix" + - variable: service + label: "Linked Service" + schema: + type: dict + attrs: + - variable: name + label: "Service Name" + schema: + type: string + default: "" + - variable: port + label: "Service Port" + schema: + type: int + - variable: tls + label: "TLS-Settings" + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: "Host" + schema: + type: dict + attrs: + - variable: hosts + label: "Certificate Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: "Select TrueNAS SCALE Certificate" + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: "Traefik Entrypoint" + description: "Entrypoint used by Traefik when using Traefik as Ingress Provider" + schema: + type: string + default: "websecure" + required: true + - variable: middlewares + label: "Traefik Middlewares" + description: "Add previously created Traefik Middlewares to this Ingress" + schema: + type: list + default: [] + items: + - variable: name + label: "Name" + schema: + type: string + default: "" + required: true + + + - variable: securityContext + group: "Security and Permissions" + label: "Security Context" + schema: + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: true + - variable: resources + group: "Resources and Devices" + label: "" + schema: + type: dict + attrs: + - variable: limits + label: "Advanced Limit Resource Consumption" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "2000m" + valid_chars: '^([0-9]+)(\.[0-9]?|m?)$' + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "2Gi" + valid_chars: '^([0-9.]+)([EPTGMK]i?|[EPTGMK]?|e[0-9]+)$' + - variable: requests + label: "Advanced Request minimum resources required" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "10m" + valid_chars: '^([0-9]+)(\.[0-9]?|m?)$' + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "50Mi" + valid_chars: '^([0-9.]+)([EPTGMK]i?|[EPTGMK]?|e[0-9]+)$' + + + - variable: autoscaling + group: "Resources and Devices" + label: "Horizontal Pod Autoscaler" + schema: + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: target + label: "Target" + description: "deployment name, defaults to main deployment" + schema: + type: string + default: "" + - variable: minReplicas + label: "Minimum Replicas" + schema: + type: int + default: 1 + - variable: maxReplicas + label: "Maximum Replicas" + schema: + type: int + default: 5 + - variable: targetCPUUtilizationPercentage + label: "Target CPU Utilization Percentage" + schema: + type: int + default: 80 + - variable: targetMemoryUtilizationPercentage + label: "Target Memory Utilization Percentage" + schema: + type: int + default: 80 diff --git a/stable/postgresql/2.0.0/templates/backup-postgres-config.yaml b/stable/postgresql/2.0.0/templates/backup-postgres-config.yaml new file mode 100644 index 00000000000..e52eb2ed5a1 --- /dev/null +++ b/stable/postgresql/2.0.0/templates/backup-postgres-config.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "postgres-backup-hook-config-map" + annotations: + rollme: {{ randAlphaNum 5 | quote }} +data: + entrypoint.sh: |- + #!/bin/sh + cmd="/docker-entrypoint.sh postgres" + eval "${cmd}" & disown; + until pg_isready; do + sleep 5; + done; + pg_dump -U {{ .Values.postgresqlUser }} -d {{ .Values.postgresqlDatabase }} > /dbbackups/$BACKUP_NAME; diff --git a/stable/postgresql/2.0.0/templates/common.yaml b/stable/postgresql/2.0.0/templates/common.yaml new file mode 100644 index 00000000000..9705d4f5fa6 --- /dev/null +++ b/stable/postgresql/2.0.0/templates/common.yaml @@ -0,0 +1,2 @@ + +{{ include "common.all" . }} diff --git a/stable/postgresql/2.0.0/templates/secret.yaml b/stable/postgresql/2.0.0/templates/secret.yaml new file mode 100644 index 00000000000..be7022c005f --- /dev/null +++ b/stable/postgresql/2.0.0/templates/secret.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "common.names.fullname" . }} + labels: + {{- include "common.labels" . | nindent 4 }} + annotations: + {{- with .Values.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} +type: Opaque +data: + postgresql-password: {{ ( .Values.postgresqlPassword | default "empty" ) | b64enc | quote }} diff --git a/stable/postgresql/2.0.0/templates/upgrade-backup-postgres-hook.yaml b/stable/postgresql/2.0.0/templates/upgrade-backup-postgres-hook.yaml new file mode 100644 index 00000000000..516ee5180a6 --- /dev/null +++ b/stable/postgresql/2.0.0/templates/upgrade-backup-postgres-hook.yaml @@ -0,0 +1,56 @@ +{{- if and ( .Values.enableUpgradeBackup ) ( .Values.ixChartContext ) -}} +{{- if .Values.ixChartContext.isUpgrade -}} +{{- $upgradeDict := .Values.ixChartContext.upgradeMetadata -}} +{{ $values := (. | mustDeepCopy) }} +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: "pre-upgrade-hook2" + annotations: + "helm.sh/hook": pre-upgrade + "helm.sh/hook-weight": "1" + "helm.sh/hook-delete-policy": hook-succeeded + rollme: {{ randAlphaNum 5 | quote }} +spec: + template: + metadata: + name: "pre-upgrade-hook2" + spec: + restartPolicy: Never + containers: + - name: {{ .Chart.Name }}-postgres-backup + image: {{ printf "%v:%v" .Values.image.repository .Values.image.tag}} + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: BACKUP_NAME + value: {{- printf "postgres-backup-from-%s-to-%s-revision-%d" $upgradeDict.oldChartVersion $upgradeDict.newChartVersion (int64 $upgradeDict.preUpgradeRevision) -}} + - name: POSTGRES_USER + value: {{ .Values.postgresqlUsername | quote }} + - name: POSTGRES_DB + value: {{ .Values.postgresqlDatabase | quote }} + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: {{ ( .Values.existingSecret | default ( include "common.names.fullname" . ) ) | quote }} + key: "postgresql-password" + command: + - "/bin/backup_entrypoint.sh" + volumeMounts: + - name: backup-script-configmap + mountPath: /bin/backup_entrypoint.sh + readOnly: true + subPath: entrypoint.sh + {{- with (include "common.controller.volumeMounts" . | trim) }} + {{ nindent 4 . }} + {{- end }} + volumes: + - name: backup-script-configmap + configMap: + defaultMode: 0700 + name: "postgres-backup-hook-config-map" + {{- with (include "common.controller.volumes" . | trim) }} + {{- nindent 2 . }} + {{- end }} +{{- end -}} +{{- end -}} diff --git a/stable/postgresql/2.0.0/test_values.yaml b/stable/postgresql/2.0.0/test_values.yaml new file mode 100644 index 00000000000..d4da044db4c --- /dev/null +++ b/stable/postgresql/2.0.0/test_values.yaml @@ -0,0 +1,50 @@ +image: + repository: postgres + pullPolicy: IfNotPresent + tag: "13.4" + +strategy: + type: Recreate + + +service: + main: + enabled: true + ports: + main: + port: 5432 + +## TODO: Fix the backup-on-upgrade system +enableUpgradeBackup: false + +persistence: + db: + enabled: true + mountPath: "/var/lib/postgresql/data" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" + dbbackups: + enabled: true + mountPath: "/dbbackups" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" + +postgresqlPassword: "testpass" +postgresqlUsername: "test" +postgresqlDatabase: "test" +existingSecret: "" + + +envValueFrom: + POSTGRES_PASSWORD: + secretKeyRef: + name: '{{ ( tpl .Values.existingSecret $ ) | default ( include "common.names.fullname" . ) }}' + key: "postgresql-password" + +envTpl: + POSTGRES_USER: "{{ .Values.postgresqlUsername }}" + POSTGRES_DB: "{{ .Values.postgresqlDatabase }}" +# POSTGRESQL_POSTGRES_PASSWORD: "{{ .Values.postgrespassword }}" +# POSTGRESQL_PASSWORD: "{{ .Values.password }}" diff --git a/stable/postgresql/2.0.0/values.yaml b/stable/postgresql/2.0.0/values.yaml new file mode 100644 index 00000000000..e69de29bb2d