You've already forked directdnsonly
Adds optional peer-to-peer zone_data replication between directdnsonly instances. Enables eventual consistency in DA Multi-Server topologies without a shared datastore. - InternalAPI: GET /internal/zones (list) and ?domain= (detail) exposes zone_data to peers via existing basic auth - PeerSyncWorker: interval-based daemon thread that fetches zone_data from configured peers, storing newer entries locally; peer downtime is silently skipped and retried next interval - WorkerManager: wires PeerSyncWorker alongside reconciler; exposes peer_syncer_alive in queue_status - Config: peer_sync block with enabled/interval_minutes/peers[] - Tests: 13 tests covering sync, skip-older, skip-unreachable, empty peer list, bad status, and missing zone_data scenarios
70 lines
2.1 KiB
YAML
70 lines
2.1 KiB
YAML
---
|
|
timezone: Pacific/Auckland
|
|
log_level: INFO
|
|
queue_location: ./data/queues
|
|
|
|
app:
|
|
auth_username: directdnsonly
|
|
auth_password: changeme # Override via DADNS_APP_AUTH_PASSWORD env var
|
|
|
|
# Reconciliation poller — queries each DA server and removes orphaned zones
|
|
# Disabled by default. Only touches zones registered via DaDNS (in our DB).
|
|
# If a DA server is unreachable, that server is skipped entirely.
|
|
#reconciliation:
|
|
# enabled: true
|
|
# dry_run: true # log orphans but do NOT queue deletes — safe first-run mode
|
|
# interval_minutes: 60
|
|
# initial_delay_minutes: 0 # stagger first run when running multiple receivers behind a LB
|
|
# # e.g. receiver-1: 0, receiver-2: 30 (half the interval)
|
|
# verify_ssl: true # set false for self-signed DA certs
|
|
# ipp: 1000 # items per page when polling DA (default 1000)
|
|
# directadmin_servers:
|
|
# - hostname: da1.example.com
|
|
# port: 2222
|
|
# username: admin
|
|
# password: secret
|
|
# ssl: true
|
|
# - hostname: da2.example.com
|
|
# port: 2222
|
|
# username: admin
|
|
# password: secret
|
|
# ssl: true
|
|
|
|
# Peer sync — exchange zone_data between directdnsonly instances
|
|
# Enables eventual consistency without a shared datastore.
|
|
# If a peer is offline, the sync is silently skipped and retried next interval.
|
|
# Use the same credentials as the peer's app.auth_username / auth_password.
|
|
#peer_sync:
|
|
# enabled: true
|
|
# interval_minutes: 15
|
|
# peers:
|
|
# - url: http://ddo-2:2222 # URL of the peer directdnsonly instance
|
|
# username: directdnsonly
|
|
# password: changeme
|
|
|
|
dns:
|
|
default_backend: bind
|
|
backends:
|
|
bind:
|
|
type: bind
|
|
enabled: true
|
|
zones_dir: ./data/zones
|
|
named_conf: ./data/named.conf.include
|
|
coredns_dc1:
|
|
type: coredns_mysql
|
|
enabled: true
|
|
host: "mysql-dc1"
|
|
port: 3306
|
|
database: "coredns"
|
|
username: "coredns"
|
|
password: "coredns123"
|
|
table_name: "records"
|
|
coredns_dc2:
|
|
type: coredns_mysql
|
|
enabled: true
|
|
host: "mysql-dc2"
|
|
port: 3306
|
|
database: "coredns"
|
|
username: "coredns"
|
|
password: "coredns123"
|
|
table_name: "records" |