lib/pvl/hosts/dhcp.sh
author Tero Marttila <tero.marttila@aalto.fi>
Mon, 02 Mar 2015 20:02:14 +0200
changeset 701 8ddc141af313
parent 664 10ac59f9d4e7
child 715 76ed62924d50
permissions -rw-r--r--
update pvl/hosts: only test the global dhcp config, since things like sublclasses means that the individual dhcp confs will not pass
DHCP_SBIN=/usr/sbin/dhcpd
DHCP_CONF=/etc/dhcp/dhcpd.conf
DHCP_SERVICE=isc-dhcp-server

# absolute path!
DHCP_INCLUDE="$SRV/var/dhcp"

## Generate DHCP hosts config from hosts hosts using pvl.hosts-dhcp
#
#   update_hosts_dhcpe $out $src
function update_hosts_dhcp {
    local out="$1"
    local src="$2"
    local srcs=($(list_tree $src))
    local msg="$out: Generating DHCP hosts: $src"

    if apply_check "$out" "${srcs[@]}"; then
        log_skip "$msg"
    else
        log_apply "$msg"
    
        apply_cmd "$out" $OPT/bin/pvl.hosts-dhcp \
            --hosts-include="$HOSTS_INCLUDE" \
             "$src"
    fi
}

## Generate dhcp confs from source using pvl.dhcp-conf:
function update_dhcp_conf {
    local out="$1"
    local src="$2"
    local msg="$out: Generating DHCP conf: $src"

    if apply_check "$out" "$src"; then
        log_skip "$msg"
    else
        log_apply "$msg"
            
        apply_cmd "$out" $OPT/bin/pvl.dhcp-conf \
            --include-path=$DHCP_INCLUDE \
            "$src"
    fi
}

## Test DHCP configuration for validity using dhcpd -t:
#
#   check_dhcp
#
# Uses the global $DHCPD_CONF, 
function test_dhcp {
    if [ ! -e "$DHCP_SBIN" ]; then
        log_warn "check_dhcp: dhcpd not installed, skipping: $conf"
        return 0
    fi
   
    log_check "Checking DHCP: $DHCP_CONF" 

    test_cmd "$conf" \
        "$DHCP_SBIN" -cf "$DHCP_CONF" -t
}

## Reload dhcp hosts
#
#   reload_dhcp
#
# noop's if we haven't reloaded zones
function reload_dhcp {
    if [ "$UPDATE_RELOAD" = 1 ]; then
        log_force "Reload DHCP"
        
    elif [ "$UPDATE_RELOAD" = 0 ]; then
        log_noop "Skip reload DHCP"

        return
 
    elif [ ! -e "$DHCP_SBIN" ]; then
        warn "Skip missing DHCP"

        return 
   
    elif ! service_status $DHCP_SERVICE; then
        log_skip "dhcpd not running; did not restart"

        return

    else
        log_apply "Reload DHCP"
    fi

    service_restart $DHCP_SERVICE
}