86 lines
2.2 KiB
YAML
86 lines
2.2 KiB
YAML
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: ddns
|
|
---
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: he-ddns-secrets
|
|
namespace: ddns
|
|
type: Opaque
|
|
stringData:
|
|
# FQDN,clé_DDNS (une ligne par host marqué "dynamic" sur dns.he.net)
|
|
hosts.csv: |
|
|
undercloud.dev,fIHrC4yqYmnlLFBG
|
|
firewall.undercloud.dev,JmcqpomJT6CZtbuP
|
|
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: he-ddns-script
|
|
namespace: ddns
|
|
data:
|
|
update.sh: |
|
|
#!/bin/sh
|
|
set -eu
|
|
|
|
# Get public IPv4 once
|
|
V4="$(curl -4 -fsS --max-time 5 https://ipv4.icanhazip.com || true)"
|
|
[ -n "${V4:-}" ] || { echo "no IPv4 detected"; exit 0; }
|
|
|
|
while IFS=, read -r HOST PASS; do
|
|
# trim spaces and skip blanks/comments
|
|
HOST="$(printf %s "$HOST" | tr -d ' \t\r')"
|
|
PASS="$(printf %s "$PASS" | tr -d ' \t\r')"
|
|
case "$HOST" in ''|\#*) continue;; esac
|
|
[ -n "$PASS" ] || { echo "skip $HOST: empty key" >&2; continue; }
|
|
|
|
RESP="$(curl -4 -fsS --connect-timeout 5 --retry 2 --retry-connrefused \
|
|
-A 'he-ddns/1.0' \
|
|
https://dyn.dns.he.net/nic/update \
|
|
-d "hostname=$HOST" -d "password=$PASS" -d "myip=$V4" || echo 'curlfail')"
|
|
|
|
echo "$HOST -> $RESP"
|
|
done < /secrets/hosts.csv
|
|
|
|
---
|
|
apiVersion: batch/v1
|
|
kind: CronJob
|
|
metadata:
|
|
name: he-ddns
|
|
namespace: ddns
|
|
spec:
|
|
schedule: "*/5 * * * *"
|
|
concurrencyPolicy: Forbid
|
|
successfulJobsHistoryLimit: 1
|
|
failedJobsHistoryLimit: 3
|
|
jobTemplate:
|
|
spec:
|
|
template:
|
|
spec:
|
|
restartPolicy: OnFailure
|
|
containers:
|
|
- name: updater
|
|
image: curlimages/curl
|
|
env:
|
|
- name: IPV6_ONLY
|
|
value: "1" # mets "0" pour IPv4+IPv6
|
|
command: ["/bin/sh","-c","/scripts/update.sh"]
|
|
volumeMounts:
|
|
- name: secrets
|
|
mountPath: /secrets
|
|
readOnly: true
|
|
- name: script
|
|
mountPath: /scripts
|
|
readOnly: true
|
|
volumes:
|
|
- name: secrets
|
|
secret:
|
|
secretName: he-ddns-secrets
|
|
- name: script
|
|
configMap:
|
|
name: he-ddns-script
|
|
defaultMode: 0755
|
|
|