aboutsummaryrefslogtreecommitdiffstats
path: root/templates/usr_local_bin_do_dyndns.sh.j2
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-09-29 00:53:24 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-09-29 00:53:24 +0200
commit7c5eae9294994e59a5176eba21093ecd6cdfcf63 (patch)
treea3d7d0a34d6e4b9a773cd85b99afc9eca5b5bb9c /templates/usr_local_bin_do_dyndns.sh.j2
parentcc1b02f99e457d2a5a440698e9bae1ca30f408e1 (diff)
Improve jails
Diffstat (limited to 'templates/usr_local_bin_do_dyndns.sh.j2')
-rw-r--r--templates/usr_local_bin_do_dyndns.sh.j265
1 files changed, 28 insertions, 37 deletions
diff --git a/templates/usr_local_bin_do_dyndns.sh.j2 b/templates/usr_local_bin_do_dyndns.sh.j2
index 1b080b7..f23d635 100644
--- a/templates/usr_local_bin_do_dyndns.sh.j2
+++ b/templates/usr_local_bin_do_dyndns.sh.j2
@@ -1,51 +1,42 @@
#!/bin/sh
set -eu
-: "${DO_DYNDNS_DOMAIN:?DO_DYNDNS_DOMAIN must be set}"
-: "${DO_DYNDNS_HOSTNAME:?DO_DYNDNS_HOSTNAME must be set}"
-: "${DO_DYNDNS_IF4:?DO_DYNDNS_IF4 must be set}"
-: "${DO_DYNDNS_INTERVAL:?DO_DYNDNS_INTERVAL must be set}"
-: "${DO_DYNDNS_AUTH_FILE:?DO_DYNDNS_AUTH_FILE must be set}"
+DOMAIN="jan.systems"
+HOSTNAME="pursotin"
+AUTH_FILE="/usr/local/etc/do_dyndns_auth"
+IF4="$(jexec ingress ifconfig epw1b)"
-if [ ! -r "$DO_DYNDNS_AUTH_FILE" ]; then
- echo "[ERROR] Auth file '$DO_DYNDNS_AUTH_FILE' not readable" >&2
- exit 1
-fi
+# END OF CONFIG
+
+info() {
+ echo "$(date) [INFO]" $@
+}
-DOMAIN="$DO_DYNDNS_DOMAIN"
-HOSTNAME="$DO_DYNDNS_HOSTNAME"
-IF4="$DO_DYNDNS_IF4"
-INTERVAL="$DO_DYNDNS_INTERVAL"
+err() {
+ >&2 echo "$(date) [ERROR]" $@
+}
+
+if [ ! -r "$AUTH_FILE" ]; then
+ err "Auth file '$AUTH_FILE' not readable"
+ exit 1
+fi
-while :; do
- IP4=$(ifconfig "$IF4" | awk '/inet / { print $2 }' | head -n1)
- DIGITALOCEAN_TOKEN=$(awk '{$1=$1; print}' "$DO_DYNDNS_AUTH_FILE")
+IP4=$(echo "$IF4" | awk '/inet / { print $2 }' | head -n1)
+DIGITALOCEAN_TOKEN=$(awk '{$1=$1; print}' "$AUTH_FILE")
- echo "[INFO] Updating A record for hostname $HOSTNAME in domain $DOMAIN → $IP4"
+info "Updating A record for hostname $HOSTNAME in domain $DOMAIN → $IP4"
- RECORD_ID=$(curl -s -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
- "https://api.digitalocean.com/v2/domains/$DOMAIN/records?per_page=999999" |
- jq -r ".domain_records[] | select(.type==\"A\" and .name==\"$HOSTNAME\") | .id")
+RECORD_ID=$(curl -s -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
+"https://api.digitalocean.com/v2/domains/$DOMAIN/records?per_page=999999" |
+jq -r ".domain_records[] | select(.type==\"A\" and .name==\"$HOSTNAME\") | .id")
- if [ -n "$RECORD_ID" ]; then
+if [ -n "$RECORD_ID" ]; then
curl -s -X PUT \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"data\":\"$IP4\"}" \
"https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD_ID" > /dev/null
- echo "[INFO] Record $RECORD_ID updated"
- else
- echo "[WARN] No A record found for hostname \"$HOSTNAME\" in domain \"$DOMAIN\". Skipping."
- fi
-
- SLEEP_SEC=$(printf "%s\n" "$INTERVAL" | awk '
- /^[0-9]+s$/ { gsub(/s$/, ""); print $0; exit }
- /^[0-9]+m$/ { gsub(/m$/, ""); print $0 * 60; exit }
- /^[0-9]+h$/ { gsub(/h$/, ""); print $0 * 3600; exit }
- /^[0-9]+d$/ { gsub(/d$/, ""); print $0 * 86400; exit }
- /^[0-9]+$/ { print $0; exit }
- { print "invalid"; exit 1 }
- ')
-
- sleep "$SLEEP_SEC"
-done
+ info "Record $RECORD_ID updated"
+else
+ err "No A record found for hostname \"$HOSTNAME\" in domain \"$DOMAIN\". Skipping."
+fi