Update catalog information

This commit is contained in:
sonicaj
2023-05-09 13:50:04 +00:00
parent bfc29a2718
commit 26d4b00570
88 changed files with 3280 additions and 5 deletions

View File

@@ -42,7 +42,7 @@
"latest_version": "1.0.89",
"latest_app_version": "2023.5.2",
"latest_human_version": "2023.5.2_1.0.89",
"last_update": "2023-05-07 15:37:00",
"last_update": "2023-05-09 11:21:40",
"name": "home-assistant",
"recommended": false,
"title": "Home Assistant",
@@ -118,7 +118,7 @@
"latest_version": "1.7.45",
"latest_app_version": "1.32.1.6999",
"latest_human_version": "1.32.1.6999_1.7.45",
"last_update": "2023-05-09 11:06:50",
"last_update": "2023-05-09 11:21:40",
"name": "plex",
"recommended": false,
"title": "Plex",
@@ -201,7 +201,7 @@
"latest_version": "1.0.6",
"latest_app_version": "7",
"latest_human_version": "7_1.0.6",
"last_update": "2023-05-03 13:56:14",
"last_update": "2023-05-09 11:21:40",
"name": "wg-easy",
"recommended": false,
"title": "WG Easy",
@@ -286,7 +286,7 @@
"latest_version": "1.0.26",
"latest_app_version": "1.23.4",
"latest_human_version": "1.23.4_1.0.26",
"last_update": "2023-05-03 13:56:14",
"last_update": "2023-05-09 11:21:40",
"name": "syncthing",
"recommended": false,
"title": "Syncthing",
@@ -313,7 +313,7 @@
"latest_version": "1.0.23",
"latest_app_version": "4.7.11.0",
"latest_human_version": "4.7.11.0_1.0.23",
"last_update": "2023-05-03 13:56:14",
"last_update": "2023-05-09 11:21:40",
"name": "emby",
"recommended": false,
"title": "Emby Server",
@@ -555,6 +555,36 @@
"tags": [],
"icon_url": "https://static.wikia.nocookie.net/terraria_gamepedia/images/a/a4/NewPromoLogo.png/revision/latest"
},
"ddns-updater": {
"app_readme": "<h1>DDNS Updater</h1>\n<p><a href=\"https://github.com/qdm12/ddns-updater\">DDNS Updater</a> is a lightweight universal DDNS Updater with web UI</p>\n<blockquote>\n<p>When application is installed, a container will be launched with <strong>root</strong> privileges.\nThis is required in order to apply the correct permissions to the <code>DDNS Updater</code> directories.\nAfterward, the <code>DDNS Updater</code> container will run as a <strong>non</strong>-root user (Default: <code>568</code>).\nAll mounted storage(s) will be <code>chown</code>ed only if the parent directory does not match the configured user.</p>\n</blockquote>",
"categories": [
"network"
],
"description": "Lightweight universal DDNS Updater with web UI",
"healthy": true,
"healthy_error": null,
"home": "https://github.com/qdm12/ddns-updater",
"location": "/__w/charts/charts/community/ddns-updater",
"latest_version": "1.0.0",
"latest_app_version": "latest",
"latest_human_version": "latest_1.0.0",
"last_update": null,
"name": "ddns-updater",
"recommended": false,
"title": "DDNS Updater",
"maintainers": [
{
"name": "truenas",
"url": "https://www.truenas.com/",
"email": "dev@ixsystems.com"
}
],
"tags": [
"ddns",
"ddns-updater"
],
"icon_url": "https://raw.githubusercontent.com/qdm12/ddns-updater/master/readme/ddnsgopher.svg"
},
"radarr": {
"app_readme": "<h1>Radarr</h1>\n<p><a href=\"https://github.com/Radarr/Radarr\">Radarr</a> is a movie collection manager for Usenet and BitTorrent users.</p>\n<blockquote>\n<p>When application is installed, a container will be launched with <strong>root</strong> privileges.\nThis is required in order to apply the correct permissions to the <code>Radarr</code> directories.\nAfterward, the <code>Radarr</code> container will run as a <strong>non</strong>-root user (Default: <code>568</code>).\nAll mounted storage(s) will be <code>chown</code>ed only if the parent directory does not match the configured user.</p>\n</blockquote>",
"categories": [

View File

@@ -0,0 +1,6 @@
dependencies:
- name: common
repository: file://../../../common
version: 1.0.7
digest: sha256:919bcf42446fc1748a1b77001ec0161bb7a72a198381794b716a6ebb459ac31b
generated: "2023-05-09T16:20:15.690681282+03:00"

View File

@@ -0,0 +1,26 @@
name: ddns-updater
description: Lightweight universal DDNS Updater with web UI
annotations:
title: DDNS Updater
type: application
version: 1.0.0
apiVersion: v2
appVersion: 'latest'
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.7
home: https://github.com/qdm12/ddns-updater
icon: https://raw.githubusercontent.com/qdm12/ddns-updater/master/readme/ddnsgopher.svg
sources:
- https://github.com/qdm12/ddns-updater
- https://github.com/truenas/charts/tree/master/community/ddns-updater
- https://hub.docker.com/r/qmcgaw/ddns-updater
keywords:
- ddns-updater
- ddns

View File

@@ -0,0 +1,8 @@
# DDNS Updater
[DDNS Updater](https://github.com/qdm12/ddns-updater) is a lightweight universal DDNS Updater with web UI
> When application is installed, a container will be launched with **root** privileges.
> This is required in order to apply the correct permissions to the `DDNS Updater` directories.
> Afterward, the `DDNS Updater` container will run as a **non**-root user (Default: `568`).
> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user.

View File

@@ -0,0 +1,8 @@
# DDNS Updater
[DDNS Updater](https://github.com/qdm12/ddns-updater) is a lightweight universal DDNS Updater with web UI
> When application is installed, a container will be launched with **root** privileges.
> This is required in order to apply the correct permissions to the `DDNS Updater` directories.
> Afterward, the `DDNS Updater` container will run as a **non**-root user (Default: `568`).
> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user.

Binary file not shown.

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: aliyun
host: "@"
domain: example.com
ipVersion: ""
aliyunAccessKey: key
aliyunSecret: secret

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: allinkl
host: "@"
domain: example.com
ipVersion: ""
allinklUsername: user
allinklPassword: pass

View File

@@ -0,0 +1,37 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: cloudflare
host: "@"
domain: example.com
ipVersion: ""
cloudflareZoneID: zoneid
cloudflareTtl: 1
cloudflareProxied: false
cloudflareToken: token
- provider: cloudflare
host: "@"
domain: example.com
ipVersion: ""
cloudflareZoneID: zoneid
cloudflareTtl: 1
cloudflareProxied: false
cloudflareUserServiceKey: v1.0.0-abcdef
- provider: cloudflare
host: "@"
domain: example.com
ipVersion: ""
cloudflareZoneID: zoneid
cloudflareTtl: 1
cloudflareEmail: email@example.com
cloudflareApiKey: api_key

View File

@@ -0,0 +1,52 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsRunAs:
user: 1000
group: 1000
ddnsConfig:
config:
- provider: allinkl
host: "@"
domain: example.com
ipVersion: ""
allinklUsername: user
allinklPassword: pass
period: 1m
backupPeriod: 1h
updateCooldownPeriod: 10m
publicIpDnsTimeout: 3s
httpTimeout: 15s
publicIpFetchers:
- provider: all
shoutrrrAddresses:
- discord://token@id
- gotify://gotify-host/token
publicIpDnsProviders:
- provider: all
publicIpHttpProviders:
- provider: custom
custom: https://ifconfig.io/ip
publicIpv4HttpProviders:
- provider: custom
custom: https://api.ipify.org
publicIpv6HttpProviders:
- provider: custom
custom: https://api6.ipify.org
additionalEnvs:
- name: LOG_LEVEL
value: debug
- name: LOG_CALLER
value: short

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dd24
host: "@"
domain: example.com
ipVersion: ""
dd24Password: password

View File

@@ -0,0 +1,28 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: ddnss
host: "@"
domain: example.com
ipVersion: ""
ddnssUsername: username
ddnssPassword: password
ddnssProviderIP: false
ddnssDualStack: true
- provider: ddnss
host: "@"
domain: example.com
ipVersion: ""
ddnssUsername: username
ddnssPassword: password
ddnssProviderIP: true

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: digitalocean
host: "@"
domain: example.com
ipVersion: ""
digitalOceanToken: token

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dnsomatic
host: "@"
domain: example.com
ipVersion: ""
dnsOMaticUsername: username
dnsOMaticPassword: password
dnsOMaticProviderIP: false
- provider: dnsomatic
host: "@"
domain: example.com
ipVersion: ""
dnsOMaticUsername: username
dnsOMaticPassword: password
dnsOMaticProviderIP: true

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dnspod
host: "@"
domain: example.com
ipVersion: ""
dnsPodToken: token

View File

@@ -0,0 +1,20 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dondominio
host: "@"
domain: example.com
ipVersion: ""
donDominioUsername: user
donDominioPassword: pass
donDominioName: name

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dreamhost
host: "@"
domain: example.com
ipVersion: ""
dreamHostKey: abcdefgh12345678

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: duckdns
host: subdomain
domain: example.com
duckdnsToken: abcd1234-abcd-1234-abcd-abcd1234abcd
duckdnsProviderIP: false

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dyn
host: "@"
domain: example.com
dynClientKey: key
dynUsername: user
dynProviderIP: false

View File

@@ -0,0 +1,26 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dynu
host: "@"
domain: example.com
dynuUsername: user
dynuPassword: password
dynuProviderIP: false
- provider: dynu
host: "@"
domain: example.com
dynuUsername: user
dynuPassword: password
dynuGroup: group
dynuProviderIP: true

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: dynv6
host: "@"
domain: example.com
dynv6Token: token
dynv6ProviderIP: false

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: freedns
host: "@"
domain: example.com
ipVersion: ""
freeDnsToken: token

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: gandi
host: "@"
domain: example.com
ipVersion: ""
gandiKey: key
gandiTtl: 3600

View File

@@ -0,0 +1,20 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: gcp
host: "@"
domain: example.com
ipVersion: ""
gcpProject: project
gcpZone: zone
gcpCredentials: '{"type": "service_account", "project_id": "my-id"}'

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: godaddy
host: "@"
domain: example.com
ipVersion: ""
godaddyKey: abcDE12345_abcde12345abcde12345AB
godaddySecret: secret

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: he
host: "@"
domain: example.com
ipVersion: ""
hePassword: password

View File

@@ -0,0 +1,24 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: he
host: "@"
domain: example.com
ipVersion: ""
hePassword: password
heProviderIP: true
- provider: he
host: "@"
domain: example.com
ipVersion: ""
hePassword: password

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: infomaniak
host: "@"
domain: example.com
ipVersion: ""
infomaniakUsername: username
infomaniakPassword: password
infomaniakProviderIP: true
- provider: infomaniak
host: "@"
domain: example.com
ipVersion: ""
infomaniakUsername: username
infomaniakPassword: password
infomaniakProviderIP: false

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: inwx
host: subdomain
domain: example.com
ipVersion: ""
inwxUsername: username
inwxPassword: password

View File

@@ -0,0 +1,18 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: linode
host: "@"
domain: example.com
ipVersion: ""
linodeToken: token

View File

@@ -0,0 +1,19 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: luadns
host: "@"
domain: example.com
ipVersion: ""
luadnsToken: token
luadnsEmail: email@example.com

View File

@@ -0,0 +1,25 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: namecheap
host: subdomain
domain: example.com
ipVersion: ""
namecheapPassword: abcdef123456abcdef123456abcdef12
namecheapProviderIP: true
- provider: namecheap
host: subdomain
domain: example.com
ipVersion: ""
namecheapPassword: abcdef123456abcdef123456abcdef12
namecheapProviderIP: false

View File

@@ -0,0 +1,25 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: njalla
host: "@"
domain: example.com
ipVersion: ""
njallaKey: key
njallaProviderIP: true
- provider: njalla
host: "@"
domain: example.com
ipVersion: ""
njallaKey: key
njallaProviderIP: false

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: noip
host: "@"
domain: example.com
ipVersion: ""
noipUsername: username
noipPassword: password
noipProviderIP: true
- provider: noip
host: "@"
domain: example.com
ipVersion: ""
noipUsername: username
noipPassword: password
noipProviderIP: false

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: opendns
host: "@"
domain: example.com
ipVersion: ""
opendnsUsername: username
opendnsPassword: password
opendnsProviderIP: true
- provider: opendns
host: "@"
domain: example.com
ipVersion: ""
opendnsUsername: username
opendnsPassword: password
opendnsProviderIP: false

View File

@@ -0,0 +1,49 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: ovh
host: "@"
domain: example.com
ipVersion: ""
ovhMode: dynamic
ovhUsername: username
ovhPassword: password
ovhProviderIP: true
- provider: ovh
host: "@"
domain: example.com
ipVersion: ""
ovhMode: dynamic
ovhUsername: username
ovhPassword: password
ovhProviderIP: false
- provider: ovh
host: "@"
domain: example.com
ipVersion: ""
ovhMode: api
ovhApiEndpoint: ovh-eu
ovhAppKey: applicationKey
ovhAppSecret: applicationSecret
ovhConsumerKey: consumerKey
ovhProviderIP: false
- provider: ovh
host: "@"
domain: example.com
ipVersion: ""
ovhMode: api
ovhApiEndpoint: ovh-eu
ovhAppKey: applicationKey
ovhAppSecret: applicationSecret
ovhConsumerKey: consumerKey
ovhProviderIP: true

View File

@@ -0,0 +1,26 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: porkbun
host: "@"
domain: example.com
ipVersion: ""
porkbunApiKey: apikey
porkbunSecretApiKey: secretapikey
- provider: porkbun
host: "@"
domain: example.com
ipVersion: ""
porkbunApiKey: apikey
porkbunSecretApiKey: secretapikey
porkbunTtl: 3600

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: selfhost.de
host: "@"
domain: example.com
ipVersion: ""
selfhostdeUsername: username
selfhostdePassword: password
selfhostdeProviderIP: true
- provider: selfhost.de
host: "@"
domain: example.com
ipVersion: ""
selfhostdeUsername: username
selfhostdePassword: password
selfhostdeProviderIP: false

View File

@@ -0,0 +1,29 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: servercow
host: "@"
domain: example.com
ipVersion: ""
servercowUsername: username
servercowPassword: password
servercowTtl: 120
servercowProviderIP: false
- provider: servercow
host: "@"
domain: example.com
ipVersion: ""
servercowUsername: username
servercowPassword: password
servercowTtl: 120
servercowProviderIP: true

View File

@@ -0,0 +1,32 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: spdyn
host: "@"
domain: example.com
ipVersion: ""
spdynToken: token
spdynProviderIP: false
- provider: spdyn
host: "@"
domain: example.com
ipVersion: ""
spdynToken: token
spdynProviderIP: true
- provider: spdyn
host: "@"
domain: example.com
ipVersion: ""
spdynUsername: username
spdynPassword: password
spdynProviderIP: false

View File

@@ -0,0 +1,25 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: strato
host: "@"
domain: example.com
ipVersion: ""
stratoPassword: password
stratoProviderIP: false
- provider: strato
host: "@"
domain: example.com
ipVersion: ""
stratoPassword: password
stratoProviderIP: true

View File

@@ -0,0 +1,27 @@
ddnsStorage:
data:
type: hostPath
hostPath: /mnt/{{ .Release.Name }}/data
# This disables probes.
# As we can't have for each provider
# an api key, we just run through CI
# for the linting.
ci: true
ddnsConfig:
config:
- provider: variomedia
host: "@"
domain: example.com
ipVersion: ""
variomediaPassword: password
variomediaEmail: email@example.com
variomediaProviderIP: false
- provider: variomedia
host: "@"
domain: example.com
ipVersion: ""
variomediaPassword: password
variomediaEmail: email@example.com
variomediaProviderIP: true

View File

@@ -0,0 +1,54 @@
image:
repository: qmcgaw/ddns-updater
pullPolicy: IfNotPresent
tag: latest
ci: false
resources:
limits:
cpu: 4000m
memory: 8Gi
ddnsConfig:
period: 5m
backupPeriod: 24h
updateCooldownPeriod: 5m
httpTimeout: 10s
shoutrrrAddresses: []
publicIpDnsTimeout: 3s
publicIpDnsProviders:
- provider: all
publicIpHttpProviders:
- provider: all
custom: ""
publicIpv4HttpProviders:
- provider: all
custom: ""
publicIpv6HttpProviders:
- provider: all
custom: ""
publicIpFetchers:
- provider: all
config: []
# - provider: cloudflare
# host: "@"
# domain: example.com
# ipVersion: ""
# cfZoneID: asd
# cfTtl: 1
# cfProxied: false
# cfToken: asd
additionalEnvs: []
ddnsNetwork:
webPort: 30000
hostNetwork: false
ddnsRunAs:
user: 568
group: 568
ddnsStorage:
data:
type: ixVolume
hostPath: ''
datasetName: data

View File

@@ -0,0 +1,8 @@
runAsContext:
- userName: ddns-updater
groupName: ddns-updater
gid: 568
uid: 568
description: DDNS Updater runs as any non-root user.
capabilities: []
hostMounts: []

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -0,0 +1,65 @@
{{- define "ddns.configuration" -}}
{{- include "ddns.validation" $ }}
configmap:
ddns-config:
enabled: true
data:
PERIOD: {{ .Values.ddnsConfig.period | quote }}
HTTP_TIMEOUT: {{ .Values.ddnsConfig.httpTimeout | quote }}
BACKUP_PERIOD: {{ .Values.ddnsConfig.backupPeriod | quote }}
UPDATE_COOLDOWN_PERIOD: {{ .Values.ddnsConfig.updateCooldownPeriod | quote }}
SHOUTRRR_ADDRESSES: {{ join "," .Values.ddnsConfig.shoutrrrAddresses | quote }}
PUBLICIP_DNS_TIMEOUT: {{ .Values.ddnsConfig.publicIpDnsTimeout | quote }}
PUBLICIP_DNS_PROVIDERS: {{ include "ddns.getPublicIpProviders" (dict "providerList" .Values.ddnsConfig.publicIpDnsProviders) }}
PUBLICIP_HTTP_PROVIDERS: {{ include "ddns.getPublicIpProviders" (dict "providerList" .Values.ddnsConfig.publicIpHttpProviders) }}
PUBLICIPV4_HTTP_PROVIDERS: {{ include "ddns.getPublicIpProviders" (dict "providerList" .Values.ddnsConfig.publicIpv4HttpProviders) }}
PUBLICIPV6_HTTP_PROVIDERS: {{ include "ddns.getPublicIpProviders" (dict "providerList" .Values.ddnsConfig.publicIpv6HttpProviders) }}
PUBLICIP_FETCHERS: {{ include "ddns.getPublicIpProviders" (dict "providerList" .Values.ddnsConfig.publicIpFetchers) }}
{{ $config := include "ddns.generateConfig" $ | fromYaml }}
CONFIG: {{ $config | toJson | quote }}
{{- end -}}
{{- define "ddns.getPublicIpProviders" -}}
{{- $providerList := .providerList -}}
{{- $return := list -}}
{{- range $providerList -}}
{{- if eq .provider "custom" -}}
{{- $return = append $return .custom -}}
{{- else -}}
{{- $return = append $return .provider -}}
{{- end -}}
{{- end -}}
{{- join "," $return -}}
{{- end -}}
{{/* Generates configuration in yaml
and then it gets converted to single line
JSON and passed as an env variable
*/}}
{{- define "ddns.generateConfig" -}}
{{- if not .Values.ddnsConfig.config -}}
{{- fail "DDNS Updater - Expected at least 1 item in DNS Provider COnfiguration" -}}
{{- end -}}
{{- $providers := (list "aliyun" "allinkl" "cloudflare" "dd24" "ddnss" "digitalocean"
"dnsomatic" "dnspod" "dondominio" "dreamhost" "duckdns" "dyn"
"dynu" "dynv6" "freedns" "gandi" "gcp" "godaddy" "google" "he"
"infomaniak" "inwx" "linode" "luadns" "namecheap" "njalla" "noip"
"opendns" "ovh" "porkbun" "selfhost.de" "servercow" "spdyn"
"strato" "variomedia") }}
settings:
{{- range $item := .Values.ddnsConfig.config -}}
{{- if not (mustHas $item.provider $providers) -}}
{{- fail (printf "DDNS Updater - DNS Provider [%v] is not supported" $item.provider) -}}
{{- end }}
- provider: {{ $item.provider }}
host: {{ $item.host | required (printf "DDNS Updater - Expected non-empty [Host] for %v provider" $item.provider) | quote }}
domain: {{ $item.domain | required (printf "DDNS Updater - Expected non-empty [Domain] for %v provider" $item.provider) | quote }}
ip_version: {{ $item.ipVersion | default "" | quote }}
{{- include (printf "ddns.config.%v" $item.provider) (dict "item" $item) | trim | nindent 4 -}}
{{- end -}}
{{- end -}}
{{/* TODO: OVH */}}

View File

@@ -0,0 +1,85 @@
{{- define "ddns.workload" -}}
workload:
ddns:
enabled: true
primary: true
type: Deployment
podSpec:
hostNetwork: {{ .Values.ddnsNetwork.hostNetwork }}
containers:
ddns:
enabled: true
primary: true
imageSelector: image
securityContext:
runAsUser: {{ .Values.ddnsRunAs.user }}
runAsGroup: {{ .Values.ddnsRunAs.group }}
env:
LISTENING_PORT: {{ .Values.ddnsNetwork.webPort }}
DATADIR: /updater/data
BACKUP_DIRECTORY: /updater/data
envFrom:
- configMapRef:
name: ddns-config
envList:
{{ with .Values.ddnsConfig.additionalEnvs }}
{{ range $env := . }}
- name: {{ $env.name }}
value: {{ $env.value }}
{{ end }}
{{ end }}
probes:
liveness:
enabled: {{ not .Values.ci }}
type: exec
command:
- /updater/app
- healthcheck
readiness:
enabled: {{ not .Values.ci }}
type: exec
command:
- /updater/app
- healthcheck
startup:
enabled: {{ not .Values.ci }}
type: exec
command:
- /updater/app
- healthcheck
initContainers:
{{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions"
"UID" .Values.ddnsRunAs.user
"GID" .Values.ddnsRunAs.group
"mode" "check"
"type" "init") | nindent 8 }}
{{/* Service */}}
service:
ddns:
enabled: true
primary: true
type: NodePort
targetSelector: ddns
ports:
webui:
enabled: true
primary: true
port: {{ .Values.ddnsNetwork.webPort }}
nodePort: {{ .Values.ddnsNetwork.webPort }}
targetSelector: ddns
{{/* Persistence */}}
persistence:
data:
enabled: true
type: {{ .Values.ddnsStorage.data.type }}
datasetName: {{ .Values.ddnsStorage.data.datasetName | default "" }}
hostPath: {{ .Values.ddnsStorage.data.hostPath | default "" }}
targetSelector:
ddns:
ddns:
mountPath: /updater/data
01-permissions:
mountPath: /mnt/directories/data
{{- end -}}

View File

@@ -0,0 +1,12 @@
{{- define "ddns.portal" -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: portal
data:
path: "/"
port: {{ .Values.ddnsNetwork.webPort | quote }}
protocol: http
host: $node_ip
{{- end -}}

View File

@@ -0,0 +1,56 @@
{{- define "ddns.validation" -}}
{{- include "ddns.validatePublicIpProviders" (dict "text" "Public IP DNS Providers"
"list" .Values.ddnsConfig.publicIpDnsProviders
"valid" (list "all" "cloudflare" "google")) -}}
{{- include "ddns.validatePublicIpProviders" (dict "text" "Public IP HTTP Providers"
"list" .Values.ddnsConfig.publicIpHttpProviders
"valid" (list "all" "custom" "opendns" "ifconfig" "ipinfo" "ddnss" "google")) -}}
{{- include "ddns.validatePublicIpProviders" (dict "text" "Public IPv4 HTTP Providers"
"list" .Values.ddnsConfig.publicIpv4HttpProviders
"valid" (list "all" "custom" "ipify" "noip")) -}}
{{- include "ddns.validatePublicIpProviders" (dict "text" "Public IPv6 HTTP Providers"
"list" .Values.ddnsConfig.publicIpv6HttpProviders
"valid" (list "all" "custom" "ipify" "noip")) -}}
{{- include "ddns.validatePublicIpProviders" (dict "text" "Public IP Fetchers"
"list" .Values.ddnsConfig.publicIpFetchers
"valid" (list "all" "http" "dns")) -}}
{{- end -}}
{{- define "ddns.validatePublicIpProviders" -}}
{{- $text := .text -}}
{{- $list := .list -}}
{{- $valid := .valid -}}
{{- $type := .type -}}
{{- if not $list -}}
{{- fail (printf "DDNS Updater - Expected non-empty [%v]" $text) -}}
{{- end -}}
{{- $userProviders := list -}}
{{- range $list -}}
{{- if mustHas .provider $userProviders -}}
{{- fail (printf "DDNS Updater - Expected unique values in [%v], but got [%v] more than once" $text .provider) -}}
{{- end -}}
{{- $userProviders = mustAppend $userProviders .provider -}}
{{- if not (mustHas .provider $valid) -}}
{{- fail (printf "DDNS Updater - [%v] valid values are [%v], but got [%v]" $text (join ", " $valid) .provider) -}}
{{- end -}}
{{- if eq .provider "all" -}}
{{- if ne (len $list) 1 -}}
{{- fail (printf "DDNS Updater - [%v] cannot contain other values when [all] is selected" $text) -}}
{{- end -}}
{{- end -}}
{{- if eq .provider "custom" -}}
{{- if not .custom -}}
{{- fail (printf "DDNS Updater - [%v] expected non-empty [Custom Value]" $text) -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}

View File

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

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/aliyun.md */}}
{{- define "ddns.config.aliyun" -}}
{{- $item := .item }}
access_key_id: {{ $item.aliyunAccessKey | required "DDNS Updater - Expected non-empty [Access Key] for Aliyun provider" }}
access_secret: {{ $item.aliyunSecret | required "DDNS Updater - Expected non-empty [Secret] for Aliyun provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: aliyun - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
aliyunAccessKey: key - Required
aliyunSecret: secret - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/allinkl.md */}}
{{- define "ddns.config.allinkl" -}}
{{- $item := .item }}
username: {{ $item.allinklUsername | required "DDNS Updater - Expected non-empty [Username] for All-Inkl provider" }}
password: {{ $item.allinklPassword | required "DDNS Updater - Expected non-empty [Password] for All-Inkl provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: allinkl - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
allinklUsername: user - Required
allinklPassword: password - Required
*/}}

View File

@@ -0,0 +1,39 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/cloudflare.md */}}
{{- define "ddns.config.cloudflare" -}}
{{- $item := .item }}
zone_identifier: {{ $item.cloudflareZoneID | required "DDNS Updater - Expected non-empty [Zone Identifier] for Cloudflare provider" }}
ttl: {{ $item.cloudflareTtl | required "DDNS Updater - Expected non-empty [TTL] for Cloudflare provider" }}
proxied: {{ $item.cloudflareProxied | default false }}
{{- if $item.cloudflareToken }}
token: {{ $item.cloudflareToken }}
{{- else if $item.cloudflareUserServiceKey }}
user_service_key: {{ $item.cloudflareUserServiceKey }}
{{- else if and $item.cloudflareEmail $item.cloudflareApiKey }}
email: {{ $item.cloudflareEmail }}
api_key: {{ $item.cloudflareApiKey }}
{{- else -}}
{{- fail "DDNS Updater - Cloudflare provider requires either [Token] or [User Service Key] or [Email and API Key]" -}}
{{- end -}}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: cloudflare - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@")
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
cloudflareZoneID: id - Required
cloudflareTtl: 1 - Required - Valid values (>=1)
cloudflareProxied: false - Required - Valid values (true/false)
# One of the following is required
# Token
cloudflareToken: token - Required
# User service key
cloudflareUserServiceKey: user_service_key - Required
# Email and API key
cloudflareEmail: email - Required
cloudflareApiKey: api_key - Required
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dd24.md */}}
{{- define "ddns.config.dd24" -}}
{{- $item := .item }}
password: {{ $item.dd24Password | required "DDNS Updater - Expected non-empty [Password] for dd24 provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dd24 - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dd24Password: pass - Required
*/}}

