Octodns
by @markjr
Manage DNS zones across multiple providers using octoDNS ("DNS as code"). Use when you need to (1) manage DNS records in YAML format, (2) sync DNS zones betw...
1. Install octoDNS
scripts/install.sh
This installs octoDNS core plus the easyDNS provider.
2. Dump existing zone (REQUIRED for existing zones)
If managing an existing zone with records already in DNS:
scripts/dump.sh example.com.
This creates config/example.com.yaml with ALL current records. Skipping this step will delete existing records!
3. Create a config file
scripts/init_config.sh example.com
Creates config/production.yaml with easyDNS provider configured.
4. Define your zone
Create config/example.com.yaml:
---
Root record (@)
'':
ttl: 300
type: A
value: 192.0.2.1www subdomain
www:
ttl: 300
type: CNAME
value: example.com.Mail records
'':
ttl: 300
type: MX
values:
- priority: 10
value: mail.example.com.
5. Preview changes (MANDATORY)
Always preview first - look for unexpected Delete lines:
scripts/sync.sh
(Note: dry-run is the default - no flag needed)
6. Apply changes (only when safe)
scripts/sync.sh --doit
Provider Setup
Edit config/production.yaml:
providers:
config:
class: octodns.provider.yaml.YamlProvider
directory: ./config
easydns:
class: octodns_easydns.EasyDnsProvider
token: env/EASYDNS_TOKEN
api_key: env/EASYDNS_API_KEY
portfolio: env/EASYDNS_PORTFOLIOzones:
example.com:
sources:
- config
targets:
- easydns
Environment Variables
Set these for easyDNS:
export EASYDNS_TOKEN="your-api-token"
export EASYDNS_API_KEY="your-api-key"
export EASYDNS_PORTFOLIO="your-portfolio-id"
"Provider not found": Install provider package:
pip install octodns-easydns
"Authentication failed": Check environment variables are set correctly.
"Zone not found": Ensure zone exists in DNS provider first, or use --force to create.
clawhub install octodns-skill