lib/pvl/hosts/dhcp.sh
author Tero Marttila <terom@paivola.fi>
Sun, 01 Mar 2015 20:14:12 +0200
changeset 662 4750b8b85aa1
parent 632 711be783d0a1
child 664 10ac59f9d4e7
permissions -rw-r--r--
lib/pvl: fix pvl/hosts/dhcp.sh srcs and --include-path
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=
    local msg="$out: Generating DHCP hosts: $src"

    # src can be either a dir with symlinks, or a symlink
    if [ -d "$src" ]; then
        srcs=$(list "$src")
    else
        srcs="$src"
    fi

    if apply_check "$out" $src $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      [$conf]
#
# Defaults to the global $DHCPD_CONF.
# Fails if the check fails.
function test_dhcp {
    local conf="$1"

    if [ ! -e "$DHCP_SBIN" ]; then
        log_warn "check_dhcp: dhcpd not installed, skipping: $conf"
        return 0
    fi
   
    log_check "Checking DHCP: $conf" 

    test_cmd "$conf" \
        "$DHCP_SBIN" -cf "$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 ! test_dhcp "$DHCP_CONF"; then
        log_error "Skip config error DHCP"

    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
}