From 04c4c7b00da6e6ed1d134ba1a68b7add394c7047 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Sun, 3 Dec 2023 20:12:45 +0000 Subject: [PATCH] Publish new changes in catalog --- community/odoo/2.0.0/Chart.lock | 6 + community/odoo/2.0.0/Chart.yaml | 26 + community/odoo/2.0.0/README.md | 11 + community/odoo/2.0.0/app-readme.md | 11 + community/odoo/2.0.0/charts/common-1.2.3.tgz | Bin 0 -> 63003 bytes community/odoo/2.0.0/ci/basic-values.yaml | 12 + community/odoo/2.0.0/ci/extra-values.yaml | 19 + community/odoo/2.0.0/ix_values.yaml | 59 ++ community/odoo/2.0.0/metadata.yaml | 13 + community/odoo/2.0.0/migrations/migrate | 51 ++ community/odoo/2.0.0/questions.yaml | 626 ++++++++++++++++++ community/odoo/2.0.0/templates/NOTES.txt | 1 + .../odoo/2.0.0/templates/_configuration.tpl | 64 ++ community/odoo/2.0.0/templates/_odoo.tpl | 64 ++ .../odoo/2.0.0/templates/_persistence.tpl | 60 ++ community/odoo/2.0.0/templates/_portal.tpl | 12 + community/odoo/2.0.0/templates/_postgres.tpl | 6 + community/odoo/2.0.0/templates/_service.tpl | 17 + community/odoo/2.0.0/templates/common.yaml | 13 + community/odoo/2.0.0/to_keep_versions.md | 6 + 20 files changed, 1077 insertions(+) create mode 100644 community/odoo/2.0.0/Chart.lock create mode 100644 community/odoo/2.0.0/Chart.yaml create mode 100644 community/odoo/2.0.0/README.md create mode 100644 community/odoo/2.0.0/app-readme.md create mode 100644 community/odoo/2.0.0/charts/common-1.2.3.tgz create mode 100644 community/odoo/2.0.0/ci/basic-values.yaml create mode 100644 community/odoo/2.0.0/ci/extra-values.yaml create mode 100644 community/odoo/2.0.0/ix_values.yaml create mode 100644 community/odoo/2.0.0/metadata.yaml create mode 100755 community/odoo/2.0.0/migrations/migrate create mode 100644 community/odoo/2.0.0/questions.yaml create mode 100644 community/odoo/2.0.0/templates/NOTES.txt create mode 100644 community/odoo/2.0.0/templates/_configuration.tpl create mode 100644 community/odoo/2.0.0/templates/_odoo.tpl create mode 100644 community/odoo/2.0.0/templates/_persistence.tpl create mode 100644 community/odoo/2.0.0/templates/_portal.tpl create mode 100644 community/odoo/2.0.0/templates/_postgres.tpl create mode 100644 community/odoo/2.0.0/templates/_service.tpl create mode 100644 community/odoo/2.0.0/templates/common.yaml create mode 100644 community/odoo/2.0.0/to_keep_versions.md diff --git a/community/odoo/2.0.0/Chart.lock b/community/odoo/2.0.0/Chart.lock new file mode 100644 index 0000000000..8c4f99b5ae --- /dev/null +++ b/community/odoo/2.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.2.3 +digest: sha256:e6ff49b06bf5d4d159e505ae6d153f36cd46170bb519caf90462cd5caebfd0fb +generated: "2023-11-15T18:40:05.852239091+02:00" diff --git a/community/odoo/2.0.0/Chart.yaml b/community/odoo/2.0.0/Chart.yaml new file mode 100644 index 0000000000..6e1c9ef595 --- /dev/null +++ b/community/odoo/2.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: odoo +description: Odoo is a suite of web based open source business apps. +annotations: + title: Odoo +type: application +version: 2.0.0 +apiVersion: v2 +appVersion: '16.0' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.2.3 +home: https://www.odoo.com/ +icon: https://media.sys.truenas.net/apps/odoo/icons/icon.png +sources: + - https://hub.docker.com/_/odoo + - https://github.com/truenas/charts/tree/master/community/odoo + - https://github.com/odoo/odoo +keywords: + - erp + - odoo diff --git a/community/odoo/2.0.0/README.md b/community/odoo/2.0.0/README.md new file mode 100644 index 0000000000..a80fed1100 --- /dev/null +++ b/community/odoo/2.0.0/README.md @@ -0,0 +1,11 @@ +# Odoo + +[Odoo](https://odoo.com) is a suite of web based open source business apps. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterwards `postgres` will run afterwards as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/odoo/2.0.0/app-readme.md b/community/odoo/2.0.0/app-readme.md new file mode 100644 index 0000000000..a80fed1100 --- /dev/null +++ b/community/odoo/2.0.0/app-readme.md @@ -0,0 +1,11 @@ +# Odoo + +[Odoo](https://odoo.com) is a suite of web based open source business apps. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `postgres` directories. +> Afterwards `postgres` will run afterwards as a **non**-root user (`999`). +> On each upgrade, a container will be launched with **root** privileges in order to apply the correct +> permissions to the `postgres` **backups** directory. Container that performs the backup will run as a **non**-root user (`999`) afterwards. +> Keep in mind the permissions on the backup directory will be changed to `999:999` on **every** update. +> But will only be changed once for the `postgres` data directories. diff --git a/community/odoo/2.0.0/charts/common-1.2.3.tgz b/community/odoo/2.0.0/charts/common-1.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d1d4036f5c9067963f1a70613be85e27fdc89037 GIT binary patch literal 63003 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 literal 0 HcmV?d00001 diff --git a/community/odoo/2.0.0/ci/basic-values.yaml b/community/odoo/2.0.0/ci/basic-values.yaml new file mode 100644 index 0000000000..b8237e4249 --- /dev/null +++ b/community/odoo/2.0.0/ci/basic-values.yaml @@ -0,0 +1,12 @@ +odooNetwork: + webPort: 31000 + +odooStorage: + data: + type: pvc + addons: + type: pvc + pgData: + type: pvc + pgBackup: + type: emptyDir diff --git a/community/odoo/2.0.0/ci/extra-values.yaml b/community/odoo/2.0.0/ci/extra-values.yaml new file mode 100644 index 0000000000..b9b03c3dca --- /dev/null +++ b/community/odoo/2.0.0/ci/extra-values.yaml @@ -0,0 +1,19 @@ +odooNetwork: + webPort: 31000 + +odooConfig: + additionalConf: + - key: workers + value: "0" + - key: log_level + value: "info" + +odooStorage: + data: + type: pvc + addons: + type: pvc + pgData: + type: pvc + pgBackup: + type: emptyDir diff --git a/community/odoo/2.0.0/ix_values.yaml b/community/odoo/2.0.0/ix_values.yaml new file mode 100644 index 0000000000..041577ea42 --- /dev/null +++ b/community/odoo/2.0.0/ix_values.yaml @@ -0,0 +1,59 @@ +image: + repository: odoo + pullPolicy: IfNotPresent + tag: '17.0' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +odooConfig: + additionalConf: [] + additionalEnvs: [] + +odooNetwork: + webPort: 30062 + hostNetwork: false + +odooStorage: + data: + type: ixVolume + ixVolumeConfig: + datasetName: data + addons: + type: ixVolume + ixVolumeConfig: + datasetName: addons + pgData: + type: ixVolume + ixVolumeConfig: + datasetName: pgData + pgBackup: + type: ixVolume + ixVolumeConfig: + datasetName: pgBackup + additionalStorages: [] + +notes: + custom: | + # Initial Admin Credentials + + - Username: `admin` + - Password: `admin` + + ## Database + You can connect to the database using the pgAdmin App from the catalog + +

