From 059f8dcbd12911b96d3b06221ac2d423a0438440 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 14 Sep 2023 21:47:57 +0300 Subject: [PATCH] NAS-124095 / 24.04 / add `kapowarr` to `community` train (#1537) --- library/ix-dev/community/kapowarr/Chart.lock | 6 + library/ix-dev/community/kapowarr/Chart.yaml | 26 ++ library/ix-dev/community/kapowarr/README.md | 8 + .../ix-dev/community/kapowarr/app-readme.md | 8 + .../kapowarr/charts/common-1.1.1.tgz | Bin 0 -> 61739 bytes .../community/kapowarr/ci/basic-values.yaml | 17 + .../community/kapowarr/ci/extra-values.yaml | 20 ++ library/ix-dev/community/kapowarr/item.yaml | 8 + .../ix-dev/community/kapowarr/metadata.yaml | 8 + .../ix-dev/community/kapowarr/questions.yaml | 309 ++++++++++++++++++ .../community/kapowarr/templates/NOTES.txt | 1 + .../kapowarr/templates/_kapowarr.tpl | 46 +++ .../kapowarr/templates/_persistence.tpl | 49 +++ .../community/kapowarr/templates/_portal.tpl | 12 + .../community/kapowarr/templates/_service.tpl | 16 + .../community/kapowarr/templates/common.yaml | 11 + .../community/kapowarr/upgrade_info.json | 1 + .../community/kapowarr/upgrade_strategy | 31 ++ library/ix-dev/community/kapowarr/values.yaml | 31 ++ 19 files changed, 608 insertions(+) create mode 100644 library/ix-dev/community/kapowarr/Chart.lock create mode 100644 library/ix-dev/community/kapowarr/Chart.yaml create mode 100644 library/ix-dev/community/kapowarr/README.md create mode 100644 library/ix-dev/community/kapowarr/app-readme.md create mode 100644 library/ix-dev/community/kapowarr/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/kapowarr/ci/basic-values.yaml create mode 100644 library/ix-dev/community/kapowarr/ci/extra-values.yaml create mode 100644 library/ix-dev/community/kapowarr/item.yaml create mode 100644 library/ix-dev/community/kapowarr/metadata.yaml create mode 100644 library/ix-dev/community/kapowarr/questions.yaml create mode 100644 library/ix-dev/community/kapowarr/templates/NOTES.txt create mode 100644 library/ix-dev/community/kapowarr/templates/_kapowarr.tpl create mode 100644 library/ix-dev/community/kapowarr/templates/_persistence.tpl create mode 100644 library/ix-dev/community/kapowarr/templates/_portal.tpl create mode 100644 library/ix-dev/community/kapowarr/templates/_service.tpl create mode 100644 library/ix-dev/community/kapowarr/templates/common.yaml create mode 100644 library/ix-dev/community/kapowarr/upgrade_info.json create mode 100755 library/ix-dev/community/kapowarr/upgrade_strategy create mode 100644 library/ix-dev/community/kapowarr/values.yaml diff --git a/library/ix-dev/community/kapowarr/Chart.lock b/library/ix-dev/community/kapowarr/Chart.lock new file mode 100644 index 0000000000..dd7fde934a --- /dev/null +++ b/library/ix-dev/community/kapowarr/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-14T14:43:44.890615032+03:00" diff --git a/library/ix-dev/community/kapowarr/Chart.yaml b/library/ix-dev/community/kapowarr/Chart.yaml new file mode 100644 index 0000000000..823a3bfb0d --- /dev/null +++ b/library/ix-dev/community/kapowarr/Chart.yaml @@ -0,0 +1,26 @@ +name: kapowarr +description: Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software. +annotations: + title: Kapowarr +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 1.0.0 +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://casvt.github.io/Kapowarr/ +icon: https://raw.githubusercontent.com/Casvt/Kapowarr/48a42fe91dff66b2f7cac24bc9015f6d678dd942/docs/assets/img/favicon.svg +sources: + - https://hub.docker.com/r/mrcas/kapowarr + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/kapowarr + - https://github.com/Casvt/Kapowarr +keywords: + - media + - comic diff --git a/library/ix-dev/community/kapowarr/README.md b/library/ix-dev/community/kapowarr/README.md new file mode 100644 index 0000000000..53a87e6d5d --- /dev/null +++ b/library/ix-dev/community/kapowarr/README.md @@ -0,0 +1,8 @@ +# Kapowarr + +[Kapowarr](https://casvt.github.io/Kapowarr/) is a software to build and manage a comic book library, fitting in the *arr suite of software. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Kapowarr` directories. +> Afterward, the `Kapowarr` 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/kapowarr/app-readme.md b/library/ix-dev/community/kapowarr/app-readme.md new file mode 100644 index 0000000000..53a87e6d5d --- /dev/null +++ b/library/ix-dev/community/kapowarr/app-readme.md @@ -0,0 +1,8 @@ +# Kapowarr + +[Kapowarr](https://casvt.github.io/Kapowarr/) is a software to build and manage a comic book library, fitting in the *arr suite of software. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Kapowarr` directories. +> Afterward, the `Kapowarr` 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/kapowarr/charts/common-1.1.1.tgz b/library/ix-dev/community/kapowarr/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a3ebb80ffc99b4015d68565d8f35032887f084c0 GIT binary patch literal 61739 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 literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/kapowarr/ci/basic-values.yaml b/library/ix-dev/community/kapowarr/ci/basic-values.yaml new file mode 100644 index 0000000000..9d7dbd3f7f --- /dev/null +++ b/library/ix-dev/community/kapowarr/ci/basic-values.yaml @@ -0,0 +1,17 @@ +kapowarrNetwork: + webPort: 31000 + +kapowarrRunAs: + user: 1000 + group: 1000 + +kapowarrStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + downloads: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/downloads + content: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/content diff --git a/library/ix-dev/community/kapowarr/ci/extra-values.yaml b/library/ix-dev/community/kapowarr/ci/extra-values.yaml new file mode 100644 index 0000000000..0858aa52c9 --- /dev/null +++ b/library/ix-dev/community/kapowarr/ci/extra-values.yaml @@ -0,0 +1,20 @@ +kapowarrNetwork: + webPort: 31000 + +kapowarrStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + downloads: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/downloads + content: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/content + additionalStorages: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + mountPath: /data2 diff --git a/library/ix-dev/community/kapowarr/item.yaml b/library/ix-dev/community/kapowarr/item.yaml new file mode 100644 index 0000000000..2a04a13a85 --- /dev/null +++ b/library/ix-dev/community/kapowarr/item.yaml @@ -0,0 +1,8 @@ +icon_url: https://raw.githubusercontent.com/Casvt/Kapowarr/48a42fe91dff66b2f7cac24bc9015f6d678dd942/docs/assets/img/favicon.svg +categories: + - media +screenshots: + - https://user-images.githubusercontent.com/88994465/240648878-797a7f2d-b279-4e21-8b99-c03e99065949.png + - https://user-images.githubusercontent.com/88994465/240649307-71465b08-03eb-477e-a511-f5bc5d953447.png +tags: + - comic diff --git a/library/ix-dev/community/kapowarr/metadata.yaml b/library/ix-dev/community/kapowarr/metadata.yaml new file mode 100644 index 0000000000..ff7463f774 --- /dev/null +++ b/library/ix-dev/community/kapowarr/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: kapowarr + groupName: kapowarr + gid: 568 + uid: 568 + description: Kapowarr can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/library/ix-dev/community/kapowarr/questions.yaml b/library/ix-dev/community/kapowarr/questions.yaml new file mode 100644 index 0000000000..3cd090b01c --- /dev/null +++ b/library/ix-dev/community/kapowarr/questions.yaml @@ -0,0 +1,309 @@ +groups: + - name: Kapowarr Configuration + description: Configure Kapowarr + - name: User and Group Configuration + description: Configure User and Group for Kapowarr + - name: Network Configuration + description: Configure Network for Kapowarr + - name: Storage Configuration + description: Configure Storage for Kapowarr + - name: Resources Configuration + description: Configure Resources for Kapowarr + +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: kapowarrConfig + label: "" + group: Kapowarr Configuration + schema: + type: dict + attrs: + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Kapowarr. + 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: kapowarrRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Kapowarr will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Kapowarr will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: kapowarrNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: webPort + label: Web Port + description: The port for the Kapowarr Web UI. + schema: + type: int + default: 30071 + 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: kapowarrStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Kapowarr Config Storage + description: The path to store Kapowarr 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: downloads + label: Kapowarr Download Storage + description: The path to store Kapowarr 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: content + label: Kapowarr Content Storage + description: The path to store Kapowarr Content. + 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: "content" + $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 Kapowarr. + 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 Kapowarr. + 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 Kapowarr. + 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/kapowarr/templates/NOTES.txt b/library/ix-dev/community/kapowarr/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/kapowarr/templates/_kapowarr.tpl b/library/ix-dev/community/kapowarr/templates/_kapowarr.tpl new file mode 100644 index 0000000000..e433b35c39 --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/_kapowarr.tpl @@ -0,0 +1,46 @@ +{{- define "kapowarr.workload" -}} +workload: + kapowarr: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + containers: + kapowarr: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.kapowarrRunAs.user }} + runAsGroup: {{ .Values.kapowarrRunAs.group }} + {{ with .Values.kapowarrConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: 5656 + path: / + readiness: + enabled: true + type: http + port: 5656 + path: / + startup: + enabled: true + type: http + port: 5656 + path: / + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.kapowarrRunAs.user + "GID" .Values.kapowarrRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/kapowarr/templates/_persistence.tpl b/library/ix-dev/community/kapowarr/templates/_persistence.tpl new file mode 100644 index 0000000000..42ae3b4c39 --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/_persistence.tpl @@ -0,0 +1,49 @@ +{{- define "kapowarr.persistence" -}} +persistence: + config: + enabled: true + type: {{ .Values.kapowarrStorage.config.type }} + datasetName: {{ .Values.kapowarrStorage.config.datasetName | default "" }} + hostPath: {{ .Values.kapowarrStorage.config.hostPath | default "" }} + targetSelector: + kapowarr: + kapowarr: + mountPath: /app/db + 01-permissions: + mountPath: /mnt/directories/config + downloads: + enabled: true + type: {{ .Values.kapowarrStorage.downloads.type }} + datasetName: {{ .Values.kapowarrStorage.downloads.datasetName | default "" }} + hostPath: {{ .Values.kapowarrStorage.downloads.hostPath | default "" }} + targetSelector: + kapowarr: + kapowarr: + mountPath: /app/temp_downloads + 01-permissions: + mountPath: /mnt/directories/downloads + content: + enabled: true + type: {{ .Values.kapowarrStorage.content.type }} + datasetName: {{ .Values.kapowarrStorage.content.datasetName | default "" }} + hostPath: {{ .Values.kapowarrStorage.content.hostPath | default "" }} + targetSelector: + kapowarr: + kapowarr: + mountPath: /content + 01-permissions: + mountPath: /mnt/directories/content + {{- range $idx, $storage := .Values.kapowarrStorage.additionalStorages }} + {{ printf "kapowarr-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + kapowarr: + kapowarr: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/kapowarr/templates/_portal.tpl b/library/ix-dev/community/kapowarr/templates/_portal.tpl new file mode 100644 index 0000000000..e1ef144c7b --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "kapowarr.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.kapowarrNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/kapowarr/templates/_service.tpl b/library/ix-dev/community/kapowarr/templates/_service.tpl new file mode 100644 index 0000000000..5987d9301d --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/_service.tpl @@ -0,0 +1,16 @@ +{{- define "kapowarr.service" -}} +service: + kapowarr: + enabled: true + primary: true + type: NodePort + targetSelector: kapowarr + ports: + webui: + enabled: true + primary: true + port: {{ .Values.kapowarrNetwork.webPort }} + nodePort: {{ .Values.kapowarrNetwork.webPort }} + targetPort: 5656 + targetSelector: kapowarr +{{- end -}} diff --git a/library/ix-dev/community/kapowarr/templates/common.yaml b/library/ix-dev/community/kapowarr/templates/common.yaml new file mode 100644 index 0000000000..280b094cd6 --- /dev/null +++ b/library/ix-dev/community/kapowarr/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "kapowarr.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "kapowarr.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "kapowarr.persistence" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "kapowarr.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/kapowarr/upgrade_info.json b/library/ix-dev/community/kapowarr/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/kapowarr/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/kapowarr/upgrade_strategy b/library/ix-dev/community/kapowarr/upgrade_strategy new file mode 100755 index 0000000000..7778ae42bd --- /dev/null +++ b/library/ix-dev/community/kapowarr/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'v\d+\.\d+\.\d+(-beta-\d+)?') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t.strip('v').split('-')[0]: 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/kapowarr/values.yaml b/library/ix-dev/community/kapowarr/values.yaml new file mode 100644 index 0000000000..5d2bc056db --- /dev/null +++ b/library/ix-dev/community/kapowarr/values.yaml @@ -0,0 +1,31 @@ +image: + repository: mrcas/kapowarr + pullPolicy: IfNotPresent + tag: v1.0.0-beta-3 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +kapowarrConfig: + additionalEnvs: [] + +kapowarrNetwork: + webPort: 30071 + +kapowarrRunAs: + user: 568 + group: 568 + +kapowarrStorage: + config: + type: ixVolume + datasetName: config + downloads: + type: ixVolume + datasetName: downloads + content: + type: ixVolume + datasetName: content + additionalStorages: []