From fab1c03d7475c3379a28eb37dbba84d9505f9cee Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Fri, 13 Oct 2023 18:43:18 +0300 Subject: [PATCH] Add `metube` to `community` train (#1635) * initial commit * add upg strategy * some metadata * add template for service * add values * typo * add more * add metadata * add readme * add questions * remove quotes --- library/ix-dev/community/metube/Chart.lock | 6 + library/ix-dev/community/metube/Chart.yaml | 25 ++ library/ix-dev/community/metube/README.md | 8 + library/ix-dev/community/metube/app-readme.md | 8 + .../community/metube/charts/common-1.1.1.tgz | Bin 0 -> 61730 bytes .../community/metube/ci/basic-values.yaml | 10 + .../community/metube/ci/extra-values.yaml | 14 + .../community/metube/ci/hostNet-values.yaml | 7 + library/ix-dev/community/metube/item.yaml | 8 + library/ix-dev/community/metube/metadata.yaml | 8 + .../ix-dev/community/metube/questions.yaml | 247 ++++++++++++++++++ .../community/metube/templates/NOTES.txt | 1 + .../community/metube/templates/_metube.tpl | 51 ++++ .../metube/templates/_persistence.tpl | 34 +++ .../community/metube/templates/_portal.tpl | 12 + .../community/metube/templates/_service.tpl | 15 ++ .../community/metube/templates/common.yaml | 11 + .../ix-dev/community/metube/upgrade_info.json | 1 + .../ix-dev/community/metube/upgrade_strategy | 31 +++ library/ix-dev/community/metube/values.yaml | 27 ++ 20 files changed, 524 insertions(+) create mode 100644 library/ix-dev/community/metube/Chart.lock create mode 100644 library/ix-dev/community/metube/Chart.yaml create mode 100644 library/ix-dev/community/metube/README.md create mode 100644 library/ix-dev/community/metube/app-readme.md create mode 100644 library/ix-dev/community/metube/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/metube/ci/basic-values.yaml create mode 100644 library/ix-dev/community/metube/ci/extra-values.yaml create mode 100644 library/ix-dev/community/metube/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/metube/item.yaml create mode 100644 library/ix-dev/community/metube/metadata.yaml create mode 100644 library/ix-dev/community/metube/questions.yaml create mode 100644 library/ix-dev/community/metube/templates/NOTES.txt create mode 100644 library/ix-dev/community/metube/templates/_metube.tpl create mode 100644 library/ix-dev/community/metube/templates/_persistence.tpl create mode 100644 library/ix-dev/community/metube/templates/_portal.tpl create mode 100644 library/ix-dev/community/metube/templates/_service.tpl create mode 100644 library/ix-dev/community/metube/templates/common.yaml create mode 100644 library/ix-dev/community/metube/upgrade_info.json create mode 100755 library/ix-dev/community/metube/upgrade_strategy create mode 100644 library/ix-dev/community/metube/values.yaml diff --git a/library/ix-dev/community/metube/Chart.lock b/library/ix-dev/community/metube/Chart.lock new file mode 100644 index 0000000000..6027bab5b0 --- /dev/null +++ b/library/ix-dev/community/metube/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-10-12T16:10:43.537427728+03:00" diff --git a/library/ix-dev/community/metube/Chart.yaml b/library/ix-dev/community/metube/Chart.yaml new file mode 100644 index 0000000000..c36d5fc313 --- /dev/null +++ b/library/ix-dev/community/metube/Chart.yaml @@ -0,0 +1,25 @@ +name: metube +description: MeTube is a web GUI for youtube-dl (using the yt-dlp fork) with playlist support. +annotations: + title: MeTube +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '2023-10-03' +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://github.com/alexta69/metube +icon: https://localhost/no-icon +sources: + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/metube + - https://github.com/alexta69/metube +keywords: + - youtube-dl + - yt-dlp diff --git a/library/ix-dev/community/metube/README.md b/library/ix-dev/community/metube/README.md new file mode 100644 index 0000000000..4ab1a2a257 --- /dev/null +++ b/library/ix-dev/community/metube/README.md @@ -0,0 +1,8 @@ +# MeTube + +[MeTube](https://github.com/alexta69/metube) is an ebook and audiobook collection manager for Usenet and BitTorrent users. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `MeTube` directories. +> Afterward, the `MeTube` 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/metube/app-readme.md b/library/ix-dev/community/metube/app-readme.md new file mode 100644 index 0000000000..4ab1a2a257 --- /dev/null +++ b/library/ix-dev/community/metube/app-readme.md @@ -0,0 +1,8 @@ +# MeTube + +[MeTube](https://github.com/alexta69/metube) is an ebook and audiobook collection manager for Usenet and BitTorrent users. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `MeTube` directories. +> Afterward, the `MeTube` 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/metube/charts/common-1.1.1.tgz b/library/ix-dev/community/metube/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..67909f224e4a9d2af8959fce789e39bc7b90c2ca GIT binary patch literal 61730 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 C2jrOK6AczA#w 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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/metube/ci/basic-values.yaml b/library/ix-dev/community/metube/ci/basic-values.yaml new file mode 100644 index 0000000000..957a167e30 --- /dev/null +++ b/library/ix-dev/community/metube/ci/basic-values.yaml @@ -0,0 +1,10 @@ +metubeNetwork: + webPort: 31000 + +metubeRunAs: + user: 1000 + group: 1000 + +metubeStorage: + downloads: + type: pvc diff --git a/library/ix-dev/community/metube/ci/extra-values.yaml b/library/ix-dev/community/metube/ci/extra-values.yaml new file mode 100644 index 0000000000..efd839466b --- /dev/null +++ b/library/ix-dev/community/metube/ci/extra-values.yaml @@ -0,0 +1,14 @@ +metubeConfig: + defaultTheme: light + +metubeNetwork: + webPort: 31000 + +metubeStorage: + downloads: + type: pvc + additionalStorages: + - type: pvc + mountPath: /data1 + - type: pvc + mountPath: /data2 diff --git a/library/ix-dev/community/metube/ci/hostNet-values.yaml b/library/ix-dev/community/metube/ci/hostNet-values.yaml new file mode 100644 index 0000000000..d79308a0fc --- /dev/null +++ b/library/ix-dev/community/metube/ci/hostNet-values.yaml @@ -0,0 +1,7 @@ +metubeNetwork: + webPort: 31000 + hostNetwork: true + +metubeStorage: + downloads: + type: pvc diff --git a/library/ix-dev/community/metube/item.yaml b/library/ix-dev/community/metube/item.yaml new file mode 100644 index 0000000000..23f82155b0 --- /dev/null +++ b/library/ix-dev/community/metube/item.yaml @@ -0,0 +1,8 @@ +icon_url: https://localhost/no-icon +categories: + - media +screenshots: + - https://github.com/alexta69/metube/raw/master/screenshot.gif +tags: + - youtube-dl + - yt-dlp diff --git a/library/ix-dev/community/metube/metadata.yaml b/library/ix-dev/community/metube/metadata.yaml new file mode 100644 index 0000000000..01da12a7b6 --- /dev/null +++ b/library/ix-dev/community/metube/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: metube + groupName: metube + gid: 568 + uid: 568 + description: MeTube can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/community/metube/questions.yaml b/library/ix-dev/community/metube/questions.yaml new file mode 100644 index 0000000000..466edb4031 --- /dev/null +++ b/library/ix-dev/community/metube/questions.yaml @@ -0,0 +1,247 @@ +groups: + - name: MeTube Configuration + description: Configure MeTube + - name: User and Group Configuration + description: Configure User and Group for MeTube + - name: Network Configuration + description: Configure Network for MeTube + - name: Storage Configuration + description: Configure Storage for MeTube + - name: Resources Configuration + description: Configure Resources for MeTube + +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: MeTubeConfig + label: "" + group: MeTube Configuration + schema: + type: dict + attrs: + - variable: defaultTheme + label: Default Theme + description: The default theme for MeTube. + schema: + type: string + default: auto + required: true + enum: + - value: "auto" + description: Auto + - value: "dark" + description: Dark + - value: "light" + description: Light + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for MeTube. + 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: MeTubeRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that MeTube will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that MeTube will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: MeTubeNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the MeTube Web UI. + schema: + type: int + default: 30094 + 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: MeTubeStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: downloads + label: MeTube Downloads Storage + description: The path to store MeTube Downloads. + 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: "downloads" + $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 MeTube. + 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 MeTube. + 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 MeTube. + 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/metube/templates/NOTES.txt b/library/ix-dev/community/metube/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/metube/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/metube/templates/_metube.tpl b/library/ix-dev/community/metube/templates/_metube.tpl new file mode 100644 index 0000000000..a1e69f1f8f --- /dev/null +++ b/library/ix-dev/community/metube/templates/_metube.tpl @@ -0,0 +1,51 @@ +{{- define "metube.workload" -}} +workload: + metube: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.metubeNetwork.hostNetwork }} + containers: + metube: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.metubeRunAs.user }} + runAsGroup: {{ .Values.metubeRunAs.group }} + env: + PORT: {{ .Values.metubeNetwork.webPort }} + DOWNLOAD_DIR: /downloads + STATE_DIR: /downloads/.metube + DEFAULT_THEME: auto + {{ with .Values.metubeConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: {{ .Values.metubeNetwork.webPort }} + path: / + readiness: + enabled: true + type: http + port: {{ .Values.metubeNetwork.webPort }} + path: / + startup: + enabled: true + type: http + port: {{ .Values.metubeNetwork.webPort }} + path: / + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.metubeRunAs.user + "GID" .Values.metubeRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/metube/templates/_persistence.tpl b/library/ix-dev/community/metube/templates/_persistence.tpl new file mode 100644 index 0000000000..1950f0d7c7 --- /dev/null +++ b/library/ix-dev/community/metube/templates/_persistence.tpl @@ -0,0 +1,34 @@ +{{- define "metube.persistence" -}} +persistence: + downloads: + enabled: true + type: {{ .Values.metubeStorage.downloads.type }} + datasetName: {{ .Values.metubeStorage.downloads.datasetName | default "" }} + hostPath: {{ .Values.metubeStorage.downloads.hostPath | default "" }} + targetSelector: + metube: + metube: + mountPath: /downloads + 01-permissions: + mountPath: /mnt/directories/downloads + tmp: + enabled: true + type: emptyDir + targetSelector: + metube: + metube: + mountPath: /tmp + {{- range $idx, $storage := .Values.metubeStorage.additionalStorages }} + {{ printf "metube-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + metube: + metube: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/metube/templates/_portal.tpl b/library/ix-dev/community/metube/templates/_portal.tpl new file mode 100644 index 0000000000..bed2c8be50 --- /dev/null +++ b/library/ix-dev/community/metube/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "metube.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.metubeNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/metube/templates/_service.tpl b/library/ix-dev/community/metube/templates/_service.tpl new file mode 100644 index 0000000000..997919eb3f --- /dev/null +++ b/library/ix-dev/community/metube/templates/_service.tpl @@ -0,0 +1,15 @@ +{{- define "metube.service" -}} +service: + metube: + enabled: true + primary: true + type: NodePort + targetSelector: metube + ports: + webui: + enabled: true + primary: true + port: {{ .Values.metubeNetwork.webPort }} + nodePort: {{ .Values.metubeNetwork.webPort }} + targetSelector: metube +{{- end -}} diff --git a/library/ix-dev/community/metube/templates/common.yaml b/library/ix-dev/community/metube/templates/common.yaml new file mode 100644 index 0000000000..c68a223509 --- /dev/null +++ b/library/ix-dev/community/metube/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "metube.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "metube.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "metube.persistence" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "metube.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/metube/upgrade_info.json b/library/ix-dev/community/metube/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/metube/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/metube/upgrade_strategy b/library/ix-dev/community/metube/upgrade_strategy new file mode 100755 index 0000000000..3583f35a42 --- /dev/null +++ b/library/ix-dev/community/metube/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import datetime_versioning + + +RE_STABLE_VERSION = re.compile(r'\d{4}-\d{2}-\d{2}') + + +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 = datetime_versioning(list(tags), '%Y-%m-%d') + 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/metube/values.yaml b/library/ix-dev/community/metube/values.yaml new file mode 100644 index 0000000000..a2f83aa02a --- /dev/null +++ b/library/ix-dev/community/metube/values.yaml @@ -0,0 +1,27 @@ +image: + repository: alexta69/metube + pullPolicy: IfNotPresent + tag: '2023-10-08' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +metubeConfig: + defaultTheme: auto + additionalEnvs: [] + +metubeNetwork: + webPort: 30094 + hostNetwork: false + +metubeRunAs: + user: 568 + group: 568 + +metubeStorage: + downloads: + type: ixVolume + datasetName: downloads + additionalStorages: []