2026-02-17 16:12:46 +13:00
|
|
|
---
|
|
|
|
|
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
|
|
|
|
|
|
2026-02-18 07:18:44 +13:00
|
|
|
# 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
|
feat: add test suite, fix backend bugs, remove legacy artifacts 🧪
- Add 73-test suite across conftest, utils, admin API, reconciler, zone parser,
and CoreDNS MySQL backend (all green, ~0.5s)
- Fix zone_exists filter using wrong column name (name → zone_name)
- Fix delete_zone missing dot_fqdn normalization on lookup
- Remove spurious unused `from config import config` in coredns_mysql.py
- Fix config loader to search module-relative path so tests find app.yml
without needing a root-level config/ directory
- Remove legacy v1 Flask prototype (app.py), empty config.json, and
duplicate root config/app.yml
2026-02-18 22:03:04 +13:00
|
|
|
# dry_run: true # log orphans but do NOT queue deletes — safe first-run mode
|
2026-02-18 07:18:44 +13:00
|
|
|
# interval_minutes: 60
|
2026-02-19 15:28:30 +13:00
|
|
|
# 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)
|
2026-02-18 07:18:44 +13:00
|
|
|
# verify_ssl: true # set false for self-signed DA certs
|
feat: add test suite, fix backend bugs, remove legacy artifacts 🧪
- Add 73-test suite across conftest, utils, admin API, reconciler, zone parser,
and CoreDNS MySQL backend (all green, ~0.5s)
- Fix zone_exists filter using wrong column name (name → zone_name)
- Fix delete_zone missing dot_fqdn normalization on lookup
- Remove spurious unused `from config import config` in coredns_mysql.py
- Fix config loader to search module-relative path so tests find app.yml
without needing a root-level config/ directory
- Remove legacy v1 Flask prototype (app.py), empty config.json, and
duplicate root config/app.yml
2026-02-18 22:03:04 +13:00
|
|
|
# ipp: 1000 # items per page when polling DA (default 1000)
|
2026-02-18 07:18:44 +13:00
|
|
|
# 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
|
|
|
|
|
|
2026-02-19 22:16:55 +13:00
|
|
|
# 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
|
|
|
|
|
|
2026-02-17 16:12:46 +13:00
|
|
|
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"
|