bin/update
author Tero Marttila <terom@paivola.fi>
Tue, 20 Mar 2012 13:43:44 +0200
changeset 46 3613e93e4fd7
parent 45 3d6bf3864d8a
child 47 b4b590efe3ef
permissions -rwxr-xr-x
update: rndc: fail if no read perms on $RNDC_KEY
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/bin/bash
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=sh :
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
set -ue
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
     6
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
     7
### Paths
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
ROOT=$(pwd)
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    10
# resolve $0
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    11
self=$0
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    12
while [ -L $self ]; do
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    13
    tgt=$(readlink $self)
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    14
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    15
    if [ "${tgt:0:1}" == "/" ]; then
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    16
        self=$tgt
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    17
    else
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    18
        self=$(dirname $self)/$tgt
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    19
    fi
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    20
done
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    21
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    22
# Our bin dir, with scripts
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    23
BIN=$(dirname $self)
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    25
# Data files
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    26
DATA=settings
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    27
ZONES=zones
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    28
SERIALS=$DATA
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
    29
REPO=
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    31
# Script/data args
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
PROCESS_ARGS='--input-charset latin-1'
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    34
# external progs
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    35
NAMED_CHECKZONE=/usr/sbin/named-checkzone
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    36
HG=/usr/bin/hg
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
    37
RNDC=/usr/sbin/rndc
46
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
    38
RNDC_KEY=/etc/bind/rndc.key
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    39
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    40
### Command-line argument handling
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    41
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    42
IS_TTY=
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    43
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    44
## Options
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    45
LOG_ERROR=y
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    46
LOG_WARN=y
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    47
LOG=y
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    48
LOG_FORCE=y
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    49
LOG_UPDATE=y
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    50
LOG_NOOP=y
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
    51
LOG_SKIP=
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    52
LOG_DEBUG=
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    53
LOG_CMD=
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    54
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    55
UPDATE_FORCE=
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    56
UPDATE_NOOP=
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    57
UPDATE_DIFF=
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    58
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    59
SERIAL_NOOP=
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    60
SERIAL_FORCE=
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    61
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    62
COMMIT_SKIP=
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    63
COMMIT_FORCE=
22
5d2a8510a28f update: fix COMMIT_MSG bug
Tero Marttila <terom@paivola.fi>
parents: 21
diff changeset
    64
COMMIT_MSG=' '
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    65
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
    66
DEPLOY_SKIP=
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
    67
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    68
## Output command-line argument help.
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    69
function help_args {
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    70
    local prog=$1
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    71
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    72
    cat <<END
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    73
Usage: $prog [options]
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    74
15
e517ad3376f7 update: fixup help
Tero Marttila <terom@paivola.fi>
parents: 14
diff changeset
    75
General:
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    76
    -h      display this help text
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    77
    -d DIR  datadir
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    78
15
e517ad3376f7 update: fixup help
Tero Marttila <terom@paivola.fi>
parents: 14
diff changeset
    79
Logging:    
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    80
    -q      quiet
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    81
    -v      verbose
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    82
    -D      debug
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    83
    -V      debug commands
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
    84
    
15
e517ad3376f7 update: fixup help
Tero Marttila <terom@paivola.fi>
parents: 14
diff changeset
    85
Updates:
9
beb4bef2498a update: bugfix, -C
Tero Marttila <terom@paivola.fi>
parents: 8
diff changeset
    86
    -p      show changes
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    87
    -F      force-updates without checking src mtime
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    88
    -S      do not update serial
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    89
    -s      update serials
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    90
    -n      no-op/mock-update; don't actually change anything; implies -SpC
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    91
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    92
Commit    
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    93
    -C      do not commit changes
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
    94
    -c      commit changes
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
    95
    -m MSG  commit message
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    96
END
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    97
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
    98
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    99
## Parse any command-line arguments, setting the global options vars.
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   100
function parse_args {
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   101
    OPTIND=1
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   102
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   103
    while getopts 'hd:qvDVpFSsnCcm:' opt "$@"; do
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   104
        case $opt in
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   105
            h)  
15
e517ad3376f7 update: fixup help
Tero Marttila <terom@paivola.fi>
parents: 14
diff changeset
   106
                help_args $0
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   107
                exit 0
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   108
            ;;
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   109
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   110
            d)  ROOT="$OPTARG" ;;
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   111
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   112
            q)  
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   113
                LOG= 
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   114
                LOG_WARN=
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   115
                LOG_UPDATE=
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   116
                LOG_FORCE=
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   117
                LOG_NOOP=
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   118
                ;;
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   119
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   120
            v)  LOG_SKIP=y ;;
