From c539489f78567b4002fe6693357dabdf100ba8f5 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Wed, 26 Apr 2023 19:35:16 +0300 Subject: [PATCH] NAS-121565 / 23.10 / Add Tdarr to community train (#1141) * Add Tdarr to community train * fix UI * Apply suggestions from code review --- library/ix-dev/community/tdarr/Chart.lock | 6 + library/ix-dev/community/tdarr/Chart.yaml | 26 ++ library/ix-dev/community/tdarr/README.md | 5 + library/ix-dev/community/tdarr/app-readme.md | 5 + .../community/tdarr/charts/common-1.0.6.tgz | Bin 0 -> 54959 bytes .../community/tdarr/ci/basic-values.yaml | 19 + .../tdarr/ci/no-internal-node-values.yaml | 16 + library/ix-dev/community/tdarr/item.yaml | 5 + library/ix-dev/community/tdarr/questions.yaml | 395 ++++++++++++++++++ .../community/tdarr/templates/NOTES.txt | 1 + .../community/tdarr/templates/_portal.tpl | 12 + .../community/tdarr/templates/_tdarr.tpl | 144 +++++++ .../community/tdarr/templates/common.yaml | 9 + .../ix-dev/community/tdarr/upgrade_info.json | 1 + .../ix-dev/community/tdarr/upgrade_strategy | 31 ++ library/ix-dev/community/tdarr/values.yaml | 41 ++ 16 files changed, 716 insertions(+) create mode 100644 library/ix-dev/community/tdarr/Chart.lock create mode 100644 library/ix-dev/community/tdarr/Chart.yaml create mode 100644 library/ix-dev/community/tdarr/README.md create mode 100644 library/ix-dev/community/tdarr/app-readme.md create mode 100644 library/ix-dev/community/tdarr/charts/common-1.0.6.tgz create mode 100644 library/ix-dev/community/tdarr/ci/basic-values.yaml create mode 100644 library/ix-dev/community/tdarr/ci/no-internal-node-values.yaml create mode 100644 library/ix-dev/community/tdarr/item.yaml create mode 100644 library/ix-dev/community/tdarr/questions.yaml create mode 100644 library/ix-dev/community/tdarr/templates/NOTES.txt create mode 100644 library/ix-dev/community/tdarr/templates/_portal.tpl create mode 100644 library/ix-dev/community/tdarr/templates/_tdarr.tpl create mode 100644 library/ix-dev/community/tdarr/templates/common.yaml create mode 100644 library/ix-dev/community/tdarr/upgrade_info.json create mode 100755 library/ix-dev/community/tdarr/upgrade_strategy create mode 100644 library/ix-dev/community/tdarr/values.yaml diff --git a/library/ix-dev/community/tdarr/Chart.lock b/library/ix-dev/community/tdarr/Chart.lock new file mode 100644 index 0000000000..d6ce32df20 --- /dev/null +++ b/library/ix-dev/community/tdarr/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.6 +digest: sha256:2f1f31c15fb7f92db141a66adbb8d23a8598727730050a3883a211763a4e5472 +generated: "2023-04-20T01:43:11.036358079+03:00" diff --git a/library/ix-dev/community/tdarr/Chart.yaml b/library/ix-dev/community/tdarr/Chart.yaml new file mode 100644 index 0000000000..3b6a487e2c --- /dev/null +++ b/library/ix-dev/community/tdarr/Chart.yaml @@ -0,0 +1,26 @@ +name: tdarr +description: Tdarr is a Distributed Transcoding System +annotations: + title: Tdarr +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '2.00.20.1' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ +dependencies: + - name: common + repository: file://../../../common + version: 1.0.6 +home: https://home.tdarr.io/ +icon: https://home.tdarr.io/static/media/logo3-min.246d6df4.png +sources: + - https://home.tdarr.io/ + - https://github.com/truenas/charts/tree/master/community/tdarr + - https://docs.tdarr.io/docs +keywords: + - media + - encode + - transcode diff --git a/library/ix-dev/community/tdarr/README.md b/library/ix-dev/community/tdarr/README.md new file mode 100644 index 0000000000..01b8590ff7 --- /dev/null +++ b/library/ix-dev/community/tdarr/README.md @@ -0,0 +1,5 @@ +# Tdarr + +[Tdarr](https://home.tdarr.io/) is a Distributed Transcoding System + +- App runs as `root` user diff --git a/library/ix-dev/community/tdarr/app-readme.md b/library/ix-dev/community/tdarr/app-readme.md new file mode 100644 index 0000000000..01b8590ff7 --- /dev/null +++ b/library/ix-dev/community/tdarr/app-readme.md @@ -0,0 +1,5 @@ +# Tdarr + +[Tdarr](https://home.tdarr.io/) is a Distributed Transcoding System + +- App runs as `root` user diff --git a/library/ix-dev/community/tdarr/charts/common-1.0.6.tgz b/library/ix-dev/community/tdarr/charts/common-1.0.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1c20e8362bb725b2e082be85da26cedeeb7249cd GIT binary patch literal 54959 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 N|NrFGAiMw=2LRHPt)u_| literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/tdarr/ci/basic-values.yaml b/library/ix-dev/community/tdarr/ci/basic-values.yaml new file mode 100644 index 0000000000..568fb90809 --- /dev/null +++ b/library/ix-dev/community/tdarr/ci/basic-values.yaml @@ -0,0 +1,19 @@ +tdarrConfig: + nodeName: My Internal Node +tdarrID: + user: 1001 + group: 1001 +tdarrStorage: + server: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/server + configs: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/configs + logs: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/logs + transcodes: + type: emptyDir + medium: Memory + size: 1Gi diff --git a/library/ix-dev/community/tdarr/ci/no-internal-node-values.yaml b/library/ix-dev/community/tdarr/ci/no-internal-node-values.yaml new file mode 100644 index 0000000000..bd5432f14d --- /dev/null +++ b/library/ix-dev/community/tdarr/ci/no-internal-node-values.yaml @@ -0,0 +1,16 @@ +tdarrConfig: + nodeName: '' + internalNode: false +tdarrStorage: + server: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/server + configs: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/configs + logs: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/logs + transcodes: + type: emptyDir + size: 1Gi diff --git a/library/ix-dev/community/tdarr/item.yaml b/library/ix-dev/community/tdarr/item.yaml new file mode 100644 index 0000000000..5ee6345b73 --- /dev/null +++ b/library/ix-dev/community/tdarr/item.yaml @@ -0,0 +1,5 @@ +icon_url: https://home.tdarr.io/static/media/logo3-min.246d6df4.png +categories: + - media + - encode + - transcode diff --git a/library/ix-dev/community/tdarr/questions.yaml b/library/ix-dev/community/tdarr/questions.yaml new file mode 100644 index 0000000000..e6f2c55de8 --- /dev/null +++ b/library/ix-dev/community/tdarr/questions.yaml @@ -0,0 +1,395 @@ +groups: + - name: Tdarr Configuration + description: Configure Tdarr + - name: User and Group Configuration + description: Configure User and Group for Tdarr + - name: Network Configuration + description: Configure Network for Tdarr + - name: Storage Configuration + description: Configure Storage for Tdarr + - name: Resources Configuration + description: Configure Resources for Tdarr + +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: Tdarr Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: tdarrConfig + label: "" + group: Tdarr Configuration + schema: + type: dict + attrs: + - variable: internalNode + label: Internal Node + description: | + If disabled, Tdarr will run only the server and webUI.
+ If enabled, Tdarr will also start an internal node in the same container. + schema: + type: boolean + default: true + - variable: nodeName + label: Node Name + description: The name of the Tdarr Node. + schema: + type: string + default: "Tdarr" + show_if: [["internalNode", "=", true]] + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Tdarr. + 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: tdarrID + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Tdarr files will be owned by. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Tdarr files will be owned by. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: tdarrNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Tdarr Web UI. + schema: + type: int + default: 30000 + min: 9000 + max: 65535 + required: true + - variable: serverPort + label: Server Port + description: The port for the Tdarr Server. + schema: + type: int + default: 30001 + min: 9000 + max: 65535 + required: true + + - variable: tdarrStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: server + label: Tdarr Server Storage + description: The path to store Tdarr Server 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: "server" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: configs + label: Tdarr Config Storage + description: The path to store Tdarr 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: "configs" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: logs + label: Tdarr Logs Storage + description: The path to store Tdarr Logs. + 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: "logs" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: transcodes + label: Tdarr Transcodes Storage + description: The path to store Tdarr Transcodes. + 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.
+ emptyDir: Is a temporary directory that will be created on the disk or in memory. + 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) + - value: "emptyDir" + description: emptyDir (Temporary directory created on the disk or in memory) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "transcodes" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: medium + label: emptyDir Medium + description: | + Disk: Creates a temporary directory on the disk.
+ Memory: Creates a temporary directory in memory. + schema: + type: string + show_if: [["type", "=", "emptyDir"]] + default: "" + enum: + - value: "" + description: Disk (Temporary directory created on the disk) + - value: "Memory" + description: Memory (Temporary directory created in memory) + - variable: size + label: emptyDir Size Limit + description: | + The maximum size of the temporary directory.
+ For example: 2Gi + schema: + type: string + show_if: [["type", "=", "emptyDir"]] + default: "2Gi" + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Tdarr. + 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 Tdarr. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Tdarr. + schema: + type: string + default: "8Gi" + required: true + + - variable: tdarrGPU + group: Resources Configuration + label: GPU Configuration + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] diff --git a/library/ix-dev/community/tdarr/templates/NOTES.txt b/library/ix-dev/community/tdarr/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/tdarr/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/tdarr/templates/_portal.tpl b/library/ix-dev/community/tdarr/templates/_portal.tpl new file mode 100644 index 0000000000..900abe3dbf --- /dev/null +++ b/library/ix-dev/community/tdarr/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "tdarr.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.tdarrNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/tdarr/templates/_tdarr.tpl b/library/ix-dev/community/tdarr/templates/_tdarr.tpl new file mode 100644 index 0000000000..0cb7c299bd --- /dev/null +++ b/library/ix-dev/community/tdarr/templates/_tdarr.tpl @@ -0,0 +1,144 @@ +{{- define "tdarr.workload" -}} +workload: + tdarr: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + securityContext: + fsGroup: {{ .Values.tdarrID.group }} + containers: + tdarr: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + readOnlyRootFilesystem: false + runAsNonRoot: false + capabilities: + add: + - CHOWN + - FOWNER + - SETUID + - SETGID + env: + inContainer: "true" + internalNode: {{ .Values.tdarrConfig.internalNode | quote }} + serverPort: {{ .Values.tdarrNetwork.serverPort }} + webUIPort: {{ .Values.tdarrNetwork.webPort }} + nodeName: {{ .Values.tdarrConfig.nodeName }} + serverIP: {{ .Values.tdarrConfig.serverIP }} + fixedEnv: + PUID: {{ .Values.tdarrID.user }} + envList: + {{ with .Values.tdarrConfig.additionalEnvs }} + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: "{{ .Values.tdarrNetwork.webPort }}" + path: /api/v2/status + readiness: + enabled: true + type: http + port: "{{ .Values.tdarrNetwork.webPort }}" + path: /api/v2/status + startup: + enabled: true + type: http + port: "{{ .Values.tdarrNetwork.webPort }}" + path: /api/v2/status + +{{/* Service */}} +service: + tdarr: + enabled: true + primary: true + type: NodePort + targetSelector: tdarr + ports: + webui: + enabled: true + primary: true + port: {{ .Values.tdarrNetwork.webPort }} + nodePort: {{ .Values.tdarrNetwork.webPort }} + targetSelector: tdarr + server: + enabled: true + port: {{ .Values.tdarrNetwork.serverPort }} + nodePort: {{ .Values.tdarrNetwork.serverPort }} + targetSelector: tdarr + +{{/* Persistence */}} +persistence: + server: + enabled: true + type: {{ .Values.tdarrStorage.server.type }} + datasetName: {{ .Values.tdarrStorage.server.datasetName | default "" }} + hostPath: {{ .Values.tdarrStorage.server.hostPath | default "" }} + targetSelector: + tdarr: + tdarr: + mountPath: /app/server + configs: + enabled: true + type: {{ .Values.tdarrStorage.configs.type }} + datasetName: {{ .Values.tdarrStorage.configs.datasetName | default "" }} + hostPath: {{ .Values.tdarrStorage.configs.hostPath | default "" }} + targetSelector: + tdarr: + tdarr: + mountPath: /app/configs + logs: + enabled: true + type: {{ .Values.tdarrStorage.logs.type }} + datasetName: {{ .Values.tdarrStorage.logs.datasetName | default "" }} + hostPath: {{ .Values.tdarrStorage.logs.hostPath | default "" }} + targetSelector: + tdarr: + tdarr: + mountPath: /app/logs + transcode: + enabled: true + type: {{ .Values.tdarrStorage.transcodes.type }} + datasetName: {{ .Values.tdarrStorage.transcodes.datasetName | default "" }} + hostPath: {{ .Values.tdarrStorage.transcodes.hostPath | default "" }} + medium: {{ .Values.tdarrStorage.transcodes.medium | default "" }} + {{/* Size of the emptyDir */}} + size: {{ .Values.tdarrStorage.transcodes.size | default "" }} + targetSelector: + tdarr: + tdarr: + mountPath: /temp + {{- range $idx, $storage := .Values.tdarrStorage.additionalStorages }} + {{ printf "tdarr-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + tdarr: + tdarr: + mountPath: {{ $storage.mountPath }} + {{- end }} + +{{ with .Values.tdarrGPU }} + {{ if gt (. | len) 1 }} + {{- fail "Tdarr - Max [1] GPUs allowed" -}} + {{ end }} +scaleGPU: + - gpu: + {{ . | keys | first }}: {{ . | values | first }} + targetSelector: + tdarr: + - tdarr +{{ end }} +{{- end -}} diff --git a/library/ix-dev/community/tdarr/templates/common.yaml b/library/ix-dev/community/tdarr/templates/common.yaml new file mode 100644 index 0000000000..e4e4697662 --- /dev/null +++ b/library/ix-dev/community/tdarr/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "tdarr.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "tdarr.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/tdarr/upgrade_info.json b/library/ix-dev/community/tdarr/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/tdarr/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/tdarr/upgrade_strategy b/library/ix-dev/community/tdarr/upgrade_strategy new file mode 100755 index 0000000000..3e49862388 --- /dev/null +++ b/library/ix-dev/community/tdarr/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'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') + + +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/tdarr/values.yaml b/library/ix-dev/community/tdarr/values.yaml new file mode 100644 index 0000000000..acc0d8685c --- /dev/null +++ b/library/ix-dev/community/tdarr/values.yaml @@ -0,0 +1,41 @@ +image: + repository: haveagitgat/tdarr + pullPolicy: IfNotPresent + tag: '2.00.20.1' + +resources: + limits: + cpu: 4000m + memory: 8Gi +tdarrConfig: + nodeName: '' + internalNode: true + serverIP: "0.0.0.0" + additionalEnvs: [] +tdarrNetwork: + webPort: 30000 + serverPort: 30001 +tdarrGPU: {} +tdarrID: + user: 568 + group: 568 +tdarrStorage: + server: + type: ixVolume + hostPath: '' + datasetName: server + configs: + type: ixVolume + hostPath: '' + datasetName: configs + logs: + type: ixVolume + hostPath: '' + datasetName: logs + transcodes: + type: ixVolume + hostPath: '' + datasetName: transcodes + medium: '' + size: '' + additionalStorages: []