Publish new changes in catalog

This commit is contained in:
sonicaj
2024-02-20 10:03:02 +00:00
parent 1a797b4b70
commit 36ca582a3b
86 changed files with 1022 additions and 13 deletions

View File

@@ -3,7 +3,7 @@ description: AI-powered app for browsing, organizing & sharing your photo collec
annotations:
title: PhotoPrism
type: application
version: 2.0.2
version: 2.0.3
apiVersion: v2
appVersion: '231128'
kubeVersion: '>=1.16.0-0'

View File

@@ -0,0 +1,105 @@
photoprismNetwork:
certificateID: 1
webPort: 30489
photoprismConfig:
siteURL: https://photoprism.ix.dev:30489
public: true
photoprismID:
user: 1000
group: 1000
photoprismStorage:
import:
type: pvc
originals:
type: pvc
storage:
type: pvc
ixCertificates:
"1":
certificate: |
-----BEGIN CERTIFICATE-----
MIIEdjCCA16gAwIBAgIDYFMYMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
HhcNMjEwODMwMjMyMzU0WhcNMjMxMjAzMjMyMzU0WjBuMQswCQYDVQQDDAJhZDEL
MAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxDTALBgNVBAcMBGFzZGYxDTALBgNV
BAoMBGFkc2YxDTALBgNVBAsMBGFzZGYxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7+1xOHRQyOnQTHFcrdasX
Zl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/AbkH7oVFWC1
P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI4vQCdYgW
2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2dNgsxKU0H
PGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB+Zie331t
AzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7A/FuDVg3
AgMBAAGjggEdMIIBGTAnBgNVHREEIDAehwTAqAADhwTAqAAFhwTAqAC2hwTAqACB
hwTAqACSMB0GA1UdDgQWBBQ4G2ff4tgZl4vmo4xCfqmJhdqShzAMBgNVHRMBAf8E
AjAAMIGYBgNVHSMEgZAwgY2AFLlYf9L99nxJDcpCM/LT3V5hQ/a3oXCkbjBsMQww
CgYDVQQDDANhc2QxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQH
DAJhZjENMAsGA1UECgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkB
FgdhQGEuY29tggNgUxcwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEwDgYDVR0PAQH/
BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IBAQA6FpOInEHB5iVk3FP67GybJ29vHZTD
KQHbQgmg8s4L7qIsA1HQ+DMCbdylpA11x+t/eL/n48BvGw2FNXpN6uykhLHJjbKR
h8yITa2KeD3LjLYhScwIigXmTVYSP3km6s8jRL6UKT9zttnIHyXVpBDya6Q4WTMx
fmfC6O7t1PjQ5ZyVtzizIUP8ah9n4TKdXU4A3QIM6WsJXpHb+vqp1WDWJ7mKFtgj
x5TKv3wcPnktx0zMPfLb5BTSE9rc9djcBG0eIAsPT4FgiatCUChe7VhuMnqskxEz
MymJLoq8+mzucRwFkOkR2EIt1x+Irl2mJVMeBow63rVZfUQBD8h++LqB
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEhDCCA2ygAwIBAgIDYFMXMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
HhcNMjEwODMwMjMyMDQ1WhcNMzEwODI4MjMyMDQ1WjBsMQwwCgYDVQQDDANhc2Qx
CzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQHDAJhZjENMAsGA1UE
CgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkBFgdhQGEuY29tMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq//c0hEEr83CS1pMgsHX50jt
2MqIbcf63UUNJTiYpUUvUQSFJFc7m/dr+RTZvu97eDCnD5K2qkHHvTPaPZwY+Djf
iy7N641Sz6u/y3Yo3xxs1Aermsfedh48vusJpjbkT2XS44VjbkrpKcWDNVpp3Evd
M7oJotXeUsZ+imiyVCfr4YhoY5gbGh/r+KN9Wf9YKoUyfLLZGwdZkhtX2zIbidsL
Thqi9YTaUHttGinjiBBum234u/CfvKXsfG3yP2gvBGnlvZnM9ktv+lVffYNqlf7H
VmB1bKKk84HtzuW5X76SGAgOG8eHX4x5ZLI1WQUuoQOVRl1I0UCjBtbz8XhwvQID
AQABo4IBLTCCASkwLQYDVR0RBCYwJIcEwKgABYcEwKgAA4cEwKgAkocEwKgAtYcE
wKgAgYcEwKgAtjAdBgNVHQ4EFgQUuVh/0v32fEkNykIz8tPdXmFD9rcwDwYDVR0T
AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBS5WH/S/fZ8SQ3KQjPy091eYUP2t6Fw
pG4wbDEMMAoGA1UEAwwDYXNkMQswCQYDVQQGEwJVUzENMAsGA1UECAwEYXNkZjEL
MAkGA1UEBwwCYWYxDTALBgNVBAoMBGFzZGYxDDAKBgNVBAsMA2FzZDEWMBQGCSqG
SIb3DQEJARYHYUBhLmNvbYIDYFMXMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
BQcDAjAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAKEocOmVuWlr
zegtKYMe8NhHIkFY9oVn5ym6RHNOJpPH4QF8XYC3Z5+iC5yGh4P/jVe/4I4SF6Ql
PtofU0jNq5vzapt/y+m008eXqPQFmoUOvu+JavoRVcRx2LIP5AgBA1mF56CSREsX
TkuJAA9IUQ8EjnmAoAeKINuPaKxGDuU8BGCMqr/qd564MKNf9XYL+Fb2rlkA0O2d
2No34DQLgqSmST/LAvPM7Cbp6knYgnKmGr1nETCXasg1cueHLnWWTvps2HiPp2D/
+Fq0uqcZLu4Mdo0CPs4e5sHRyldEnRSKh0DVLprq9zr/GMipmPLJUsT5Jed3sj0w
M7Y3vwxshpo=
-----END CERTIFICATE-----
privatekey: |
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7+1xOHRQyOnQT
HFcrdasXZl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/Abk
H7oVFWC1P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI
4vQCdYgW2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2d
NgsxKU0HPGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB
+Zie331tAzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7
A/FuDVg3AgMBAAECggEAapt30rj9DitGTtxAt13pJMEhyYxvvD3WkvmJwguF/Bbu
eW0Ba1c668fMeRCA54FWi1sMqusPS4HUqqUvk+tmyAOsAF4qgD/A4MMSC7uJSVI5
N/JWhJWyhCY94/FPakiO1nbPbVw41bcqtzU2qvparpME2CtxSCbDiqm7aaag3Kqe
EF0fGSUdZ+TYl9JM05+eIyiX+UY19Fg0OjTHMn8nGpxcNTfDBdQ68TKvdo/dtIKL
PLKzJUNNdM8odC4CvQtfGMqaslwZwXkiOl5VJcW21ncj/Y0ngEMKeD/i65ZoqGdR
0FKCQYEAGtM2FvJcZQ92Wsw7yj2bK2MSegVUyLK32QKBgQDe8syVCepPzRsfjfxA
6TZlWcGuTZLhwIx97Ktw3VcQ1f4rLoEYlv0xC2VWBORpzIsJo4I/OLmgp8a+Ga8z
FkVRnq90dV3t4NP9uJlHgcODHnOardC2UUka4olBSCG6zmK4Jxi34lOxhGRkshOo
L4IBeOIB5g+ZrEEXkzfYJHESRQKBgQDX2YhFhGIrT8BAnC5BbXbhm8h6Bhjz8DYL
d+qhVJjef7L/aJxViU0hX9Ba2O8CLK3FZeREFE3hJPiJ4TZSlN4evxs5p+bbNDcA
0mhRI/o3X4ac6IxdRebyYnCOB/Cu94/MzppcZcotlCekKNike7eorCcX4Qavm7Pu
MUuQ+ifmSwKBgEnchoqZzlbBzMqXb4rRuIO7SL9GU/MWp3TQg7vQmJerTZlgvsQ2
wYsOC3SECmhCq4117iCj2luvOdihCboTFsQDnn0mpQe6BIF6Ns3J38wAuqv0CcFd
DKsrge1uyD3rQilgSoAhKzkUc24o0PpXQurZ8YZPgbuXpbj5vPaOnCdBAoGACYc7
wb3XS4wos3FxhUfcwJbM4b4VKeeHqzfu7pI6cU/3ydiHVitKcVe2bdw3qMPqI9Wc
nvi6e17Tbdq4OCsEJx1OiVwFD9YdO3cOTc6lw/3+hjypvZBRYo+/4jUthbu96E+S
dtOzehGZMmDvN0uSzupSi3ZOgkAAUFpyuIKickMCgYAId0PCRjonO2thn/R0rZ7P
//L852uyzYhXKw5/fjFGhQ6LbaLgIRFaCZ0L2809u0HFnNvJjHv4AKP6j+vFQYYY
qQ+66XnfsA9G/bu4MDS9AX83iahD9IdLXQAy8I19prAbpVumKegPbMnNYNB/TYEc
3G15AKCXo7jjOUtHY01DCQ==
-----END PRIVATE KEY-----

