From f4a842b162a8daf3957218a04de42a92317106dc Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 5 Oct 2023 15:12:05 +0300 Subject: [PATCH] Add `castopod` to `incubator` train (#1598) * initial commit * add some templates * add common and templates * update strategy * fix tempaltes * fix host * add metadata * add readme * fix probe * add questiosn * typo * quote * disable by default the redirect * add another test * rename service * remove todo * fix backend url and questions --- library/ix-dev/community/castopod/Chart.lock | 6 + library/ix-dev/community/castopod/Chart.yaml | 25 ++ library/ix-dev/community/castopod/README.md | 3 + .../ix-dev/community/castopod/app-readme.md | 3 + .../castopod/charts/common-1.1.1.tgz | Bin 0 -> 61736 bytes .../community/castopod/ci/2fa-values.yaml | 17 + .../community/castopod/ci/basic-values.yaml | 16 + .../community/castopod/ci/extra-values.yaml | 23 ++ .../castopod/ci/https-redirect-values.yaml | 18 + library/ix-dev/community/castopod/item.yaml | 7 + .../ix-dev/community/castopod/metadata.yaml | 18 + .../ix-dev/community/castopod/questions.yaml | 332 ++++++++++++++++++ .../community/castopod/templates/NOTES.txt | 1 + .../castopod/templates/_castopod.tpl | 56 +++ .../castopod/templates/_configuration.tpl | 68 ++++ .../community/castopod/templates/_mariadb.tpl | 6 + .../castopod/templates/_persistance.tpl | 62 ++++ .../community/castopod/templates/_portal.tpl | 41 +++ .../community/castopod/templates/_redis.tpl | 6 + .../community/castopod/templates/_service.tpl | 49 +++ .../community/castopod/templates/_web.tpl | 60 ++++ .../community/castopod/templates/common.yaml | 15 + .../community/castopod/upgrade_info.json | 1 + .../community/castopod/upgrade_strategy | 51 +++ library/ix-dev/community/castopod/values.yaml | 37 ++ 25 files changed, 921 insertions(+) create mode 100644 library/ix-dev/community/castopod/Chart.lock create mode 100644 library/ix-dev/community/castopod/Chart.yaml create mode 100644 library/ix-dev/community/castopod/README.md create mode 100644 library/ix-dev/community/castopod/app-readme.md create mode 100644 library/ix-dev/community/castopod/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/castopod/ci/2fa-values.yaml create mode 100644 library/ix-dev/community/castopod/ci/basic-values.yaml create mode 100644 library/ix-dev/community/castopod/ci/extra-values.yaml create mode 100644 library/ix-dev/community/castopod/ci/https-redirect-values.yaml create mode 100644 library/ix-dev/community/castopod/item.yaml create mode 100644 library/ix-dev/community/castopod/metadata.yaml create mode 100644 library/ix-dev/community/castopod/questions.yaml create mode 100644 library/ix-dev/community/castopod/templates/NOTES.txt create mode 100644 library/ix-dev/community/castopod/templates/_castopod.tpl create mode 100644 library/ix-dev/community/castopod/templates/_configuration.tpl create mode 100644 library/ix-dev/community/castopod/templates/_mariadb.tpl create mode 100644 library/ix-dev/community/castopod/templates/_persistance.tpl create mode 100644 library/ix-dev/community/castopod/templates/_portal.tpl create mode 100644 library/ix-dev/community/castopod/templates/_redis.tpl create mode 100644 library/ix-dev/community/castopod/templates/_service.tpl create mode 100644 library/ix-dev/community/castopod/templates/_web.tpl create mode 100644 library/ix-dev/community/castopod/templates/common.yaml create mode 100644 library/ix-dev/community/castopod/upgrade_info.json create mode 100755 library/ix-dev/community/castopod/upgrade_strategy create mode 100644 library/ix-dev/community/castopod/values.yaml diff --git a/library/ix-dev/community/castopod/Chart.lock b/library/ix-dev/community/castopod/Chart.lock new file mode 100644 index 0000000000..b4cb622f48 --- /dev/null +++ b/library/ix-dev/community/castopod/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-10-02T16:38:49.597098778+03:00" diff --git a/library/ix-dev/community/castopod/Chart.yaml b/library/ix-dev/community/castopod/Chart.yaml new file mode 100644 index 0000000000..9ea7a353e1 --- /dev/null +++ b/library/ix-dev/community/castopod/Chart.yaml @@ -0,0 +1,25 @@ +name: castopod +description: Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience. +annotations: + title: Castopod +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 1.6.5 +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.1.1 +home: https://castopod.org +icon: https://docs.castopod.org/images/castopod-logo-inline.svg +sources: + - https://hub.docker.com/r/castopod/castopod + - https://github.com/truenas/charts/tree/master/community/castopod + - https://code.castopod.org/adaures/castopod +keywords: + - podcast diff --git a/library/ix-dev/community/castopod/README.md b/library/ix-dev/community/castopod/README.md new file mode 100644 index 0000000000..df0ef2734f --- /dev/null +++ b/library/ix-dev/community/castopod/README.md @@ -0,0 +1,3 @@ +# Castopod + +[Castopod](https://castopod.org) is an open-source hosting platform made for podcasters who want engage and interact with their audience. diff --git a/library/ix-dev/community/castopod/app-readme.md b/library/ix-dev/community/castopod/app-readme.md new file mode 100644 index 0000000000..df0ef2734f --- /dev/null +++ b/library/ix-dev/community/castopod/app-readme.md @@ -0,0 +1,3 @@ +# Castopod + +[Castopod](https://castopod.org) is an open-source hosting platform made for podcasters who want engage and interact with their audience. diff --git a/library/ix-dev/community/castopod/charts/common-1.1.1.tgz b/library/ix-dev/community/castopod/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7e717968ec38c9ac99e8d85eb06a41a1baafb8bb GIT binary patch literal 61736 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�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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/castopod/ci/2fa-values.yaml b/library/ix-dev/community/castopod/ci/2fa-values.yaml new file mode 100644 index 0000000000..fa2d8e108b --- /dev/null +++ b/library/ix-dev/community/castopod/ci/2fa-values.yaml @@ -0,0 +1,17 @@ +castopodConfig: + baseUrl: http://localhost:31000 + enable2fa: true + +castopodNetwork: + webPort: 31000 + +castopodStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + mariadbData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbData + mariadbBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbBackup diff --git a/library/ix-dev/community/castopod/ci/basic-values.yaml b/library/ix-dev/community/castopod/ci/basic-values.yaml new file mode 100644 index 0000000000..0e988852c7 --- /dev/null +++ b/library/ix-dev/community/castopod/ci/basic-values.yaml @@ -0,0 +1,16 @@ +castopodConfig: + baseUrl: http://localhost:31000 + +castopodNetwork: + webPort: 31000 + +castopodStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + mariadbData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbData + mariadbBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbBackup diff --git a/library/ix-dev/community/castopod/ci/extra-values.yaml b/library/ix-dev/community/castopod/ci/extra-values.yaml new file mode 100644 index 0000000000..eaea090c01 --- /dev/null +++ b/library/ix-dev/community/castopod/ci/extra-values.yaml @@ -0,0 +1,23 @@ +castopodConfig: + baseUrl: http://localhost:31000 + +castopodNetwork: + webPort: 31000 + +castopodStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + mariadbData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbData + mariadbBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbBackup + additionalStorages: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + mountPath: /data2 diff --git a/library/ix-dev/community/castopod/ci/https-redirect-values.yaml b/library/ix-dev/community/castopod/ci/https-redirect-values.yaml new file mode 100644 index 0000000000..480df6d36e --- /dev/null +++ b/library/ix-dev/community/castopod/ci/https-redirect-values.yaml @@ -0,0 +1,18 @@ +castopodConfig: + baseUrl: http://localhost:31000 + disableHttpsRedirect: false + enable2fa: true + +castopodNetwork: + webPort: 31000 + +castopodStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + mariadbData: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbData + mariadbBackup: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/mariadbBackup diff --git a/library/ix-dev/community/castopod/item.yaml b/library/ix-dev/community/castopod/item.yaml new file mode 100644 index 0000000000..b92a8c6989 --- /dev/null +++ b/library/ix-dev/community/castopod/item.yaml @@ -0,0 +1,7 @@ +icon_url: https://docs.castopod.org/images/castopod-logo-inline.svg +categories: + - media +screenshots: + - https://castopod.org/_astro/castopod-activity-screen.71de6d2e.webp +tags: + - podcast diff --git a/library/ix-dev/community/castopod/metadata.yaml b/library/ix-dev/community/castopod/metadata.yaml new file mode 100644 index 0000000000..06f61373a4 --- /dev/null +++ b/library/ix-dev/community/castopod/metadata.yaml @@ -0,0 +1,18 @@ +runAsContext: + - userName: root + groupName: root + gid: 0 + uid: 0 + description: Castopod run as root user +capabilities: + - name: CHOWN + description: Castopod is able to chown files. + - name: DAC_OVERRIDE + description: Castopod is able to bypass permission checks. + - name: FOWNER + description: Castopod is able bypass permission checks for it's sub-processes. + - name: SETGID + description: Castopod is able to set group ID for it's sub-processes. + - name: SETUID + description: Castopod is able to set user ID for it's sub-processes. +hostMounts: [] diff --git a/library/ix-dev/community/castopod/questions.yaml b/library/ix-dev/community/castopod/questions.yaml new file mode 100644 index 0000000000..03f53ca883 --- /dev/null +++ b/library/ix-dev/community/castopod/questions.yaml @@ -0,0 +1,332 @@ +groups: + - name: Castopod Configuration + description: Configure Castopod + - name: Network Configuration + description: Configure Network for Castopod + - name: Storage Configuration + description: Configure Storage for Castopod + - name: Resources Configuration + description: Configure Resources for Castopod + +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" + admin: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_admin" + +questions: + - variable: castopodConfig + label: "" + group: Castopod Configuration + schema: + type: dict + attrs: + - variable: baseUrl + label: Base URL + description: | + The base URL for Castopod.
+ Example: http://your.server.ip:30085 + schema: + type: uri + required: true + default: "" + - variable: webTimeout + label: Web Timeout + description: The timeout for Castopod requests in seconds. + schema: + type: int + required: true + default: 900 + min: 1 + - variable: webMaxBodySize + label: Web Max Body Size + description: The maximum body size for Castopod requests in megabytes. + schema: + type: int + required: true + default: 512 + min: 1 + - variable: phpMemoryLimit + label: PHP Memory Limit + description: The PHP memory limit for Castopod. + schema: + type: int + required: true + default: 512 + min: 1 + - variable: enable2fa + label: Enable 2FA + description: Enable 2FA for Castopod. + schema: + type: boolean + default: false + - variable: disableHttpsRedirect + label: Disable HTTPS Redirect + description: | + Disable HTTPS redirect for Castopod.
+ This is useful if you are using a reverse proxy with HTTPS. + schema: + type: boolean + default: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Castopod. + 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: castopodNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Castopod WebUI. + schema: + type: int + default: 30085 + min: 9000 + max: 65535 + required: true + + - variable: castopodStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Castopod Data Storage + description: The path to store Castopod 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 + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: mariadbData + label: Castopod MariaDB Data Storage + description: The path to store Castopod MariaDB 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 + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: mariadbData + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: mariadbBackup + label: Castopod MariaDB Backup Storage + description: The path to store Castopod MariaDB 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 + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: mariadbBackup + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Castopod. + 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. + schema: + type: string + required: 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: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - 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 Castopod. + 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 Castopod. + 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/castopod/templates/NOTES.txt b/library/ix-dev/community/castopod/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/castopod/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/castopod/templates/_castopod.tpl b/library/ix-dev/community/castopod/templates/_castopod.tpl new file mode 100644 index 0000000000..77a317dec1 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_castopod.tpl @@ -0,0 +1,56 @@ +{{- define "castopod.workload" -}} +workload: + castopod: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + containers: + castopod: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + - SETGID + - SETUID + envFrom: + - secretRef: + name: castopod-creds + - configMapRef: + name: castopod-config + {{ with .Values.castopodConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: tcp + port: 9000 + readiness: + enabled: true + type: tcp + port: 9000 + startup: + enabled: true + type: tcp + port: 9000 + initContainers: + {{- include "ix.v1.common.app.redisWait" (dict "name" "01-redis-wait" + "secretName" "redis-creds") | nindent 8 }} + {{- include "ix.v1.common.app.mariadbWait" (dict "name" "02-mariadb-wait" + "secretName" "mariadb-creds") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_configuration.tpl b/library/ix-dev/community/castopod/templates/_configuration.tpl new file mode 100644 index 0000000000..fca41cd76c --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_configuration.tpl @@ -0,0 +1,68 @@ +{{- define "castopod.configuration" -}} + + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $saltKey := randAlphaNum 64 -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-castopod-creds" $fullname)) -}} + {{- $saltKey = ((index .data "CP_ANALYTICS_SALT") | b64dec) -}} + {{- end -}} + + {{- $redisHost := (printf "%s-redis" $fullname) -}} + + {{- $redisPass := randAlphaNum 32 -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-redis-creds" $fullname)) -}} + {{- $redisPass = ((index .data "REDIS_PASSWORD") | b64dec) -}} + {{- end -}} + + {{- $dbHost := (printf "%s-mariadb" $fullname) -}} + {{- $dbUser := "castopod" -}} + {{- $dbName := "castopod" -}} + + {{- $dbPass := (randAlphaNum 32) -}} + {{- $dbRootPass := (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-mariadb-creds" $fullname)) -}} + {{- $dbPass = ((index .data "MARIADB_PASSWORD") | b64dec) -}} + {{- $dbRootPass = ((index .data "MARIADB_ROOT_PASSWORD") | b64dec) -}} + {{- end }} +secret: + mariadb-creds: + enabled: true + data: + MARIADB_USER: {{ $dbUser }} + MARIADB_DATABASE: {{ $dbName }} + MARIADB_PASSWORD: {{ $dbPass }} + MARIADB_ROOT_PASSWORD: {{ $dbRootPass }} + MARIADB_HOST: {{ $dbHost }} + redis-creds: + enabled: true + data: + ALLOW_EMPTY_PASSWORD: "no" + REDIS_PASSWORD: {{ $redisPass }} + REDIS_HOST: {{ $redisHost }} + + castopod-creds: + enabled: true + data: + CP_ANALYTICS_SALT: {{ $saltKey }} + CP_DATABASE_HOSTNAME: {{ $dbHost }} + CP_DATABASE_NAME: {{ $dbName }} + CP_DATABASE_USERNAME: {{ $dbUser }} + CP_DATABASE_PASSWORD: {{ $dbPass }} + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: {{ $redisHost }} + CP_REDIS_PASSWORD: {{ $redisPass }} + CP_REDIS_PORT: "6379" + CP_REDIS_DATABASE: "0" + +configmap: + castopod-config: + enabled: true + data: + CP_TIMEOUT: {{ .Values.castopodConfig.webTimeout | quote }} + CP_MAX_BODY_SIZE: {{ printf "%vM" .Values.castopodConfig.webMaxBodySize }} + CP_PHP_MEMORY_LIMIT: {{ printf "%vM" .Values.castopodConfig.phpMemoryLimit }} + CP_BASEURL: {{ .Values.castopodConfig.baseUrl }} + CP_MEDIAURL: {{ .Values.castopodConfig.baseUrl }} + CP_DISABLE_HTTPS: {{ ternary "1" "0" .Values.castopodConfig.disableHttpsRedirect | quote }} + CP_ENABLE_2FA: {{ .Values.castopodConfig.enable2fa | quote }} +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_mariadb.tpl b/library/ix-dev/community/castopod/templates/_mariadb.tpl new file mode 100644 index 0000000000..8a4c2bb771 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_mariadb.tpl @@ -0,0 +1,6 @@ +{{- define "mariadb.workload" -}} +workload: +{{- include "ix.v1.common.app.mariadb" (dict "secretName" "mariadb-creds" + "resources" .Values.resources + "ixChartContext" .Values.ixChartContext) | nindent 2 }} +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_persistance.tpl b/library/ix-dev/community/castopod/templates/_persistance.tpl new file mode 100644 index 0000000000..7bb6110d60 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_persistance.tpl @@ -0,0 +1,62 @@ +{{- define "castopod.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.castopodStorage.data.type }} + datasetName: {{ .Values.castopodStorage.data.datasetName | default "" }} + hostPath: {{ .Values.castopodStorage.data.hostPath | default "" }} + targetSelector: + castopod: + castopod: + mountPath: /var/www/castopod/public/media + web: + web: + mountPath: /var/www/html/media + tmp: + enabled: true + type: emptyDir + targetSelector: + castopod: + castopod: + mountPath: /tmp + {{- range $idx, $storage := .Values.castopodStorage.additionalStorages }} + {{ printf "castopod-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + castopod: + castopod: + mountPath: {{ $storage.mountPath }} + {{- end }} + + mariadbdata: + enabled: true + type: {{ .Values.castopodStorage.mariadbData.type }} + datasetName: {{ .Values.castopodStorage.mariadbData.datasetName | default "" }} + hostPath: {{ .Values.castopodStorage.mariadbData.hostPath | default "" }} + targetSelector: + # MariaDB pod + mariadb: + # MariaDB container + mariadb: + mountPath: /var/lib/mysql + # MariaDB - Permissions container + permissions: + mountPath: /mnt/directories/mariadb_data + mariadbbackup: + enabled: true + type: {{ .Values.castopodStorage.mariadbBackup.type }} + datasetName: {{ .Values.castopodStorage.mariadbBackup.datasetName | default "" }} + hostPath: {{ .Values.castopodStorage.mariadbBackup.hostPath | default "" }} + targetSelector: + # MariaDB backup pod + mariadbbackup: + # MariaDB backup container + mariadbbackup: + mountPath: /mariadb_backup + # MariaDB - Permissions container + permissions: + mountPath: /mnt/directories/mariadb_backup +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_portal.tpl b/library/ix-dev/community/castopod/templates/_portal.tpl new file mode 100644 index 0000000000..b2e90fc853 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_portal.tpl @@ -0,0 +1,41 @@ +{{- define "castopod.portal" -}} + {{- $adminPath := "/cp-admin" -}} + {{- if $.Release.IsInstall -}} + {{- $adminPath = "/cp-install" -}} + {{- end -}} + + {{- $host := "$node_ip" -}} + {{- $port := "" -}} + {{- $protocol := "http" -}} + {{- if hasPrefix "https://" .Values.castopodConfig.baseUrl -}} + {{- $protocol = "https" -}} + {{- end -}} + + {{- with .Values.castopodConfig.baseUrl -}} {{/* Trim protocol and trailing slash */}} + {{- $host = . | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/" -}} + + {{- if contains ":" $host -}} + {{- $port = (split ":" $host)._1 -}} + {{- $host = (split ":" $host)._0 -}} + {{- end -}} + + {{- if not $port -}} + {{- if eq $protocol "https" -}} + {{- $port = "443" -}} + {{- else -}} + {{- $port = "80" -}} + {{- end -}} + {{- end -}} + {{- end }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: / + admin: {{ $adminPath }} + port: {{ $port | quote }} + protocol: {{ $protocol }} + host: {{ $host }} +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_redis.tpl b/library/ix-dev/community/castopod/templates/_redis.tpl new file mode 100644 index 0000000000..c90b61b2be --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_redis.tpl @@ -0,0 +1,6 @@ +{{- define "redis.workload" -}} +workload: +{{- include "ix.v1.common.app.redis" (dict "secretName" "redis-creds" + "resources" .Values.resources) | nindent 2 }} + +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_service.tpl b/library/ix-dev/community/castopod/templates/_service.tpl new file mode 100644 index 0000000000..33488a3fd3 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_service.tpl @@ -0,0 +1,49 @@ +{{- define "castopod.service" -}} +service: + castopod-web: + enabled: true + primary: true + type: NodePort + targetSelector: web + ports: + webui: + enabled: true + primary: true + port: {{ .Values.castopodNetwork.webPort }} + nodePort: {{ .Values.castopodNetwork.webPort }} + targetPort: 80 + targetSelector: web + castopod-api: + enabled: true + type: ClusterIP + targetSelector: castopod + ports: + api: + enabled: true + primary: true + port: 9000 + targetPort: 9000 + targetSelector: castopod + mariadb: + enabled: true + type: ClusterIP + targetSelector: mariadb + ports: + mariadb: + enabled: true + primary: true + port: 3306 + targetPort: 3306 + targetSelector: mariadb + redis: + enabled: true + type: ClusterIP + targetSelector: redis + ports: + redis: + enabled: true + primary: true + port: 6379 + targetPort: 6379 + targetSelector: redis +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/_web.tpl b/library/ix-dev/community/castopod/templates/_web.tpl new file mode 100644 index 0000000000..ed60bac320 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/_web.tpl @@ -0,0 +1,60 @@ +{{- define "castopod.web.workload" -}} +{{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} +{{- $backend := printf "%s-castopod-api" $fullname }} +workload: + web: + enabled: true + type: Deployment + podSpec: + hostNetwork: false + containers: + web: + enabled: true + primary: true + imageSelector: webImage + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - SETGID + - SETUID + env: + CP_APP_HOSTNAME: {{ $backend }} + CP_TIMEOUT: {{ .Values.castopodConfig.webTimeout }} + CP_MAX_BODY_SIZE: {{ printf "%vM" .Values.castopodConfig.webMaxBodySize }} + probes: + liveness: + enabled: true + type: http + path: /health + port: 80 + readiness: + enabled: true + type: http + path: /health + port: 80 + startup: + enabled: true + type: http + path: /health + port: 80 + initContainers: + wait-server: + enabled: true + type: init + imageSelector: bashImage + command: + - bash + args: + - -c + - | + echo "Waiting for backend to be ready at [{{ $backend }}:9000]" + until nc -vz -w 5 "{{ $backend }}" 9000; do + echo "Waiting for backend to be ready at [{{ $backend }}:9000]" + sleep 1 + done +{{- end -}} diff --git a/library/ix-dev/community/castopod/templates/common.yaml b/library/ix-dev/community/castopod/templates/common.yaml new file mode 100644 index 0000000000..b8424ebaa1 --- /dev/null +++ b/library/ix-dev/community/castopod/templates/common.yaml @@ -0,0 +1,15 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "castopod.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "castopod.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "castopod.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "castopod.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "castopod.web.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "mariadb.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "redis.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "castopod.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/castopod/upgrade_info.json b/library/ix-dev/community/castopod/upgrade_info.json new file mode 100644 index 0000000000..940e7d9cb3 --- /dev/null +++ b/library/ix-dev/community/castopod/upgrade_info.json @@ -0,0 +1 @@ +{ "filename": "values.yaml", "keys": ["image", "webImage"] } diff --git a/library/ix-dev/community/castopod/upgrade_strategy b/library/ix-dev/community/castopod/upgrade_strategy new file mode 100755 index 0000000000..fe7ae7d195 --- /dev/null +++ b/library/ix-dev/community/castopod/upgrade_strategy @@ -0,0 +1,51 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + +RE_STABLE_VERSION_BASE = r'\d+\.\d+\.\d+' +ENUMS = { + 'image': { + 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}'), + }, + 'webImage': { + 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}'), + }, +} + + +def newer_mapping(image_tags): + output = { + "tags": {}, + "app_version": "" + } + + for key in image_tags.keys(): + RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None + + if (RE_STABLE_VERSION is None): + continue + + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + + if not version: + continue + + if key == 'image': + output['app_version'] = version + + output['tags'][key] = tags[version] + + return output + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/castopod/values.yaml b/library/ix-dev/community/castopod/values.yaml new file mode 100644 index 0000000000..9412e58a15 --- /dev/null +++ b/library/ix-dev/community/castopod/values.yaml @@ -0,0 +1,37 @@ +image: + repository: castopod/app + pullPolicy: IfNotPresent + tag: 1.6.5 +webImage: + repository: castopod/web-server + pullPolicy: IfNotPresent + tag: 1.6.5 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +castopodConfig: + baseUrl: http://localhost:30085 + webTimeout: 900 + webMaxBodySize: 512 + phpMemoryLimit: 512 + enable2fa: false + disableHttpsRedirect: true + additionalEnvs: [] + +castopodNetwork: + webPort: 30085 + +castopodStorage: + data: + type: ixVolume + datasetName: data + mariadbData: + type: ixVolume + datasetName: mariadbData + mariadbBackup: + type: ixVolume + datasetName: mariadbBackup + additionalStorages: []