From 4d4d56b72b4fa270f5385b1e8b29b58e7069ba4a Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Tue, 12 Sep 2023 21:30:34 +0300 Subject: [PATCH] NAS-124043 / 24.04 / adds `Kavita` to `community` train (#1531) --- library/ix-dev/community/kavita/Chart.lock | 6 + library/ix-dev/community/kavita/Chart.yaml | 26 +++ library/ix-dev/community/kavita/README.md | 3 + library/ix-dev/community/kavita/app-readme.md | 3 + .../community/kavita/charts/common-1.1.1.tgz | Bin 0 -> 61736 bytes .../community/kavita/ci/basic-values.yaml | 7 + .../community/kavita/ci/extra-values.yaml | 14 ++ library/ix-dev/community/kavita/item.yaml | 12 + library/ix-dev/community/kavita/metadata.yaml | 8 + .../ix-dev/community/kavita/questions.yaml | 212 ++++++++++++++++++ .../community/kavita/templates/NOTES.txt | 1 + .../community/kavita/templates/_kavita.tpl | 42 ++++ .../kavita/templates/_persistence.tpl | 24 ++ .../community/kavita/templates/_portal.tpl | 12 + .../community/kavita/templates/_service.tpl | 16 ++ .../community/kavita/templates/common.yaml | 11 + .../ix-dev/community/kavita/upgrade_info.json | 1 + .../ix-dev/community/kavita/upgrade_strategy | 31 +++ library/ix-dev/community/kavita/values.yaml | 21 ++ 19 files changed, 450 insertions(+) create mode 100644 library/ix-dev/community/kavita/Chart.lock create mode 100644 library/ix-dev/community/kavita/Chart.yaml create mode 100644 library/ix-dev/community/kavita/README.md create mode 100644 library/ix-dev/community/kavita/app-readme.md create mode 100644 library/ix-dev/community/kavita/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/kavita/ci/basic-values.yaml create mode 100644 library/ix-dev/community/kavita/ci/extra-values.yaml create mode 100644 library/ix-dev/community/kavita/item.yaml create mode 100644 library/ix-dev/community/kavita/metadata.yaml create mode 100644 library/ix-dev/community/kavita/questions.yaml create mode 100644 library/ix-dev/community/kavita/templates/NOTES.txt create mode 100644 library/ix-dev/community/kavita/templates/_kavita.tpl create mode 100644 library/ix-dev/community/kavita/templates/_persistence.tpl create mode 100644 library/ix-dev/community/kavita/templates/_portal.tpl create mode 100644 library/ix-dev/community/kavita/templates/_service.tpl create mode 100644 library/ix-dev/community/kavita/templates/common.yaml create mode 100644 library/ix-dev/community/kavita/upgrade_info.json create mode 100755 library/ix-dev/community/kavita/upgrade_strategy create mode 100644 library/ix-dev/community/kavita/values.yaml diff --git a/library/ix-dev/community/kavita/Chart.lock b/library/ix-dev/community/kavita/Chart.lock new file mode 100644 index 0000000000..fbed8d9e5e --- /dev/null +++ b/library/ix-dev/community/kavita/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-11T15:46:44.44770537+03:00" diff --git a/library/ix-dev/community/kavita/Chart.yaml b/library/ix-dev/community/kavita/Chart.yaml new file mode 100644 index 0000000000..50c3f5fb96 --- /dev/null +++ b/library/ix-dev/community/kavita/Chart.yaml @@ -0,0 +1,26 @@ +name: kavita +description: Kavita is a fast, feature rich, cross platform reading server. +annotations: + title: Kavita +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 0.7.8 +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://www.kavitareader.com/ +icon: https://github.com/Kareadita/Kavita/blob/develop/UI/Web/src/assets/images/logo.png +sources: + - https://github.com/Kareadita/Kavita + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/kavita + - https://www.kavitareader.com +keywords: + - manga + - ebook diff --git a/library/ix-dev/community/kavita/README.md b/library/ix-dev/community/kavita/README.md new file mode 100644 index 0000000000..aa59dee0c3 --- /dev/null +++ b/library/ix-dev/community/kavita/README.md @@ -0,0 +1,3 @@ +# Kavita + +[Kavita](https://www.kavitareader.com) is a fast, feature rich, cross platform reading server. diff --git a/library/ix-dev/community/kavita/app-readme.md b/library/ix-dev/community/kavita/app-readme.md new file mode 100644 index 0000000000..aa59dee0c3 --- /dev/null +++ b/library/ix-dev/community/kavita/app-readme.md @@ -0,0 +1,3 @@ +# Kavita + +[Kavita](https://www.kavitareader.com) is a fast, feature rich, cross platform reading server. diff --git a/library/ix-dev/community/kavita/charts/common-1.1.1.tgz b/library/ix-dev/community/kavita/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3eeea5c478709d177b3a171cc0bb686a88e185fa GIT binary patch literal 61736 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 WP=?a6{7(P?0RR8k9Z + 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 Kavita. + 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 Kavita. + 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 Kavita. + 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/kavita/templates/NOTES.txt b/library/ix-dev/community/kavita/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/kavita/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/kavita/templates/_kavita.tpl b/library/ix-dev/community/kavita/templates/_kavita.tpl new file mode 100644 index 0000000000..da71f14a9e --- /dev/null +++ b/library/ix-dev/community/kavita/templates/_kavita.tpl @@ -0,0 +1,42 @@ +{{- define "kavita.workload" -}} +workload: + kavita: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + containers: + kavita: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + {{ with .Values.kavitaConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: 5000 + path: /api/health + readiness: + enabled: true + type: http + port: 5000 + path: /api/health + startup: + enabled: true + type: http + port: 5000 + path: /api/health +{{- end -}} diff --git a/library/ix-dev/community/kavita/templates/_persistence.tpl b/library/ix-dev/community/kavita/templates/_persistence.tpl new file mode 100644 index 0000000000..76665d7fde --- /dev/null +++ b/library/ix-dev/community/kavita/templates/_persistence.tpl @@ -0,0 +1,24 @@ +{{- define "kavita.persistence" -}} +persistence: + config: + enabled: true + type: {{ .Values.kavitaStorage.config.type }} + datasetName: {{ .Values.kavitaStorage.config.datasetName | default "" }} + hostPath: {{ .Values.kavitaStorage.config.hostPath | default "" }} + targetSelector: + kavita: + kavita: + mountPath: /kavita/config + + {{- range $idx, $storage := .Values.kavitaStorage.additionalStorages }} + {{ printf "kavita-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + kavita: + kavita: + mountPath: {{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/kavita/templates/_portal.tpl b/library/ix-dev/community/kavita/templates/_portal.tpl new file mode 100644 index 0000000000..d23ac9de98 --- /dev/null +++ b/library/ix-dev/community/kavita/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "kavita.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.kavitaNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/kavita/templates/_service.tpl b/library/ix-dev/community/kavita/templates/_service.tpl new file mode 100644 index 0000000000..3dde3e97e6 --- /dev/null +++ b/library/ix-dev/community/kavita/templates/_service.tpl @@ -0,0 +1,16 @@ +{{- define "kavita.service" -}} +service: + kavita: + enabled: true + primary: true + type: NodePort + targetSelector: kavita + ports: + webui: + enabled: true + primary: true + port: {{ .Values.kavitaNetwork.webPort }} + nodePort: {{ .Values.kavitaNetwork.webPort }} + targetPort: 5000 + targetSelector: kavita +{{- end -}} diff --git a/library/ix-dev/community/kavita/templates/common.yaml b/library/ix-dev/community/kavita/templates/common.yaml new file mode 100644 index 0000000000..1f0e1bd550 --- /dev/null +++ b/library/ix-dev/community/kavita/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "kavita.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "kavita.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "kavita.persistence" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "kavita.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/kavita/upgrade_info.json b/library/ix-dev/community/kavita/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/kavita/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/kavita/upgrade_strategy b/library/ix-dev/community/kavita/upgrade_strategy new file mode 100755 index 0000000000..af685230a1 --- /dev/null +++ b/library/ix-dev/community/kavita/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/kavita/values.yaml b/library/ix-dev/community/kavita/values.yaml new file mode 100644 index 0000000000..3575d92b35 --- /dev/null +++ b/library/ix-dev/community/kavita/values.yaml @@ -0,0 +1,21 @@ +image: + repository: kizaing/kavita + pullPolicy: IfNotPresent + tag: 0.7.8 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +kavitaConfig: + additionalEnvs: [] + +kavitaNetwork: + webPort: 30069 + +kavitaStorage: + config: + type: ixVolume + datasetName: config + additionalStorages: []