From df4aed4227484327e24b18afef6d30b66213b1f1 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Tue, 9 Jan 2024 11:04:41 +0000 Subject: [PATCH] Publish new changes in catalog --- test/syncthing/1.2.0/Chart.lock | 6 + test/syncthing/1.2.0/Chart.yaml | 27 ++ test/syncthing/1.2.0/README.md | 20 + test/syncthing/1.2.0/app-readme.md | 20 + test/syncthing/1.2.0/charts/common-1.2.6.tgz | Bin 0 -> 63144 bytes .../1.2.0/ci/basic-no-hostnet-values.yaml | 20 + test/syncthing/1.2.0/ci/basic-values.yaml | 14 + .../1.2.0/ci/https-no-hostnet-values.yaml | 108 +++++ test/syncthing/1.2.0/ci/https-values.yaml | 105 +++++ test/syncthing/1.2.0/ix_values.yaml | 40 ++ test/syncthing/1.2.0/metadata.yaml | 22 + test/syncthing/1.2.0/migrations/migrate | 73 +++ test/syncthing/1.2.0/questions.yaml | 427 ++++++++++++++++++ test/syncthing/1.2.0/templates/NOTES.txt | 1 + .../1.2.0/templates/_certContainer.tpl | 41 ++ test/syncthing/1.2.0/templates/_configure.tpl | 96 ++++ .../1.2.0/templates/_persistence.tpl | 81 ++++ test/syncthing/1.2.0/templates/_portal.tpl | 16 + test/syncthing/1.2.0/templates/_service.tpl | 47 ++ test/syncthing/1.2.0/templates/_syncthing.tpl | 79 ++++ test/syncthing/1.2.0/templates/common.yaml | 12 + test/syncthing/1.2.0/to_keep_versions.md | 3 + test/syncthing/1.2.0/upgrade_strategy_disable | 30 ++ 23 files changed, 1288 insertions(+) create mode 100644 test/syncthing/1.2.0/Chart.lock create mode 100644 test/syncthing/1.2.0/Chart.yaml create mode 100644 test/syncthing/1.2.0/README.md create mode 100644 test/syncthing/1.2.0/app-readme.md create mode 100644 test/syncthing/1.2.0/charts/common-1.2.6.tgz create mode 100644 test/syncthing/1.2.0/ci/basic-no-hostnet-values.yaml create mode 100644 test/syncthing/1.2.0/ci/basic-values.yaml create mode 100644 test/syncthing/1.2.0/ci/https-no-hostnet-values.yaml create mode 100644 test/syncthing/1.2.0/ci/https-values.yaml create mode 100644 test/syncthing/1.2.0/ix_values.yaml create mode 100644 test/syncthing/1.2.0/metadata.yaml create mode 100755 test/syncthing/1.2.0/migrations/migrate create mode 100644 test/syncthing/1.2.0/questions.yaml create mode 100644 test/syncthing/1.2.0/templates/NOTES.txt create mode 100644 test/syncthing/1.2.0/templates/_certContainer.tpl create mode 100644 test/syncthing/1.2.0/templates/_configure.tpl create mode 100644 test/syncthing/1.2.0/templates/_persistence.tpl create mode 100644 test/syncthing/1.2.0/templates/_portal.tpl create mode 100644 test/syncthing/1.2.0/templates/_service.tpl create mode 100644 test/syncthing/1.2.0/templates/_syncthing.tpl create mode 100644 test/syncthing/1.2.0/templates/common.yaml create mode 100644 test/syncthing/1.2.0/to_keep_versions.md create mode 100755 test/syncthing/1.2.0/upgrade_strategy_disable diff --git a/test/syncthing/1.2.0/Chart.lock b/test/syncthing/1.2.0/Chart.lock new file mode 100644 index 0000000000..406528f89a --- /dev/null +++ b/test/syncthing/1.2.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.2.6 +digest: sha256:956cef64e364b567d2e5327a00e60b68f3ef765e003d6c35afc143bb81ecc26b +generated: "2024-01-02T19:23:50.344200237+02:00" diff --git a/test/syncthing/1.2.0/Chart.yaml b/test/syncthing/1.2.0/Chart.yaml new file mode 100644 index 0000000000..e0ab431986 --- /dev/null +++ b/test/syncthing/1.2.0/Chart.yaml @@ -0,0 +1,27 @@ +name: syncthing +description: Syncthing is a continuous file synchronization program. +annotations: + title: Syncthing +type: application +version: 1.2.0 +apiVersion: v2 +appVersion: '1.27.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.2.6 +home: https://syncthing.net/ +icon: https://media.sys.truenas.net/apps/syncthing/icons/icon.svg +sources: + - https://syncthing.net/ + - https://github.com/syncthing/syncthing + - https://hub.docker.com/r/syncthing/syncthing + - https://github.com/truenas/charts/tree/master/enterprise/syncthing +keywords: + - sync + - file-sharing diff --git a/test/syncthing/1.2.0/README.md b/test/syncthing/1.2.0/README.md new file mode 100644 index 0000000000..cceadde7c0 --- /dev/null +++ b/test/syncthing/1.2.0/README.md @@ -0,0 +1,20 @@ +# Syncthing + +[Syncthing](https://syncthing.net/) is a file synchronization program. + +At each startup of the application, the following settings are applied: + +- Disable automatic upgrades +- Disable anonymous usage reporting +- Disable NAT traversal +- Disable global discovery +- Disable local discovery +- Disable relaying +- Disable announcing LAN addresses + +Additionally, the following defaults are set for new synthing "folders": + +- Max total size of `xattr`: 10 MiB +- Max size per `xattr`: 2 MiB +- Enable `send` and `sync` of `xattr` +- Enable `send` and `sync` of `ownership` diff --git a/test/syncthing/1.2.0/app-readme.md b/test/syncthing/1.2.0/app-readme.md new file mode 100644 index 0000000000..cceadde7c0 --- /dev/null +++ b/test/syncthing/1.2.0/app-readme.md @@ -0,0 +1,20 @@ +# Syncthing + +[Syncthing](https://syncthing.net/) is a file synchronization program. + +At each startup of the application, the following settings are applied: + +- Disable automatic upgrades +- Disable anonymous usage reporting +- Disable NAT traversal +- Disable global discovery +- Disable local discovery +- Disable relaying +- Disable announcing LAN addresses + +Additionally, the following defaults are set for new synthing "folders": + +- Max total size of `xattr`: 10 MiB +- Max size per `xattr`: 2 MiB +- Enable `send` and `sync` of `xattr` +- Enable `send` and `sync` of `ownership` diff --git a/test/syncthing/1.2.0/charts/common-1.2.6.tgz b/test/syncthing/1.2.0/charts/common-1.2.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..78571273595af4c0eb50b594edca6bdef4766442 GIT binary patch literal 63144 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
+ If this is disabled, you will need to add your local networks in CIDR format to the Syncthing WebUI.
+ In the Syncthing WebUI, go to Advanced Settings > Options > Always Local Nets
+ Separate each CIDR network with a comma.
+ Example: 192.168.0.0/24,192.168.1.0/24 + schema: + type: boolean + default: true + - variable: webPort + label: Web Port + description: The port for the Syncthing WebUI. + schema: + type: int + default: 31000 + min: 9000 + max: 65535 + required: true + - variable: tcpPort + label: TCP Port (File Transfers) + description: The TCP port for Syncthing transfers. + schema: + type: int + show_if: [["hostNetwork", "=", false]] + default: 22000 + min: 9000 + max: 65535 + required: true + - variable: quicPort + label: QUIC (UDP) Port (File Transfers) + description: The QUIC (UDP) port for Syncthing transfers. + schema: + type: int + show_if: [["hostNetwork", "=", false]] + default: 22000 + min: 9000 + max: 65535 + required: true + - variable: certificateID + label: Certificate + description: The certificate to use for Syncthing GUI. + schema: + type: int + "null": true + $ref: + - "definitions/certificate" + + - variable: syncthingStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: home + label: Syncthing Home Storage + description: The path to store Syncthing Home Directory. + 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 + immutable: 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: ixVolumeConfig + label: ixVolume Configuration + description: The configuration for the ixVolume dataset. + schema: + type: dict + show_if: [["type", "=", "ixVolume"]] + $ref: + - "normalize/ixVolume" + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + hidden: true + default: false + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + required: true + immutable: true + hidden: true + default: "home" + - variable: aclEntries + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + hidden: true + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Syncthing. + schema: + type: list + required: true + empty: false + default: + - type: "hostPath" + mountPath: "/data1" + hostPath": "" + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + Host Path: Is a path that already exists on the system.
+ SMB Share: Is a SMB share that is mounted to a persistent volume claim. + schema: + type: string + required: true + default: "hostPath" + immutable: true + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "smb-pv-pvc" + description: SMB Share (Mounts a persistent volume claim to a SMB share) + - variable: readOnly + label: Read Only + description: Mount the volume as read only. + schema: + type: boolean + hidden: true + default: false + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPathConfig + label: Host Path Configuration + schema: + type: dict + show_if: [["type", "=", "hostPath"]] + attrs: + - variable: aclEnable + label: Enable ACL + description: Enable ACL for the dataset. + schema: + type: boolean + hidden: true + default: false + - variable: acl + label: ACL Configuration + schema: + type: dict + show_if: [["aclEnable", "=", true]] + attrs: [] + $ref: + - "normalize/acl" + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["aclEnable", "=", false]] + required: true + - variable: smbConfig + label: SMB Share Configuration + description: The configuration for the SMB Share. + schema: + type: dict + show_if: [["type", "=", "smb-pv-pvc"]] + attrs: + - variable: server + label: Server + description: The server for the SMB share. + schema: + type: string + required: true + - variable: share + label: Share + description: The share name for the SMB share. + schema: + type: string + required: true + - variable: domain + label: Domain (Optional) + description: The domain for the SMB share. + schema: + type: string + - variable: username + label: Username + description: The username for the SMB share. + schema: + type: string + required: true + - variable: password + label: Password + description: The password for the SMB share. + schema: + type: string + required: true + private: true + - variable: size + label: Size (in Gi) + description: The size of the volume quota. + schema: + type: int + 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 Syncthing. + 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 Syncthing. + 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/test/syncthing/1.2.0/templates/NOTES.txt b/test/syncthing/1.2.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/test/syncthing/1.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/test/syncthing/1.2.0/templates/_certContainer.tpl b/test/syncthing/1.2.0/templates/_certContainer.tpl new file mode 100644 index 0000000000..880bb56dbb --- /dev/null +++ b/test/syncthing/1.2.0/templates/_certContainer.tpl @@ -0,0 +1,41 @@ +{{- define "syncthing.certContainer" -}} +01-certs: + enabled: true + type: init + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + allowPrivilegeEscalation: true + capabilities: + add: + - FOWNER + - DAC_OVERRIDE + - CHOWN + - SETUID + - SETGID + - SETFCAP + - SETPCAP + fixedEnv: + PUID: {{ .Values.syncthingID.user }} + command: + - /bin/sh + - -c + - | + #!/bin/sh + set -e + configDir=/var/syncthing/config + # Copy certificates, so that syncthing can use them + # If we mount the certificates directly, syncthing will not start, as it tries + # to chmod the whole directory and fails, because the secret is read-only + if [ ! -d "$configDir" ]; then + mkdir -p "$configDir" + chown -R "$PUID:$PGID" "$configDir" + fi + cp /certs/https-key.pem "$configDir/https-key.pem" + cp /certs/https-cert.pem "$configDir/https-cert.pem" + chown "$PUID:$PGID" "$configDir/https-key.pem" + chown "$PUID:$PGID" "$configDir/https-cert.pem" +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/_configure.tpl b/test/syncthing/1.2.0/templates/_configure.tpl new file mode 100644 index 0000000000..bfe02f5153 --- /dev/null +++ b/test/syncthing/1.2.0/templates/_configure.tpl @@ -0,0 +1,96 @@ +{{- define "syncthing.configure" -}} +{{/* + https://docs.syncthing.net/users/config.html + Note: Configuration in the above link does not match the subcommands of the cli + To get the correct subcommands, run `syncthing cli config ` + It will print all the available subcommands for that category + "Knobs" are exposed under Values.syncthingConfig, We can exposed those to questions.yaml if we want + */}} +configmap: + syncthing-configure: + enabled: true + data: + configure.sh: | + #!/bin/sh + set -e + configDir=/var/syncthing/config + + # Make sure the file exists + until [ -f "$configDir/config.xml" ]; do + sleep 2 + done + + # Check the API is running + until curl --silent --output /dev/null http://localhost:{{ .Values.syncthingNetwork.webPort }}/rest/noauth/health; do + sleep 2 + done + + function setConfig() { + syncthing cli --home "$configDir" config "$@" + } + + # Now we can use the syncthing cli (wrapper around the API) to set the defaults. + # Keep in mind that all the below values are not enforced, user can change them + # while the app is running, but will be re-applied on restart. + + # Category "options" is more like "general" or "global" settings. + setConfig options announce-lanaddresses set -- {{ ternary "1" "0" .Values.syncthingConfig.announceLANAddresses | quote }} + setConfig options global-ann-enabled set -- {{ ternary "1" "0" .Values.syncthingConfig.globalDiscovery | quote }} + setConfig options local-ann-enabled set -- {{ ternary "1" "0" .Values.syncthingConfig.localDiscovery | quote }} + setConfig options natenabled set -- {{ ternary "1" "0" .Values.syncthingConfig.natTraversal | quote }} + setConfig options relays-enabled set -- {{ ternary "1" "0" .Values.syncthingConfig.relaying | quote }} + setConfig options uraccepted set -- {{ ternary "1" "-1" .Values.syncthingConfig.telemetry | quote }} + setConfig options auto-upgrade-intervalh set -- "0" + + # Category "defaults/folder" contains the default settings for new folders. + setConfig defaults folder xattr-filter max-total-size set -- 10485760 + setConfig defaults folder xattr-filter max-single-entry-size set -- 2097152 + setConfig defaults folder send-ownership set -- 1 + setConfig defaults folder sync-ownership set -- 1 + setConfig defaults folder send-xattrs set -- 1 + setConfig defaults folder sync-xattrs set -- 1 + setConfig defaults folder ignore-perms set -- 1 + setConfig defaults folder path set -- "" + syncthing-truenas-logo: + enabled: true + data: + logo-horizontal.svg: | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/_persistence.tpl b/test/syncthing/1.2.0/templates/_persistence.tpl new file mode 100644 index 0000000000..31eb960b62 --- /dev/null +++ b/test/syncthing/1.2.0/templates/_persistence.tpl @@ -0,0 +1,81 @@ +{{- define "syncthing.persistence" -}} +persistence: + home: + enabled: true + {{- include "syncthing.storage.ci.migration" (dict "storage" .Values.syncthingStorage.home) }} + {{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.syncthingStorage.home) | nindent 4 }} + targetSelector: + syncthing: + syncthing: + mountPath: /var/syncthing + 01-certs: + mountPath: /var/syncthing + configure: + enabled: true + type: configmap + objectName: syncthing-configure + defaultMode: "0770" + targetSelector: + syncthing: + syncthing: + mountPath: /configure.sh + subPath: configure.sh + truenas-logo: + enabled: true + type: configmap + objectName: syncthing-truenas-logo + defaultMode: "0770" + targetSelector: + syncthing: + syncthing: + mountPath: /var/truenas/assets/gui/default/assets/img/logo-horizontal.svg + subPath: logo-horizontal.svg + + {{- if not .Values.syncthingStorage.additionalStorages -}} + {{- fail "Syncthing - Expected at least one additional storage defined" -}} + {{- end -}} + + {{- range $idx, $storage := .Values.syncthingStorage.additionalStorages }} + {{ printf "sync-%v" (int $idx) }}: + enabled: true + {{- include "syncthing.storage.ci.migration" (dict "storage" $storage) }} + {{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 4 }} + targetSelector: + syncthing: + syncthing: + mountPath: {{ $storage.mountPath }} + {{- end }} + + {{- if .Values.syncthingNetwork.certificateID }} + certs: + enabled: true + type: secret + objectName: syncthing-cert + defaultMode: "0600" + items: + - key: tls.key + path: https-key.pem + - key: tls.crt + path: https-cert.pem + targetSelector: + syncthing: + 01-certs: + mountPath: /certs + readOnly: true + +scaleCertificate: + syncthing-cert: + enabled: true + id: {{ .Values.syncthingNetwork.certificateID }} + {{- end -}} +{{- end -}} + +{{/* TODO: Remove on the next version bump, eg 1.2.0+ */}} +{{- define "syncthing.storage.ci.migration" -}} + {{- $storage := .storage -}} + + {{- if $storage.hostPath -}} + {{- $_ := set $storage "hostPathConfig" dict -}} + {{- $_ := set $storage.hostPathConfig "hostPath" $storage.hostPath -}} + {{- end -}} +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/_portal.tpl b/test/syncthing/1.2.0/templates/_portal.tpl new file mode 100644 index 0000000000..eb7f491fed --- /dev/null +++ b/test/syncthing/1.2.0/templates/_portal.tpl @@ -0,0 +1,16 @@ +{{- define "syncthing.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + host: "$node_ip" + port: {{ .Values.syncthingNetwork.webPort | quote }} + {{- if .Values.syncthingNetwork.certificateID }} + protocol: https + {{- else }} + protocol: http + {{- end }} +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/_service.tpl b/test/syncthing/1.2.0/templates/_service.tpl new file mode 100644 index 0000000000..c977aa413a --- /dev/null +++ b/test/syncthing/1.2.0/templates/_service.tpl @@ -0,0 +1,47 @@ +{{- define "syncthing.service" -}} +service: + syncthing-web: + enabled: true + primary: true + type: NodePort + targetSelector: syncthing + ports: + webui: + enabled: true + primary: true + port: {{ .Values.syncthingNetwork.webPort }} + nodePort: {{ .Values.syncthingNetwork.webPort }} + targetSelector: syncthing + syncthing-discovery: + # Only enable this service if local discovery is enabled + enabled: {{ .Values.syncthingConfig.localDiscovery }} + type: NodePort + targetSelector: syncthing + ports: + discovery: + enabled: true + port: {{ .Values.syncthingNetwork.localDiscoveryPort }} + nodePort: {{ .Values.syncthingNetwork.localDiscoveryPort }} + targetPort: 21017 + protocol: udp + targetSelector: syncthing + syncthing-transfer: + enabled: true + type: NodePort + targetSelector: syncthing + ports: + tcp: + enabled: true + primary: true + port: {{ .Values.syncthingNetwork.tcpPort }} + nodePort: {{ .Values.syncthingNetwork.tcpPort }} + targetPort: 22000 + targetSelector: syncthing + quic: + enabled: true + port: {{ .Values.syncthingNetwork.quicPort }} + nodePort: {{ .Values.syncthingNetwork.quicPort }} + targetPort: 22000 + protocol: udp + targetSelector: syncthing +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/_syncthing.tpl b/test/syncthing/1.2.0/templates/_syncthing.tpl new file mode 100644 index 0000000000..246019c07c --- /dev/null +++ b/test/syncthing/1.2.0/templates/_syncthing.tpl @@ -0,0 +1,79 @@ +{{- define "syncthing.workload" -}} +workload: + syncthing: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.syncthingNetwork.hostNetwork }} + securityContext: + fsGroup: {{ .Values.syncthingID.group }} + containers: + syncthing: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + # This is needed to allow syncthing assign + # PCAPs to its child processes + allowPrivilegeEscalation: true + capabilities: + add: + - FOWNER + - DAC_OVERRIDE + - CHOWN + - SETUID + - SETGID + - SETFCAP + - SETPCAP + - SYS_ADMIN + env: + PCAP: cap_sys_admin,cap_chown,cap_dac_override,cap_fowner+ep + STGUIADDRESS: "0.0.0.0:{{ .Values.syncthingNetwork.webPort }}" + # Set a custom override for the GUI assets + STGUIASSETS: /var/truenas/assets/gui + # Disable automatic upgrades + STNOUPGRADE: "true" + fixedEnv: + PUID: {{ .Values.syncthingID.user }} + {{ with .Values.syncthingConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + path: /rest/noauth/health + port: "{{ .Values.syncthingNetwork.webPort }}" + readiness: + enabled: true + type: http + path: /rest/noauth/health + port: "{{ .Values.syncthingNetwork.webPort }}" + startup: + enabled: true + type: http + path: /rest/noauth/health + port: "{{ .Values.syncthingNetwork.webPort }}" + # We use this hook as we need the API + # to be running when we run the configure script + lifecycle: + postStart: + type: exec + command: + - su-exec + - "{{ .Values.syncthingID.user }}:{{ .Values.syncthingID.group }}" + - /configure.sh + {{- if .Values.syncthingNetwork.certificateID }} + initContainers: + {{- include "syncthing.certContainer" $ | nindent 8 -}} + {{- end }} +{{- end -}} diff --git a/test/syncthing/1.2.0/templates/common.yaml b/test/syncthing/1.2.0/templates/common.yaml new file mode 100644 index 0000000000..fc970dffa5 --- /dev/null +++ b/test/syncthing/1.2.0/templates/common.yaml @@ -0,0 +1,12 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "syncthing.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "syncthing.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "syncthing.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "syncthing.configure" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "syncthing.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/test/syncthing/1.2.0/to_keep_versions.md b/test/syncthing/1.2.0/to_keep_versions.md new file mode 100644 index 0000000000..2d2e7325f2 --- /dev/null +++ b/test/syncthing/1.2.0/to_keep_versions.md @@ -0,0 +1,3 @@ +# 1.1.5 + +This version is kept in order to be able to test the storage section migration diff --git a/test/syncthing/1.2.0/upgrade_strategy_disable b/test/syncthing/1.2.0/upgrade_strategy_disable new file mode 100755 index 0000000000..aef37b7f05 --- /dev/null +++ b/test/syncthing/1.2.0/upgrade_strategy_disable @@ -0,0 +1,30 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + +RE_STABLE_VERSION = re.compile(r'[1-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)))