From c36ab80fb2fac8dad2cd063bdab235470ced9ce8 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Wed, 6 Sep 2023 12:38:21 +0000 Subject: [PATCH] Publish new changes in catalog --- .../unifi-protect-backup/1.0.0/Chart.lock | 6 + .../unifi-protect-backup/1.0.0/Chart.yaml | 26 ++ .../unifi-protect-backup/1.0.0/README.md | 3 + .../unifi-protect-backup/1.0.0/app-readme.md | 3 + .../1.0.0/charts/common-1.1.1.tgz | Bin 0 -> 61740 bytes .../1.0.0/ci/basic-values.yaml | 13 + .../1.0.0/ci/extra-values.yaml | 20 + .../unifi-protect-backup/1.0.0/ix_values.yaml | 40 ++ .../unifi-protect-backup/1.0.0/metadata.yaml | 16 + .../unifi-protect-backup/1.0.0/questions.yaml | 362 ++++++++++++++++++ .../1.0.0/templates/NOTES.txt | 1 + .../1.0.0/templates/_configuration.tpl | 31 ++ .../1.0.0/templates/_persistence.tpl | 45 +++ .../1.0.0/templates/_unifi-protect-backup.tpl | 49 +++ .../1.0.0/templates/_validation.tpl | 10 + .../1.0.0/templates/common.yaml | 9 + community/unifi-protect-backup/item.yaml | 7 + 17 files changed, 641 insertions(+) create mode 100644 community/unifi-protect-backup/1.0.0/Chart.lock create mode 100644 community/unifi-protect-backup/1.0.0/Chart.yaml create mode 100644 community/unifi-protect-backup/1.0.0/README.md create mode 100644 community/unifi-protect-backup/1.0.0/app-readme.md create mode 100644 community/unifi-protect-backup/1.0.0/charts/common-1.1.1.tgz create mode 100644 community/unifi-protect-backup/1.0.0/ci/basic-values.yaml create mode 100644 community/unifi-protect-backup/1.0.0/ci/extra-values.yaml create mode 100644 community/unifi-protect-backup/1.0.0/ix_values.yaml create mode 100644 community/unifi-protect-backup/1.0.0/metadata.yaml create mode 100644 community/unifi-protect-backup/1.0.0/questions.yaml create mode 100644 community/unifi-protect-backup/1.0.0/templates/NOTES.txt create mode 100644 community/unifi-protect-backup/1.0.0/templates/_configuration.tpl create mode 100644 community/unifi-protect-backup/1.0.0/templates/_persistence.tpl create mode 100644 community/unifi-protect-backup/1.0.0/templates/_unifi-protect-backup.tpl create mode 100644 community/unifi-protect-backup/1.0.0/templates/_validation.tpl create mode 100644 community/unifi-protect-backup/1.0.0/templates/common.yaml create mode 100644 community/unifi-protect-backup/item.yaml diff --git a/community/unifi-protect-backup/1.0.0/Chart.lock b/community/unifi-protect-backup/1.0.0/Chart.lock new file mode 100644 index 0000000000..b0b9c14712 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-04T21:16:06.489421061+03:00" diff --git a/community/unifi-protect-backup/1.0.0/Chart.yaml b/community/unifi-protect-backup/1.0.0/Chart.yaml new file mode 100644 index 0000000000..66a231a0ef --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: unifi-protect-backup +description: Unifi Protect Backup is a python based tool for backing up UniFi Protect event clips as they occur. +annotations: + title: Unifi Protect Backup +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 0.9.4 +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/ep1cman/unifi-protect-backup +icon: https://www.ixsystems.com/wp-content/uploads/2021/06/ix_logo_200x47.png +sources: + - https://github.com/ep1cman/unifi-protect-backup + - https://github.com/truenas/charts/tree/master/community/unifi-protect-backup + - https://github.com/ep1cman/unifi-protect-backup/pkgs/container/unifi-protect-backup/ +keywords: + - backup + - unifi-protect diff --git a/community/unifi-protect-backup/1.0.0/README.md b/community/unifi-protect-backup/1.0.0/README.md new file mode 100644 index 0000000000..80fd300937 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/README.md @@ -0,0 +1,3 @@ +# Unifi Protect Backup + +[Unifi Protect Backup](https://github.com/ep1cman/unifi-protect-backup) is a python based tool for backing up UniFi Protect event clips as they occur. diff --git a/community/unifi-protect-backup/1.0.0/app-readme.md b/community/unifi-protect-backup/1.0.0/app-readme.md new file mode 100644 index 0000000000..80fd300937 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/app-readme.md @@ -0,0 +1,3 @@ +# Unifi Protect Backup + +[Unifi Protect Backup](https://github.com/ep1cman/unifi-protect-backup) is a python based tool for backing up UniFi Protect event clips as they occur. diff --git a/community/unifi-protect-backup/1.0.0/charts/common-1.1.1.tgz b/community/unifi-protect-backup/1.0.0/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9738ef5853be0757e2c1f8465603628b40c07f51 GIT binary patch literal 61740 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 WGL)foEdLV#0RR7=3#W_#0tf)H-L{Yb literal 0 HcmV?d00001 diff --git a/community/unifi-protect-backup/1.0.0/ci/basic-values.yaml b/community/unifi-protect-backup/1.0.0/ci/basic-values.yaml new file mode 100644 index 0000000000..62efebee17 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/ci/basic-values.yaml @@ -0,0 +1,13 @@ +upbConfig: + unifiProtectUsername: 'user' + unifiProtectPassword: 'pass' + unifiProtectAddress: '192.168.1.100' + rcloneDestination: 'gdrive:unifi-protect-backup' + +upbStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + data: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data diff --git a/community/unifi-protect-backup/1.0.0/ci/extra-values.yaml b/community/unifi-protect-backup/1.0.0/ci/extra-values.yaml new file mode 100644 index 0000000000..9aac370321 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/ci/extra-values.yaml @@ -0,0 +1,20 @@ +upbConfig: + unifiProtectUsername: 'user' + unifiProtectPassword: 'pass' + unifiProtectAddress: '192.168.1.100' + rcloneDestination: 'gdrive:unifi-protect-backup' + +upbStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/config + data: + type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data + additionalStorages: + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data1 + mountPath: /data1 + - type: hostPath + hostPath: /mnt/{{ .Release.Namespace }}/data2 + mountPath: /data2 diff --git a/community/unifi-protect-backup/1.0.0/ix_values.yaml b/community/unifi-protect-backup/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..64414f3520 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/ix_values.yaml @@ -0,0 +1,40 @@ +image: + repository: ghcr.io/ep1cman/unifi-protect-backup + pullPolicy: IfNotPresent + tag: 0.9.4 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +upbConfig: + unifiProtectUsername: '' + unifiProtectPassword: '' + unifiProtectAddress: '' + unifiProtectPort: 443 + unifiProtectVerifySsl: true + skipMissing: false + ignoreCameras: [] + detectionTypes: + - motion + - person + - vehicle + - ring + rcloneDestination: '' + rcloneArgs: [] + rclonePurgeArgs: [] + additionalEnvs: [] + +upbID: + user: 568 + group: 568 + +upbStorage: + config: + type: ixVolume + datasetName: config + data: + type: ixVolume + datasetName: data + additionalStorages: [] diff --git a/community/unifi-protect-backup/1.0.0/metadata.yaml b/community/unifi-protect-backup/1.0.0/metadata.yaml new file mode 100644 index 0000000000..bc40158008 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/metadata.yaml @@ -0,0 +1,16 @@ +runAsContext: + - userName: root + groupName: root + gid: 0 + uid: 0 + description: Unifi Protect Backup run as root user +capabilities: + - name: CHOWN + description: Unifi Protect Backup is able to chown files. + - name: FOWNER + description: Unifi Protect Backup is able bypass permission checks for it's sub-processes. + - name: SETGID + description: Unifi Protect Backup is able to set group ID for it's sub-processes. + - name: SETUID + description: Unifi Protect Backup is able to set user ID for it's sub-processes. +hostMounts: [] diff --git a/community/unifi-protect-backup/1.0.0/questions.yaml b/community/unifi-protect-backup/1.0.0/questions.yaml new file mode 100644 index 0000000000..59e830e367 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/questions.yaml @@ -0,0 +1,362 @@ +groups: + - name: Unifi Protect Backup Configuration + description: Configure Unifi Protect Backup + - name: User and Group Configuration + description: Configure User and Group for Unifi Protect Backup + - name: Storage Configuration + description: Configure Storage for Unifi Protect Backup + - name: Resources Configuration + description: Configure Resources for Unifi Protect Backup + +questions: + - variable: TZ + group: Unifi Protect Backup Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: upbConfig + label: "" + group: Unifi Protect Backup Configuration + schema: + type: dict + attrs: + - variable: unifiProtectUsername + label: Unifi Protect Username + description: Username to login to Unifi Protect instance + schema: + type: string + required: true + - variable: unifiProtectPassword + label: Unifi Protect Password + description: Password for Unifi Protect user + schema: + type: string + required: true + private: true + - variable: unifiProtectAddress + label: Unifi Protect Address + description: Address of Unifi Protect instance + schema: + type: string + required: true + - variable: unifiProtectPort + label: Unifi Protect Port + description: Port of Unifi Protect instance + schema: + type: int + min: 1 + max: 65535 + required: true + default: 443 + - variable: unifiProtectVerifySsl + label: Unifi Protect Verify SSL + description: Verify SSL certificate of Unifi Protect instance + schema: + type: boolean + default: true + - variable: skipMissing + label: Skip Missing + description: If set, events which are 'missing' at the start will be ignored. + schema: + type: boolean + default: false + - variable: ignoreCameras + label: Ignore Cameras + description: IDs of cameras for which events should not be backed up. One per line. + schema: + type: list + default: [] + items: + - variable: id + label: Camera ID + schema: + type: string + required: true + - variable: detectionTypes + label: Detection Types + description: Types of detections to back up. One per line. + schema: + type: list + default: + - motion + - person + - vehicle + - ring + items: + - variable: type + label: Detection Type + schema: + type: string + required: true + enum: + - value: "motion" + description: Motion + - value: "person" + description: Person + - value: "vehicle" + description: Vehicle + - value: "ring" + description: Ring + - variable: rcloneDestination + label: Rclone Destination + description: | + Rclone destination path in the format {rclone-remote}:{path-on-remote} + E.g. `gdrive:/backups/unifi_protect` + schema: + type: string + required: true + - variable: rcloneArgs + label: Rclone Arguments + description: | + Optional extra arguments to pass to rclone rcat directly. One per line
+ Common usage for this would be to set a bandwidth limit
+ E.g. --bwlimit 8M + schema: + type: list + default: [] + items: + - variable: arg + label: Argument + schema: + type: string + required: true + - variable: rclonePurgeArgs + label: Rclone Purge Arguments + description: | + Optional extra arguments to pass to rclone delete. One per line
+ Common usage for this would be to execute a permanent delete + instead of using the recycle bin on a destination.
+ Google Drive example: --drive-use-trash=false + schema: + type: list + default: [] + items: + - variable: arg + label: Argument + schema: + type: string + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Unifi Protect Backup. + 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: upbID + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Unifi Protect Backup files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Unifi Protect Backup files will be owned by. + schema: + type: int + min: 568 + default: 568 + required: true + + - variable: upbStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Unifi Protect Backup Config Storage + description: The path to store Unifi Protect Backup 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: data + label: Unifi Protect Backup Data Storage + description: The path to store Unifi Protect Backup Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $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 Unifi Protect Backup. + 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 Unifi Protect Backup. + 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 Unifi Protect Backup. + 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/community/unifi-protect-backup/1.0.0/templates/NOTES.txt b/community/unifi-protect-backup/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/unifi-protect-backup/1.0.0/templates/_configuration.tpl b/community/unifi-protect-backup/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..2ad719c162 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/_configuration.tpl @@ -0,0 +1,31 @@ +{{- define "upb.configuration" -}} +secret: + upb-creds: + enabled: true + data: + UFP_USERNAME: {{ .Values.upbConfig.unifiProtectUsername | quote }} + UFP_PASSWORD: {{ .Values.upbConfig.unifiProtectPassword | quote }} + UFP_ADDRESS: {{ .Values.upbConfig.unifiProtectAddress | quote }} + UFP_PORT: {{ .Values.upbConfig.unifiProtectPort | quote }} + UFP_SSL_VERIFY: {{ .Values.upbConfig.unifiProtectVerifySsl | quote }} + +configmap: + upb-config: + enabled: true + data: + SQLITE_PATH: /config/database/events.sqlite + RCLONE_DESTINATION: {{ .Values.upbConfig.rcloneDestination | quote }} + SKIP_MISSING: {{ .Values.upbConfig.skipMissing | quote }} + {{- if .Values.upbConfig.ignoreCameras }} + IGNORE_CAMERAS: {{ join " " .Values.upbConfig.ignoreCameras | quote }} + {{- end -}} + {{- if .Values.upbConfig.detectionTypes }} + DETECTION_TYPES: {{ join "," .Values.upbConfig.detectionTypes | quote }} + {{- end -}} + {{- if .Values.upbConfig.rcloneArgs }} + RCLONE_ARGS: {{ join " " .Values.upbConfig.rcloneArgs | quote }} + {{- end -}} + {{- if .Values.upbConfig.rclonePurgeArgs }} + RCLONE_PURGE_ARGS: {{ join " " .Values.upbConfig.rcloneArgs | quote }} + {{- end -}} +{{- end -}} diff --git a/community/unifi-protect-backup/1.0.0/templates/_persistence.tpl b/community/unifi-protect-backup/1.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..0972740ddf --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/_persistence.tpl @@ -0,0 +1,45 @@ +{{- define "upb.persistence" -}} +persistence: + config: + enabled: true + type: {{ .Values.upbStorage.config.type }} + datasetName: {{ .Values.upbStorage.config.datasetName | default "" }} + hostPath: {{ .Values.upbStorage.config.hostPath | default "" }} + targetSelector: + unifi-protect: + unifi-protect: + mountPath: /config + 01-permissions: + mountPath: /mnt/directories/config + data: + enabled: true + type: {{ .Values.upbStorage.data.type }} + datasetName: {{ .Values.upbStorage.data.datasetName | default "" }} + hostPath: {{ .Values.upbStorage.data.hostPath | default "" }} + targetSelector: + unifi-protect: + unifi-protect: + mountPath: /data + 01-permissions: + mountPath: /mnt/directories/data + tmp: + enabled: true + type: emptyDir + targetSelector: + unifi-protect: + unifi-protect: + mountPath: /tmp + {{- range $idx, $storage := .Values.upbStorage.additionalStorages }} + {{ printf "upb-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + unifi-protect: + unifi-protect: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/community/unifi-protect-backup/1.0.0/templates/_unifi-protect-backup.tpl b/community/unifi-protect-backup/1.0.0/templates/_unifi-protect-backup.tpl new file mode 100644 index 0000000000..a3bcde9f83 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/_unifi-protect-backup.tpl @@ -0,0 +1,49 @@ +{{- define "upb.workload" -}} +workload: + unifi-protect: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: false + securityContext: + fsGroup: {{ .Values.upbID.group }} + containers: + unifi-protect: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - FOWNER + - SETUID + - SETGID + fixedEnv: + PUID: {{ .Values.upbID.user }} + envFrom: + - configMapRef: + name: upb-config + - secretRef: + name: upb-creds + {{ with .Values.upbConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + # Nothing to probe + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false +{{- end -}} diff --git a/community/unifi-protect-backup/1.0.0/templates/_validation.tpl b/community/unifi-protect-backup/1.0.0/templates/_validation.tpl new file mode 100644 index 0000000000..abc7d13f6f --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/_validation.tpl @@ -0,0 +1,10 @@ +{{- define "upb.validation" -}} + + {{- $validTypes := (list "motion" "person" "vehicle" "ring") -}} + {{- range $type := .Values.upbConfig.detectionTypes -}} + {{- if not (mustHas $type $validTypes) -}} + {{- fail (printf "Unifi Protect Backup - Expected Detection type to be one of [%s], but got [%s]" (join ", " $validTypes) $type) -}} + {{- end -}} + {{- end -}} + +{{- end -}} diff --git a/community/unifi-protect-backup/1.0.0/templates/common.yaml b/community/unifi-protect-backup/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..70941aaac7 --- /dev/null +++ b/community/unifi-protect-backup/1.0.0/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "upb.validation" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "upb.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "upb.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "upb.workload" $ | fromYaml) -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/unifi-protect-backup/item.yaml b/community/unifi-protect-backup/item.yaml new file mode 100644 index 0000000000..9ac20b8f92 --- /dev/null +++ b/community/unifi-protect-backup/item.yaml @@ -0,0 +1,7 @@ +icon_url: https://www.ixsystems.com/wp-content/uploads/2021/06/ix_logo_200x47.png +categories: + - storage +screenshots: [] +tags: + - backup + - unifi-protect