lib/pvl/hosts/update.sh
author Tero Marttila <tero.marttila@aalto.fi>
Fri, 27 Feb 2015 18:07:32 +0200
branch0.8
changeset 654 8069b08e90ac
parent 650 c707c3ee8665
child 664 10ac59f9d4e7
permissions -rw-r--r--
bin/update: fixup relative/absolute paths
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
update_GETOPTS='sSrR'
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
UPDATE_SERIAL=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
UPDATE_RELOAD=
648
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
     5
UPDATE_INCLUDES=
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
     7
. $LIB/pvl/hosts/dhcp.sh
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
     8
. $LIB/pvl/hosts/zone.sh
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
     9
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
function update_help {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
Update:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    -s      force update serials
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
    -S      do not update serial
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
    -r      force reload zones/dhcp
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
    -R      do not reload zones/dhcp
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
function update_opt {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
    local opt=$1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
    local optarg="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
    case $opt in
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
        s)  UPDATE_SERIAL=1 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
        S)  UPDATE_SERIAL=0 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
        r)  UPDATE_RELOAD=1 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
        R)  UPDATE_RELOAD=0 ;;
648
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    31
        
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    32
        F)  UPDATE_INCLUDES=1 ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
        n)
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
            UPDATE_SERIAL=0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
            UPDATE_RELOAD=0
648
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
    36
            UPDATE_INCLUDES=0
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
        ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
        *)  return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
    esac
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
function update_setup {
654
8069b08e90ac bin/update: fixup relative/absolute paths
Tero Marttila <tero.marttila@aalto.fi>
parents: 650
diff changeset
    43
    for dir in etc etc/zones etc/hosts; do
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
        [ -d $dir ] || die "$dir: missing source directory"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
    
654
8069b08e90ac bin/update: fixup relative/absolute paths
Tero Marttila <tero.marttila@aalto.fi>
parents: 650
diff changeset
    47
    apply_dir       var
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
654
8069b08e90ac bin/update: fixup relative/absolute paths
Tero Marttila <tero.marttila@aalto.fi>
parents: 650
diff changeset
    49
    for dir in var/dhcp var/zones var/include-cache var/serials; do
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
        apply_dir   $dir
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    51
    done
654
8069b08e90ac bin/update: fixup relative/absolute paths
Tero Marttila <tero.marttila@aalto.fi>
parents: 650
diff changeset
    52
    for dir in var/dhcp/hosts; do
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
        apply_dir   $dir
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
    done
654
8069b08e90ac bin/update: fixup relative/absolute paths
Tero Marttila <tero.marttila@aalto.fi>
parents: 650
diff changeset
    55
    for dir in var/zones/includes var/zones/forward var/zones/reverse; do
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    56
        apply_dir   $dir
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
function update_commit {
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    61
    # TODO: pre-commit test host files
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
    log "Commit..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
        commit  $SRV
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    67
function update_update {
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    68
    if commit_modified $SRV; then
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
        serial=$(unix_time)
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    70
        log_warn "Using local unix time for uncommited changes: $serial"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    71
    else
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    72
        serial=$(commit_time $SRV)
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
    73
        log "Using commit timestamp: $serial"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    74
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    75
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    76
    ## Hosts
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    77
    log "Updating forward host zones..."
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    78
    for zone in $(list_dirs etc/zones/forward); do
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    79
        update_hosts_forward "var/zones/forward/$zone" "etc/zones/forward/$zone/"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    80
    done
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    81
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    82
    log "Updating reverse host zones..."
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    83
    for zone in $(list_dirs etc/zones/reverse); do
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    84
        update_hosts_reverse "var/zones/reverse/$zone" "etc/zones/reverse/$zone/"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    85
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    86
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    87
    log "Updating DHCP hosts..."
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    88
    for hosts in $(list etc/dhcp/hosts); do
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    89
        update_hosts_dhcp "var/dhcp/hosts/$hosts.conf" "etc/dhcp/hosts/$hosts"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    90
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    91
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    92
    ## Zones
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    93
    log "Copying zone includes..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    94
    for zone in $(list_files etc/zones/includes); do
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    95
        update_zone_include "var/zones/includes/$zone" "etc/zones/includes/$zone"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    96
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    97
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    98
    log "Updating zones..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    99
    for zone in $(list_files etc/zones); do
648
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
   100
        update_zone_includes "var/include-cache/$zone" "etc/zones/$zone"
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
   101
8e3e6be9ac70 bin/pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 632
diff changeset
   102
        zone_includes=$(cat "var/include-cache/$zone")
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   103
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   104
        update_zone_serial "var/serials/$zone" $serial \
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   105
            "etc/zones/$zone" $zone_includes
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   106
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   107
        update_zone "var/zones/$zone" "etc/zones/$zone" "var/serials/$zone" \
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   108
            $zone_includes
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   109
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   110
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   111
    log "Updating DHCP confs..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   112
    for conf in $(list_files etc/dhcp); do
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   113
        update_dhcp_conf "var/dhcp/$conf" "etc/dhcp/$conf"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   114
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   115
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   116
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   117
function update_reload {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   118
    ## Check
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   119
    log "Testing zones..."
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   120
    for zone in $(list_files etc/zones); do
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   121
        test_zone "var/zones/$zone" $zone
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   122
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   123
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
   124
    log "Reload zones..."
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
   125
        reload_zones
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
   126
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
   127
    log "Testing DHCP..."
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   128
    for conf in $(list_files var/dhcp); do
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   129
        test_dhcp "var/dhcp/$conf"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   130
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   131
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
   132
    log "Reload DHCP..."
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   133
        reload_dhcp
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   134
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   135
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   136
## Main entry point
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   137
function update_main {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   138
    ## Setup source/output dirs
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   139
    update_setup
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   140
   
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   141
    ## Commit source dirs
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   142
    update_commit
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   143
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   144
    ## Update output from sources
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   145
    update_update
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   146
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   147
    ## Reload output
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   148
    update_reload
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   149
}
650
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   150
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   151
# entry point
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   152
MODULES=(log commit apply service test)
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   153
MODULE=hosts
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   154
MODULE_MAIN=update
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   155
c707c3ee8665 lib/pvl: move main bootstrapping code to pvl/hosts/update.sh to make bin even more trivial
Tero Marttila <tero.marttila@aalto.fi>
parents: 649
diff changeset
   156
. $LIB/pvl/main.sh && main "$@"