View File

@@ -15,10 +15,12 @@ podOptions:
photoprismConfig:
public: false
password: ''
siteURL: ''
additionalEnvs: []
photoprismNetwork:
webPort: 20800
certificateID:
hostNetwork: false
photoprismID:

View File

@@ -29,6 +29,12 @@ questions:
schema:
type: dict
attrs:
- variable: siteURL
label: Site URL
description: The URL for Photoprism.
schema:
type: string
default: ""
- variable: public
label: Public
description: |
@@ -148,6 +154,14 @@ questions:
schema:
type: boolean
default: false
- variable: certificateID
label: Certificate
description: The certificate to use for Photoprism
schema:
type: int
"null": true
$ref:
- "definitions/certificate"
- variable: photoprismStorage
label: ""

View File

@@ -37,4 +37,27 @@ persistence:
photoprism:
mountPath: {{ $storage.mountPath }}
{{- end }}
{{- if .Values.photoprismNetwork.certificateID }}
cert:
enabled: true
type: secret
objectName: photoprism-cert
defaultMode: "0600"
items:
- key: tls.key
path: tls.key
- key: tls.crt
path: tls.crt
targetSelector:
photoprism:
photoprism:
mountPath: /photoprism/storage/config/certificates
readOnly: true
scaleCertificate:
photoprism-cert:
enabled: true
id: {{ .Values.photoprismNetwork.certificateID }}
{{- end -}}
{{- end -}}

