diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2025-09-29 00:53:24 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2025-09-29 00:53:24 +0200 |
| commit | 7c5eae9294994e59a5176eba21093ecd6cdfcf63 (patch) | |
| tree | a3d7d0a34d6e4b9a773cd85b99afc9eca5b5bb9c /templates/usr_local_bin_do_dyndns.sh.j2 | |
| parent | cc1b02f99e457d2a5a440698e9bae1ca30f408e1 (diff) | |
Improve jails
Diffstat (limited to 'templates/usr_local_bin_do_dyndns.sh.j2')
| -rw-r--r-- | templates/usr_local_bin_do_dyndns.sh.j2 | 65 |
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 |
