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