View File

@@ -0,0 +1,22 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/ddnss.md */}}
{{- define "ddns.config.ddnss" -}}
{{- $item := .item }}
username: {{ $item.ddnssUsername | required "DDNS Updater - Expected non-empty [Username] for DDNSS provider" }}
password: {{ $item.ddnssPassword | required "DDNS Updater - Expected non-empty [Password] for DDNSS provider" }}
provider_ip: {{ $item.ddnssProviderIP }}
{{- if not $item.ddnssProviderIP }}
dual_stack: {{ $item.ddnssDualStack | default false }}
{{- end -}}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: ddnss - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
ddnssUsername: user - Required
ddnssPassword: password - Required
ddnssProviderIP: true - Required - Valid values (true/false)
ddnssDualStack: false - Optional - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/digitalocean.md */}}
{{- define "ddns.config.digitalocean" -}}
{{- $item := .item }}
token: {{ $item.digitalOceanToken | required "DDNS Updater - Expected non-empty [Token] for Digital Ocean provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: digitalocean - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
digitalOceanToken: token - Required
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dnspod.md */}}
{{- define "ddns.config.dnspod" -}}
{{- $item := .item }}
token: {{ $item.dnsPodToken | required "DDNS Updater - Expected non-empty [Token] for DNS Pod provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dnspod - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dnsPodToken: token - Required
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dnsomatic.md */}}
{{- define "ddns.config.dnsomatic" -}}
{{- $item := .item }}
username: {{ $item.dnsOMaticUsername | required "DDNS Updater - Expected non-empty [Username] for DNS O Matic provider" }}
password: {{ $item.dnsOMaticPassword | required "DDNS Updater - Expected non-empty [Password] for DNS O Matic provider" }}
provider_ip: {{ $item.dnsOMaticProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dnsomatic - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dnsOMaticUsername: user - Required
dnsOMaticPassword: pass - Required
dnsOMaticProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dondominio.md */}}
{{- define "ddns.config.dondominio" -}}
{{- $item := .item }}
username: {{ $item.donDominioUsername | required "DDNS Updater - Expected non-empty [Username] for Don Dominio provider" }}
password: {{ $item.donDominioPassword | required "DDNS Updater - Expected non-empty [Password] for Don Dominio provider" }}
name: {{ $item.donDominioName | required "DDNS Updater - Expected non-empty [Name] for Don Dominio provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dondominio - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
donDominioUsername: user - Required
donDominioPassword: pass - Required
donDominioName: name - Required
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dreamhost.md */}}
{{- define "ddns.config.dreamhost" -}}
{{- $item := .item }}
key: {{ $item.dreamHostKey | required "DDNS Updater - Expected non-empty [Key] for Dreamhost provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dreamhost - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dreamHostKey: key - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/duckdns.md */}}
{{- define "ddns.config.duckdns" -}}
{{- $item := .item }}
token: {{ $item.duckdnsToken | required "DDNS Updater - Expected non-empty [Token] for DuckDNS provider" }}
provider_ip: {{ $item.duckdnsProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: duckdns - Required
domain: "example.com" - Required
host: "subdomain" - Required - Valid value (subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
duckdnsToken: token - Required
duckdnsProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/d-updater/blob/master/docs/dyndns.md */}}
{{- define "ddns.config.dyn" -}}
{{- $item := .item }}
client_key: {{ $item.dynClientKey | required "DDNS Updater - Expected non-empty [Client Key] for DynDNS provider" }}
username: {{ $item.dynUsername | required "DDNS Updater - Expected non-empty [Username] for DynDNS provider" }}
provider_ip: {{ $item.dynProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dyn - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dynClientKey: key - Required
dynUsername: username - Required
dynProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,22 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dynu.md */}}
{{- define "ddns.config.dynu" -}}
{{- $item := .item }}
username: {{ $item.dynuUsername | required "DDNS Updater - Expected non-empty [Username] for Dynu provider" }}
password: {{ $item.dynuPassword | required "DDNS Updater - Expected non-empty [Password] for Dynu provider" }}
{{- if $item.dynuGroup }}
group: {{ $item.dynuGroup }}
{{- end }}
provider_ip: {{ $item.dynuProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dynu - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dynuUsername: username - Required
dynuPassword: password - Required
dynuGroup: group - Optional
dynuProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/dynv6.md */}}
{{- define "ddns.config.dynv6" -}}
{{- $item := .item }}
token: {{ $item.dynv6Token | required "DDNS Updater - Expected non-empty [Token] for DynV6 provider" }}
provider_ip: {{ $item.dynv6ProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: dynu - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
dynv6Token: token - Required
dynv6ProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/freedns.md */}}
{{- define "ddns.config.freedns" -}}
{{- $item := .item }}
token: {{ $item.freeDnsToken | required "DDNS Updater - Expected non-empty [Token] for FreeDNS provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: freedns - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
freeDnsToken: token - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/gandi.md */}}
{{- define "ddns.config.gandi" -}}
{{- $item := .item }}
key: {{ $item.gandiKey | required "DDNS Updater - Expected non-empty [Key] for Gandi provider" }}
ttl: {{ $item.gandiTtl | required "DDNS Updater - Expected non-empty [TTL] for Gandi provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: gandi - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
gandiKey: key - Required
gandiTtl: 3600 - Required
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/gcp.md */}}
{{- define "ddns.config.gcp" -}}
{{- $item := .item }}
project: {{ $item.gcpProject | required "DDNS Updater - Expected non-empty [Project] for GCP provider" }}
zone: {{ $item.gcpZone | required "DDNS Updater - Expected non-empty [Zone] for GCP provider" }}
credentials: {{ $item.gcpCredentials | required "DDNS Updater - Expected non-empty [Credentials] for GCP provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: gcp - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
gcpProject: my-project-id - Required
gcpZone: my-zone - Required
gcpCredentials: '{"type": "service_account", ...}' - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/godaddy.md */}}
{{- define "ddns.config.godaddy" -}}
{{- $item := .item }}
key: {{ $item.godaddyKey | required "DDNS Updater - Expected non-empty [Key] for GoDaddy provider" }}
secret: {{ $item.godaddySecret | required "DDNS Updater - Expected non-empty [TTL] for GoDaddy provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: godaddy - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
godaddyKey: key - Required
godaddySecret: secret - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/google.md */}}
{{- define "ddns.config.google" -}}
{{- $item := .item }}
username: {{ $item.googleUsername | required "DDNS Updater - Expected non-empty [Username] for Google provider" }}
password: {{ $item.googlePassword | required "DDNS Updater - Expected non-empty [Password] for Google provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: google - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
googleUsername: username - Required
googlePassword: password - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/he.net.md */}}
{{- define "ddns.config.he" -}}
{{- $item := .item }}
password: {{ $item.hePassword | required "DDNS Updater - Expected non-empty [Password] for He.net provider" }}
provider_ip: {{ $item.heProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: he - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
hePassword: password - Required
heProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/infomaniak.md */}}
{{- define "ddns.config.infomaniak" -}}
{{- $item := .item }}
username: {{ $item.infomaniakUsername | required "DDNS Updater - Expected non-empty [Username] for Infomaniak provider" }}
password: {{ $item.infomaniakPassword | required "DDNS Updater - Expected non-empty [Password] for Infomaniak provider" }}
provider_ip: {{ $item.infomaniakProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: infomaniak - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
infomaniakUsername: user - Required
infomaniakPassword: password - Required
infomaniakProviderIP: true - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/inwx.md */}}
{{- define "ddns.config.inwx" -}}
{{- $item := .item }}
username: {{ $item.inwxUsername | required "DDNS Updater - Expected non-empty [Username] for INWX provider" }}
password: {{ $item.inwxPassword | required "DDNS Updater - Expected non-empty [Password] for INWX provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: inwx - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
inwxUsername: user - Required
inwxPassword: password - Required
*/}}

View File

@@ -0,0 +1,14 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/linode.md */}}
{{- define "ddns.config.linode" -}}
{{- $item := .item }}
token: {{ $item.linodeToken | required "DDNS Updater - Expected non-empty [Token] for Linode provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: linode - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
linodeToken: token - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/luadns.md */}}
{{- define "ddns.config.luadns" -}}
{{- $item := .item }}
token: {{ $item.luadnsToken | required "DDNS Updater - Expected non-empty [Token] for LuaDNS provider" }}
email: {{ $item.luadnsEmail | required "DDNS Updater - Expected non-empty [Email] for LuaDNS provider" }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: luadns - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
luadnsToken: token - Required
luadnsEmail: email@example.com - Required
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/namecheap.md */}}
{{- define "ddns.config.namecheap" -}}
{{- $item := .item }}
password: {{ $item.namecheapPassword | required "DDNS Updater - Expected non-empty [Password] for Namecheap provider" }}
provider_ip: {{ $item.namecheapProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: namecheap - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
namecheapPassword: password - Required
namecheapProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/njalla.md */}}
{{- define "ddns.config.njalla" -}}
{{- $item := .item }}
key: {{ $item.njallaKey | required "DDNS Updater - Expected non-empty [Key] for Njalla provider" }}
provider_ip: {{ $item.njallaProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: njalla - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
njallaKey: key - Required
njallaProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/noip.md */}}
{{- define "ddns.config.noip" -}}
{{- $item := .item }}
username: {{ $item.noipUsername | required "DDNS Updater - Expected non-empty [Username] for NoIP provider" }}
password: {{ $item.noipPassword | required "DDNS Updater - Expected non-empty [Password] for NoIP provider" }}
provider_ip: {{ $item.noipProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: noip - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
noipUsername: username - Required
noipPassword: password - Required
noipProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/opendns.md */}}
{{- define "ddns.config.opendns" -}}
{{- $item := .item }}
username: {{ $item.opendnsUsername | required "DDNS Updater - Expected non-empty [Username] for OpenDNS provider" }}
password: {{ $item.opendnsPassword | required "DDNS Updater - Expected non-empty [Password] for OpenDNS provider" }}
provider_ip: {{ $item.opendnsProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: opendns - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
opendnsUsername: username - Required
opendnsPassword: password - Required
opendnsProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,38 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/ovh.md */}}
{{- define "ddns.config.ovh" -}}
{{- $item := .item }}
mode: {{ $item.ovhMode | required "DDNS Updater - Expected non-empty [Mode] for OVH provider" }}
{{- if eq $item.ovhMode "dynamic" }}
username: {{ $item.ovhUsername | required "DDNS Updater - Expected non-empty [Username] for OVH provider on [dynamic] mode" }}
password: {{ $item.ovhPassword | required "DDNS Updater - Expected non-empty [Password] for OVH provider on [dynamic] mode" }}
{{- else if eq $item.ovhMode "api" }}
api_endpoint: {{ $item.ovhApiEndpoint | required "DDNS Updater - Expected non-empty [API Endpoint] for OVH provider on [api] mode" }}
app_key: {{ $item.ovhAppKey | required "DDNS Updater - Expected non-empty [App Key] for OVH provider on [api] mode" }}
app_secret: {{ $item.ovhAppSecret | required "DDNS Updater - Expected non-empty [App Secret] for OVH provider on [api] mode"}}
consumer_key: {{ $item.ovhConsumerKey | required "DDNS Updater - Expected non-empty [Consumer Key] for OVH provider on [api] mode" }}
{{- else -}}
{{- fail (printf "DDNS Updater - Expected [Mode] to be one of [Dynamic, API], but got [%v]" $item.ovhMode) -}}
{{- end }}
provider_ip: {{ $item.ovhProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: ovh - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
ovhMode: dynamic - Required - Valid values (dynami/api)
# Dynamic Mode
ovhUsername: username - Required
ovhPassword: password - Required
# API Mode
ovhApiEndpoint: endpoint - Required
ovhAppKey: appKey - Required
ovhAppSecret: appSecret - Required
ovhConsumerKey: consumerKey - Required
ovhProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,20 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/porkbun.md */}}
{{- define "ddns.config.porkbun" -}}
{{- $item := .item }}
api_key: {{ $item.porkbunApiKey | required "DDNS Updater - Expected non-empty [API Key] for Porkbun provider" }}
secret_api_key: {{ $item.porkbunSecretApiKey | required "DDNS Updater - Expected non-empty [Secret API Key] for Porkbun provider" }}
{{- if $item.porkbunTtl }}
ttl: {{ $item.porkbunTtl }}
{{- end }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: opendns - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
porkbunApiKey: apikey - Required
porkbunSecretApiKey: secretapikey - Required
porkbunTtl: 300 - Optional
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/selfhost.de.md */}}
{{- define "ddns.config.selfhost.de" -}}
{{- $item := .item }}
username: {{ $item.selfhostdeUsername | required "DDNS Updater - Expected non-empty [Username] for Selfhost.de provider" }}
password: {{ $item.selfhostdePassword | required "DDNS Updater - Expected non-empty [Password] for Selfhost.de provider" }}
provider_ip: {{ $item.selfhostdeProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: selfhosted.de - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
selfhostdeUsername: username - Required
selfhostdePassword: password - Required
selfhostdeProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,20 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/servercow.md */}}
{{- define "ddns.config.servercow" -}}
{{- $item := .item }}
username: {{ $item.servercowUsername | required "DDNS Updater - Expected non-empty [Username] for Servercow provider" }}
password: {{ $item.servercowPassword | required "DDNS Updater - Expected non-empty [Password] for Servercow provider" }}
ttl: {{ $item.servercowTtl | required "DDNS Updater - Expected non-empty [TTL] for Servercow provider" }}
provider_ip: {{ $item.servercowProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: servercow - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
servercowUsername: username - Required
servercowPassword: password - Required
servercowTtl: 120 - Required
servercowProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,30 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/spdyn.md */}}
{{- define "ddns.config.spdyn" -}}
{{- $item := .item }}
{{- if $item.spdynToken }}
token: {{ $item.spdynToken }}
{{- else if and $item.spdynUsername $item.spdynPassword }}
username: {{ $item.spdynUsername }}
password: {{ $item.spdynPassword }}
{{- else -}}
{{- fail "DDNS Updater - Spdyn.de provider requires either [Token] or [Username and Password]" -}}
{{- end }}
provider_ip: {{ $item.spdynProviderIP | default false }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: spdyn - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@")
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
spdynProviderIP: false - Required - Valid values (true/false)
# One of the following is required
# Token
spdynToken: token
# Username and Password
spdynUsername: username
spdynPassword: password
*/}}

