From 082fc4a012590c4f1a05665f10ffa071ccce807c Mon Sep 17 00:00:00 2001 From: sonicaj Date: Mon, 5 Jun 2023 12:58:04 +0000 Subject: [PATCH] Update catalog information --- catalog.json | 38 ++- community/rsyncd/1.0.0/Chart.lock | 6 + community/rsyncd/1.0.0/Chart.yaml | 26 ++ community/rsyncd/1.0.0/README.md | 3 + community/rsyncd/1.0.0/app-readme.md | 3 + .../rsyncd/1.0.0/charts/common-1.0.8.tgz | Bin 0 -> 55445 bytes .../1.0.0/ci/hostnet-multiple-values.yaml | 59 +++++ .../rsyncd/1.0.0/ci/multiple-values.yaml | 56 +++++ community/rsyncd/1.0.0/ix_values.yaml | 17 ++ community/rsyncd/1.0.0/metadata.yaml | 20 ++ community/rsyncd/1.0.0/questions.yaml | 230 ++++++++++++++++++ community/rsyncd/1.0.0/templates/NOTES.txt | 1 + .../rsyncd/1.0.0/templates/_configuration.tpl | 62 +++++ community/rsyncd/1.0.0/templates/_rsync.tpl | 97 ++++++++ .../rsyncd/1.0.0/templates/_validation.tpl | 79 ++++++ community/rsyncd/1.0.0/templates/common.yaml | 7 + community/rsyncd/item.yaml | 7 + 17 files changed, 710 insertions(+), 1 deletion(-) create mode 100644 community/rsyncd/1.0.0/Chart.lock create mode 100644 community/rsyncd/1.0.0/Chart.yaml create mode 100644 community/rsyncd/1.0.0/README.md create mode 100644 community/rsyncd/1.0.0/app-readme.md create mode 100644 community/rsyncd/1.0.0/charts/common-1.0.8.tgz create mode 100644 community/rsyncd/1.0.0/ci/hostnet-multiple-values.yaml create mode 100644 community/rsyncd/1.0.0/ci/multiple-values.yaml create mode 100644 community/rsyncd/1.0.0/ix_values.yaml create mode 100644 community/rsyncd/1.0.0/metadata.yaml create mode 100644 community/rsyncd/1.0.0/questions.yaml create mode 100644 community/rsyncd/1.0.0/templates/NOTES.txt create mode 100644 community/rsyncd/1.0.0/templates/_configuration.tpl create mode 100644 community/rsyncd/1.0.0/templates/_rsync.tpl create mode 100644 community/rsyncd/1.0.0/templates/_validation.tpl create mode 100644 community/rsyncd/1.0.0/templates/common.yaml create mode 100644 community/rsyncd/item.yaml diff --git a/catalog.json b/catalog.json index 86aab0a013..aa99a53dea 100644 --- a/catalog.json +++ b/catalog.json @@ -376,7 +376,7 @@ "latest_version": "1.0.22", "latest_app_version": "230603", "latest_human_version": "230603_1.0.22", - "last_update": "2023-05-23 17:11:03", + "last_update": "2023-06-05 10:20:26", "name": "photoprism", "recommended": false, "title": "PhotoPrism", @@ -637,6 +637,42 @@ ], "icon_url": "https://github.com/AdguardTeam/AdGuardHome/raw/master/doc/adguard_home_darkmode.svg" }, + "rsyncd": { + "app_readme": "

Rsyncd

\n

Rsyncd is an open source utility that provides fast incremental file transfer.

", + "categories": [ + "storage" + ], + "description": "Rsync is an open source utility that provides fast incremental file transfer.", + "healthy": true, + "healthy_error": null, + "home": "https://github.com/truenas/containers/tree/main/apps/rsyncd", + "location": "/__w/charts/charts/community/rsyncd", + "latest_version": "1.0.0", + "latest_app_version": "1.0.0", + "latest_human_version": "1.0.0_1.0.0", + "last_update": null, + "name": "rsyncd", + "recommended": false, + "title": "Rsync Daemon", + "maintainers": [ + { + "name": "truenas", + "url": "https://www.truenas.com/", + "email": "dev@ixsystems.com" + } + ], + "tags": [ + "sync", + "file transfer" + ], + "screenshots": [], + "sources": [ + "https://github.com/truenas/containers/tree/main/apps/rsyncd", + "https://github.com/truenas/charts/tree/master/community/rsyncd", + "https://hub.docker.com/r/ixsystems/rsyncd" + ], + "icon_url": "https://rsync.samba.org/newrsynclogo.jpg" + }, "jellyfin": { "app_readme": "

Jellyfin

\n

Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.

\n
\n

When application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Jellyfin directories.\nAfterward, the Jellyfin container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.

\n
", "categories": [ diff --git a/community/rsyncd/1.0.0/Chart.lock b/community/rsyncd/1.0.0/Chart.lock new file mode 100644 index 0000000000..53e99085b0 --- /dev/null +++ b/community/rsyncd/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.8 +digest: sha256:254efaa1285f634b7a80b7baadeadbd20a680f7fee49d1d9d3c4618aa0d657ad +generated: "2023-05-30T19:34:09.862999313+03:00" diff --git a/community/rsyncd/1.0.0/Chart.yaml b/community/rsyncd/1.0.0/Chart.yaml new file mode 100644 index 0000000000..39006515a7 --- /dev/null +++ b/community/rsyncd/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: rsyncd +description: Rsync is an open source utility that provides fast incremental file transfer. +annotations: + title: Rsync Daemon +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.0.8 +home: https://github.com/truenas/containers/tree/main/apps/rsyncd +icon: https://rsync.samba.org/newrsynclogo.jpg +sources: + - https://github.com/truenas/containers/tree/main/apps/rsyncd + - https://github.com/truenas/charts/tree/master/community/rsyncd + - https://hub.docker.com/r/ixsystems/rsyncd +keywords: + - rsync + - sync diff --git a/community/rsyncd/1.0.0/README.md b/community/rsyncd/1.0.0/README.md new file mode 100644 index 0000000000..f9345e4947 --- /dev/null +++ b/community/rsyncd/1.0.0/README.md @@ -0,0 +1,3 @@ +# Rsyncd + +[Rsyncd](https://rsync.samba.org/) is an open source utility that provides fast incremental file transfer. diff --git a/community/rsyncd/1.0.0/app-readme.md b/community/rsyncd/1.0.0/app-readme.md new file mode 100644 index 0000000000..f9345e4947 --- /dev/null +++ b/community/rsyncd/1.0.0/app-readme.md @@ -0,0 +1,3 @@ +# Rsyncd + +[Rsyncd](https://rsync.samba.org/) is an open source utility that provides fast incremental file transfer. diff --git a/community/rsyncd/1.0.0/charts/common-1.0.8.tgz b/community/rsyncd/1.0.0/charts/common-1.0.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bdbd785aba3b33fc83f8b893ac8284d3d8fd2178 GIT binary patch literal 55445 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 + schema: + type: boolean + default: false + - variable: rsyncPort + label: Rsync Port + description: The port for Rsync. + schema: + type: int + default: 30000 + min: 9000 + max: 65535 + required: true + + - variable: rsyncModules + label: "" + group: Module Configuration + schema: + type: list + default: [] + empty: false + required: true + items: + - variable: module + label: Rsync Module + schema: + type: dict + attrs: + - variable: name + label: Module Name + description: | + Module name that matches the name requested by the rsync client. + schema: + type: string + valid_chars: '^[a-zA-Z0-9]+([_-]*[a-zA-Z0-9]+)+$' + valid_chars_error: | + Module Name, can include [Letters (a-z, A-Z), Numbers (0,9), Underscore (_), Dash (-)],
+ but cannot start or end with [Underscore (_), Dash (-), Dot (.)] + required: true + - variable: enabled + label: Enable Module + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: comment + label: Comment + description: Describe the module. + schema: + type: string + - variable: hostPath + label: Host Path + description: | + The path on the host to be shared with the client.
+ This path must exist on the host. + schema: + type: hostpath + required: true + - variable: accessMode + label: Access Mode + description: | + Choose permissions for this rsync module. + schema: + type: string + required: true + default: RO + enum: + - value: RO + description: Read Only + - value: RW + description: Read Write + - value: WO + description: Write Only + - variable: maxConnections + label: Max Connections + description: | + Maximum number of simultaneous connections to this module.
+ 0 means unlimited. + schema: + type: int + min: 0 + max: 1000 + default: 0 + required: true + - variable: uid + label: UID + description: | + The UID to use for this module.
+ schema: + type: int + min: 0 + max: 65535 + default: 568 + required: true + - variable: gid + label: GID + description: | + The GID to use for this module.
+ schema: + type: int + min: 0 + max: 65535 + default: 568 + required: true + - variable: hostsAllow + label: Hosts Allow + description: | + List of hosts allowed to connect to this module.
+ Leave empty to allow all hosts. + schema: + type: list + default: [] + items: + - variable: host + label: Host to allow + schema: + type: string + required: true + - variable: hostsDeny + label: Hosts Deny + description: | + List of hosts denied to connect to this module.
+ Leave empty to deny no hosts. + schema: + type: list + default: [] + items: + - variable: host + label: Host to deny + schema: + type: string + required: true + - variable: auxParams + label: Auxillary Parameters + description: Configure auxillary parameters for this module. + schema: + type: list + default: [] + items: + - variable: auxEntry + label: Auxillary Parameter Entry + schema: + type: dict + attrs: + - variable: param + label: Parameter + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - 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 Rsync. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Rsync. + schema: + type: string + default: "8Gi" + required: true diff --git a/community/rsyncd/1.0.0/templates/NOTES.txt b/community/rsyncd/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/rsyncd/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/rsyncd/1.0.0/templates/_configuration.tpl b/community/rsyncd/1.0.0/templates/_configuration.tpl new file mode 100644 index 0000000000..0e8c7f2efb --- /dev/null +++ b/community/rsyncd/1.0.0/templates/_configuration.tpl @@ -0,0 +1,62 @@ +{{- define "rsync.configuration" -}} +{{- include "rsync.validation" $ }} +configmap: + config: + enabled: true + data: + rsyncd.conf: | + port = {{ .Values.rsyncNetwork.rsyncPort }} + use chroot = yes + pid file = /tmp/rsyncd.pid + + max connections = {{ .Values.rsyncConfig.maxConnections }} + log file = /dev/stdout + + {{- range $aux := .Values.rsyncConfig.auxParams }} + {{ printf "%v = %v" $aux.param $aux.value }} + {{- end }} + + {{- $mods := list -}} + {{- range $mod := .Values.rsyncModules }} + {{- if $mod.enabled -}} + {{- include "rsync.module.validation" (dict "mod" $mod) }} + + {{ printf "[%v]" $mod.name }} + path = {{ printf "/data/%v" $mod.name }} + max connections = {{ $mod.maxConnections }} + uid = {{ $mod.uid }} + gid = {{ $mod.gid }} + {{- if $mod.comment }} + comment = {{ $mod.comment }} + {{- end }} + + {{- if eq $mod.accessMode "RO" }} + write only = false + read only = true + {{- else if eq $mod.accessMode "WO" }} + write only = true + read only = false + {{- else if eq $mod.accessMode "RW" }} + read only = false + write only = false + {{- end }} + + {{- if $mod.hostsAllow }} + hosts allow = {{ join " " $mod.hostsAllow }} + {{- end }} + + {{- if $mod.hostsDeny }} + hosts deny = {{ join " " $mod.hostsDeny }} + {{- end }} + {{- range $aux := $mod.auxParams }} + {{- include "rsync.aux.validation" (dict "aux" $aux) }} + {{ printf "%v = %v" $aux.param $aux.value }} + {{- end }} + {{- end }} + {{- $mods = mustAppend $mods $mod.name }} + {{- end }} + + {{- if not (deepEqual $mods (uniq $mods)) -}} + {{- fail "Rsync - Module Names must be unique" -}} + {{- end -}} +{{- end -}} diff --git a/community/rsyncd/1.0.0/templates/_rsync.tpl b/community/rsyncd/1.0.0/templates/_rsync.tpl new file mode 100644 index 0000000000..dccaf5b8f4 --- /dev/null +++ b/community/rsyncd/1.0.0/templates/_rsync.tpl @@ -0,0 +1,97 @@ +{{- define "rsync.workload" -}} +workload: + rsync: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.rsyncNetwork.hostNetwork }} + containers: + rsync: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + - SETGID + - SETUID + - SYS_CHROOT + probes: + liveness: + enabled: true + type: exec + command: + - /bin/sh + - -c + - | + pgrep rsync + readiness: + enabled: true + type: exec + command: + - /bin/sh + - -c + - | + pgrep rsync + startup: + enabled: true + type: exec + command: + - /bin/sh + - -c + - | + pgrep rsync + +{{/* Service */}} +service: + rsync: + enabled: true + primary: true + type: NodePort + targetSelector: rsync + ports: + rsync: + enabled: true + primary: true + port: {{ .Values.rsyncNetwork.rsyncPort }} + nodePort: {{ .Values.rsyncNetwork.rsyncPort }} + targetSelector: rsync + +{{/* Persistence */}} +persistence: + temp: + enabled: true + type: emptyDir + targetSelector: + rsync: + rsync: + mountPath: /tmp + rsync-conf: + enabled: true + type: configmap + objectName: config + targetSelector: + rsync: + rsync: + mountPath: /etc/rsyncd.conf + subPath: rsyncd.conf + readOnly: true + {{- range $idx, $mod := .Values.rsyncModules }} + {{ printf "rsyncd-%v" (int $idx) }}: + enabled: {{ $mod.enabled }} + type: hostPath + hostPath: {{ $mod.hostPath | default "" }} + targetSelector: + rsync: + rsync: + mountPath: {{ printf "/data/%v" $mod.name }} + {{- end }} +{{- end -}} diff --git a/community/rsyncd/1.0.0/templates/_validation.tpl b/community/rsyncd/1.0.0/templates/_validation.tpl new file mode 100644 index 0000000000..da0c7a88dd --- /dev/null +++ b/community/rsyncd/1.0.0/templates/_validation.tpl @@ -0,0 +1,79 @@ +{{- define "rsync.validation" -}} + {{- $reservedParams := (list + "port" "use chroot" "pid file" + "max connections" "log file" + ) -}} + + {{- range .Values.rsyncConfig.auxParams -}} + {{- include "rsync.aux.validation" (dict "aux" .) -}} + + {{- if mustHas .param $reservedParams -}} + {{- fail (printf "Rsync - Overriding parameter [%v] is not allowed." .param) -}} + {{- end -}} + {{- end -}} + + {{- if not .Values.rsyncModules -}} + {{- fail "Rsync - At least one module must be configured." -}} + {{- end -}} +{{- end -}} + +{{- define "rsync.module.validation" -}} + {{- $mod := .mod -}} + {{- if not $mod.name -}} + {{- fail "Rsync - [Module Name] is required." -}} + {{- end -}} + + {{- if not (mustRegexMatch "^[a-zA-Z0-9]+([_-]*[a-zA-Z0-9]+)+$" $mod.name) -}} + {{- $allow := "Can include [Letters (a-z, A-Z), Numbers (0,9), Underscore (_), Dash (-)]" -}} + {{- $disallow := "But cannot start or end with [Underscore (_), Dash (-), Dot (.)]" -}} + {{- fail (printf "Rsync - Module Name [%v] has invalid naming format. %v %v" $mod.name $allow $disallow) -}} + {{- end -}} + + {{- if not $mod.hostPath -}} + {{- fail (printf "Rsync - [Host Path] on module [%v] is required." $mod.name) -}} + {{- end -}} + + {{- $modes := (list "RO" "RW" "WO") -}} + {{- if not (mustHas $mod.accessMode $modes) -}} + {{- fail (printf "Rsync - [Access Mode] must be one of [%v] on module [%v], but got [%v]." (join ", " $modes) $mod.name $mod.accessMode) -}} + {{- end -}} + + {{- if kindIs "invalid" $mod.maxConnections -}} + {{- fail (printf "Rsync - [Max Connections] on module [%v] is required." $mod.name) -}} + {{- end -}} + + {{- if kindIs "invalid" $mod.uid -}} + {{- fail (printf "Rsync - [User] on module [%v] is required." $mod.name) -}} + {{- end -}} + + {{- if kindIs "invalid" $mod.gid -}} + {{- fail (printf "Rsync - [Group] on module [%v] is required." $mod.name) -}} + {{- end -}} + + {{- range $entry := $mod.hostsAllow -}} + {{- if not $entry -}} + {{- fail (printf "Rsync - Entry [%v] in [Hosts Allow] on module [%v] cannot be empty." $entry $mod.name) -}} + {{- end -}} + {{- end -}} + + {{- range $entry := $mod.hostsDeny -}} + {{- if not $entry -}} + {{- fail (printf "Rsync - Entry [%v] in [Hosts Deny] on module [%v] cannot be empty." $entry $mod.name) -}} + {{- end -}} + {{- end -}} + + {{- range $mod.auxParams -}} + {{- include "rsync.aux.validation" (dict "aux" .) -}} + {{- end -}} +{{- end -}} + +{{- define "rsync.aux.validation" -}} + {{- $aux := .aux -}} + {{- if not $aux.param -}} + {{- fail "Rsync - Parameter name is required." -}} + {{- end -}} + + {{- if not $aux.value -}} + {{- fail (printf "Rsync - Value on parameter [%v] is required." $aux.param) -}} + {{- end -}} +{{- end -}} diff --git a/community/rsyncd/1.0.0/templates/common.yaml b/community/rsyncd/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..d3b9e14111 --- /dev/null +++ b/community/rsyncd/1.0.0/templates/common.yaml @@ -0,0 +1,7 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "rsync.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "rsync.workload" $ | fromYaml) -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/rsyncd/item.yaml b/community/rsyncd/item.yaml new file mode 100644 index 0000000000..2cd5084665 --- /dev/null +++ b/community/rsyncd/item.yaml @@ -0,0 +1,7 @@ +icon_url: https://rsync.samba.org/newrsynclogo.jpg +screenshots: [] +categories: + - storage +tags: + - sync + - file transfer