+ Database Details + + - Database: `odoo` + - Username: `odoo` + - Password: `{{ .Values.odooDbPass }}` + - Host: `{{ .Values.odooDbHost }}.{{ .Release.Namespace }}.svc.cluster.local` + - Port: `5432` + +
+ {{- $_ := unset .Values "odooDbPass" }} + {{- $_ := unset .Values "odooDbHost" }} diff --git a/community/odoo/2.0.0/metadata.yaml b/community/odoo/2.0.0/metadata.yaml new file mode 100644 index 0000000000..1391922a77 --- /dev/null +++ b/community/odoo/2.0.0/metadata.yaml @@ -0,0 +1,13 @@ +runAsContext: + - userName: odoo + groupName: odoo + gid: 101 + uid: 101 + description: Odoo runs as a non-root user + - userName: postgres + groupName: postgres + gid: 999 + uid: 999 + description: Postgres runs as a non-root user. +capabilities: [] +hostMounts: [] diff --git a/community/odoo/2.0.0/migrations/migrate b/community/odoo/2.0.0/migrations/migrate new file mode 100755 index 0000000000..ceb9dcafe1 --- /dev/null +++ b/community/odoo/2.0.0/migrations/migrate @@ -0,0 +1,51 @@ +#!/usr/bin/python3 +import json +import os +import sys + + +def storage_migrate(storage): + delete_keys = [] + if storage['type'] == 'hostPath': + # Check if the key exists, if not we have already migrated + if not storage.get('hostPath'): + return storage + + storage['hostPathConfig'] = {'hostPath': storage['hostPath']} + delete_keys.append('hostPath') + + elif storage['type'] == 'ixVolume': + # Check if the key exists, if not we have already migrated + if not storage.get('datasetName'): + return storage + + storage['ixVolumeConfig'] = {'datasetName': storage['datasetName']} + delete_keys.append('datasetName') + + for key in delete_keys: + storage.pop(key, None) + + return storage + + +def migrate(values): + storage_key = 'odooStorage' + storages = ['data', 'addons', 'pgData', 'pgBackup'] + + for storage in storages: + check_val = values.get(storage_key, {}).get(storage, {}) + if not isinstance(check_val, dict) or not check_val: + raise Exception(f'Storage section {storage} is malformed') + + values[storage_key][storage] = storage_migrate(check_val) + + return values + + +if __name__ == '__main__': + if len(sys.argv) != 2: + exit(1) + + if os.path.exists(sys.argv[1]): + with open(sys.argv[1], 'r') as f: + print(json.dumps(migrate(json.loads(f.read())))) diff --git a/community/odoo/2.0.0/questions.yaml b/community/odoo/2.0.0/questions.yaml new file mode 100644 index 0000000000..b57bd33fc6 --- /dev/null +++ b/community/odoo/2.0.0/questions.yaml @@ -0,0 +1,626 @@ +groups: + - name: Odoo Configuration + description: Configure Odoo + - name: Network Configuration + description: Configure Network for Odoo + - name: Storage Configuration + description: Configure Storage for Odoo + - name: Resources Configuration + description: Configure Resources for Odoo + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_path" + +questions: + + - variable: odooConfig + label: "" + group: Odoo Configuration + schema: + type: dict + attrs: + - variable: additionalConf + label: Additional File Configuration Options + description: | + Configure additional file configuration options for Odoo.
+ Options are appended to the end of the configuration file.
+ After the predefined configuration options.
+ schema: + type: list + default: [] + items: + - variable: conf + label: Configuration Option + schema: + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Odoo. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: odooNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Odoo WebUI. + schema: + type: int + default: 30062 + min: 9000 + max: 65535 + required: true + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled. + schema: + type: boolean + default: false + + - variable: odooStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Odoo Data Storage + description: The path to store Odoo data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "data" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + immutable: true + required: true + + - variable: addons + label: Odoo Addons Storage + description: The path to store Odoo addons storage. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "addons" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + immutable: true + required: true + + - variable: pgData + label: Odoo Postgres Data Storage + description: The path to store Odoo Postgres Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + # Nothing to show for the user + hidden: true + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "pgData" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + immutable: true + required: true + + - variable: pgBackup + label: Odoo Postgres Backup Storage + description: The path to store Odoo Postgres Backup. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + immutable: true + default: ixVolume + enum: + - value: hostPath + description: Host Path (Path that already exists on the system) + - value: ixVolume + description: ixVolume (Dataset created automatically by the system) + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + # Nothing to show for the user + hidden: true + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "pgBackup" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + # Postgres does a CHMOD at startup + # Which fails with ACL + hidden: true + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + immutable: true + required: true + + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Odoo. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system.
+ SMB Share: Is a SMB share that is mounted to a persistent volume claim. + schema: + type: string + required: true + default: "ixVolume" + immutable: true + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - value: "smb-pv-pvc" + description: SMB Share (Mounts a persistent volume claim to a SMB share) + - variable: readOnly + label: Read Only + description: Mount the volume as read only. + schema: + type: boolean + default: false + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + immutable: true + required: true + - variable: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + default: "storage_entry" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: smbConfig + label: SMB Share Configuration + description: The configuration for the SMB Share. + schema: + type: dict + show_if: [["type", "=", "smb-pv-pvc"]] + attrs: + - variable: server + label: Server + description: The server for the SMB share. + schema: + type: string + required: true + - variable: share + label: Share + description: The share name for the SMB share. + schema: + type: string + required: true + - variable: domain + label: Domain (Optional) + description: The domain for the SMB share. + schema: + type: string + - variable: username + label: Username + description: The username for the SMB share. + schema: + type: string + required: true + - variable: password + label: Password + description: The password for the SMB share. + schema: + type: string + required: true + private: true + - variable: size + label: Size (in Gi) + description: The size of the volume quota. + schema: + type: int + required: true + min: 1 + default: 1 + + - variable: resources + label: "" + group: Resources Configuration + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Odoo. + schema: + type: string + max_length: 6 + valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$' + valid_chars_error: | + Valid CPU limit formats are
+ - Plain Integer - eg. 1
+ - Float - eg. 0.5
+ - Milicpu - eg. 500m + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Odoo. + schema: + type: string + max_length: 12 + valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$' + valid_chars_error: | + Valid Memory limit formats are
+ - Suffixed with E/P/T/G/M/K - eg. 1G
+ - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
+ - Plain Integer in bytes - eg. 1024
+ - Exponent - eg. 134e6 + default: "8Gi" + required: true diff --git a/community/odoo/2.0.0/templates/NOTES.txt b/community/odoo/2.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/odoo/2.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/odoo/2.0.0/templates/_configuration.tpl b/community/odoo/2.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..239a79cb4d --- /dev/null +++ b/community/odoo/2.0.0/templates/_configuration.tpl @@ -0,0 +1,64 @@ +{{- define "odoo.configuration" -}} + + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $dbHost := (printf "%s-postgres" $fullname) -}} + {{- $dbUser := "odoo" -}} + {{- $dbName := "odoo" -}} + + {{- $dbPass := (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-postgres-creds" $fullname)) -}} + {{- $dbPass = ((index .data "POSTGRES_PASSWORD") | b64dec) -}} + {{- end -}} + + {{/* Temporary set dynamic db details on values, + so we can print them on the notes */}} + {{- $_ := set .Values "odooDbPass" $dbPass -}} + {{- $_ := set .Values "odooDbHost" $dbHost -}} + + {{- $dbURL := (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $dbUser $dbPass $dbHost $dbName) }} +secret: + postgres-creds: + enabled: true + data: + POSTGRES_USER: {{ $dbUser }} + POSTGRES_DB: {{ $dbName }} + POSTGRES_PASSWORD: {{ $dbPass }} + POSTGRES_HOST: {{ $dbHost }} + POSTGRES_URL: {{ $dbURL }} + + {{/* xmlrpc* keys are deprecated and http* keys are used in their place */}} + {{- $reservedKeys := (list "data_dir" "addons_path" "http_enable" "http_interface" + "http_port" "xmlrpc" "xmlrpc_port" "xmlrpc_interface" + "db_port" "db_host" "db_name" "db_user" "db_sslmode" + "db_password") -}} + {{- $userKeys := list -}} + odoo-config: + enabled: true + data: + odoo.conf: | + [options] + ; Paths + data_dir = /var/lib/odoo + addons_path = /mnt/extra-addons + ; Network Details + http_enable = True + http_port = {{ .Values.odooNetwork.webPort }} + ; Database Details + db_port = 5432 + db_host = {{ $dbHost }} + db_name = {{ $dbName }} + db_user = {{ $dbUser }} + db_sslmode = disable + db_password = {{ $dbPass }} + {{- range $opt := .Values.odooConfig.additionalConf -}} + {{- if (mustHas $opt.key $reservedKeys) -}} + {{- fail (printf "Odoo - Key [%v] is not allowed to be modified") -}} + {{- end -}} + {{- $userKeys = mustAppend $userKeys $opt.key -}} + {{- printf "%s = %s" $opt.key $opt.value | nindent 8 -}} + {{- end -}} + {{- if not (deepEqual $userKeys (uniq $userKeys)) -}} + {{- fail (printf "Odoo - Additional configuration keys must be unique, but got [%v]" (join ", " $userKeys)) -}} + {{- end -}} +{{- end -}} diff --git a/community/odoo/2.0.0/templates/_odoo.tpl b/community/odoo/2.0.0/templates/_odoo.tpl new file mode 100644 index 0000000000..9e9a5f76d5 --- /dev/null +++ b/community/odoo/2.0.0/templates/_odoo.tpl @@ -0,0 +1,64 @@ +{{- define "odoo.workload" -}} +workload: + odoo: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.odooNetwork.hostNetwork }} + containers: + odoo: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 101 + runAsGroup: 101 + env: + ODOO_RC: /etc/odoo/odoo.conf + {{ with .Values.odooConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + path: /web/health + port: {{ .Values.odooNetwork.webPort }} + readiness: + enabled: true + type: http + path: /web/health + port: {{ .Values.odooNetwork.webPort }} + startup: + enabled: true + type: http + path: /web/health + port: {{ .Values.odooNetwork.webPort }} + initContainers: + {{- include "ix.v1.common.app.postgresWait" (dict "name" "01-postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} + {{- if .Release.IsInstall }} {{/* If we use type: install it will run before the postgres wait and fail */}} + 02-db-init: + enabled: true + type: init + imageSelector: image + securityContext: + runAsUser: 101 + runAsGroup: 101 + env: + ODOO_RC: /etc/odoo/odoo.conf + command: + - /bin/bash + - -c + - | + /usr/bin/odoo --config=/etc/odoo/odoo.conf \ + --stop-after-init \ + --without-demo=all \ + --init=base + {{- end -}} +{{- end -}} diff --git a/community/odoo/2.0.0/templates/_persistence.tpl b/community/odoo/2.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..d797b405cf --- /dev/null +++ b/community/odoo/2.0.0/templates/_persistence.tpl @@ -0,0 +1,60 @@ +{{- define "odoo.persistence" -}} +persistence: + data: + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.odooStorage.data) | nindent 4 }} + targetSelector: + odoo: + odoo: + mountPath: /var/lib/odoo + 02-db-init: + mountPath: /var/lib/odoo + addons: + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.odooStorage.addons) | nindent 4 }} + targetSelector: + odoo: + odoo: + mountPath: /mnt/extra-addons + 02-db-init: + mountPath: /mnt/extra-addons + tmp: + enabled: true + type: emptyDir + targetSelector: + odoo: + odoo: + mountPath: /tmp + 02-db-init: + mountPath: /tmp + + config: + enabled: true + type: secret + objectName: odoo-config + targetSelector: + odoo: + odoo: + mountPath: /etc/odoo/odoo.conf + readOnly: true + subPath: odoo.conf + 02-db-init: + mountPath: /etc/odoo/odoo.conf + readOnly: true + subPath: odoo.conf + + {{- range $idx, $storage := .Values.odooStorage.additionalStorages }} + {{ printf "odoo-%v:" (int $idx) }} + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 4 }} + targetSelector: + odoo: + odoo: + mountPath: {{ $storage.mountPath }} + {{- end }} + + {{- include "ix.v1.common.app.postgresPersistence" + (dict "pgData" .Values.odooStorage.pgData + "pgBackup" .Values.odooStorage.pgBackup + ) | nindent 2 }} +{{- end -}} diff --git a/community/odoo/2.0.0/templates/_portal.tpl b/community/odoo/2.0.0/templates/_portal.tpl new file mode 100644 index 0000000000..64a69740f5 --- /dev/null +++ b/community/odoo/2.0.0/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "odoo.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + host: $node_ip + path: / + protocol: http + port: {{ .Values.odooNetwork.webPort | quote }} +{{- end -}} diff --git a/community/odoo/2.0.0/templates/_postgres.tpl b/community/odoo/2.0.0/templates/_postgres.tpl new file mode 100644 index 0000000000..0c050b6ca0 --- /dev/null +++ b/community/odoo/2.0.0/templates/_postgres.tpl @@ -0,0 +1,6 @@ +{{- define "postgres.workload" -}} +workload: +{{- include "ix.v1.common.app.postgres" (dict "secretName" "postgres-creds" + "resources" .Values.resources + "ixChartContext" .Values.ixChartContext) | nindent 2 }} +{{- end -}} diff --git a/community/odoo/2.0.0/templates/_service.tpl b/community/odoo/2.0.0/templates/_service.tpl new file mode 100644 index 0000000000..fb68cae112 --- /dev/null +++ b/community/odoo/2.0.0/templates/_service.tpl @@ -0,0 +1,17 @@ +{{- define "odoo.service" -}} +service: + odoo: + enabled: true + primary: true + type: NodePort + targetSelector: odoo + ports: + webui: + enabled: true + primary: true + port: {{ .Values.odooNetwork.webPort }} + nodePort: {{ .Values.odooNetwork.webPort }} + targetSelector: odoo + {{- include "ix.v1.common.app.postgresService" $ | nindent 2 }} + +{{- end -}} diff --git a/community/odoo/2.0.0/templates/common.yaml b/community/odoo/2.0.0/templates/common.yaml new file mode 100644 index 0000000000..b6ec440a83 --- /dev/null +++ b/community/odoo/2.0.0/templates/common.yaml @@ -0,0 +1,13 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "odoo.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "odoo.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "odoo.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "odoo.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "postgres.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "odoo.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/odoo/2.0.0/to_keep_versions.md b/community/odoo/2.0.0/to_keep_versions.md new file mode 100644 index 0000000000..00c3cabdb3 --- /dev/null +++ b/community/odoo/2.0.0/to_keep_versions.md @@ -0,0 +1,6 @@ +# Versions to keep in the repository + +## 1.1.1 + +This is the last version for Odoo 16.0 +Upgrades to Odoo 17.0 have to be done manually.