From e8dcfce5b70b46f4ab19f393a54dba70ecca3a99 Mon Sep 17 00:00:00 2001 From: Stavros kois Date: Fri, 3 Nov 2023 19:09:39 +0200 Subject: [PATCH] add persistence and UI --- .../ix-dev/community/mealie/questions.yaml | 576 ++++++++++++++++++ .../mealie/templates/_persistence.tpl | 35 ++ 2 files changed, 611 insertions(+) create mode 100644 library/ix-dev/community/mealie/questions.yaml create mode 100644 library/ix-dev/community/mealie/templates/_persistence.tpl diff --git a/library/ix-dev/community/mealie/questions.yaml b/library/ix-dev/community/mealie/questions.yaml new file mode 100644 index 0000000000..4fa4100d76 --- /dev/null +++ b/library/ix-dev/community/mealie/questions.yaml @@ -0,0 +1,576 @@ +groups: + - name: Mealie Configuration + description: Configure Mealie + - name: Network Configuration + description: Configure Network for Mealie + - name: Storage Configuration + description: Configure Storage for Mealie + - name: Resources Configuration + description: Configure Resources for Mealie + +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: TZ + group: Mealie Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: mealieConfig + label: "" + group: Mealie Configuration + schema: + type: dict + attrs: + - variable: baseURL + label: Base URL + description: | + The URL that Mealie will be accessible from.
+ Example:
+ http://server.ip:30080
+ https://Mealie.example.com + schema: + type: uri + default: "" + required: true + - variable: allowSignup + label: Allow Signup + description: Allow users to signup for Mealie. + schema: + type: boolean + default: true + - variable: defaultGroup + label: Default Group + description: The default group for new users. + schema: + type: string + default: Home + required: true + - variable: defaultAdminEmail + label: Default Admin Email + description: The default admin email. + schema: + type: string + default: "" + immutable: true + required: true + - variable: defaultAdminPassword + label: Default Admin Password + description: The default admin password. + schema: + type: string + default: "" + required: true + immutable: true + private: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Mealie. + 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: mealieRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Mealie will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Mealie will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: mealieNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Mealie Web UI. + schema: + type: int + default: 31001 + 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: mealieStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Mealie Data Storage + description: The path to store Mealie 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 + default: "storage_entry" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: hostPathConfig + 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]] + required: true + - variable: pgData + label: Postgres Data Storage + description: The path to store 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 + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # TODO: verify if ACL is working for postgres + hidden: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + default: "pgData" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: hostPathConfig + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # TODO: verify if ACL is working for postgres + hidden: true + - 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]] + required: true + - variable: pgBackup + label: Postgres Backup Storage + description: The path to store 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 + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # TODO: verify if ACL is working for postgres + hidden: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + default: "pgBackup" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: hostPathConfig + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + default: false + # TODO: verify if ACL is working for postgres + hidden: true + - 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]] + required: true + + - variable: additionalStorages + label: Additional Storage + description: Additional storage for SearXNG. + 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: hostPathConfig + 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]] + 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: server + label: Server + description: The server for the SMB share. + schema: + type: string + show_if: [["type", "=", "smb-pv-pvc"]] + required: true + - variable: share + label: Share + description: The share name for the SMB share. + schema: + type: string + show_if: [["type", "=", "smb-pv-pvc"]] + required: true + - variable: domain + label: Domain (Optional) + description: The domain for the SMB share. + schema: + type: string + show_if: [["type", "=", "smb-pv-pvc"]] + - variable: username + label: Username + description: The username for the SMB share. + schema: + type: string + show_if: [["type", "=", "smb-pv-pvc"]] + required: true + - variable: password + label: Password + description: The password for the SMB share. + schema: + type: string + show_if: [["type", "=", "smb-pv-pvc"]] + required: true + private: true + - variable: size + label: Size (in Gi) + description: The size of the volume quota. + schema: + type: int + show_if: [["type", "=", "smb-pv-pvc"]] + required: true + min: 1 + default: 1 + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Mealie. + 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 Mealie. + 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/library/ix-dev/community/mealie/templates/_persistence.tpl b/library/ix-dev/community/mealie/templates/_persistence.tpl new file mode 100644 index 0000000000..717da277af --- /dev/null +++ b/library/ix-dev/community/mealie/templates/_persistence.tpl @@ -0,0 +1,35 @@ +{{- define "mealie.persistence" -}} +persistence: + data: + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.mealieStorage.data) | nindent 2 }} + targetSelector: + mealie: + mealie: + mountPath: /app/data + tmp: + enabled: true + type: emptyDir + targetSelector: + mealie: + mealie: + mountPath: /tmp + {{- range $idx, $storage := .Values.mealieStorage.additionalStorages }} + {{ printf "mealie-%v" (int $idx) }}: + {{- $size := "" -}} + {{- if $storage.size -}} + {{- $size = (printf "%vGi" $storage.size) -}} + {{- end }} + enabled: true + {{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 2 }} + targetSelector: + mealie: + mealie: + mountPath: {{ $storage.mountPath }} + {{- end -}} + + {{- include "ix.v1.common.app.postgresPersistence" + (dict "pgData" .Values.mealieStorage.pgData + "pgBackup" .Values.mealieStorage.pgBackup + ) | nindent 2 }} +{{- end -}}