author | Tero Marttila <terom@paivola.fi> |
Tue, 20 Mar 2012 13:47:57 +0200 | |
changeset 47 | b4b590efe3ef |
parent 46 | 3613e93e4fd7 |
child 48 | 8e2006f45dbc |
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 |
47 | 29 |
REPO=. |
2 | 30 |
|
44 | 31 |
# Script/data args |
2 | 32 |
PROCESS_ARGS='--input-charset latin-1' |
33 |
||
28
647f6de0d0ac
update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents:
27
diff
changeset
|
34 |
# external progs |
10 | 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 | 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 | 39 |
|
44 | 40 |
### Command-line argument handling |
41 |
||
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
42 |
IS_TTY= |
8 | 43 |
|
44 | 44 |
## Options |
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 | 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 | 52 |
LOG_DEBUG= |
53 |
LOG_CMD= |
|
54 |
||
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
55 |
UPDATE_FORCE= |
8 | 56 |
UPDATE_NOOP= |
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 | 62 |
COMMIT_SKIP= |
63 |
COMMIT_FORCE= |
|
22 | 64 |
COMMIT_MSG=' ' |
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
65 |
|
27 | 66 |
DEPLOY_SKIP= |
67 |
||
44 | 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 | 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 | 78 |
|
15 | 79 |
Logging: |
8 | 80 |
-q quiet |
81 |
-v verbose |
|
82 |
-D debug |
|
21 | 83 |
-V debug commands |
8 | 84 |
|
15 | 85 |
Updates: |
9 | 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 | 90 |
-n no-op/mock-update; don't actually change anything; implies -SpC |
91 |
||
92 |
Commit |
|
93 |
-C do not commit changes |
|
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 | 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 | 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 | 121 |
D) |
122 |
LOG_DEBUG=y |
|
123 |
LOG_INFO=y |
|
124 |
;; |
|
21 | 125 |
V) LOG_CMD=y ;; |
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 | 131 |
|
132 |
n) |
|
133 |
UPDATE_NOOP=y |
|
9 | 134 |
# implies -Sp |
135 |
UPDATE_DIFF=y |
|
8 | 136 |
SERIAL_NOUPDATE=y |
21 | 137 |
COMMIT_SKIP=y |
27 | 138 |
DEPLOY_SKIP=y |
8 | 139 |
;; |
140 |
||
21 | 141 |
C) COMMIT_SKIP=y ;; |
142 |
c) COMMIT_FORCE=y ;; |
|
143 |
m) COMMIT_MSG="$OPTARG" ;; |
|
8 | 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 | 153 |
### Logging |
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 | 156 |
echo "$*" >&2 |
157 |
} |
|
158 |
||
44 | 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 | 170 |
## Log at various log-levels |
171 |
||
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
172 |
function log_error { |
44 | 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 | 180 |
# plain |
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
181 |
function log { |
8 | 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 | 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 | 206 |
[ $LOG_CMD ] && log_color 35 " \$ $*" || true |
207 |
} |
|
208 |
||
44 | 209 |
# Output stacktrace, broken. |
8 | 210 |
function log_stack { |
211 |
local level=1 |
|
212 |
||
213 |
while info=$(caller $level); do |
|
214 |
echo $info | read line sub file |
|
215 |
||
216 |
log_msg "$file:$lineno $sub()" |
|
217 |
||
218 |
level=$(($level + 1)) |
|
219 |
done |
|
220 |
} |
|
221 |
||
44 | 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 | 227 |
### High-level logging output |
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 | 235 |
# Log with func_caller at log_error and exit, intended for internal errors... |
8 | 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 | 238 |
|
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 | 242 |
# Log at log_error and exit |
2 | 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 | 245 |
exit 1 |
246 |
} |
|
247 |
||
44 | 248 |
### Command execution |
249 |
## Execute command, possibly logging its execution. |
|
250 |
# |
|
251 |
# cmd $cmd... |
|
252 |
# |
|
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 | 261 |
local indent=$1; shift |
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 | 270 |
|
271 |
### FS utils |
|
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 | 282 |
## Output absolute path from $ROOT: |
283 |
# |
|
284 |
# abspath $path |
|
285 |
# |
|
18
826103fe3c8c
update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents:
17
diff
changeset
|
286 |
function abspath () { |
44 | 287 |
local path=$1 |
288 |
||
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 | 292 |
### HG wrappers |
293 |
# Run `hg ...` within $REPO. |
|
28
647f6de0d0ac
update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents:
27
diff
changeset
|
294 |
function hg { |
47 | 295 |
local repo=$REPO |
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 | 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 | 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 | 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 | 324 |
## Commit changes in repo, with given message: |
325 |
# |
|
326 |
# hg_commit $msg |
|
327 |
# |
|
28
647f6de0d0ac
update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents:
27
diff
changeset
|
328 |
function hg_commit { |
44 | 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 | 336 |
|
44 | 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 | 339 |
## Compare the given output file with all given source files: |
340 |
# |
|
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 | 344 |
function check_update { |
345 |
# target |
|
44 | 346 |
local out=$1; shift |
8 | 347 |
|
44 | 348 |
debug "$out" |
8 | 349 |
|
350 |
# need update? |
|
351 |
local update= |
|
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 | 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 | 363 |
update=y |
364 |
fi |
|
365 |
||
366 |
# check deps |
|
367 |
for dep in "$@"; do |
|
368 |
# don't bother checking if already figured out |
|
369 |
[ $update ] && continue |
|
370 |
||
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 | 374 |
|
44 | 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 | 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 | 380 |
fi |
381 |
done |
|
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 | 384 |
|
385 |
# return |
|
386 |
[ $update ] |
|
387 |
} |
|
388 |
||
44 | 389 |
## Generate updated output file from given command's stdout: |
390 |
# |
|
391 |
# do_update $out $BIN/cmd --args |
|
392 |
# |
|
393 |
# Writes output to a temporary .new file, optionally shows a diff of changes, and commits |
|
394 |
# the new version to $out (unless noop'd). |
|
8 | 395 |
function do_update { |
44 | 396 |
local out=$1; shift |
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 | 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 | 402 |
# compare |
44 | 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 | 405 |
|
406 |
# terse |
|
44 | 407 |
indent " " diff --unified=1 $ROOT/$out $ROOT/$tmp || true |
8 | 408 |
fi |
409 |
||
44 | 410 |
# deploy |
8 | 411 |
if [ $UPDATE_NOOP ]; then |
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 | 414 |
|
28
647f6de0d0ac
update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents:
27
diff
changeset
|
415 |
cmd rm $ROOT/$tmp |
8 | 416 |
else |
417 |
# commit |
|
44 | 418 |
debug " deploy" |
8 | 419 |
|
44 | 420 |
cmd mv $ROOT/$tmp $ROOT/$out |
8 | 421 |
fi |
422 |
} |
|
423 |
||
44 | 424 |
## Look for a link target: |
425 |
# |
|
426 |
# find_link $lnk $tgt... |
|
427 |
# |
|
428 |
# Outputs the first given target to exist, skipping any that are the same as the given $lnk. |
|
429 |
# If no $tgt matches, outputs the last one, or '-'. |
|
430 |
function choose_link { |
|
431 |
local lnk=$1; shift |
|
432 |
local tgt=- |
|
433 |
||
434 |
for tgt in "$@"; do |
|
435 |
[ $tgt != $out ] && [ -e $ROOT/$tgt ] && break |
|
436 |
done |
|
437 |
||
438 |
echo $tgt |
|
439 |
} |
|
440 |
||
441 |
||
442 |
## Compare symlink to target: |
|
443 |
# |
|
444 |
# check_link $lnk $tgt && do_link $lnk $tgt || ... |
|
445 |
# |
|
446 |
# Tests if the symlink exists, and the target matches. |
|
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 | 451 |
|
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 | 456 |
|
44 | 457 |
## Update symlink to point to target: |
458 |
# |
|
459 |
# do_link $lnk $tgt |
|
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 | 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 | 468 |
## Update .serial number: |
469 |
# |
|
470 |
# do_update_serial $serial |
|
471 |
# |
|
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 | 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 | 488 |
## Perform `hg commit` for $DATA |
489 |
function do_commit { |
|
490 |
local msg=$1 |
|
491 |
||
492 |
indent " " hg_diff |
|
493 |
||
494 |
hg_commit "$msg" |
|
495 |
} |
|
496 |
||
497 |
### Hosts |
|
498 |
## Update hosts from verbatim from input zone data: |
|
499 |
# |
|
500 |
# copy_hosts $ZONES/$zone $DATA/$base |
|
501 |
# |
|
502 |
# Writes updated zone to $zone, deps on $base. |
|
503 |
function copy_hosts { |
|
504 |
local zone=$1 |
|
505 |
local base=$2 |
|
506 |
||
507 |
if check_update $zone $base; then |
|
508 |
log_update "Copying hosts $zone <- $base..." |
|
509 |
||
510 |
do_update $zone \ |
|
511 |
cat $ROOT/$base |
|
512 |
else |
|
513 |
log_skip "Copying hosts $zone <- $base: not changed" |
|
514 |
fi |
|
515 |
} |
|
516 |
||
517 |
## Generate hosts from input zone data using $BIN/process-zone: |
|
518 |
# |
|
519 |
# update_hosts $ZONES/$zone $DATA/$base |
|
520 |
# |
|
521 |
# Writes process-zone'd data to $zone, deps on $base. |
|
522 |
function update_hosts { |
|
523 |
local zone=$1; shift |
|
524 |
local base=$1; shift |
|
525 |
||
526 |
if check_update $zone $base; then |
|
527 |
log_update "Generating hosts $zone <- $base..." |
|
528 |
||
529 |
do_update $zone \ |
|
530 |
$BIN/process-zone $PROCESS_ARGS $ROOT/$base "$@" |
|
531 |
else |
|
532 |
log_skip "Generating hosts $zone <- $base: not changed" |
|
533 |
fi |
|
534 |
} |
|
535 |
||
536 |
## Generate new serial for zone using $BIN/update-serial, if the zone data has changed: |
|
537 |
# |
|
538 |
# update_serial $zone $deps... |
|
539 |
# |
|
540 |
# Supports SERIAL_FORCE/NOOP. |
|
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 | 566 |
## Link serial for zone from given base-zone: |
567 |
# |
|
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 | 586 |
## Update zone file verbatim from source: |
587 |
# |
|
588 |
# copy_zone $view $zone [$base] |
|
589 |
# |
|
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 | 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 | 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 | 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 | 606 |
fi |
2 | 607 |
} |
608 |
||
44 | 609 |
## Expand zone file from source using $BIN/expand-zone: |
610 |
# |
|
611 |
# update_zone $view $zone [$base] |
|
612 |
# |
|
613 |
# Processed $DATA/$base zone data through $BIN/expand-zone, writing output to $ZONES/$view/$zone. |
|
2 | 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 | 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 | 627 |
|
628 |
do_update $out \ |
|
40 | 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 | 632 |
--expand view=$view |
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 | 635 |
fi |
636 |
} |
|
637 |
||
44 | 638 |
## Link zone file to ues given shared zone. |
639 |
# |
|
640 |
# link_zone $view $zone [$base] |
|
641 |
# |
|
642 |
# Looks for shared zone at: |
|
643 |
# $ZONES/$view/$base |
|
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 | 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 | 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 | 663 |
## Test hosts zone for validity: |
664 |
# |
|
665 |
# check_hosts $DATA/$hosts --check-exempt ... |
|
666 |
# |
|
667 |
# Fails if the check fails. |
|
13 | 668 |
function check_hosts { |
669 |
local hosts=$1; shift 1 |
|
670 |
||
40 | 671 |
local cmd=($BIN/process-zone $PROCESS_ARGS $ROOT/$hosts --check-hosts "$@") |
13 | 672 |
|
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 | 675 |
else |
676 |
log_error " Check $hosts: Failed" |
|
677 |
||
678 |
indent " " "${cmd[@]}" |
|
679 |
||
680 |
exit 1 |
|
681 |
fi |
|
682 |
} |
|
683 |
||
44 | 684 |
## Test zone file for validity using named-checkzone: |
685 |
# |
|
686 |
# check_zone $view $zone $origin |
|
687 |
# |
|
688 |
# Uses the zonefile at $ZONES/$view/$zone, loading it with given initial $ORIGIN. |
|
689 |
# Fails if the check fails. |
|
10 | 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 | 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 | 698 |
|
10 | 699 |
# test |
13 | 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 | 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 | 705 |
|
13 | 706 |
indent " " "${cmd[@]}" |
707 |
||
708 |
exit 1 |
|
10 | 709 |
fi |
710 |
} |
|
711 |
||
44 | 712 |
## Load update zonefiles into bind: |
713 |
# |
|
714 |
# deploy_zones |
|
715 |
# |
|
716 |
# Invokes `rndc reload`, showing its output. |
|
27 | 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 | 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 | 725 |
|
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 | 728 |
|
729 |
# run |
|
730 |
indent " rndc: " \ |
|
731 |
$RNDC reload |
|
732 |
fi |
|
27 | 733 |
} |
44 | 734 |
## Commit changes in $DATA to version control: |
735 |
# |
|
736 |
# commit_data |
|
737 |
# |
|
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 | 741 |
local commit_msg="$COMMIT_MSG" |
21 | 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 | 744 |
|
44 | 745 |
# operate? |
746 |
if [ $COMMIT_FORCE ]; then |
|
747 |
log_force "$msg..." |
|
748 |
||
749 |
do_commit "$commit_msg" |
|
750 |
||
751 |
elif ! hg_modified; then |
|
752 |
log_skip "$msg: no changes" |
|
753 |
||
754 |
elif [ $COMMIT_SKIP ]; then |
|
755 |
log_noop "$msg: skipped" |
|
756 |
||
21 | 757 |
else |
44 | 758 |
log_update "msg..." |
759 |
||
760 |
do_commit "$commit_msg" |
|
21 | 761 |
fi |
762 |
} |
|
763 |
||
44 | 764 |
## Site settings, used as arguments to scripts |
765 |
# MX record to generate in hosts --forward-zone |
|
766 |
FORWARD_MX=mail |
|
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
767 |
|
44 | 768 |
# IP network to generate reverse records for in --reverse-zone |
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 | 771 |
# Origin domain to generate reverse records for in --reverse-zone |
772 |
REVERSE_DOMAIN=paivola.fi |
|
28
647f6de0d0ac
update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents:
27
diff
changeset
|
773 |
|
44 | 774 |
# Views used |
775 |
VIEWS=(internal external) |
|
776 |
||
777 |
# Base domain zone for domains |
|
778 |
DOMAIN_BASE=paivola |
|
779 |
||
780 |
# List of actual domains used; will be linked to $DOMAIN_BASE |
|
781 |
DOMAINS=(paivola.fi paivola.net paivola.org paivola.info paivola.mobi xn--pivl-load8j.fi) |
|
782 |
||
783 |
## Operate! |
|
784 |
function run { |
|
785 |
## Hosts |
|
27 | 786 |
# test |
13 | 787 |
log "Testing hosts..." |
44 | 788 |
# data args... |
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 | 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 | 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 | 805 |
|
44 | 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 | 813 |
|
44 | 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 | 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 | 824 |
$ZONES/includes/paivola:* \ |
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 | 828 |
|
44 | 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 | 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 | 843 |
## Test |
10 | 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 | 852 |
|
44 | 853 |
## Domains... |
854 |
log "Linking domains..." |
|
855 |
for view in "${VIEWS[@]}"; do |
|
856 |
for zone in "${DOMAINS[@]}"; do |
|
857 |
# link |
|
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 | 860 |
# test |
861 |
check_zone $view $zone $zone |
|
862 |
done |
|
30
1a8bc67b1eb7
update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents:
29
diff
changeset
|
863 |
done |
44 | 864 |
|
865 |
## Deploy |
|
866 |
log "Deploy zones..." |
|
867 |
deploy_zones |
|
868 |
||
869 |
## Commit |
|
870 |
log "Commit data..." |
|
871 |
commit_data |
|
872 |
} |
|
873 |
||
874 |
## Main entry point |
|
875 |
function main { |
|
876 |
# test tty |
|
877 |
[ -t 1 ] && IS_TTY=y |
|
878 |
||
879 |
parse_args "$@" |
|
880 |
||
881 |
## test env |
|
882 |
[ -d $ROOT/$DATA ] || die "Missing data: $ROOT/$DATA" |
|
883 |
ensure_dir $ZONES |
|
884 |
||
885 |
## Output dirs |
|
886 |
for dir in "common" "hosts" "includes" "${VIEWS[@]}"; do |
|
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 | 890 |
## Go |
891 |
run |
|
2 | 892 |
} |
893 |
||
7
f4457348faa0
update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents:
2
diff
changeset
|
894 |
main "$@" |