From e8e998f81e94de23d92f0973b82f182b35e141cd Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Fri, 22 Sep 2023 13:44:59 +0300 Subject: [PATCH] adds 2 community apps for testing (smb-pv-pvc) (#1558) * make copies to test * adds 2 community apps for testing (smb-pv-pvc) --- library/ix-dev/test/jellyfin/Chart.lock | 6 + library/ix-dev/test/jellyfin/Chart.yaml | 26 ++ library/ix-dev/test/jellyfin/README.md | 8 + library/ix-dev/test/jellyfin/app-readme.md | 8 + .../test/jellyfin/charts/common-1.1.1.tgz | Bin 0 -> 61734 bytes .../ix-dev/test/jellyfin/ci/basic-values.yaml | 24 ++ .../ix-dev/test/jellyfin/ci/extra-values.yaml | 22 + .../test/jellyfin/ci/hostNet-values.yaml | 13 + library/ix-dev/test/jellyfin/item.yaml | 12 + library/ix-dev/test/jellyfin/metadata.yaml | 8 + .../ix-dev/test/jellyfin/migrations/migrate | 28 ++ library/ix-dev/test/jellyfin/questions.yaml | 398 ++++++++++++++++++ .../ix-dev/test/jellyfin/templates/NOTES.txt | 1 + .../test/jellyfin/templates/_jellyfin.tpl | 151 +++++++ .../test/jellyfin/templates/_portal.tpl | 16 + .../test/jellyfin/templates/common.yaml | 9 + .../ix-dev/test/jellyfin/upgrade_info.json | 1 + library/ix-dev/test/jellyfin/upgrade_strategy | 31 ++ library/ix-dev/test/jellyfin/values.yaml | 33 ++ library/ix-dev/test/sonarr/Chart.lock | 6 + library/ix-dev/test/sonarr/Chart.yaml | 26 ++ library/ix-dev/test/sonarr/README.md | 8 + library/ix-dev/test/sonarr/app-readme.md | 8 + .../test/sonarr/charts/common-1.1.1.tgz | Bin 0 -> 61730 bytes .../ix-dev/test/sonarr/ci/basic-values.yaml | 11 + .../ix-dev/test/sonarr/ci/extra-values.yaml | 21 + .../ix-dev/test/sonarr/ci/hostNet-values.yaml | 8 + library/ix-dev/test/sonarr/item.yaml | 9 + library/ix-dev/test/sonarr/metadata.yaml | 8 + library/ix-dev/test/sonarr/migrations/migrate | 29 ++ library/ix-dev/test/sonarr/questions.yaml | 286 +++++++++++++ .../ix-dev/test/sonarr/templates/NOTES.txt | 1 + .../ix-dev/test/sonarr/templates/_portal.tpl | 12 + .../ix-dev/test/sonarr/templates/_sonarr.tpl | 112 +++++ .../ix-dev/test/sonarr/templates/common.yaml | 9 + library/ix-dev/test/sonarr/upgrade_info.json | 1 + library/ix-dev/test/sonarr/upgrade_strategy | 31 ++ library/ix-dev/test/sonarr/values.yaml | 24 ++ 38 files changed, 1405 insertions(+) create mode 100644 library/ix-dev/test/jellyfin/Chart.lock create mode 100644 library/ix-dev/test/jellyfin/Chart.yaml create mode 100644 library/ix-dev/test/jellyfin/README.md create mode 100644 library/ix-dev/test/jellyfin/app-readme.md create mode 100644 library/ix-dev/test/jellyfin/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/test/jellyfin/ci/basic-values.yaml create mode 100644 library/ix-dev/test/jellyfin/ci/extra-values.yaml create mode 100644 library/ix-dev/test/jellyfin/ci/hostNet-values.yaml create mode 100644 library/ix-dev/test/jellyfin/item.yaml create mode 100644 library/ix-dev/test/jellyfin/metadata.yaml create mode 100755 library/ix-dev/test/jellyfin/migrations/migrate create mode 100644 library/ix-dev/test/jellyfin/questions.yaml create mode 100644 library/ix-dev/test/jellyfin/templates/NOTES.txt create mode 100644 library/ix-dev/test/jellyfin/templates/_jellyfin.tpl create mode 100644 library/ix-dev/test/jellyfin/templates/_portal.tpl create mode 100644 library/ix-dev/test/jellyfin/templates/common.yaml create mode 100644 library/ix-dev/test/jellyfin/upgrade_info.json create mode 100755 library/ix-dev/test/jellyfin/upgrade_strategy create mode 100644 library/ix-dev/test/jellyfin/values.yaml create mode 100644 library/ix-dev/test/sonarr/Chart.lock create mode 100644 library/ix-dev/test/sonarr/Chart.yaml create mode 100644 library/ix-dev/test/sonarr/README.md create mode 100644 library/ix-dev/test/sonarr/app-readme.md create mode 100644 library/ix-dev/test/sonarr/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/test/sonarr/ci/basic-values.yaml create mode 100644 library/ix-dev/test/sonarr/ci/extra-values.yaml create mode 100644 library/ix-dev/test/sonarr/ci/hostNet-values.yaml create mode 100644 library/ix-dev/test/sonarr/item.yaml create mode 100644 library/ix-dev/test/sonarr/metadata.yaml create mode 100755 library/ix-dev/test/sonarr/migrations/migrate create mode 100644 library/ix-dev/test/sonarr/questions.yaml create mode 100644 library/ix-dev/test/sonarr/templates/NOTES.txt create mode 100644 library/ix-dev/test/sonarr/templates/_portal.tpl create mode 100644 library/ix-dev/test/sonarr/templates/_sonarr.tpl create mode 100644 library/ix-dev/test/sonarr/templates/common.yaml create mode 100644 library/ix-dev/test/sonarr/upgrade_info.json create mode 100755 library/ix-dev/test/sonarr/upgrade_strategy create mode 100644 library/ix-dev/test/sonarr/values.yaml diff --git a/library/ix-dev/test/jellyfin/Chart.lock b/library/ix-dev/test/jellyfin/Chart.lock new file mode 100644 index 0000000000..4441bbc9f5 --- /dev/null +++ b/library/ix-dev/test/jellyfin/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-21T15:59:06.600933007+03:00" diff --git a/library/ix-dev/test/jellyfin/Chart.yaml b/library/ix-dev/test/jellyfin/Chart.yaml new file mode 100644 index 0000000000..5bb429973a --- /dev/null +++ b/library/ix-dev/test/jellyfin/Chart.yaml @@ -0,0 +1,26 @@ +name: jellyfin +description: Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. +annotations: + title: Jellyfin +type: application +version: 1.0.13 +apiVersion: v2 +appVersion: '10.8.10' +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://jellyfin.org/ +icon: https://jellyfin.org/images/logo.svg +sources: + - https://hub.docker.com/r/jellyfin/jellyfin + - https://github.com/truenas/charts/tree/master/community/jellyfin + - https://jellyfin.org/ +keywords: + - media + - streaming diff --git a/library/ix-dev/test/jellyfin/README.md b/library/ix-dev/test/jellyfin/README.md new file mode 100644 index 0000000000..e6cc2f8b26 --- /dev/null +++ b/library/ix-dev/test/jellyfin/README.md @@ -0,0 +1,8 @@ +# Jellyfin + +[Jellyfin](https://jellyfin.org/) is a Free Software Media System that puts you in control of managing and streaming your media. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Jellyfin` directories. +> Afterward, the `Jellyfin` 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/test/jellyfin/app-readme.md b/library/ix-dev/test/jellyfin/app-readme.md new file mode 100644 index 0000000000..e6cc2f8b26 --- /dev/null +++ b/library/ix-dev/test/jellyfin/app-readme.md @@ -0,0 +1,8 @@ +# Jellyfin + +[Jellyfin](https://jellyfin.org/) is a Free Software Media System that puts you in control of managing and streaming your media. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Jellyfin` directories. +> Afterward, the `Jellyfin` 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/test/jellyfin/charts/common-1.1.1.tgz b/library/ix-dev/test/jellyfin/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4e9d954e92bbd06c0125ba9ecead699b4379aa20 GIT binary patch literal 61734 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 H00IaA + It's required for autodiscovery to work. + schema: + type: boolean + default: false + - variable: webPort + label: Web Port + description: The port for the Jellyfin Web UI. + schema: + type: int + default: 30013 + show_if: [["hostNetwork", "=", false]] + min: 9000 + max: 65535 + required: true + + - variable: jellyfinStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Jellyfin Config Storage + description: The path to store Jellyfin 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: cache + label: Jellyfin Cache Storage + description: The path to store Jellyfin Cache. + 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: "cache" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: transcodes + label: Jellyfin Transcodes Storage + description: The path to store Jellyfin 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 Jellyfin. + 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) + - 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 Jellyfin. + 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 Jellyfin. + 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 + + - variable: jellyfinGPU + group: Resources Configuration + label: GPU Configuration + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] diff --git a/library/ix-dev/test/jellyfin/templates/NOTES.txt b/library/ix-dev/test/jellyfin/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/test/jellyfin/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/test/jellyfin/templates/_jellyfin.tpl b/library/ix-dev/test/jellyfin/templates/_jellyfin.tpl new file mode 100644 index 0000000000..5e5a374c34 --- /dev/null +++ b/library/ix-dev/test/jellyfin/templates/_jellyfin.tpl @@ -0,0 +1,151 @@ +{{- define "jellyfin.workload" -}} +workload: + jellyfin: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.jellyfinNetwork.hostNetwork }} + containers: + jellyfin: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.jellyfinRunAs.user }} + runAsGroup: {{ .Values.jellyfinRunAs.group }} + env: + {{ with .Values.jellyfinConfig.publishedServerUrl }} + JELLYFIN_PublishedServerUrl: {{ . | quote }} + {{ end }} + {{ with .Values.jellyfinConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + values: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: 8096 + path: /health + readiness: + enabled: true + type: http + port: 8096 + path: /health + startup: + enabled: true + type: http + port: 8096 + path: /health + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.jellyfinRunAs.user + "GID" .Values.jellyfinRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} + +{{/* Service */}} +service: + jellyfin: + enabled: true + primary: true + type: NodePort + targetSelector: jellyfin + ports: + webui: + enabled: true + primary: true + port: {{ .Values.jellyfinNetwork.webPort }} + nodePort: {{ .Values.jellyfinNetwork.webPort }} + targetPort: 8096 + targetSelector: jellyfin + +{{/* Persistence */}} +persistence: + config: + enabled: true + type: {{ .Values.jellyfinStorage.config.type }} + datasetName: {{ .Values.jellyfinStorage.config.datasetName | default "" }} + hostPath: {{ .Values.jellyfinStorage.config.hostPath | default "" }} + targetSelector: + jellyfin: + jellyfin: + mountPath: /config + 01-permissions: + mountPath: /mnt/directories/config + cache: + enabled: true + type: {{ .Values.jellyfinStorage.cache.type }} + datasetName: {{ .Values.jellyfinStorage.cache.datasetName | default "" }} + hostPath: {{ .Values.jellyfinStorage.cache.hostPath | default "" }} + targetSelector: + jellyfin: + jellyfin: + mountPath: /cache + 01-permissions: + mountPath: /mnt/directories/cache + transcode: + enabled: true + type: {{ .Values.jellyfinStorage.transcodes.type }} + datasetName: {{ .Values.jellyfinStorage.transcodes.datasetName | default "" }} + hostPath: {{ .Values.jellyfinStorage.transcodes.hostPath | default "" }} + medium: {{ .Values.jellyfinStorage.transcodes.medium | default "" }} + {{/* Size of the emptyDir */}} + size: {{ .Values.jellyfinStorage.transcodes.size | default "" }} + targetSelector: + jellyfin: + jellyfin: + mountPath: /config/transcodes + {{ if ne .Values.jellyfinStorage.transcodes.type "emptyDir" }} + 01-permissions: + mountPath: /mnt/directories/transcodes + {{ end }} + tmp: + enabled: true + type: emptyDir + targetSelector: + jellyfin: + jellyfin: + mountPath: /tmp + {{- range $idx, $storage := .Values.jellyfinStorage.additionalStorages }} + {{ printf "jellyfin-%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: + jellyfin: + jellyfin: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{ with .Values.jellyfinGPU }} +scaleGPU: + {{ range $key, $value := . }} + - gpu: + {{ $key }}: {{ $value }} + targetSelector: + jellyfin: + - jellyfin + {{ end }} +{{ end }} +{{- end -}} diff --git a/library/ix-dev/test/jellyfin/templates/_portal.tpl b/library/ix-dev/test/jellyfin/templates/_portal.tpl new file mode 100644 index 0000000000..c985b5aa83 --- /dev/null +++ b/library/ix-dev/test/jellyfin/templates/_portal.tpl @@ -0,0 +1,16 @@ +{{- define "jellyfin.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + {{- $port := .Values.jellyfinNetwork.webPort -}} + {{- if .Values.jellyfinNetwork.hostNetwork -}} + {{- $port = 8096 -}} + {{- end }} + port: {{ $port | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/test/jellyfin/templates/common.yaml b/library/ix-dev/test/jellyfin/templates/common.yaml new file mode 100644 index 0000000000..ee3c3a7796 --- /dev/null +++ b/library/ix-dev/test/jellyfin/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "jellyfin.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "jellyfin.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/test/jellyfin/upgrade_info.json b/library/ix-dev/test/jellyfin/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/test/jellyfin/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/test/jellyfin/upgrade_strategy b/library/ix-dev/test/jellyfin/upgrade_strategy new file mode 100755 index 0000000000..41e9448b21 --- /dev/null +++ b/library/ix-dev/test/jellyfin/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]+') + + +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/test/jellyfin/values.yaml b/library/ix-dev/test/jellyfin/values.yaml new file mode 100644 index 0000000000..14e3a28f89 --- /dev/null +++ b/library/ix-dev/test/jellyfin/values.yaml @@ -0,0 +1,33 @@ +image: + repository: jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: '10.8.10' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +jellyfinConfig: + publishedServerUrl: '' + additionalEnvs: [] +jellyfinGPU: {} +jellyfinNetwork: + webPort: 30013 + hostNetwork: false +jellyfinRunAs: + user: 568 + group: 568 +jellyfinStorage: + config: + type: ixVolume + datasetName: config + cache: + type: ixVolume + datasetName: cache + transcodes: + type: ixVolume + datasetName: transcodes + medium: '' + size: '' + additionalStorages: [] diff --git a/library/ix-dev/test/sonarr/Chart.lock b/library/ix-dev/test/sonarr/Chart.lock new file mode 100644 index 0000000000..7178e9efbf --- /dev/null +++ b/library/ix-dev/test/sonarr/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-21T15:59:14.078456648+03:00" diff --git a/library/ix-dev/test/sonarr/Chart.yaml b/library/ix-dev/test/sonarr/Chart.yaml new file mode 100644 index 0000000000..9a7d68f970 --- /dev/null +++ b/library/ix-dev/test/sonarr/Chart.yaml @@ -0,0 +1,26 @@ +name: sonarr +description: Sonarr is a PVR for Usenet and BitTorrent users. +annotations: + title: Sonarr +type: application +version: 1.0.16 +apiVersion: v2 +appVersion: '3.0.10.1567' +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/Sonarr/Sonarr +icon: https://raw.githubusercontent.com/Sonarr/Sonarr/develop/Logo/256.png +sources: + - https://github.com/onedr0p/containers/tree/main/apps/sonarr + - https://github.com/truenas/charts/tree/master/community/sonarr + - https://github.com/Sonarr/Sonarr +keywords: + - media + - series diff --git a/library/ix-dev/test/sonarr/README.md b/library/ix-dev/test/sonarr/README.md new file mode 100644 index 0000000000..f345ff022a --- /dev/null +++ b/library/ix-dev/test/sonarr/README.md @@ -0,0 +1,8 @@ +# Sonarr + +[Sonarr](https://github.com/Sonarr/Sonarr) is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Sonarr` directories. +> Afterward, the `Sonarr` 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/test/sonarr/app-readme.md b/library/ix-dev/test/sonarr/app-readme.md new file mode 100644 index 0000000000..f345ff022a --- /dev/null +++ b/library/ix-dev/test/sonarr/app-readme.md @@ -0,0 +1,8 @@ +# Sonarr + +[Sonarr](https://github.com/Sonarr/Sonarr) is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Sonarr` directories. +> Afterward, the `Sonarr` 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/test/sonarr/charts/common-1.1.1.tgz b/library/ix-dev/test/sonarr/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8a94b953938a99ab0674b597eddd9e9150e04b04 GIT binary patch literal 61730 zcmV)zK#{*6iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvFciT9!Fb>b({uFpP&K;{COP2Q;Kb_py?W8lglf}n&y5D;< zxj8TiNf=WELqKvoiNE{rU?Tw#T(nqOT0Eya76}vzg{2l0szNdzlVs;?1T)sVgX8#5 z%YXX)e*fs;K>XY9_uYT{2mSt^b`K8w`~CgnJ}C(wTYTuRS`GMN3Tzi?Y_ z=f0B%CJAAXVUp034FDKsF**TfVpf2c_&S5x9T2l)1E%;llu=BQ6ENM|fN5I%+}(%} z4KtiF@%t3Ss%prqf&s|@{{MqFg8>dPjKLXXFebx|F~kXjI6)ab+2{f^hB!U}5t{!0 z@F#jl85+}GNX8ogByfyQ0LvyQfpi0aNfw`g5o0Mm+1a_hz3r(_y!g(BEG_5u2D?kq ziAHE+s&U@!?e=yzzBc{8_M_JS6vh)oA7}$;SpUa|M|i0H7$F;t-u@gprWMCxC^^{f5J7I_@eMKT9&;g(eE)a}< z&oD!8l91P+jAU?#&SFUE2?&B5Ydl6|!c@H&Pf>!X`UL<^FvBo@ieh+oi9(V@^aSko z)z=hdm_+6GOv21R9IE#Nh~r6yu0|Q6BN9i&7djC=Fuv@HFByUn{x%TW6JPimW0Q0) zbPg-9*{j6ns9!^$iusAhaELg58A=JojAVCeycrzok)OozIf-$2cLH7vUK4hnA&L^V zv2hLQ=!Fjg|B%Bt=pFR-_Uj>~gtB3Vs27_4m_yt>?CsUV8^a94=-LZTeJh~#dq=(9 zgL;4&im)HMYs?Zj#yg@!4)nO!@9pl^!}JdcMd2jF?Cy*t41Hp}xsWJvLC&P}w=bTa zfWxD|ieGPEonHRq1O)xQpa}rkBsrz8Npe95ld?nc`YlCSQB}Npo{>pvyhAX0lf-wt z_OCcbQXVnjz&Iwi=NX>j7!A=g8p0S#@kj4Be6vuWBl9gqVMxa5c}4~}MtW69Ipt!K z@R_dmN%1L!DZIupW*Frw8b;9xc=ulYiZYTfF20SOzI@3EP9pho;Py?uI2*xai1e7e z5rle$=@_zbBoUpYX^h4wVK5doXx=Ejqalms?}`D;5G9i=lt{;TjP-sQrjrwJ(C_!h z;^!ER#RU4R*p)N%ae}B-bk`|(*nh=KzW(jS(-)^7&Q8xS_5KaxxC)z;L~qhu&_xNn zj?txLEH80#LyG|#5z1a8c1yCG;$?=!CZ>sX8sEY@KFgzo>UWAW{faZn|~()N27yY*lc=$e2tL zrh0f9hWytRxk1MKWGEZsM8JEV!4RF>JMX^D%@e{96{Hk@@s5lTjQBeGB0BJA@H>h_ zGDd(AaFtEa>(fhcd3O5pnfQD)g2@fIBNM3(B$UB8#>o(T{tS9j0X;1QjGjZ@XKTD=8bv;{Y3O%Cs51*I!OPy2#j8?LLlm=CUGZ9pjDH4n1T!SIrauF{67~KF z{tT|(JbiNlo{87s`VK^LEBsGYp1Fb^e<|krIb@>~up`0i(l8q$c8OvXveP)ux9>lL zDa>Lrqz{J16lOcTfks5wIDIfA*f?!$KSEPF8b25c5t{DM(YO{3Igwr@|3V={5g24- zEH@4?#!(cbTbQAZKLgH=#WKy%0A+km0Y2q7@TX^=7|IeDzepI$1~5cw>z!nZCBJ+B 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 UL+M!lCjbEd|K?GT0RRFB0B9M&x&QzG literal 0 HcmV?d00001 diff --git a/library/ix-dev/test/sonarr/ci/basic-values.yaml b/library/ix-dev/test/sonarr/ci/basic-values.yaml new file mode 100644 index 0000000000..886fe58f92 --- /dev/null +++ b/library/ix-dev/test/sonarr/ci/basic-values.yaml @@ -0,0 +1,11 @@ +sonarrNetwork: + webPort: 31000 + +sonarrRunAs: + user: 1000 + group: 1000 + +sonarrStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config diff --git a/library/ix-dev/test/sonarr/ci/extra-values.yaml b/library/ix-dev/test/sonarr/ci/extra-values.yaml new file mode 100644 index 0000000000..2d1d330236 --- /dev/null +++ b/library/ix-dev/test/sonarr/ci/extra-values.yaml @@ -0,0 +1,21 @@ +sonarrConfig: + additionalEnvs: + - name: SONARR__API_KEY + value: some-long-api-key + - name: SONARR__LOG_LEVEL + value: error + +sonarrNetwork: + webPort: 31000 + +sonarrStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + additionalStorages: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/action_series + mountPath: /action_series + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/adventure_series + mountPath: /adventure_series diff --git a/library/ix-dev/test/sonarr/ci/hostNet-values.yaml b/library/ix-dev/test/sonarr/ci/hostNet-values.yaml new file mode 100644 index 0000000000..a23e799a30 --- /dev/null +++ b/library/ix-dev/test/sonarr/ci/hostNet-values.yaml @@ -0,0 +1,8 @@ +sonarrNetwork: + webPort: 30000 + hostNetwork: true + +sonarrStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config diff --git a/library/ix-dev/test/sonarr/item.yaml b/library/ix-dev/test/sonarr/item.yaml new file mode 100644 index 0000000000..8e971a26f9 --- /dev/null +++ b/library/ix-dev/test/sonarr/item.yaml @@ -0,0 +1,9 @@ +icon_url: https://raw.githubusercontent.com/Sonarr/Sonarr/develop/Logo/256.png +categories: + - media +screenshots: + - https://sonarr.tv/img/features/calendar.png + - https://sonarr.tv/img/features/manualsearch.png + - https://sonarr.tv/img/features/blocklist.png +tags: + - series diff --git a/library/ix-dev/test/sonarr/metadata.yaml b/library/ix-dev/test/sonarr/metadata.yaml new file mode 100644 index 0000000000..c70b059638 --- /dev/null +++ b/library/ix-dev/test/sonarr/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: sonarr + groupName: sonarr + gid: 568 + uid: 568 + description: Sonarr can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/test/sonarr/migrations/migrate b/library/ix-dev/test/sonarr/migrations/migrate new file mode 100755 index 0000000000..3176f197c3 --- /dev/null +++ b/library/ix-dev/test/sonarr/migrations/migrate @@ -0,0 +1,29 @@ +#!/usr/bin/python3 +import json +import os +import sys + + +def migrate(values): + storageKey = 'sonarrStorage' + storages = ['config'] + + + for storage in storages: + check_val = values.get(storageKey, {}).get(storage, {}) + if not isinstance(check_val, dict) or not check_val or check_val.get('type', 'hostPath') == 'hostPath': + continue + + values[storageKey][storage] = {key: value for key, value in check_val.items() if key != 'hostPath'} + + + return values + + +if __name__ == '__main__': + if len(sys.argv) != 2: + exit(1) + + if os.path.exists(sys.argv[1]): + with open(sys.argv[1], 'r') as f: + print(json.dumps(migrate(json.loads(f.read())))) diff --git a/library/ix-dev/test/sonarr/questions.yaml b/library/ix-dev/test/sonarr/questions.yaml new file mode 100644 index 0000000000..e158867171 --- /dev/null +++ b/library/ix-dev/test/sonarr/questions.yaml @@ -0,0 +1,286 @@ +groups: + - name: Sonarr Configuration + description: Configure Sonarr + - name: User and Group Configuration + description: Configure User and Group for Sonarr + - name: Network Configuration + description: Configure Network for Sonarr + - name: Storage Configuration + description: Configure Storage for Sonarr + - name: Resources Configuration + description: Configure Resources for Sonarr + +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: sonarrConfig + label: "" + group: Sonarr Configuration + schema: + type: dict + attrs: + - variable: instanceName + label: Instance Name + description: The name of the Sonarr instance. + schema: + type: string + default: "Sonarr" + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Sonarr. + 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: sonarrRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Sonarr will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Sonarr will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: sonarrNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Sonarr Web UI. + schema: + type: int + default: 30027 + 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: sonarrStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Sonarr Config Storage + description: The path to store Sonarr 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 Sonarr. + 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) + - 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 Sonarr. + 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 Sonarr. + 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/test/sonarr/templates/NOTES.txt b/library/ix-dev/test/sonarr/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/test/sonarr/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/test/sonarr/templates/_portal.tpl b/library/ix-dev/test/sonarr/templates/_portal.tpl new file mode 100644 index 0000000000..88e40c57bc --- /dev/null +++ b/library/ix-dev/test/sonarr/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "sonarr.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.sonarrNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/test/sonarr/templates/_sonarr.tpl b/library/ix-dev/test/sonarr/templates/_sonarr.tpl new file mode 100644 index 0000000000..3c2b23b868 --- /dev/null +++ b/library/ix-dev/test/sonarr/templates/_sonarr.tpl @@ -0,0 +1,112 @@ +{{- define "sonarr.workload" -}} +workload: + sonarr: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.sonarrNetwork.hostNetwork }} + containers: + sonarr: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.sonarrRunAs.user }} + runAsGroup: {{ .Values.sonarrRunAs.group }} + env: + SONARR__PORT: {{ .Values.sonarrNetwork.webPort }} + SONARR__INSTANCE_NAME: {{ .Values.sonarrConfig.instanceName }} + {{ with .Values.sonarrConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: "{{ .Values.sonarrNetwork.webPort }}" + path: /ping + readiness: + enabled: true + type: http + port: "{{ .Values.sonarrNetwork.webPort }}" + path: /ping + startup: + enabled: true + type: http + port: "{{ .Values.sonarrNetwork.webPort }}" + path: /ping + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.sonarrRunAs.user + "GID" .Values.sonarrRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} + +{{/* Service */}} +service: + sonarr: + enabled: true + primary: true + type: NodePort + targetSelector: sonarr + ports: + webui: + enabled: true + primary: true + port: {{ .Values.sonarrNetwork.webPort }} + nodePort: {{ .Values.sonarrNetwork.webPort }} + targetSelector: sonarr + +{{/* Persistence */}} +persistence: + config: + enabled: true + type: {{ .Values.sonarrStorage.config.type }} + datasetName: {{ .Values.sonarrStorage.config.datasetName | default "" }} + hostPath: {{ .Values.sonarrStorage.config.hostPath | default "" }} + targetSelector: + sonarr: + sonarr: + mountPath: /config + 01-permissions: + mountPath: /mnt/directories/config + tmp: + enabled: true + type: emptyDir + targetSelector: + sonarr: + sonarr: + mountPath: /tmp + {{- range $idx, $storage := .Values.sonarrStorage.additionalStorages }} + {{ printf "sonarr-%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: + sonarr: + sonarr: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/test/sonarr/templates/common.yaml b/library/ix-dev/test/sonarr/templates/common.yaml new file mode 100644 index 0000000000..23242cb8d3 --- /dev/null +++ b/library/ix-dev/test/sonarr/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "sonarr.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "sonarr.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/test/sonarr/upgrade_info.json b/library/ix-dev/test/sonarr/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/test/sonarr/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/test/sonarr/upgrade_strategy b/library/ix-dev/test/sonarr/upgrade_strategy new file mode 100755 index 0000000000..3e49862388 --- /dev/null +++ b/library/ix-dev/test/sonarr/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/test/sonarr/values.yaml b/library/ix-dev/test/sonarr/values.yaml new file mode 100644 index 0000000000..c14da6f89b --- /dev/null +++ b/library/ix-dev/test/sonarr/values.yaml @@ -0,0 +1,24 @@ +image: + repository: ghcr.io/onedr0p/sonarr + pullPolicy: IfNotPresent + tag: '3.0.10.1567' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +sonarrConfig: + instanceName: Sonarr + additionalEnvs: [] +sonarrNetwork: + webPort: 30027 + hostNetwork: false +sonarrRunAs: + user: 568 + group: 568 +sonarrStorage: + config: + type: ixVolume + datasetName: config + additionalStorages: []