mirror of
https://codeberg.org/shm0rt/ddns-pdns-updater.git
synced 2025-07-30 13:58:06 +02:00
init
This commit is contained in:
parent
fda7113382
commit
768bcb7817
4 changed files with 212 additions and 20 deletions
158
ddns-updater.sh
Normal file
158
ddns-updater.sh
Normal file
|
@ -0,0 +1,158 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# FUNCTIONS (Must be defined before use!)
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
show_help() {
|
||||
cat << EOF
|
||||
update-ddns - Dynamic DNS updater for PowerDNS and Infomaniak
|
||||
|
||||
USAGE:
|
||||
update-ddns [OPTIONS]
|
||||
|
||||
OPTIONS:
|
||||
-h, --help Show this help message
|
||||
-v, --verbose Enable verbose output (debug messages)
|
||||
-f, --force Force update even if IP hasn't changed
|
||||
--config-file FILE Use custom config file (default: /etc/update-ddns.conf)
|
||||
--list-changes
|
||||
|
||||
FILES:
|
||||
/etc/update-ddns.conf Configuration file
|
||||
/var/lib/update-ddns/ State and history files
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
log() {
|
||||
local level="$1"
|
||||
local message="$2"
|
||||
|
||||
case "$level" in
|
||||
"info")
|
||||
echo "[INFO] $message"
|
||||
;;
|
||||
"warning")
|
||||
echo "[WARNING] $message" >&2
|
||||
;;
|
||||
"error")
|
||||
echo "[ERROR] $message" >&2
|
||||
exit 1
|
||||
;;
|
||||
"debug")
|
||||
[ "$VERBOSE" = "1" ] && echo "[DEBUG] $message"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# COMMAND LINE PARSING
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
# Default values
|
||||
VERBOSE=0
|
||||
FORCE=0
|
||||
CONFIG_FILE="/etc/update-ddns.conf"
|
||||
HISTORY_FILE="/var/lib/update-ddns/ip.history"
|
||||
|
||||
# Parse command line arguments
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--help|-h)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
--config-file)
|
||||
shift
|
||||
if [ -z "$1" ]; then
|
||||
log error "--config-file requires a filename"
|
||||
fi
|
||||
CONFIG_FILE="$1"
|
||||
;;
|
||||
--verbose|-v)
|
||||
VERBOSE=1
|
||||
;;
|
||||
--force|-f)
|
||||
FORCE=1
|
||||
;;
|
||||
--list-changes)
|
||||
shift
|
||||
lines="${1:-5}"
|
||||
|
||||
if [ ! -f "$HISTORY_FILE" ]; then
|
||||
log error "History file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate number
|
||||
case "$lines" in
|
||||
''|*[!0-9]*) lines=5 ;;
|
||||
esac
|
||||
|
||||
echo "Last "$lines" IP changes:"
|
||||
tail -n "$lines" "$HISTORY_FILE"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "Use --help or -h for usage information"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# CHECK DEPENDENCIES & FILES
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# cron, curl, wget, pdnsutil, sh, dig
|
||||
# (-v --version)
|
||||
check_dependencies() {
|
||||
|
||||
}
|
||||
check_files() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# CHECK FOR ACCESS DIR AND ACCESS FILES AND CREATE IF NOT CREATED (POPULATE)
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# config
|
||||
# init_function
|
||||
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# IP CHANGE DETECTION
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# check_infomaniak_ip
|
||||
# providers: cloudflare, quad9, google, amazon, opendns, akamai
|
||||
# check_for_ip_change
|
||||
# check_infomaniak_zone
|
||||
# check_pdns_zones
|
||||
check_for_ip_change() {
|
||||
|
||||
}
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# UPDATE IP
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# update_infomaniak_ip
|
||||
# update_infomaniak_zone
|
||||
# update_pdns_zones
|
||||
|
||||
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# MAIN EXECUTION
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
main() {
|
||||
log info "Starting update-ddns"
|
||||
check_dependencies
|
||||
check_files
|
||||
check_for_ip_change
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
main
|
Loading…
Add table
Add a link
Reference in a new issue