16
6516dc848a47 update: tweak functions
Tero Marttila <terom@paivola.fi>
parents: 15
diff changeset
   121
            D)  
6516dc848a47 update: tweak functions
Tero Marttila <terom@paivola.fi>
parents: 15
diff changeset
   122
                LOG_DEBUG=y
6516dc848a47 update: tweak functions
Tero Marttila <terom@paivola.fi>
parents: 15
diff changeset
   123
                LOG_INFO=y
6516dc848a47 update: tweak functions
Tero Marttila <terom@paivola.fi>
parents: 15
diff changeset
   124
                ;;
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   125
            V)  LOG_CMD=y ;;
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   126
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   127
            p)  UPDATE_DIFF=y   ;;
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   128
            F)  UPDATE_FORCE=y  ;;
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   129
            S)  SERIAL_NOOP=y   ;;
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   130
            s)  SERIAL_FORCE=y  ;;
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   131
 
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   132
            n)  
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   133
                UPDATE_NOOP=y 
9
beb4bef2498a update: bugfix, -C
Tero Marttila <terom@paivola.fi>
parents: 8
diff changeset
   134
                # implies -Sp
beb4bef2498a update: bugfix, -C
Tero Marttila <terom@paivola.fi>
parents: 8
diff changeset
   135
                UPDATE_DIFF=y
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   136
                SERIAL_NOUPDATE=y
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   137
                COMMIT_SKIP=y
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   138
                DEPLOY_SKIP=y
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   139
                ;;
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   140
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   141
            C)  COMMIT_SKIP=y ;;
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   142
            c)  COMMIT_FORCE=y ;;
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   143
            m)  COMMIT_MSG="$OPTARG" ;;
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   144
           
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   145
            ?)  
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   146
                die 
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   147
            ;;
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   148
        esac
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   149
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   150
    done
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   151
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   152
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   153
### Logging
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   154
# Output message to stderr.
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   155
function log_msg {
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
    echo "$*" >&2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
}
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   159
# Output message to stderr, optionally with given color, if TTY.
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   160
function log_color {
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   161
    local code=$1; shift
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   162
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   163
    if [ $IS_TTY ]; then
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   164
        echo $'\e['${code}'m'"$*"$'\e[00m' >&2
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   165
    else
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   166
        echo "$*" >&2
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   167
    fi
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   168
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   169
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   170
## Log at various log-levels
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   171
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   172
function log_error {
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   173
    [ $LOG_ERROR ] && log_color '31' "$*"
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   174
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   175
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   176
function log_warn {
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   177
    [ $LOG_WARN ] && log_color '33' "$*" || true
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   178
}
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   179
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   180
# plain
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   181
function log {
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   182
    [ $LOG ] && log_msg "$*" || true
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   183
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   184
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   185
function log_force {
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   186
    [ $LOG_FORCE ] && log_color '2;33' "  $*" || true
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   187
}
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   188
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   189
function log_update {
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   190
    [ $LOG_UPDATE ] && log_color '36' "  $*" || true
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   191
}
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   192
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   193
function log_noop {
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   194
    [ $LOG_NOOP ] && log_color '2;34' "  $*" || true
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   195
}
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   196
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   197
function log_skip {
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   198
    [ $LOG_SKIP ] && log_color '1;34' "  $*" || true
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   199
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   200
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   201
function log_debug {
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   202
    [ $LOG_DEBUG ] && log_color 32 "    $*" || true
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   203
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   204
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   205
function log_cmd {
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   206
    [ $LOG_CMD ] && log_color 35 "        \$ $*" || true
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   207
}
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   208
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   209
# Output stacktrace, broken.
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   210
function log_stack {
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   211
    local level=1
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   212
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   213
    while info=$(caller $level); do
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   214
        echo $info | read line sub file
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   215
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   216
        log_msg "$file:$lineno $sub()"
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   217
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   218
        level=$(($level + 1))
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   219
    done
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   220
}
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   221
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   222
# Output calling function's name.
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   223
function func_caller {
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   224
    caller 1 | cut -d ' ' -f 2
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   225
}
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   226
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   227
### High-level logging output
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   228
# Log with func_caller at log_debug
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   229
function debug {
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   230
    printf -v prefix "%s" $(func_caller)
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   231
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   232
    log_debug "$prefix: $*"
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   233
}
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   234
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   235
# Log with func_caller at log_error and exit, intended for internal errors...
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   236
function fail {
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   237
    log_error "$(func_caller): $*"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   238
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   239
    exit 2
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   240
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   241
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   242
# Log at log_error and exit
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   243
function die {
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   244
    log_error "$*"
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   245
    exit 1
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   246
}
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   247
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   248
### Command execution
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   249
## Execute command, possibly logging its execution.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   250
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   251
#   cmd     $cmd...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   252
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   253
# Fails if the command returns an error exit code.
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   254
function cmd {
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   255
    log_cmd "$@"
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   256
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   257
    "$@" || die "Failed"
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   258
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   259
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   260
function indent () {
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   261
    local indent=$1; shift
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   262
18
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   263
    log_cmd "$@"
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   264
26
d2fdfe98b7b9 update: fix indent leading whitespace; implement update_hosts_meta, but not used - commit workflow becomes a little weird
Tero Marttila <terom@paivola.fi>
parents: 22
diff changeset
   265
    "$@" | sed "s/^/$indent/"
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   266
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   267
    return ${PIPESTATUS[0]}
18
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   268
}
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   269
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   270
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   271
### FS utils
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   272
# Create dir in $ROOT if not exists.
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   273
function ensure_dir {
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   274
    local dir=$1
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   275
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   276
    if [ ! -d $ROOT/$dir ]; then
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   277
        log_warn "Creating output dir: $dir"
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   278
        cmd mkdir $ROOT/$dir
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   279
    fi
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   280
}
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   281
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   282
## Output absolute path from $ROOT:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   283
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   284
#   abspath $path
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   285
#
18
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   286
function abspath () {
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   287
    local path=$1
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   288
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   289
    echo "$ROOT/$path"
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   290
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   291
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   292
### HG wrappers
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   293
# Run `hg ...` within $REPO.
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   294
function hg {
39
57551a87a93e update: hardcode $REPO in hg
Tero Marttila <terom@paivola.fi>
parents: 38
diff changeset
   295
    local repo=$REPO; shift
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   296
31
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   297
    cmd $HG -R $ROOT/$repo "$@"
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   298
}
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   299
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   300
# Does the repo have local modifications?
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   301
function hg_modified {
39
57551a87a93e update: hardcode $REPO in hg
Tero Marttila <terom@paivola.fi>
parents: 38
diff changeset
   302
    hg id | grep -q '+'
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   303
}
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   304
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   305
# Output possible -u flag for commit.
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   306
function hg_user {
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   307
    if [ ${SUDO_USER:-} ]; then
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   308
        echo '-u' "$SUDO_USER"
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   309
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   310
    elif [ $HOME ] && [ -e $HOME/.hgrc ]; then
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   311
        debug "using .hgrc user"
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   312
        echo ''
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   313
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   314
    else
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   315
        echo '-u' "$USER"
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   316
    fi
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   317
}
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   318
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   319
# Show changes in repo
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   320
function hg_diff {
39
57551a87a93e update: hardcode $REPO in hg
Tero Marttila <terom@paivola.fi>
parents: 38
diff changeset
   321
    hg diff
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   322
}
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   323
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   324
## Commit changes in repo, with given message:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   325
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   326
#   hg_commit   $msg
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   327
#
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   328
function hg_commit {
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   329
    local msg=$1
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   330
    local user_opt=$(hg_user)
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   331
    
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   332
    debug "$user_opt: $msg"
39
57551a87a93e update: hardcode $REPO in hg
Tero Marttila <terom@paivola.fi>
parents: 38
diff changeset
   333
    hg commit $user_opt -m "$msg"
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   334
}
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   335
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   336
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   337
### Dependency-based updates
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   338
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   339
## Compare the given output file with all given source files:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   340
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   341
#   check_update $out ${deps[@]} && do_update $out ... || ...
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   342
#
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   343
# Returns true if the output file needs to be updated.
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   344
function check_update {
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   345
    # target
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   346
    local out=$1; shift
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   347
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   348
    debug "$out"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   349
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   350
    # need update?
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   351
    local update=
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   352
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   353
    if [ ${#@} == 0 ]; then
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   354
        debug "  update: unknown deps"
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   355
        update=y
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   356
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   357
    elif [ ! -e $out ]; then
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   358
        debug "  update: dest missing"
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   359
        update=y
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   360
        
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   361
    elif [ $UPDATE_FORCE ]; then
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   362
        debug "  update: forced"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   363
        update=y
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   364
    fi
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   365
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   366
    # check deps
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   367
    for dep in "$@"; do
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   368
        # don't bother checking if already figured out
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   369
        [ $update ] && continue
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   370
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   371
        # check
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   372
        if [ ! -e $ROOT/$dep ]; then
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   373
            fail "$dst: Missing source: $dep"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   374
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   375
        elif [ $ROOT/$out -ot $ROOT/$dep ]; then
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   376
            debug "  update: $dep"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   377
            update=y
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   378
        else
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   379
            debug "  check: $dep"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   380
        fi
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   381
    done
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   382
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   383
    [ ! $update ] && debug "  up-to-date"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   384
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   385
    # return
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   386
    [ $update ]
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   387
}
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   388
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   389
## Generate updated output file from given command's stdout:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   390
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   391
#   do_update $out $BIN/cmd --args
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   392
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   393
# Writes output to a temporary .new file, optionally shows a diff of changes, and commits
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   394
# the new version to $out (unless noop'd).
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   395
function do_update {
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   396
    local out=$1; shift
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   397
    local tmp=$out.new
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   398
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   399
    debug "$out"
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   400
    cmd "$@" > $ROOT/$tmp
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   401
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   402
    # compare
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   403
    if [ -e $ROOT/$out ] && [ $UPDATE_DIFF ]; then
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   404
        debug "  changes:"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   405
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   406
        # terse
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   407
        indent "        " diff --unified=1 $ROOT/$out $ROOT/$tmp || true
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   408
    fi
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   409
    
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   410
    # deploy
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   411
    if [ $UPDATE_NOOP ]; then
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   412
        # cleanup
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   413
        debug "  no-op"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   414
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   415
        cmd rm $ROOT/$tmp
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   416
    else
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   417
        # commit
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   418
        debug "  deploy"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   419
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   420
        cmd mv $ROOT/$tmp $ROOT/$out
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   421
    fi
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   422
}
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   423
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   424
## Look for a link target:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   425
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   426
#   find_link   $lnk    $tgt...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   427
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   428
# Outputs the first given target to exist, skipping any that are the same as the given $lnk.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   429
# If no $tgt matches, outputs the last one, or '-'.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   430
function choose_link {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   431
    local lnk=$1; shift
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   432
    local tgt=-
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   433
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   434
    for tgt in "$@"; do
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   435
        [ $tgt != $out ] && [ -e $ROOT/$tgt ] && break
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   436
    done
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   437
    
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   438
    echo $tgt
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   439
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   440
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   441
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   442
## Compare symlink to target:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   443
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   444
#   check_link $lnk $tgt && do_link $lnk $tgt || ...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   445
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   446
# Tests if the symlink exists, and the target matches.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   447
# Fails if the target does not exist.
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   448
function check_link {
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   449
    local lnk=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   450
    local tgt=$2
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   451
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   452
    [ ! -e $ROOT/$tgt ] && fail "$tgt: target does not exist"
14
b883ef452cd8 fix handling of initial serial
Tero Marttila <terom@paivola.fi>
parents: 13
diff changeset
   453
    
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   454
    [ ! -e $ROOT/$lnk ] || [ $(readlink $ROOT/$lnk) != $ROOT/$tgt ]
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   455
}
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   456
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   457
## Update symlink to point to target:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   458
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   459
#   do_link $lnk $tgt
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   460
#
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   461
function do_link {
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   462
    local lnk=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   463
    local tgt=$2
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   464
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   465
    cmd ln -sf $ROOT/$tgt $ROOT/$lnk
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   466
}
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   467
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   468
## Update .serial number:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   469
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   470
#   do_update_serial $serial
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   471
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   472
# Shows old/new serial on debug.
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   473
function do_update_serial {
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   474
    local serial=$1
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   475
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   476
    # read
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   477
    local old=$(test -e $ROOT/$serial && cat $ROOT/$serial || echo '')
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   478
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   479
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   480
    cmd $BIN/update-serial $ROOT/$serial
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   481
    
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   482
    # read
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   483
    local new=$(cat $ROOT/$serial)
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   484
        
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   485
    debug "  $old -> $new"
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   486
}
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   487
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   488
## Perform `hg commit` for $DATA
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   489
function do_commit {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   490
    local msg=$1
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   491
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   492
    indent "    " hg_diff
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   493
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   494
    hg_commit "$msg"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   495
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   496
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   497
### Hosts
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   498
## Update hosts from verbatim from input zone data:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   499
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   500
#   copy_hosts      $ZONES/$zone    $DATA/$base
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   501
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   502
# Writes updated zone to $zone, deps on $base.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   503
function copy_hosts {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   504
    local zone=$1
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   505
    local base=$2
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   506
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   507
    if check_update $zone $base; then
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   508
        log_update "Copying hosts $zone <- $base..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   509
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   510
        do_update $zone \
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   511
            cat $ROOT/$base
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   512
    else
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   513
        log_skip "Copying hosts $zone <- $base: not changed"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   514
    fi
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   515
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   516
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   517
## Generate hosts from input zone data using $BIN/process-zone:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   518
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   519
#   update_hosts    $ZONES/$zone    $DATA/$base
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   520
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   521
# Writes process-zone'd data to $zone, deps on $base.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   522
function update_hosts {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   523
    local zone=$1; shift
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   524
    local base=$1; shift
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   525
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   526
    if check_update $zone $base; then
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   527
        log_update "Generating hosts $zone <- $base..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   528
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   529
        do_update $zone \
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   530
            $BIN/process-zone $PROCESS_ARGS $ROOT/$base "$@"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   531
    else
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   532
        log_skip "Generating hosts $zone <- $base: not changed"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   533
    fi
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   534
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   535
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   536
## Generate new serial for zone using $BIN/update-serial, if the zone data has changed:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   537
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   538
#   update_serial   $zone   $deps...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   539
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   540
# Supports SERIAL_FORCE/NOOP.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   541
# Updates $SERIALS/$zone.serial.
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   542
function update_serial {
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   543
    local zone=$1; shift
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   544
    
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   545
    local serial=$SERIALS/$zone.serial
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   546
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   547
    # test
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   548
    if [ $SERIAL_FORCE ]; then
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   549
        log_force "Updating $serial: forced"
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   550
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   551
        do_update_serial $serial
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   552
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   553
    elif ! check_update $serial "$@"; then
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   554
        log_skip "Updating $serial: not changed"
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   555
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   556
    elif [ $SERIAL_NOOP ]; then
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   557
        log_noop "Updating $serial: skipped"
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   558
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   559
    else
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   560
        log_update "Updating $serial..."
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   561
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   562
        do_update_serial $serial
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   563
    fi
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   564
}
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   565
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   566
## Link serial for zone from given base-zone:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   567
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   568
#   link_serial $zone $base
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   569
function link_serial {
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   570
    local zone=$1
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   571
    local base=$2
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   572
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   573
    local lnk=$SERIALS/$zone.serial
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   574
    local tgt=$SERIALS/$base.serial
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   575
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   576
    if check_link $lnk $tgt; then
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   577
        log_update "Linking $lnk -> $tgt..."
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   578
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   579
        do_link $lnk $tgt
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   580
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   581
    else
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   582
        log_skip "Linking $lnk -> $tgt: not changed"
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   583
    fi
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   584
}
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   585
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   586
## Update zone file verbatim from source:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   587
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   588
#   copy_zone   $view   $zone   [$base]
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   589
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   590
# Copies changed $DATA/$base zone data to $ZONES/$view/$zone.
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   591
function copy_zone {
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   592
    local view=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   593
    local zone=$2
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   594
    local base=${3:-$zone}
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   595
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   596
    local out=$ZONES/$view/$zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   597
    local src=$DATA/$base
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   598
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   599
    if check_update $out $src; then
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   600
        log_update "Copying $out <- $src..."
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   601
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   602
        do_update $out \
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   603
            cat $ROOT/$src
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   604
    else
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   605
        log_skip "Copying $out <- $src: not changed"
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   606
    fi
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   607
}
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   608
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   609
## Expand zone file from source using $BIN/expand-zone:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   610
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   611
#   update_zone $view   $zone   [$base]
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   612
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   613
# Processed $DATA/$base zone data through $BIN/expand-zone, writing output to $ZONES/$view/$zone.
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   614
function update_zone {
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   615
    local view=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   616
    local zone=$2
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   617
    local base=${3:-$zone}
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   618
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   619
    local out=$ZONES/$view/$zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   620
    local src=$DATA/$base.zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   621
    local lnk=$ZONES/$base
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   622
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   623
    local serial=$SERIALS/$base.serial
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   624
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   625
    if check_update $out $src $serial; then
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   626
        log_update "Generating $out <- $src..." 
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   627
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   628
        do_update $out \
40
d99ebc15833d update: simplify $BIN
Tero Marttila <terom@paivola.fi>
parents: 39
diff changeset
   629
            $BIN/expand-zone $ROOT/$src \
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   630
                --serial $ROOT/$serial              \
18
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   631
                --expand zones=$(abspath $ZONES)    \
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   632
                --expand view=$view
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   633
    else
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   634
        log_skip "Generating $out <- $src: not changed" 
8
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   635
    fi
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   636
}
dab145ee3f81 update: mad bash wizardry
Tero Marttila <terom@paivola.fi>
parents: 7
diff changeset
   637
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   638
## Link zone file to ues given shared zone.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   639
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   640
#   link_zone   $view   $zone   [$base]
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   641
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   642
# Looks for shared zone at:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   643
#   $ZONES/$view/$base
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   644
#   $ZONES/common/$base
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   645
function link_zone {
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   646
    local view=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   647
    local zone=$2
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   648
    local base=${3:-$zone}
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   649
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   650
    local out=$ZONES/$view/$zone
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   651
    local tgt=$(choose_link $out $ZONES/$view/$base $ZONES/common/$base)
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   652
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   653
    if check_link $out $tgt; then
43
b2ac0fd85828 update: log_force/update/noop/skip, implemented for update_serial
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   654
        log_update "Linking $out -> $tgt..."
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   655
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   656
        do_link $out $tgt
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   657
30
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   658
    else
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   659
        log_skip "Linking $out -> $tgt: not changed"
30
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   660
    fi
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   661
}
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   662
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   663
## Test hosts zone for validity:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   664
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   665
#   check_hosts     $DATA/$hosts    --check-exempt ...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   666
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   667
# Fails if the check fails.
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   668
function check_hosts {
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   669
    local hosts=$1; shift 1
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   670
40
d99ebc15833d update: simplify $BIN
Tero Marttila <terom@paivola.fi>
parents: 39
diff changeset
   671
    local cmd=($BIN/process-zone $PROCESS_ARGS $ROOT/$hosts --check-hosts "$@")
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   672
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   673
    if "${cmd[@]}" -q; then
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   674
        log_skip "Check $hosts: OK"
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   675
    else
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   676
        log_error "  Check $hosts: Failed"
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   677
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   678
        indent "    " "${cmd[@]}"
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   679
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   680
        exit 1
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   681
    fi
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   682
}
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   683
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   684
## Test zone file for validity using named-checkzone:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   685
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   686
#   check_zone      $view       $zone       $origin
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   687
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   688
# Uses the zonefile at $ZONES/$view/$zone, loading it with given initial $ORIGIN.
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   689
# Fails if the check fails.
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   690
function check_zone {
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   691
    local view=$1
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   692
    local zone=$2
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   693
    local origin=$3
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   694
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   695
    local src=$ZONES/$view/$zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   696
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   697
    local cmd=($NAMED_CHECKZONE $origin $ROOT/$src)
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   698
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   699
    # test
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   700
    # XXX: checkzone is very specific about the order of arguments, -q must be first
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   701
    if $NAMED_CHECKZONE -q $origin $ROOT/$src; then
41
baae373b787e update: log_skip; simplify update_serial args; check_update tests for deps
Tero Marttila <terom@paivola.fi>
parents: 40
diff changeset
   702
        log_skip "Check $src ($origin): OK"
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   703
    else
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   704
        log_error "  Check $src ($origin): Failed:"
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   705
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   706
        indent "    " "${cmd[@]}"
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   707
        
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   708
        exit 1
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   709
    fi
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   710
}
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   711
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   712
## Load update zonefiles into bind:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   713
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   714
#   deploy_zones    
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   715
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   716
# Invokes `rndc reload`, showing its output.
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   717
function deploy_zones {
46
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   718
    local msg="Reload zones"
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   719
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   720
    if [ $DEPLOY_SKIP ]; then
46
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   721
        log_skip    "$msg: skipped"
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   722
    
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   723
    elif [ ! -r $RNDC_KEY ]; then
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   724
        log_error   "  $msg: rndc: permission denied: $RNDC_KEY"
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   725
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   726
    else
46
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   727
        log_update  "$msg..."
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   728
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   729
        # run
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   730
        indent "        rndc: " \
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   731
            $RNDC reload
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   732
    fi
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   733
}
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   734
## Commit changes in $DATA to version control:
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   735
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   736
#   commit_data
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   737
#
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   738
# Invokes `hg commit` in the $REPO, first showing the diff.
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   739
function commit_data {
39
57551a87a93e update: hardcode $REPO in hg
Tero Marttila <terom@paivola.fi>
parents: 38
diff changeset
   740
    local repo=$REPO
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   741
    local commit_msg="$COMMIT_MSG"
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   742
46
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 45
diff changeset
   743
    local msg="Commit changes in $repo"
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   744
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   745
    # operate?
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   746
    if [ $COMMIT_FORCE ]; then
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   747
        log_force   "$msg..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   748
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   749
        do_commit "$commit_msg"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   750
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   751
    elif ! hg_modified; then
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   752
        log_skip    "$msg: no changes"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   753
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   754
    elif [ $COMMIT_SKIP ]; then
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   755
        log_noop    "$msg: skipped"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   756
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   757
    else
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   758
        log_update  "msg..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   759
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   760
        do_commit "$commit_msg"
21
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   761
    fi
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   762
}
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 19
diff changeset
   763
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   764
## Site settings, used as arguments to scripts
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   765
# MX record to generate in hosts --forward-zone
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   766
FORWARD_MX=mail
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   767
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   768
# IP network to generate reverse records for in --reverse-zone
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   769
REVERSE_ZONE=194.197.235
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   770
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   771
# Origin domain to generate reverse records for in --reverse-zone
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   772
REVERSE_DOMAIN=paivola.fi
28
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 27
diff changeset
   773
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   774
# Views used
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   775
VIEWS=(internal external)
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   776
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   777
# Base domain zone for domains
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   778
DOMAIN_BASE=paivola
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   779
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   780
# List of actual domains used; will be linked to $DOMAIN_BASE
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   781
DOMAINS=(paivola.fi paivola.net paivola.org paivola.info paivola.mobi xn--pivl-load8j.fi)
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   782
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   783
## Operate!
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   784
function run {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   785
    ## Hosts
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   786
    # test
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   787
    log "Testing hosts..."
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   788
        #                   data                            args...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   789
        check_hosts         $DATA/paivola.txt               --check-exempt ufc
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   790
27
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   791
    # update
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   792
    log "Generating host zones..."
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   793
        #                   hosts                           data                args...
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   794
        update_hosts        $ZONES/hosts/paivola:internal   $DATA/paivola.txt   --forward-zone --forward-txt --forward-mx $FORWARD_MX
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   795
        update_hosts        $ZONES/hosts/paivola:external   $DATA/paivola.txt   --forward-zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   796
        update_hosts        $ZONES/hosts/194.197.235        $DATA/paivola.txt   --reverse-zone $REVERSE_ZONE --reverse-domain $REVERSE_DOMAIN
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   797
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   798
        
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   799
        update_hosts        $ZONES/hosts/10                 $DATA/pvl.txt       --reverse-zone 10 --reverse-domain pvl -q
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   800
        update_hosts        $ZONES/hosts/192.168            $DATA/pvl.txt       --reverse-zone 192.168 --reverse-domain pvl -q
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   801
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   802
        # XXX: unsupported --forward-zone with pvl.txt
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   803
        # update_hosts    $ZONES/hosts/pvl                    $DATA/pvl.txt      --forward-zone
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   804
        copy_hosts          $ZONES/hosts/pvl                $DATA/pvl.txt
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   805
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   806
    ## Includes
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   807
    log "Copying zone includes..."
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   808
        #                   view            zone                    base
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   809
        copy_zone           includes        paivola:internal        paivola.zone.internal
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   810
        copy_zone           includes        paivola:external        paivola.zone.external
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   811
        copy_zone           includes        paivola.auto            paivola.zone.auto
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   812
        copy_zone           includes        paivola.services        paivola.zone.services
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   813
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   814
    ## Serials
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   815
    log "Updating serials..."
18
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 17
diff changeset
   816
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   817
        #                   zone            deps...
45
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   818
        #   includes...
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   819
        update_serial       pvl             $ZONES/hosts/pvl            $DATA/pvl.zone
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   820
        update_serial       10              $ZONES/hosts/10             $DATA/10.zone
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   821
        update_serial       192.168         $ZONES/hosts/192.168        $DATA/192.168.zone
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   822
45
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   823
        update_serial       paivola         $ZONES/hosts/paivola:*      $DATA/paivola.zone          \
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   824
            $ZONES/includes/paivola:*       \
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   825
            $ZONES/includes/paivola.*
42
ef5bcc4145de debug with func_caller; update_serial deps
Tero Marttila <terom@paivola.fi>
parents: 41
diff changeset
   826
45
3d6bf3864d8a update: tidy up run update_serials
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   827
        update_serial       194.197.235     $ZONES/hosts/194.197.235    $DATA/194.197.235.zone          
13
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 10
diff changeset
   828
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   829
    ## Zones
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   830
    log "Updating zones..."
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   831
        #                   view        zone            base
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   832
        update_zone         internal    pvl
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   833
        update_zone         internal    paivola
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   834
        update_zone         external    paivola
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   835
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   836
        update_zone         internal    10
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   837
        update_zone         internal    192.168
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   838
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   839
        update_zone         common      194.197.235
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   840
        link_zone           internal    194.197.235
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   841
        link_zone           external    194.197.235
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   842
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   843
    ## Test
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   844
    log "Testing zones..."
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   845
        #                   view        zone            origin
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   846
        check_zone          internal    paivola         paivola.fi
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   847
        check_zone          external    paivola         paivola.fi
36
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 32
diff changeset
   848
38
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   849
        check_zone          internal    10              10.in-addr.arpa
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   850
        check_zone          internal    192.168         192.168.in-addr.arpa
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
   851
        check_zone          common      194.197.235     235.197.194.in-addr.arpa
10
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   852
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   853
    ## Domains...
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   854
    log "Linking domains..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   855
        for view in "${VIEWS[@]}"; do
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   856
            for zone in "${DOMAINS[@]}"; do
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   857
                # link
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   858
                link_zone       $view       $zone           $DOMAIN_BASE
30
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   859
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   860
                # test
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   861
                check_zone      $view       $zone           $zone
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   862
            done
30
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   863
        done
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   864
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   865
    ## Deploy
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   866
    log "Deploy zones..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   867
        deploy_zones
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   868
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   869
    ## Commit
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   870
    log "Commit data..."
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   871
        commit_data
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   872
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   873
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   874
## Main entry point
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   875
function main {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   876
    # test tty
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   877
    [ -t 1 ] && IS_TTY=y
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   878
    
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   879
    parse_args "$@"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   880
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   881
    ## test env
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   882
    [ -d $ROOT/$DATA ] || die "Missing data: $ROOT/$DATA"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   883
    ensure_dir  $ZONES
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   884
    
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   885
    ## Output dirs
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   886
    for dir in "common" "hosts" "includes" "${VIEWS[@]}"; do
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   887
        ensure_dir $ZONES/$dir
30
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   888
    done
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
   889
44
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   890
    ## Go
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   891
    run
2
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   892
}
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   893
7
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 2
diff changeset
   894
main "$@"