From bbf4b8020b3b3b9f355d062a66784ab6b016edd4 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Fri, 21 Jul 2023 19:40:48 +0300 Subject: [PATCH] NAS-123103 / 23.10 / add `sabnzbd` to `community` train (#1383) * add `sabnzbd` to `community` train * add templates * add ui * update values on test --- library/ix-dev/community/sabnzbd/Chart.lock | 6 + library/ix-dev/community/sabnzbd/Chart.yaml | 27 ++ library/ix-dev/community/sabnzbd/README.md | 8 + .../ix-dev/community/sabnzbd/app-readme.md | 8 + .../sabnzbd/charts/common-1.0.12.tgz | Bin 0 -> 56716 bytes .../community/sabnzbd/ci/basic-values.yaml | 11 + .../community/sabnzbd/ci/extra-values.yaml | 21 ++ .../community/sabnzbd/ci/hostNet-values.yaml | 8 + library/ix-dev/community/sabnzbd/item.yaml | 10 + .../ix-dev/community/sabnzbd/metadata.yaml | 8 + .../ix-dev/community/sabnzbd/questions.yaml | 233 ++++++++++++++++++ .../community/sabnzbd/templates/NOTES.txt | 1 + .../sabnzbd/templates/_persistence.tpl | 34 +++ .../community/sabnzbd/templates/_portal.tpl | 12 + .../community/sabnzbd/templates/_sabnzbd.tpl | 48 ++++ .../community/sabnzbd/templates/_service.tpl | 15 ++ .../community/sabnzbd/templates/common.yaml | 11 + .../community/sabnzbd/upgrade_info.json | 1 + .../ix-dev/community/sabnzbd/upgrade_strategy | 31 +++ library/ix-dev/community/sabnzbd/values.yaml | 26 ++ 20 files changed, 519 insertions(+) create mode 100644 library/ix-dev/community/sabnzbd/Chart.lock create mode 100644 library/ix-dev/community/sabnzbd/Chart.yaml create mode 100644 library/ix-dev/community/sabnzbd/README.md create mode 100644 library/ix-dev/community/sabnzbd/app-readme.md create mode 100644 library/ix-dev/community/sabnzbd/charts/common-1.0.12.tgz create mode 100644 library/ix-dev/community/sabnzbd/ci/basic-values.yaml create mode 100644 library/ix-dev/community/sabnzbd/ci/extra-values.yaml create mode 100644 library/ix-dev/community/sabnzbd/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/sabnzbd/item.yaml create mode 100644 library/ix-dev/community/sabnzbd/metadata.yaml create mode 100644 library/ix-dev/community/sabnzbd/questions.yaml create mode 100644 library/ix-dev/community/sabnzbd/templates/NOTES.txt create mode 100644 library/ix-dev/community/sabnzbd/templates/_persistence.tpl create mode 100644 library/ix-dev/community/sabnzbd/templates/_portal.tpl create mode 100644 library/ix-dev/community/sabnzbd/templates/_sabnzbd.tpl create mode 100644 library/ix-dev/community/sabnzbd/templates/_service.tpl create mode 100644 library/ix-dev/community/sabnzbd/templates/common.yaml create mode 100644 library/ix-dev/community/sabnzbd/upgrade_info.json create mode 100755 library/ix-dev/community/sabnzbd/upgrade_strategy create mode 100644 library/ix-dev/community/sabnzbd/values.yaml diff --git a/library/ix-dev/community/sabnzbd/Chart.lock b/library/ix-dev/community/sabnzbd/Chart.lock new file mode 100644 index 0000000000..acfacfba3a --- /dev/null +++ b/library/ix-dev/community/sabnzbd/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.12 +digest: sha256:debd30721d09ae8293b1cbdd9d0115981d40b47908be3035fc3cf657c9d5eedb +generated: "2023-07-19T19:08:44.866399787+03:00" diff --git a/library/ix-dev/community/sabnzbd/Chart.yaml b/library/ix-dev/community/sabnzbd/Chart.yaml new file mode 100644 index 0000000000..d3e330b53a --- /dev/null +++ b/library/ix-dev/community/sabnzbd/Chart.yaml @@ -0,0 +1,27 @@ +name: sabnzbd +description: SABnzbd is an Open Source Binary Newsreader written in Python. +annotations: + title: SABnzbd +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 4.0.3 +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.0.12 +home: https://sabnzbd.org/ +icon: https://avatars.githubusercontent.com/u/960698 +sources: + - https://github.com/onedr0p/containers/tree/main/apps/sabnzbd + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/sabnzbd + - https://github.com/Sabnzbd/Sabnzbd +keywords: + - media + - usenet + - newsreader diff --git a/library/ix-dev/community/sabnzbd/README.md b/library/ix-dev/community/sabnzbd/README.md new file mode 100644 index 0000000000..59b4e0691e --- /dev/null +++ b/library/ix-dev/community/sabnzbd/README.md @@ -0,0 +1,8 @@ +# SABnzbd + +[SABnzbd](https://github.com/Sabnzbd/Sabnzbd) is an Open Source Binary Newsreader written in Python. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `SABnzbd` directories. +> Afterward, the `SABnzbd` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/sabnzbd/app-readme.md b/library/ix-dev/community/sabnzbd/app-readme.md new file mode 100644 index 0000000000..59b4e0691e --- /dev/null +++ b/library/ix-dev/community/sabnzbd/app-readme.md @@ -0,0 +1,8 @@ +# SABnzbd + +[SABnzbd](https://github.com/Sabnzbd/Sabnzbd) is an Open Source Binary Newsreader written in Python. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `SABnzbd` directories. +> Afterward, the `SABnzbd` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/sabnzbd/charts/common-1.0.12.tgz b/library/ix-dev/community/sabnzbd/charts/common-1.0.12.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2a28992229b7a686e7abd5a95eee22f7cc16f9d5 GIT binary patch literal 56716 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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/sabnzbd/ci/basic-values.yaml b/library/ix-dev/community/sabnzbd/ci/basic-values.yaml new file mode 100644 index 0000000000..741fdd3c4b --- /dev/null +++ b/library/ix-dev/community/sabnzbd/ci/basic-values.yaml @@ -0,0 +1,11 @@ +sabnzbdNetwork: + webPort: 31000 + +sabnzbdRunAs: + user: 1000 + group: 1000 + +sabnzbdStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config diff --git a/library/ix-dev/community/sabnzbd/ci/extra-values.yaml b/library/ix-dev/community/sabnzbd/ci/extra-values.yaml new file mode 100644 index 0000000000..35dbf8a192 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/ci/extra-values.yaml @@ -0,0 +1,21 @@ +sabnzbdConfig: + additionalEnvs: + - name: SABNZBD__API_KEY + value: some-long-api-key + - name: SABNZBD__NZB_KEY + value: some-long-nzb-key + +sabnzbdNetwork: + webPort: 31000 + +sabnzbdStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + 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/sabnzbd/ci/hostNet-values.yaml b/library/ix-dev/community/sabnzbd/ci/hostNet-values.yaml new file mode 100644 index 0000000000..a5b6605076 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/ci/hostNet-values.yaml @@ -0,0 +1,8 @@ +sabnzbdNetwork: + webPort: 30000 + hostNetwork: true + +sabnzbdStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config diff --git a/library/ix-dev/community/sabnzbd/item.yaml b/library/ix-dev/community/sabnzbd/item.yaml new file mode 100644 index 0000000000..d7a8d162bd --- /dev/null +++ b/library/ix-dev/community/sabnzbd/item.yaml @@ -0,0 +1,10 @@ +icon_url: https://avatars.githubusercontent.com/u/960698 +categories: + - media +screenshots: + - https://sabnzbd.org/images/landing/screenshots/interface.png + - https://sabnzbd.org/images/landing/screenshots/night-mode.png + - https://sabnzbd.org/images/landing/screenshots/tabbed.png +tags: + - usenet + - newsreader diff --git a/library/ix-dev/community/sabnzbd/metadata.yaml b/library/ix-dev/community/sabnzbd/metadata.yaml new file mode 100644 index 0000000000..7a78d005bf --- /dev/null +++ b/library/ix-dev/community/sabnzbd/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: sabnzbd + groupName: sabnzbd + gid: 568 + uid: 568 + description: Sabnzbd can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/community/sabnzbd/questions.yaml b/library/ix-dev/community/sabnzbd/questions.yaml new file mode 100644 index 0000000000..7fce72a439 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/questions.yaml @@ -0,0 +1,233 @@ +groups: + - name: SABnzbd Configuration + description: Configure SABnzbd + - name: User and Group Configuration + description: Configure User and Group for SABnzbd + - name: Network Configuration + description: Configure Network for SABnzbd + - name: Storage Configuration + description: Configure Storage for SABnzbd + - name: Resources Configuration + description: Configure Resources for SABnzbd + +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: sabnzbdConfig + label: "" + group: SABnzbd Configuration + schema: + type: dict + attrs: + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for SABnzbd. + 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: sabnzbdRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that SABnzbd will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that SABnzbd will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: sabnzbdNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the SABnzbd Web UI. + schema: + type: int + default: 30055 + 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: sabnzbdStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: SABnzbd Config Storage + description: The path to store SABnzbd Configuration. + 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: "config" + $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 SABnzbd. + 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 + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for SABnzbd. + 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 SABnzbd. + 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/sabnzbd/templates/NOTES.txt b/library/ix-dev/community/sabnzbd/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/sabnzbd/templates/_persistence.tpl b/library/ix-dev/community/sabnzbd/templates/_persistence.tpl new file mode 100644 index 0000000000..bb731c788c --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/_persistence.tpl @@ -0,0 +1,34 @@ +{{- define "sabnzbd.persistence" -}} +persistence: + config: + enabled: true + type: {{ .Values.sabnzbdStorage.config.type }} + datasetName: {{ .Values.sabnzbdStorage.config.datasetName | default "" }} + hostPath: {{ .Values.sabnzbdStorage.config.hostPath | default "" }} + targetSelector: + sabnzbd: + sabnzbd: + mountPath: /config + 01-permissions: + mountPath: /mnt/directories/config + tmp: + enabled: true + type: emptyDir + targetSelector: + sabnzbd: + sabnzbd: + mountPath: /tmp + {{- range $idx, $storage := .Values.sabnzbdStorage.additionalStorages }} + {{ printf "sabnzbd-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + sabnzbd: + sabnzbd: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/sabnzbd/templates/_portal.tpl b/library/ix-dev/community/sabnzbd/templates/_portal.tpl new file mode 100644 index 0000000000..66ef6023b9 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "sabnzbd.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.sabnzbdNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/sabnzbd/templates/_sabnzbd.tpl b/library/ix-dev/community/sabnzbd/templates/_sabnzbd.tpl new file mode 100644 index 0000000000..1299dadbeb --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/_sabnzbd.tpl @@ -0,0 +1,48 @@ +{{- define "sabnzbd.workload" -}} +workload: + sabnzbd: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.sabnzbdNetwork.hostNetwork }} + containers: + sabnzbd: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.sabnzbdRunAs.user }} + runAsGroup: {{ .Values.sabnzbdRunAs.group }} + env: + SABNZBD__PORT: {{ .Values.sabnzbdNetwork.webPort }} + {{ with .Values.sabnzbdConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: "{{ .Values.sabnzbdNetwork.webPort }}" + path: /api?mode=version + readiness: + enabled: true + type: http + port: "{{ .Values.sabnzbdNetwork.webPort }}" + path: /api?mode=version + startup: + enabled: true + type: http + port: "{{ .Values.sabnzbdNetwork.webPort }}" + path: /api?mode=version + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.sabnzbdRunAs.user + "GID" .Values.sabnzbdRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/sabnzbd/templates/_service.tpl b/library/ix-dev/community/sabnzbd/templates/_service.tpl new file mode 100644 index 0000000000..53f22363e9 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/_service.tpl @@ -0,0 +1,15 @@ +{{- define "sabnzbd.service" -}} +service: + sabnzbd: + enabled: true + primary: true + type: NodePort + targetSelector: sabnzbd + ports: + webui: + enabled: true + primary: true + port: {{ .Values.sabnzbdNetwork.webPort }} + nodePort: {{ .Values.sabnzbdNetwork.webPort }} + targetSelector: sabnzbd +{{- end -}} diff --git a/library/ix-dev/community/sabnzbd/templates/common.yaml b/library/ix-dev/community/sabnzbd/templates/common.yaml new file mode 100644 index 0000000000..c9f75cbe31 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "sabnzbd.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "sabnzbd.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "sabnzbd.persistence" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "sabnzbd.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/sabnzbd/upgrade_info.json b/library/ix-dev/community/sabnzbd/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/sabnzbd/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/sabnzbd/upgrade_strategy b/library/ix-dev/community/sabnzbd/upgrade_strategy new file mode 100755 index 0000000000..af685230a1 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/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/sabnzbd/values.yaml b/library/ix-dev/community/sabnzbd/values.yaml new file mode 100644 index 0000000000..f928727067 --- /dev/null +++ b/library/ix-dev/community/sabnzbd/values.yaml @@ -0,0 +1,26 @@ +image: + repository: ghcr.io/onedr0p/sabnzbd + pullPolicy: IfNotPresent + tag: 4.0.3 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +sabnzbdConfig: + additionalEnvs: [] + +sabnzbdNetwork: + webPort: 30055 + hostNetwork: false + +sabnzbdRunAs: + user: 568 + group: 568 + +sabnzbdStorage: + config: + type: ixVolume + datasetName: config + additionalStorages: []