View File

@@ -35,6 +35,17 @@ workload:
PHOTOPRISM_STORAGE_PATH: /photoprism/storage
PHOTOPRISM_ORIGINALS_PATH: /photoprism/originals
PHOTOPRISM_IMPORT_PATH: /photoprism/import
{{- with .Values.photoprismConfig.siteURL }}
PHOTOPRISM_SITE_URL: {{ . }}
{{- end -}}
{{- if .Values.photoprismNetwork.certificateID }}
{{- if not .Values.photoprismConfig.siteURL -}}
{{- fail "Site URL is required when using a certificate" -}}
{{- end }}
PHOTOPRISM_DISABLE_TLS: false
PHOTOPRISM_TLS_CERT: tls.crt
PHOTOPRISM_TLS_KEY: tls.key
{{- end }}
fixedEnv:
PUID: {{ .Values.photoprismID.user }}
{{ with .Values.photoprismConfig.additionalEnvs }}
@@ -45,19 +56,23 @@ workload:
{{ end }}
{{ end }}
probes:
{{- $prot := "http" -}}
{{- if .Values.photoprismNetwork.certificateID -}}
{{- $prot = "https" -}}
{{- end }}
liveness:
enabled: true
type: http
type: {{ $prot }}
path: /
port: {{ .Values.photoprismNetwork.webPort }}
readiness:
enabled: true
type: http
type: {{ $prot }}
path: /
port: {{ .Values.photoprismNetwork.webPort }}
startup:
enabled: true
type: http
type: {{ $prot }}
path: /
port: {{ .Values.photoprismNetwork.webPort }}

View File

