bin/update
author Tero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 22:00:37 +0200
branchdns-new
changeset 94 1b02d8075676
parent 93 1a313b7b6d40
child 95 a756f317d083
permissions -rwxr-xr-x
cleanup main update script somewhat
#!/bin/bash
# vim: set ft=sh :

# Bootstrap
if [ $0 == './update' ]; then
    SRV=$(pwd)
    OPT=./opt
else
    SRV=${SRV:-/srv/dns}
    OPT=${SRV:-/srv/dns/opt}
    cd $SRV
fi

source lib/update

function update {
    log "Testing hosts..."
    for hosts in $(list_files etc/hosts); do
        log_warn "TODO: check_hosts $hosts"
    done

    ## 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_files etc/hosts); do
        update_hosts_dhcp       "var/dhcp/hosts/$hosts.conf"        \
            "etc/hosts/$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"             \
            "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 "Updating DHCP confs..."
    for conf in $(list_files etc/dhcp); do
        update_dhcp_conf    "var/dhcp/$conf"                "etc/dhcp/$conf"
    done
}

function deploy {
    ## 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

    log "Commit..."
        commit      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
    ensure_dir      var
    for dir in var/dhcp var/zones var/serials var/include-cache; do
        ensure_dir  $dir
    done
    for dir in var/dhcp/hosts; do
        ensure_dir  $dir
    done
    for dir in var/zones/includes var/zones/hosts; do
        ensure_dir  $dir
    done
    for dir in var/zones/hosts/forward var/zones/hosts/reverse; do
        ensure_dir  $dir
    done

    ## Go
    update
    deploy
}

main "$@"