Run generic reconciliation in container
This commit is contained in:
+56
-6
@@ -2,17 +2,44 @@
|
||||
set -u
|
||||
|
||||
INTERVAL_MINUTES="${SYNC_INTERVAL:-1}"
|
||||
APPLY_MODE="${DNS_SYNC_APPLY:-false}"
|
||||
STATE_DB="${DNS_SYNC_STATE_DB:-/var/lib/dns-sync/state.sqlite3}"
|
||||
MAX_CHANGES="${DNS_SYNC_MAX_CHANGES:-}"
|
||||
|
||||
case "$INTERVAL_MINUTES" in
|
||||
''|*[!0-9]*)
|
||||
echo "ERROR: SYNC_INTERVAL must be an integer number of minutes" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$INTERVAL_MINUTES" -lt 1 ]; then
|
||||
echo "ERROR: SYNC_INTERVAL must be at least 1 minute" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$(printf '%s' "$APPLY_MODE" | tr '[:upper:]' '[:lower:]')" in
|
||||
1|true|yes|on)
|
||||
APPLY_MODE=true
|
||||
;;
|
||||
0|false|no|off)
|
||||
APPLY_MODE=false
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: DNS_SYNC_APPLY must be true or false" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$MAX_CHANGES" ]; then
|
||||
case "$MAX_CHANGES" in
|
||||
*[!0-9]*)
|
||||
echo "ERROR: DNS_SYNC_MAX_CHANGES must be a non-negative integer" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
INTERVAL_SECONDS=$((INTERVAL_MINUTES * 60))
|
||||
sleep_pid=""
|
||||
|
||||
@@ -21,22 +48,45 @@ shutdown() {
|
||||
[ -z "$sleep_pid" ] || kill "$sleep_pid" 2>/dev/null || true
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap shutdown INT TERM
|
||||
|
||||
run_reconcile() {
|
||||
if [ "$APPLY_MODE" = true ]; then
|
||||
if [ -n "$MAX_CHANGES" ]; then
|
||||
python -m dns_sync reconcile \
|
||||
--state-db "$STATE_DB" \
|
||||
--apply \
|
||||
--max-changes "$MAX_CHANGES"
|
||||
else
|
||||
python -m dns_sync reconcile \
|
||||
--state-db "$STATE_DB" \
|
||||
--apply
|
||||
fi
|
||||
else
|
||||
python -m dns_sync reconcile \
|
||||
--state-db "$STATE_DB"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "DNS sync service started"
|
||||
echo "Sync interval: ${INTERVAL_MINUTES} minute(s)"
|
||||
echo "Source plugin: ${PROXY:-npm}"
|
||||
echo "DNS provider: ${DNS_PROVIDER:-verizon}"
|
||||
echo "Reconciliation mode: $([ "$APPLY_MODE" = true ] && echo APPLY || echo READ-ONLY)"
|
||||
echo "State database: ${STATE_DB}"
|
||||
echo "Enabled plugins: ${ENABLED_PLUGINS:-npm}"
|
||||
echo "External plugin path: ${DNS_SYNC_PLUGIN_PATH:-/plugins}"
|
||||
|
||||
while :; do
|
||||
echo
|
||||
echo "=== DNS sync: $(date -Iseconds) ==="
|
||||
if python -m dns_sync sync; then
|
||||
echo "Sync run completed successfully"
|
||||
echo "=== DNS reconciliation: $(date -Iseconds) ==="
|
||||
|
||||
if run_reconcile; then
|
||||
echo "Reconciliation run completed successfully"
|
||||
else
|
||||
rc=$?
|
||||
echo "ERROR: Sync run failed with exit code ${rc}" >&2
|
||||
echo "ERROR: Reconciliation run failed with exit code ${rc}" >&2
|
||||
fi
|
||||
|
||||
sleep "$INTERVAL_SECONDS" &
|
||||
sleep_pid=$!
|
||||
wait "$sleep_pid" || true
|
||||
|
||||
Reference in New Issue
Block a user