@@ -0,0 +1,37 @@
{{- define "photoprism.portal" -}}
{{- $proto := "http" -}}
{{- if .Values.photoprismNetwork.certificateID -}}
{{- $proto = "https" -}}
{{- end -}}
{{- $host := "$node_ip" -}}
{{- with .Values.photoprismConfig.siteURL -}} {{/* Trim protocol and trailing slash */}}
{{- $host = (. | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/") -}}
{{- $host = mustRegexReplaceAll "(.*):[0-9]+" $host "${1}" -}}
{{- end -}}
{{- $port := .Values.photoprismNetwork.webPort }}
{{- with .Values.photoprismConfig.siteURL -}} {{/* If URL is defined */}}
{{- $p := (. | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/") -}}
{{- $p = split ":" $p -}}
{{- if $p._1 -}} {{/* If port is defined */}}
{{- $port = $p._1 -}}
{{- else -}}
{{- $port = "80" -}}
{{- if eq $proto "https" -}}
{{- $port = "443" -}}
{{- end -}}
{{- end -}}
{{- end }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: portal
data:
protocol: {{ $proto }}
path: "/"
host: {{ $host }}
port: {{ $port | quote }}
{{- end -}}

View File

@@ -0,0 +1,2 @@
# Patterns to ignore when building packages.
*.png

View File

@@ -0,0 +1,6 @@
dependencies:
- name: common
repository: file://../../../common
version: 1.2.9
digest: sha256:af1a9a1f87e3e48453c9f25f909f5ebcd7fa6e25162b7b425448ba752bcdbc5c
generated: "2024-02-16T16:11:26.539168004+02:00"

View File

@@ -0,0 +1,25 @@
name: syncthing
description: Syncthing is a continuous file synchronization program.
annotations:
title: Syncthing
type: application
version: 2.0.0
apiVersion: v2
appVersion: 1.27.3
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.9
home: https://syncthing.net/
icon: https://media.sys.truenas.net/apps/syncthing/icons/icon.svg
sources:
- https://syncthing.net
- https://github.com/truenas/charts/tree/master/charts/syncthing
keywords:
- storage
- backup

View File

@@ -0,0 +1,7 @@
# Syncthing
[Syncthing](https://syncthing.net/) is a continuous file synchronization program. It synchronizes files between two or
more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose
where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.
> **WARNING** Do check out [official docs](https://docs.syncthing.net/users/faq.html#what-things-are-synced) to see what is synced.

View File

@@ -0,0 +1,7 @@
# Syncthing
[Syncthing](https://syncthing.net/) is a continuous file synchronization program. It synchronizes files between two or
more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose
where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.
> **WARNING** Do check out [official docs](https://docs.syncthing.net/users/faq.html#what-things-are-synced) to see what is synced.

Binary file not shown.

View File

@@ -0,0 +1,8 @@
syncthingNetwork:
webPort: 30910
tcpPort: 30978
udpPort: 30979
syncthingStorage:
config:
type: pvc

View File

@@ -0,0 +1,7 @@
syncthingNetwork:
webPort: 30910
hostNetwork: true
syncthingStorage:
config:
type: pvc

View File

@@ -0,0 +1,33 @@
image:
pullPolicy: IfNotPresent
repository: syncthing/syncthing
tag: 1.27.3
resources:
limits:
cpu: 4000m
memory: 8Gi
podOptions:
dnsConfig:
options: []
syncthingConfig:
additionalEnvs: []
syncthingID:
user: 568
group: 568
syncthingNetwork:
webPort: 20910
tcpPort: 20978
udpPort: 20979
hostNetwork: false
syncthingStorage:
config:
type: ixVolume
ixVolumeConfig:
datasetName: config
additionalStorages: []

View File

@@ -0,0 +1,36 @@
runAsContext:
- userName: root
groupName: root
gid: 0
uid: 0
description: Syncthing runs as root user.
capabilities:
- name: CHOWN
description: Syncthing is able to chown files.
- name: FOWNER
description: Syncthing is able to bypass permission checks for it's sub-processes.
- name: SYS_CHROOT
description: Syncthing is able to use chroot.
- name: MKNOD
description: Syncthing is able to create device nodes.
- name: DAC_OVERRIDE
description: Syncthing is able to bypass permission checks.
- name: FSETID
description: Syncthing is able to set file capabilities.
- name: KILL
description: Syncthing is able to kill processes.
- name: SETGID
description: Syncthing is able to set group ID for it's sub-processes.
- name: SETUID
description: Syncthing is able to set user ID for it's sub-processes.
- name: SETPCAP
description: Syncthing is able to set process capabilities.
- name: NET_BIND_SERVICE
description: Syncthing is able to bind to privileged ports.
- name: SETFCAP
description: Syncthing is able to set file capabilities.
- name: NET_RAW
description: Syncthing is able to use raw sockets.
- name: AUDIT_WRITE
description: Syncthing is able to write to audit log.
hostMounts: []

View File

@@ -0,0 +1,94 @@
#!/usr/bin/python3
import json
import os
import sys
def migrate_volume(volume):
return {
'type': 'hostPath',
'hostPathConfig': {
'hostPath': volume['hostPath']
},
} if volume.get('hostPathEnabled', False) else {
'type': 'ixVolume',
'ixVolumeConfig': {
'datasetName': volume['datasetName'],
},
}
def migrate_common_lib(values):
delete_keys = [
'web_port', 'tcp_port', 'udp_port', 'hostNetwork', 'dnsConfig',
'ownerUID', 'ownerGID', 'environmentVariables', 'cpuLimit', 'memLimit',
'enableResourceLimits', 'extraAppVolumeMounts', 'appVolumeMounts',
]
values.update({
# Migrate Network
'syncthingNetwork': {
'webPort': values['web_port'],
'tcpPort': values['tcp_port'],
'udpPort': values['udp_port'],
'hostNetwork': values['hostNetwork'],
},
# Migrate Resources
'resources': {
'limits': {
'cpu': values.get('cpuLimit', '4000m'),
'memory': values.get('memLimit', '8Gi'),
}
},
# Migrate DNS
'podOptions': {
'dnsConfig': {
'options': [
{'name': opt['name'], 'value': opt['value']}
for opt in values.get('dnsConfig', {}).get('options', [])
]
}
},
# Migrate ID
'syncthingID': {
'user': values['ownerUID'],
'group': values['ownerGID'],
},
# Migrate Config
'syncthingConfig': {
'additionalEnvs': values.get('environmentVariables', []),
},
# Migrate Storage
'syncthingStorage': {
'config': migrate_volume(values['appVolumeMounts']['config']),
'additionalStorages': [
{
'type': 'hostPath',
'hostPathConfig': {'hostPath': e['hostPath']},
'mountPath': e['mountPath'],
}
for e in values.get('extraAppVolumeMounts', [])
],
},
})
for k in delete_keys:
values.pop(k, None)
return values
def migrate(values):
# If this missing, we have already migrated
if not 'appVolumeMounts' in values.keys():
return values
return migrate_common_lib(values)
if __name__ == '__main__':
if len(sys.argv) != 2:
exit(1)
if os.path.exists(sys.argv[1]):
with open(sys.argv[1], 'r') as f:
print(json.dumps(migrate(json.loads(f.read()))))

View File

@@ -0,0 +1,422 @@
groups:
- name: Syncthing Configuration
description: Configure Syncthing
- name: User and Group Configuration
description: Configure User and Group for Syncthing
- name: Advanced Pod Configuration
description: Configure Advanced Pod Options for Syncthing
- name: Network Configuration
description: Configure Network for Syncthing
- name: Storage Configuration
description: Configure Storage for Syncthing
- name: Resources Configuration
description: Configure Resources for Syncthing
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: syncthingConfig
label: ""
group: Syncthing Configuration
schema:
type: dict
attrs:
- variable: additionalEnvs
label: Additional Environment Variables
description: Configure additional environment variables for Syncthing.
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: syncthingID
label: ""
group: User and Group Configuration
schema:
type: dict
attrs:
- variable: user
label: User ID
description: The user id that Syncthing files will be owned by.
schema:
type: int
min: 568
default: 568
required: true
- variable: group
label: Group ID
description: The group id that Syncthing files will be owned by.
schema:
type: int
min: 568
default: 568
required: true
- variable: podOptions
label: ""
group: Advanced Pod Configuration
schema:
type: dict
attrs:
- variable: dnsConfig
label: Advanced DNS Configuration
schema:
type: dict
attrs:
- variable: options
label: DNS Options
schema:
type: list
items:
- variable: optionsEntry
label: DNS Option Entry
schema:
type: dict
attrs:
- variable: name
label: Option Name
schema:
type: string
required: true
- variable: value
label: Option Value
schema:
type: string
required: true
- variable: syncthingNetwork
label: ""
group: Network Configuration
schema:
type: dict
attrs:
- variable: webPort
label: Web Port
description: The port for the Syncthing Web UI.
schema:
type: int
default: 20910
min: 9000
max: 65535
required: true
- variable: tcpPort
label: TCP Port
description: The port for the Syncthing TCP connection.
schema:
type: int
default: 20978
show_if: [["hostNetwork", "=", false]]
min: 9000
max: 65535
required: true
- variable: udpPort
label: UDP Port
description: The port for the Syncthing UDP connection.
schema:
type: int
default: 20979
show_if: [["hostNetwork", "=", false]]
min: 9000
max: 65535
required: true
- variable: hostNetwork
label: Host Network
description: |
Enabling this will use the host network for Syncthing.</br>
The TCP and UDP ports will listen on port 22000. </br>
Web UI will listen on the port specified above.
schema:
type: boolean
default: false
- variable: syncthingStorage
label: ""
group: Storage Configuration
schema:
type: dict
attrs:
- variable: config
label: Syncthing Config Storage
description: The path to store Syncthing Configuration.
schema:
type: dict
attrs:
- variable: type
label: Type
description: |
ixVolume: Is dataset created automatically by the system.</br>
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
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: "config"
- variable: aclEntries
label: ACL Configuration
schema:
type: dict
show_if: [["aclEnable", "=", true]]
attrs: []
- variable: hostPathConfig
label: Host Path Config
schema:
type: dict
show_if: [["type", "=", "hostPath"]]
attrs:
- variable: aclEnable
label: Enable ACL
description: Enable ACL for the dataset.
schema:
type: boolean
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
default: []
items:
- variable: storageEntry
label: Storage Entry
schema:
type: dict
attrs:
- variable: type
label: Type
description: |
ixVolume: Is dataset created automatically by the system.</br>
Host Path: Is a path that already exists on the system.</br>
SMB Share: Is a SMB share that is mounted to a persistent volume claim.
schema:
type: string
required: true
default: "ixVolume"
immutable: true
enum:
- value: "hostPath"
description: Host Path (Path that already exists on the system)
- value: "ixVolume"
description: ixVolume (Dataset created automatically by 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
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 Config
schema:
type: dict
show_if: [["type", "=", "hostPath"]]
attrs:
- variable: aclEnable
label: Enable ACL
description: Enable ACL for the dataset.
schema:
type: boolean
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: 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
default: false
- variable: datasetName
label: Dataset Name
description: The name of the dataset to use for storage.
schema:
type: string
required: true
immutable: true
default: "storage_entry"
- variable: aclEntries
label: ACL Configuration
schema:
type: dict
show_if: [["aclEnable", "=", true]]
attrs: []
- 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</br>
- Plain Integer - eg. 1</br>
- Float - eg. 0.5</br>
- 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</br>
- Suffixed with E/P/T/G/M/K - eg. 1G</br>
- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi</br>
- Plain Integer in bytes - eg. 1024</br>
- Exponent - eg. 134e6
default: "8Gi"
required: true

View File

@@ -0,0 +1,35 @@
{{- define "syncthing.get-versions" -}}
{{- $oldChartVersion := "" -}}
{{- $newChartVersion := "" -}}
{{/* Safely access the context, so it wont block CI */}}
{{- if hasKey .Values.global "ixChartContext" -}}
{{- if .Values.global.ixChartContext.upgradeMetadata -}}
{{- $oldChartVersion = .Values.global.ixChartContext.upgradeMetadata.oldChartVersion -}}
{{- $newChartVersion = .Values.global.ixChartContext.upgradeMetadata.newChartVersion -}}
{{- if and (not $oldChartVersion) (not $newChartVersion) -}}
{{- fail "Upgrade Metadata is missing. Cannot proceed" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- toYaml (dict "old" $oldChartVersion "new" $newChartVersion) -}}
{{- end -}}
{{- define "syncthing.migration" -}}
{{- $versions := (fromYaml (include "syncthing.get-versions" $)) -}}
{{- if and $versions.old $versions.new -}}
{{- $oldV := semver $versions.old -}}
{{- $newV := semver $versions.new -}}
{{/* If new is v2.x.x */}}
{{- if eq ($newV.Major | int) 2 -}}
{{/* And old is v1.x.x, but lower than .42 */}}
{{- if and (eq $oldV.Major 1) (lt ($oldV.Patch | int) 42) -}}
{{/* Block the upgrade */}}
{{- fail "Migration to 2.x.x is only allowed from 1.0.42 or higher" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}

View File

@@ -0,0 +1,26 @@
{{- define "syncthing.persistence" -}}
persistence:
config:
enabled: true
{{- include "ix.v1.common.app.storageOptions" (dict "storage" .Values.syncthingStorage.config) | nindent 4 }}
targetSelector:
syncthing:
syncthing:
mountPath: /var/syncthing
tmp:
enabled: true
type: emptyDir
targetSelector:
syncthing:
syncthing:
mountPath: /tmp
{{- range $idx, $storage := .Values.syncthingStorage.additionalStorages }}
{{ printf "syncthing-%v:" (int $idx) }}
enabled: true
{{- include "ix.v1.common.app.storageOptions" (dict "storage" $storage) | nindent 4 }}
targetSelector:
syncthing:
syncthing:
mountPath: {{ $storage.mountPath }}
{{- end }}
{{- end -}}

View File

@@ -1,11 +1,11 @@
{{- define "photoprism.portal" -}}
{{- define "syncthing.portal" -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: portal
data:
port: {{ .Values.photoprismNetwork.webPort | quote }}
port: {{ .Values.syncthingNetwork.webPort | quote }}
path: "/"
protocol: "http"
host: $node_ip

View File

@@ -0,0 +1,25 @@
{{- define "syncthing.service" -}}
service:
syncthing:
enabled: true
primary: true
type: ClusterIP
targetSelector: syncthing
ports:
webui:
enabled: true
primary: true
port: {{ .Values.syncthingNetwork.webPort }}
targetSelector: syncthing
sync-tcp:
enabled: true
port: {{ .Values.syncthingNetwork.tcpPort }}
targetPort: 22000
targetSelector: syncthing
sync-udp:
enabled: true
port: {{ .Values.syncthingNetwork.udpPort }}
targetPort: 22000
protocol: udp
targetSelector: syncthing
{{- end -}}

View File

@@ -0,0 +1,62 @@
{{- define "syncthing.workload" -}}
workload:
syncthing:
enabled: true
primary: true
type: Deployment
podSpec:
securityContenxt:
fsGroup: {{ .Values.syncthingID.group }}
hostNetwork: {{ .Values.syncthingNetwork.hostNetwork }}
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:
STGUIADDRESS: 0.0.0.0:{{ .Values.syncthingNetwork.webPort }}
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 }}
{{- end -}}

View File

@@ -0,0 +1,13 @@
{{- include "ix.v1.common.loader.init" . -}}
{{- include "syncthing.migration" $ -}}
{{/* Merge the templates with Values */}}
{{- $_ := mustMergeOverwrite .Values (include "syncthing.workload" $ | fromYaml) -}}
{{- $_ := mustMergeOverwrite .Values (include "syncthing.service" $ | fromYaml) -}}
{{- $_ := mustMergeOverwrite .Values (include "syncthing.persistence" $ | fromYaml) -}}
{{/* Create the configmap for portal manually*/}}
{{- include "syncthing.portal" $ -}}
{{- include "ix.v1.common.loader.apply" . -}}

View File

@@ -0,0 +1,4 @@
# 1.0.42
This version is kept because it contains a fix that is needed for migration to v2.x.x
It should be safe to remove few months after v2.x.x is released.

View File

@@ -4,9 +4,9 @@ description: Castopod is an open-source hosting platform made for podcasters who
annotations:
title: Castopod
type: application
version: 1.2.10
version: 1.2.11
apiVersion: v2
appVersion: 1.9.0
appVersion: 1.10.0
kubeVersion: '>=1.16.0-0'
maintainers:
- name: truenas

View File

@@ -1,11 +1,11 @@
image:
repository: castopod/app
pullPolicy: IfNotPresent
tag: 1.9.0
tag: 1.10.0
webImage:
repository: castopod/web-server
pullPolicy: IfNotPresent
tag: 1.9.0
tag: 1.10.0
resources:
limits:

View File

@@ -3,7 +3,7 @@ description: Firefly III is a personal finances manager
annotations:
title: Firefly III
type: application
version: 1.1.16
version: 1.1.17
apiVersion: v2
appVersion: 6.1.9
kubeVersion: '>=1.16.0-0'

View File

@@ -0,0 +1 @@
{{ include "ix.v1.common.lib.chart.notes" $ }}

View File

@@ -29,7 +29,7 @@ workload:
envList:
{{ range $env := . }}
- name: {{ $env.name }}
value: {{ $env.value }}
value: {{ $env.value | quote }}
{{ end }}
{{ end }}
probes:

View File

@@ -28,7 +28,7 @@ workload:
envList:
{{ range $env := . }}
- name: {{ $env.name }}
value: {{ $env.value }}
value: {{ $env.value | quote }}
{{ end }}
{{ end }}
probes: