lib/update.operations
changeset 66 482d06935d96
parent 64 620f4594a09d
child 68 5a0335960591
--- a/lib/update.operations	Wed Mar 21 18:43:56 2012 +0200
+++ b/lib/update.operations	Wed Mar 21 18:59:43 2012 +0200
@@ -31,6 +31,26 @@
     fi
 }
 
+## Run check-command on given file, outputting results:
+#
+#   check_generic   $src    $cmd $args...
+#
+function check_generic {
+    local src=$1; shift
+    local cmd=$1; shift
+
+    if cmd_test $cmd -q "$@"; then
+        log_skip    "Check $src: OK"
+
+    else
+        log_error   "  Check $src: Failed"
+
+        indent "    " $cmd "$@"
+
+        exit 1
+    fi
+}
+
 ## Hosts
 ## Update hosts from verbatim from input zone data:
 #
@@ -274,18 +294,8 @@
 function check_dhcp {
     local conf=${1:-$DHCPD_CONF}
 
-    local cmd=($DHCPD -cf $conf -t)
-
-    if "${cmd[@]}" -q; then
-        log_skip    "Check $conf: OK"
-
-    else
-        log_error   "  Check $conf: Failed"
-
-        indent "    " "${cmd[@]}"
-
-        exit 1
-    fi
+    check_generic $conf \
+        $DHCPD -cf $conf -t
 }
 
 ## Test DHCP configuration of given settings/dhcp using check_dhcp $DHCP_DATA/$host.conf:
@@ -293,16 +303,38 @@
 #   check_dhcp_conf     $conf
 #
 function check_dhcp_conf {
-    local conf=$1
+    local conf=$1;
 
     check_dhcp $DHCP_DATA/$conf.conf
 }
 
+## Test DHCP hosts source configuration for invalid fixed-address stanzas:
+#
+#   check_dhcp_hosts    $hosts_conf
+#
+function check_dhcp_hosts {
+    local hosts=$1
+   
+    # XXX: still too unclear
+    local src=$hosts #$DHCP_DATA/$hosts.conf
+
+    # set in do_reload_zones below
+    if [ $RELOAD_ZONES ]; then
+        check_generic $src \
+            $BIN/check-dhcp-hosts $DHCP_FILE_ARGS $ROOT/$src
+    else
+        log_noop "Check $src: skipped; did not reload DNS zones"
+    fi
+}
+
 # Run rndc reload
-function do_reload {
+function do_reload_zones {
     # run
     indent "        rndc: " \
         $RNDC reload
+
+    # set flag
+    RELOAD_ZONES=y
 }
 
 ## Load update zonefiles into bind:
@@ -316,7 +348,7 @@
     if [ $RELOAD_FORCE ]; then
         log_force  "$msg..."
         
-        do_reload
+        do_reload_zones
 
     elif [ $RELOAD_NOOP ]; then
         log_noop    "$msg: skipped"
@@ -330,7 +362,44 @@
         log_update  "$msg..."
 
         # run
-        do_reload
+        do_reload_zones
+    fi
+}
+
+## Reload DHCP by restarting it, if running:
+#
+#   do_reload_dhcp
+#
+# Does NOT restart dhcp if it is not running (status).
+function do_reload_dhcp {
+    if cmd_test $DHCPD_INIT status >/dev/null; then
+        cmd $DHCPD_INIT restart
+    else
+        log_warn "dhcpd not running; did not restart"
+    fi
+}
+
+## Reload dhcp hosts
+#
+#   reload_dhcp
+#
+# noop's if we haven't reloaded zones
+function reload_dhcp {
+    local msg="Reload DHCP hosts"
+
+    if [ $RELOAD_FORCE ]; then
+        log_force  "$msg..."
+        
+        do_reload_dhcp
+
+    elif [ $RELOAD_NOOP ]; then
+        log_noop    "$msg: skipped"
+    
+    else
+        log_update  "$msg..."
+
+        # run
+        do_reload_dhcp
     fi
 }