add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
#!/bin/bash
# vim: set ft=sh :
set -ue
if [ $0 == './update' ]; then
SRV=$(pwd)
OPT=./opt
else
SRV=${SRV:-/srv/dns}
OPT=${SRV:-/srv/dns/opt}
cd $SRV
fi
# charset for files under etc/
CHARSET='utf-8'
# External bins
NAMED_CHECKZONE=/usr/sbin/named-checkzone
DHCPD=/usr/sbin/dhcpd
DHCPD_CONF=/etc/dhcp/dhcpd.conf
DHCPD_INIT=/etc/init.d/isc-dhcp-server
HG=/usr/bin/hg
HG_ARGS=(--config trusted.users=root)
RNDC=/usr/sbin/rndc
RNDC_KEY=/etc/bind/rndc.key
# Library includes
source lib/update
## Flags
# set by do_reload_zone if zone data has actually been reloaded
RELOAD_ZONES=
## Site settings, used as arguments to scripts
# Origin domain to generate reverse records for in --reverse-zone
REVERSE_DOMAIN=paivola.fi
## Do things
function run_hosts {
# test
log "Testing hosts..."
for hosts in $(list_files etc/hosts); do
log_warn "TODO: check_hosts $hosts"
done
log "Updating forward host zones..."
for hosts in $(list_files etc/hosts); do
update_hosts_forward "var/zones/hosts/$hosts" "$hosts" \
"etc/hosts/$hosts"
done
log "Updating DHCP hosts..."
for hosts in $(list_files etc/hosts); do
update_hosts_dhcp "var/dhcp/$hosts.conf" \
"etc/hosts/$hosts"
done
log "Updating reverse host zones..."
for zone in $(list_dirs etc/reverse-zones-hosts); do
update_hosts_reverse "var/zones/hosts/$zone" "$zone" \
etc/reverse-zones-hosts/$zone/*
done
# for zone in $(list_files etc/zones); do
# for reverse_hosts in $(zone_includes_grep var/include-cache/$zone etc/zones/$zone reverse-hosts/); do
# prefix="${reverse_hosts%_*}"
# hosts="${reverse_hosts#*_}"
#
# update_hosts_reverse "var/zones/reverse-hosts/${prefix}_${hosts}" "$prefix" \
# "etc/hosts/$hosts"
# done
# done
}
function run_zones {
log "Copying zone includes..."
for zone in $(list_files etc/zones/includes); do
copy "var/zones/includes/$zone" "etc/zones/includes/$zone"
done
log "Updating zone serials..."
for zone in $(list_files etc/zones); do
update_serial "var/serials/$zone" "etc/zones/$zone" \
$(zone_includes var/include-cache/$zone etc/zones/$zone var/zones/)
done
log "Updating zones..."
for zone in $(list_files etc/zones); do
update_zone "var/zones/$zone" "etc/zones/$zone" "var/serials/$zone"
done
log "Testing zones..."
for zone in $(list_files etc/zones); do
# check_zone var/zones/$zone $zone
log_warn "TODO: check_zone $zone"
done
}
function run_deploy {
log "Reload zones..."
reload_zones
log "Reload dhcp..."
reload_dhcp
log "Commit etc..."
commit_data etc
}
## Main entry point
function main {
parse_args "$@"
## Input dirs
for dir in etc etc/zones etc/hosts opt; do
[ -d $dir ] || die "Missing directory: $dir"
done
## Output dirs
for dir in var var/dhcp var/zones var/serials var/include-cache; do
ensure_dir $dir
done
# sub-$ZONES
for dir in var/zones/includes var/zones/hosts var/zones/reverse-hosts; do
ensure_dir $dir
done
## Go
run_hosts
run_zones
run_deploy
}
main "$@"