bin/update
author Tero Marttila <terom@paivola.fi>
Thu, 15 Mar 2012 16:08:50 +0200
changeset 2 aeb106b9487c
child 7 f4457348faa0
permissions -rwxr-xr-x
update: update zonefiles
#!/bin/bash
# vim: set ft=sh :

set -ue

ROOT=$(pwd)

BIN=$ROOT/bin
PROCESS_ZONE=$BIN/process-zone
EXPAND_ZONE=$BIN/expand-zone

SETTINGS=$ROOT/settings
ZONES=$ROOT/zones
SERIALS=$ROOT/serials

PROCESS_ARGS='--input-charset latin-1'

FORWARD_MX=mail
REVERSE_ZONE=194.197.235
REVERSE_DOMAIN=paivola.fi

function log {
    echo "$*" >&2
}

function die {
    log "$*"
    exit 1
}

function log_cmd {
    local msg=$1; shift

    #log ">>>" "$@"

    echo -n "$msg... " >&2

    "$@" && log "OK" >&2 || die "Failed"
}

[ -d $SETTINGS ] || die "Missing settings: $SETTINGS"
[ -d $SERIALS ] || die "Missing serials: $SERIALS"
[ -d $ZONES ] || die "Missing zones: $ZONES"

function expand_zone {
    local output=$1; shift

    $EXPAND_ZONE -o $output "$@"
}

function process_zone {
    local output=$1; shift

    $PROCESS_ZONE $PROCESS_ARGS -o $output "$@"
}

function copy_zone_part {
    local zone=$1
    local part=$2

    local name=$zone.zone.$part

    log_cmd "Copying zone $zone/$part: zones/$name"
    cp $SETTINGS/$name $ZONES/$name
}

function update_zone {
    local zone=$1
    local name=$zone.zone

    log_cmd "Generating $zone zone headers: zones/$name" \
        expand_zone     $ZONES/$name    $SETTINGS/$zone.zone   \
            --serial $SERIALS/$zone.serial --update-serial  \
            --expand zones=$ZONES
}

function update_zone_view {
    local zone=$1
    local view=$2

    local name=$view/$zone.zone

    log_cmd "Generating $zone:$view zone headers: zones/$name" \
        expand_zone     $ZONES/$name    $SETTINGS/$zone.zone   \
            --serial $SERIALS/$zone.serial --update-serial  \
            --expand zones=$ZONES   \
            --expand view=$view
}

function main {
    log_cmd "Generating external forward zone: zones/external/paivola.zone.hosts" \
        process_zone    $ZONES/external/paivola.zone.hosts  $SETTINGS/paivola.txt --forward-zone

    log_cmd "Generating internal forward zone: zones/internal/paivola.zone.hosts" \
        process_zone    $ZONES/internal/paivola.zone.hosts  $SETTINGS/paivola.txt --forward-zone --forward-txt --forward-mx $FORWARD_MX

    log_cmd "Generating reverse zones: zones/paivola-reverse.zone.hosts" \
        process_zone    $ZONES/paivola-reverse.zone.hosts   $SETTINGS/paivola.txt --reverse-zone $REVERSE_ZONE --reverse-domain $REVERSE_DOMAIN


    copy_zone_part      paivola             auto
    copy_zone_part      paivola             services
    copy_zone_part      paivola             internal
    copy_zone_part      paivola             external

    update_zone         paivola-reverse
    update_zone_view    paivola             internal
    update_zone_view    paivola             external
}

main