View File

@@ -0,0 +1,16 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/strato.md */}}
{{- define "ddns.config.strato" -}}
{{- $item := .item }}
password: {{ $item.stratoPassword | required "DDNS Updater - Expected non-empty [Password] for Strato provider" }}
provider_ip: {{ $item.stratoProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: strato - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
stratoPassword: password - Required
stratoProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,18 @@
{{/* https://github.com/qdm12/ddns-updater/blob/master/docs/variomedia.md */}}
{{- define "ddns.config.variomedia" -}}
{{- $item := .item }}
password: {{ $item.variomediaPassword | required "DDNS Updater - Expected non-empty [Password] for Variomedia provider" }}
email: {{ $item.variomediaEmail | required "DDNS Updater - Expected non-empty [Email] for Variomedia provider" }}
provider_ip: {{ $item.variomediaProviderIP }}
{{- end -}}
{{/*
ddnsConfig:
config:
- provider: strato - Required
domain: "example.com" - Required
host: "@" - Required - Valid value ("@" or subdomain)
ipVersion: "" - Required - Valid values (ipv4/ipv6/"")
variomediaPassword: password - Required
variomediaEmail: email - Required
variomediaProviderIP: false - Required - Valid values (true/false)
*/}}

View File

@@ -0,0 +1,31 @@
#!/usr/bin/python3
import json
import re
import sys
from catalog_update.upgrade_strategy import semantic_versioning
RE_STABLE_VERSION = re.compile(r'latest')
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)))

View File

@@ -0,0 +1,6 @@
icon_url: https://raw.githubusercontent.com/qdm12/ddns-updater/master/readme/ddnsgopher.svg
categories:
- network
tags:
- ddns
- ddns-updater