--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/pvl/hosts/update.sh Thu Feb 26 21:38:09 2015 +0200
@@ -0,0 +1,152 @@
+update_GETOPTS='sSrR'
+
+UPDATE_SERIAL=
+UPDATE_RELOAD=
+
+function update_help {
+ cat <<END
+Update:
+ -s force update serials
+ -S do not update serial
+
+ -r force reload zones/dhcp
+ -R do not reload zones/dhcp
+END
+}
+
+function update_opt {
+ local opt=$1
+ local optarg="$2"
+
+ case $opt in
+ s) UPDATE_SERIAL=1 ;;
+ S) UPDATE_SERIAL=0 ;;
+
+ r) UPDATE_RELOAD=1 ;;
+ R) UPDATE_RELOAD=0 ;;
+
+ n)
+ UPDATE_SERIAL=0
+ UPDATE_RELOAD=0
+ ;;
+ *) return 1
+ esac
+}
+
+function update_setup {
+ for dir in etc etc/zones etc/hosts; do
+ [ -d $dir ] || die "$dir: missing source directory"
+ done
+
+ apply_dir $VAR
+
+ for dir in $VAR/dhcp $VAR/zones $VAR/include-cache $VAR/serials; do
+ apply_dir $dir
+ done
+ for dir in $VAR/dhcp/hosts; do
+ apply_dir $dir
+ done
+ for dir in $VAR/zones/includes $VAR/zones/forward $VAR/zones/reverse; do
+ apply_dir $dir
+ done
+}
+
+function update_commit {
+ ## Commit
+ # pre-commit check
+ log "Testing hosts..."
+ for hosts in $(list_files etc/hosts); do
+ log_warn "TODO: check_hosts $hosts"
+ done
+
+ # commit, unless noop'd
+ log "Commit..."
+ commit $SRV
+}
+
+function update_update {
+ if hg_modified etc; then
+ serial=$(unix_time)
+ log_warn "Using local unix time for uncommited changes: $serial"
+ else
+ serial=$(hg_time etc)
+ log_update "Using HG commit timestamp: $serial"
+ fi
+
+ ## Hosts
+ log "Updating forward host zones..."
+ for zone in $(list_dirs etc/hosts/forward); do
+ update_hosts_forward "var/zones/hosts/forward/$zone" "$zone" \
+ etc/hosts/forward/$zone/*
+ done
+
+ log "Updating DHCP hosts..."
+ for hosts in $(list etc/hosts/dhcp); do
+ update_hosts_dhcp "var/dhcp/hosts/$hosts.conf" $hosts \
+ $(expand_files "etc/hosts/dhcp/$hosts")
+ done
+
+ log "Updating reverse host zones..."
+ for zone in $(list_dirs etc/hosts/reverse); do
+ update_hosts_reverse "var/zones/hosts/reverse/$zone" "$zone" \
+ etc/hosts/reverse/$zone/*
+ done
+
+ ## 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" $serial \
+ "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" \
+ $(zone_includes var/include-cache/$zone etc/zones/$zone var/zones/)
+ done
+
+ log "Updating DHCP confs..."
+ for conf in $(list_files etc/dhcp); do
+ update_dhcp_conf "var/dhcp/$conf" "etc/dhcp/$conf"
+ done
+}
+
+function update_reload {
+ ## Check
+ log "Testing zones..."
+ for zone in $(list_files etc/zones); do
+ check_zone "var/zones/$zone" $zone
+ done
+
+ log "Testing DHCP confs..."
+ for conf in var/dhcp/*.conf; do
+ check_dhcp $conf
+ done
+
+ log "Reload zones..."
+ reload_zones
+
+ log "Reload dhcp..."
+ reload_dhcp
+
+}
+
+## Main entry point
+function update_main {
+ ## Setup source/output dirs
+ update_setup
+
+ ## Commit source dirs
+ update_commit
+
+ ## Update output from sources
+ update_update
+
+ ## Reload output
+ update_reload
+}