From c44bd670957f69da8dfa0d446f52f72ef9734410 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Sat, 28 Oct 2023 21:17:46 +0300 Subject: [PATCH] add `freshrss` to `community` train (#1663) * add `freshrss` to `community` train * add initial templates * fix pat * whops * run as 33 * requires root * more caps * dont wait for pvc to bind for future jobs * do the installation * create user * add cron * add questions * remove group * fix password field * add smb * add size var --- library/ix-dev/community/freshrss/Chart.lock | 6 + library/ix-dev/community/freshrss/Chart.yaml | 26 ++ library/ix-dev/community/freshrss/README.md | 3 + .../ix-dev/community/freshrss/app-readme.md | 3 + .../freshrss/charts/common-1.1.1.tgz | Bin 0 -> 61737 bytes .../community/freshrss/ci/basic-values.yaml | 16 + .../community/freshrss/ci/extra-values.yaml | 28 ++ .../community/freshrss/ci/hostNet-values.yaml | 17 + library/ix-dev/community/freshrss/item.yaml | 8 + .../ix-dev/community/freshrss/metadata.yaml | 14 + .../ix-dev/community/freshrss/questions.yaml | 417 ++++++++++++++++++ .../community/freshrss/templates/NOTES.txt | 1 + .../freshrss/templates/_configuration.tpl | 53 +++ .../community/freshrss/templates/_cron.tpl | 52 +++ .../freshrss/templates/_freshrss.tpl | 55 +++ .../freshrss/templates/_persistence.tpl | 97 ++++ .../community/freshrss/templates/_portal.tpl | 12 + .../freshrss/templates/_postgres.tpl | 6 + .../community/freshrss/templates/_service.tpl | 28 ++ .../community/freshrss/templates/common.yaml | 16 + .../community/freshrss/upgrade_info.json | 1 + .../community/freshrss/upgrade_strategy | 31 ++ library/ix-dev/community/freshrss/values.yaml | 54 +++ 23 files changed, 944 insertions(+) create mode 100644 library/ix-dev/community/freshrss/Chart.lock create mode 100644 library/ix-dev/community/freshrss/Chart.yaml create mode 100644 library/ix-dev/community/freshrss/README.md create mode 100644 library/ix-dev/community/freshrss/app-readme.md create mode 100644 library/ix-dev/community/freshrss/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/freshrss/ci/basic-values.yaml create mode 100644 library/ix-dev/community/freshrss/ci/extra-values.yaml create mode 100644 library/ix-dev/community/freshrss/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/freshrss/item.yaml create mode 100644 library/ix-dev/community/freshrss/metadata.yaml create mode 100644 library/ix-dev/community/freshrss/questions.yaml create mode 100644 library/ix-dev/community/freshrss/templates/NOTES.txt create mode 100644 library/ix-dev/community/freshrss/templates/_configuration.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_cron.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_freshrss.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_persistence.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_portal.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_postgres.tpl create mode 100644 library/ix-dev/community/freshrss/templates/_service.tpl create mode 100644 library/ix-dev/community/freshrss/templates/common.yaml create mode 100644 library/ix-dev/community/freshrss/upgrade_info.json create mode 100755 library/ix-dev/community/freshrss/upgrade_strategy create mode 100644 library/ix-dev/community/freshrss/values.yaml diff --git a/library/ix-dev/community/freshrss/Chart.lock b/library/ix-dev/community/freshrss/Chart.lock new file mode 100644 index 0000000000..f823479c30 --- /dev/null +++ b/library/ix-dev/community/freshrss/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-10-24T17:20:50.519641854+03:00" diff --git a/library/ix-dev/community/freshrss/Chart.yaml b/library/ix-dev/community/freshrss/Chart.yaml new file mode 100644 index 0000000000..fa7ad51e4f --- /dev/null +++ b/library/ix-dev/community/freshrss/Chart.yaml @@ -0,0 +1,26 @@ +name: freshrss +description: FreshRSS is a free, self-hostable news aggregator +annotations: + title: FreshRSS +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 1.22.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.1.1 +home: https://freshrss.org/ +icon: https://media.sys.truenas.net/apps/freshrss/icons/icon.png +sources: + - https://github.com/FreshRSS/FreshRSS + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/freshrss + - https://hub.docker.com/r/freshrss/freshrss +keywords: + - rss + - news diff --git a/library/ix-dev/community/freshrss/README.md b/library/ix-dev/community/freshrss/README.md new file mode 100644 index 0000000000..194b7c0f32 --- /dev/null +++ b/library/ix-dev/community/freshrss/README.md @@ -0,0 +1,3 @@ +# FreshRSS + +[FreshRSS](https://freshrss.org/) is a free, self-hostable news aggregator diff --git a/library/ix-dev/community/freshrss/app-readme.md b/library/ix-dev/community/freshrss/app-readme.md new file mode 100644 index 0000000000..194b7c0f32 --- /dev/null +++ b/library/ix-dev/community/freshrss/app-readme.md @@ -0,0 +1,3 @@ +# FreshRSS + +[FreshRSS](https://freshrss.org/) is a free, self-hostable news aggregator diff --git a/library/ix-dev/community/freshrss/charts/common-1.1.1.tgz b/library/ix-dev/community/freshrss/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7ae48cfa21932edffed81f87e4ab8bdb9aca41c8 GIT binary patch literal 61737 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%0At>i;dF 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 + Default: */20 * * * * (every 20 minutes) + schema: + type: string + default: "*/20 * * * *" + show_if: [["enableCron", "=", true]] + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for FreshRSS. + 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: freshrssNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the FreshRSS Web UI. + schema: + type: int + default: 31000 + 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: freshrssStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: FreshRSS Data Storage + description: The path to store FreshRSS 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: 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: extensions + label: FreshRSS Extensions Storage + description: The path to store FreshRSS Extensions. + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "extensions" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "pgData" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + 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: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "pgBackup" + $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 FreshRSS. + 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 + 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) + - value: "smb-pv-pvc" + description: SMB Share (Mounts a persistent volume claim to a SMB share) + - 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: 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 FreshRSS. + 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 FreshRSS. + 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/freshrss/templates/NOTES.txt b/library/ix-dev/community/freshrss/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/freshrss/templates/_configuration.tpl b/library/ix-dev/community/freshrss/templates/_configuration.tpl new file mode 100644 index 0000000000..15e2975496 --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_configuration.tpl @@ -0,0 +1,53 @@ +{{- define "freshrss.configuration" -}} + {{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} + + {{- $dbHost := (printf "%s-postgres" $fullname) -}} + {{- $dbUser := "freshrss" -}} + {{- $dbName := "freshrss" -}} + + {{- $dbPass := (randAlphaNum 32) -}} + {{- with (lookup "v1" "Secret" .Release.Namespace (printf "%s-postgres-creds" $fullname)) -}} + {{- $dbPass = ((index .data "POSTGRES_PASSWORD") | b64dec) -}} + {{- end -}} + + {{- $dbURL := (printf "postgres://%s:%s@%s:5432/%s?sslmode=disable" $dbUser $dbPass $dbHost $dbName) -}} + {{/* Temporary set dynamic db details on values, + so we can print them on the notes */}} + {{- $_ := set .Values "freshrssDbPass" $dbPass -}} + {{- $_ := set .Values "freshrssDbHost" $dbHost -}} + +secret: + postgres-creds: + enabled: true + data: + POSTGRES_USER: {{ $dbUser }} + POSTGRES_DB: {{ $dbName }} + POSTGRES_PASSWORD: {{ $dbPass }} + POSTGRES_HOST: {{ $dbHost }} + POSTGRES_URL: {{ $dbURL }} + + freshrss-creds: + enabled: true + data: + # This is only used on the first install + FRESHRSS_INSTALL: | + --default_user {{ .Values.freshrssConfig.defaultAdmin }} + --db-type pgsql + --db-base {{ $dbName }} + --db-host {{ $dbHost }} + --db-user {{ $dbUser }} + --db-password {{ $dbPass }} + # This is only used on the first install + FRESHRSS_USER: | + --user {{ .Values.freshrssConfig.defaultAdmin }} + --password {{ .Values.freshrssConfig.defaultAdminPass }} +configmap: + freshrss-config: + enabled: true + data: + FRESHRSS_ENV: production + LISTEN: {{ .Values.freshrssNetwork.webPort | quote }} + DATA_PATH: /var/www/FreshRSS/data + # We use k8s cron instead of the in-container cron + CRON_MIN: "" +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/_cron.tpl b/library/ix-dev/community/freshrss/templates/_cron.tpl new file mode 100644 index 0000000000..14d68f134c --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_cron.tpl @@ -0,0 +1,52 @@ +{{- define "freshrss.cron" -}} +workload: + freshrss-cron: + enabled: true + type: CronJob + schedule: {{ .Values.freshrssConfig.cronSchedule | quote }} + podSpec: + hostNetwork: {{ .Values.freshrssNetwork.hostNetwork }} + restartPolicy: Never + containers: + freshrss-cron: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - SETGID + - SETUID + command: + - /bin/sh + args: + - -c + - | + /var/www/FreshRSS/app/actualize_script.php + envFrom: + - secretRef: + name: freshrss-creds + - configMapRef: + name: freshrss-config + {{ with .Values.freshrssConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false + initContainers: + {{- include "ix.v1.common.app.postgresWait" (dict "name" "01-postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/_freshrss.tpl b/library/ix-dev/community/freshrss/templates/_freshrss.tpl new file mode 100644 index 0000000000..822ac3aee4 --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_freshrss.tpl @@ -0,0 +1,55 @@ +{{- define "freshrss.workload" -}} +workload: + freshrss: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.freshrssNetwork.hostNetwork }} + containers: + freshrss: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - SETGID + - SETUID + envFrom: + - secretRef: + name: freshrss-creds + - configMapRef: + name: freshrss-config + {{ with .Values.freshrssConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: {{ .Values.freshrssNetwork.webPort }} + path: /i/ + readiness: + enabled: true + type: http + port: {{ .Values.freshrssNetwork.webPort }} + path: /i/ + startup: + enabled: true + type: http + port: {{ .Values.freshrssNetwork.webPort }} + path: /i/ + initContainers: + {{- include "ix.v1.common.app.postgresWait" (dict "name" "01-postgres-wait" + "secretName" "postgres-creds") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/_persistence.tpl b/library/ix-dev/community/freshrss/templates/_persistence.tpl new file mode 100644 index 0000000000..2d035f0c5b --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_persistence.tpl @@ -0,0 +1,97 @@ +{{- define "freshrss.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.freshrssStorage.data.type }} + datasetName: {{ .Values.freshrssStorage.data.datasetName | default "" }} + hostPath: {{ .Values.freshrssStorage.data.hostPath | default "" }} + targetSelector: + freshrss: + freshrss: + mountPath: /var/www/FreshRSS/data + freshrss-cron: + freshrss-cron: + mountPath: /var/www/FreshRSS/data + extensions: + enabled: true + type: {{ .Values.freshrssStorage.extensions.type }} + datasetName: {{ .Values.freshrssStorage.extensions.datasetName | default "" }} + hostPath: {{ .Values.freshrssStorage.extensions.hostPath | default "" }} + targetSelector: + freshrss: + freshrss: + mountPath: /var/www/FreshRSS/extensions + freshrss: + freshrss: + mountPath: /var/www/FreshRSS/extensions + freshrss-cron: + freshrss-cron: + mountPath: /var/www/FreshRSS/extensions + tmp: + enabled: true + type: emptyDir + targetSelector: + freshrss: + freshrss: + mountPath: /tmp + {{- range $idx, $storage := .Values.freshrssStorage.additionalStorages }} + {{ printf "freshrss-%v" (int $idx) }}: + {{- $size := "" -}} + {{- if $storage.size -}} + {{- $size = (printf "%vGi" $storage.size) -}} + {{- end }} + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + server: {{ $storage.server | default "" }} + share: {{ $storage.share | default "" }} + domain: {{ $storage.domain | default "" }} + username: {{ $storage.username | default "" }} + password: {{ $storage.password | default "" }} + size: {{ $size }} + {{- if eq $storage.type "smb-pv-pvc" }} + mountOptions: + - key: noperm + {{- end }} + targetSelector: + freshrss: + freshrss: + mountPath: {{ $storage.mountPath }} + freshrss-cron: + freshrss-cron: + mountPath: {{ $storage.mountPath }} + {{- end }} + + {{/* Database */}} + postgresdata: + enabled: true + type: {{ .Values.freshrssStorage.pgData.type }} + datasetName: {{ .Values.freshrssStorage.pgData.datasetName | default "" }} + hostPath: {{ .Values.freshrssStorage.pgData.hostPath | default "" }} + targetSelector: + # Postgres pod + postgres: + # Postgres container + postgres: + mountPath: /var/lib/postgresql/data + # Postgres - Permissions container + # Different than the 01-permissions + permissions: + mountPath: /mnt/directories/postgres_data + postgresbackup: + enabled: true + type: {{ .Values.freshrssStorage.pgBackup.type }} + datasetName: {{ .Values.freshrssStorage.pgBackup.datasetName | default "" }} + hostPath: {{ .Values.freshrssStorage.pgBackup.hostPath | default "" }} + targetSelector: + # Postgres backup pod + postgresbackup: + # Postgres backup container + postgresbackup: + mountPath: /postgres_backup + # Postgres - Permissions container + # Different than the 01-permissions + permissions: + mountPath: /mnt/directories/postgres_backup +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/_portal.tpl b/library/ix-dev/community/freshrss/templates/_portal.tpl new file mode 100644 index 0000000000..4675510530 --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "freshrss.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.freshrssNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/_postgres.tpl b/library/ix-dev/community/freshrss/templates/_postgres.tpl new file mode 100644 index 0000000000..16c9bae77b --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_postgres.tpl @@ -0,0 +1,6 @@ +{{- define "freshrss.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/library/ix-dev/community/freshrss/templates/_service.tpl b/library/ix-dev/community/freshrss/templates/_service.tpl new file mode 100644 index 0000000000..e405a14831 --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/_service.tpl @@ -0,0 +1,28 @@ +{{- define "freshrss.service" -}} +service: + freshrss: + enabled: true + primary: true + type: NodePort + targetSelector: freshrss + ports: + webui: + enabled: true + primary: true + port: {{ .Values.freshrssNetwork.webPort }} + nodePort: {{ .Values.freshrssNetwork.webPort }} + targetSelector: freshrss + + {{/* Database */}} + postgres: + enabled: true + type: ClusterIP + targetSelector: postgres + ports: + postgres: + enabled: true + primary: true + port: 5432 + targetPort: 5432 + targetSelector: postgres +{{- end -}} diff --git a/library/ix-dev/community/freshrss/templates/common.yaml b/library/ix-dev/community/freshrss/templates/common.yaml new file mode 100644 index 0000000000..070c03da11 --- /dev/null +++ b/library/ix-dev/community/freshrss/templates/common.yaml @@ -0,0 +1,16 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "freshrss.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "freshrss.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "freshrss.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "freshrss.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "freshrss.postgres.workload" $ | fromYaml) -}} +{{- if .Values.freshrssConfig.enableCron -}} + {{- $_ := mustMergeOverwrite .Values (include "freshrss.cron" $ | fromYaml) -}} +{{- end -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "freshrss.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/freshrss/upgrade_info.json b/library/ix-dev/community/freshrss/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/freshrss/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/freshrss/upgrade_strategy b/library/ix-dev/community/freshrss/upgrade_strategy new file mode 100755 index 0000000000..af685230a1 --- /dev/null +++ b/library/ix-dev/community/freshrss/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'\d+\.\d+\.\d+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +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/freshrss/values.yaml b/library/ix-dev/community/freshrss/values.yaml new file mode 100644 index 0000000000..c2e5e5bc51 --- /dev/null +++ b/library/ix-dev/community/freshrss/values.yaml @@ -0,0 +1,54 @@ +image: + repository: freshrss/freshrss + pullPolicy: IfNotPresent + tag: 1.22.0 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +freshrssConfig: + defaultAdmin: '' + defaultAdminPass: '' + enableCron: false + # */20 * * * * = every 20 minutes (Recommended) + cronSchedule: '' + additionalEnvs: [] + +freshrssNetwork: + webPort: 31000 + hostNetwork: false + +freshrssStorage: + data: + type: ixVolume + datasetName: data + extensions: + type: ixVolume + datasetName: extensions + additionalStorages: [] + pgData: + type: ixVolume + datasetName: pgData + pgBackup: + type: ixVolume + datasetName: pgBackup + +notes: + custom: | + ## Database + You can connect to the database using the pgAdmin App from the catalog + +
+ Database Details + + - Database: `freshrss` + - Username: `freshrss` + - Password: `{{ .Values.freshrssDbPass }}` + - Host: `{{ .Values.freshrssDbHost }}.{{ .Release.Namespace }}.svc.cluster.local` + - Port: `5432` + +
+ {{- $_ := unset .Values "freshrssDbPass" }} + {{- $_ := unset .Values "freshrssDbHost" }}