changeset 31 | 2b7aad3466c6 |
parent 30 | 1a8bc67b1eb7 |
child 32 | 694dab02a6b0 |
30:1a8bc67b1eb7 | 31:2b7aad3466c6 |
---|---|
6 ROOT=$(pwd) |
6 ROOT=$(pwd) |
7 |
7 |
8 # resolve $0 |
8 # resolve $0 |
9 self=$0 |
9 self=$0 |
10 while [ -L $self ]; do |
10 while [ -L $self ]; do |
11 self=$(dirname $self)/$(readlink $self) |
11 tgt=$(readlink $self) |
12 |
|
13 if [ "${tgt:0:1}" == "/" ]; then |
|
14 self=$tgt |
|
15 else |
|
16 self=$(dirname $self)/$tgt |
|
17 fi |
|
12 done |
18 done |
13 |
19 |
14 # bin dir |
20 # bin dir |
15 BIN=$(dirname $self) |
21 BIN=$(dirname $self) |
16 PROCESS_ZONE=$BIN/process-zone |
22 PROCESS_ZONE=$BIN/process-zone |
19 |
25 |
20 # data files |
26 # data files |
21 DATA=settings |
27 DATA=settings |
22 ZONES=zones |
28 ZONES=zones |
23 SERIALS=$DATA |
29 SERIALS=$DATA |
30 REPO=$DATA |
|
24 |
31 |
25 # data args |
32 # data args |
26 PROCESS_ARGS='--input-charset latin-1' |
33 PROCESS_ARGS='--input-charset latin-1' |
27 |
34 |
28 FORWARD_MX=mail |
35 FORWARD_MX=mail |
29 REVERSE_ZONE=194.197.235 |
36 REVERSE_ZONE=194.197.235 |
30 REVERSE_DOMAIN=paivola.fi |
37 REVERSE_DOMAIN=paivola.fi |
31 |
38 |
32 # external progs |
39 # external progs |
33 NAMED_CHECKZONE=/usr/sbin/named-checkzone |
40 NAMED_CHECKZONE=/usr/sbin/named-checkzone |
34 HG=hg |
41 HG=/usr/bin/hg |
35 RNDC=/usr/sbin/rndc |
42 RNDC=/usr/sbin/rndc |
36 |
43 |
37 ## options |
44 ## options |
38 IS_TTY= |
45 IS_TTY= |
39 |
46 |
47 LOG_WARN=y |
|
40 LOG=y |
48 LOG=y |
41 LOG_INFO= |
49 LOG_INFO= |
42 LOG_DEBUG= |
50 LOG_DEBUG= |
43 LOG_CMD= |
51 LOG_CMD= |
44 |
52 |
91 exit 0 |
99 exit 0 |
92 ;; |
100 ;; |
93 |
101 |
94 d) ROOT="$OPTARG" ;; |
102 d) ROOT="$OPTARG" ;; |
95 |
103 |
96 q) LOG= ;; |
104 q) |
105 LOG= |
|
106 LOG_WARN= |
|
107 ;; |
|
108 |
|
97 v) LOG_INFO=y ;; |
109 v) LOG_INFO=y ;; |
98 D) |
110 D) |
99 LOG_DEBUG=y |
111 LOG_DEBUG=y |
100 LOG_INFO=y |
112 LOG_INFO=y |
101 ;; |
113 ;; |
143 |
155 |
144 function log_error { |
156 function log_error { |
145 log_color 31 "$*" |
157 log_color 31 "$*" |
146 } |
158 } |
147 |
159 |
160 function log_warn { |
|
161 [ $LOG_WARN ] && log_color 33 "$*" || true |
|
162 } |
|
163 |
|
148 function log { |
164 function log { |
149 [ $LOG ] && log_msg "$*" || true |
165 [ $LOG ] && log_msg "$*" || true |
150 } |
166 } |
151 |
167 |
152 function log_info { |
168 function log_info { |
205 local indent=$1; shift |
221 local indent=$1; shift |
206 |
222 |
207 log_cmd "$@" |
223 log_cmd "$@" |
208 |
224 |
209 "$@" | sed "s/^/$indent/" |
225 "$@" | sed "s/^/$indent/" |
226 |
|
227 return ${PIPESTATUS[0]} |
|
210 } |
228 } |
211 |
229 |
212 function abspath () { |
230 function abspath () { |
213 echo "$ROOT/$1" |
231 echo "$ROOT/$1" |
214 } |
232 } |
215 |
233 |
216 ## hg |
234 ## hg |
217 function hg { |
235 function hg { |
218 local repo=$r |
236 local repo=$1; shift |
219 |
237 |
220 $HG -R $ROOT/$repo "$@" |
238 cmd $HG -R $ROOT/$repo "$@" |
221 } |
239 } |
222 |
240 |
223 function hg_modified { |
241 function hg_modified { |
224 local repo=$1 |
242 local repo=$1 |
225 |
243 |
249 local repo=$1 |
267 local repo=$1 |
250 local msg=$2 |
268 local msg=$2 |
251 local user_opt=$(hg_user) |
269 local user_opt=$(hg_user) |
252 |
270 |
253 log_debug "commit: $user_opt: $msg" |
271 log_debug "commit: $user_opt: $msg" |
254 cmd hg $repo commit $user_opt -m "$msg" |
272 hg $repo commit $user_opt -m "$msg" |
255 } |
273 } |
256 |
274 |
257 |
275 |
258 ## functions |
276 ## functions |
259 function check_update { |
277 function check_update { |
423 local zone=$1 |
441 local zone=$1 |
424 local view=$2 |
442 local view=$2 |
425 local base=$3 |
443 local base=$3 |
426 |
444 |
427 local lnk=$ZONES/$view/$zone.zone |
445 local lnk=$ZONES/$view/$zone.zone |
428 local tgt=$ZONES/$view/$base.zone |
446 local tgt |
429 |
447 |
448 if [ $zone == $base ]; then |
|
449 # out of view |
|
450 log_debug "$view/$zone: base $base from root" |
|
451 tgt=$ZONES/$base.zone |
|
452 else |
|
453 log_debug "$view/$zone: base $base from view" |
|
454 tgt=$ZONES/$view/$base.zone |
|
455 fi |
|
456 |
|
430 if [ -e $ROOT/$lnk ] && [ $(readlink $ROOT/$lnk) == $ROOT/$tgt ]; then |
457 if [ -e $ROOT/$lnk ] && [ $(readlink $ROOT/$lnk) == $ROOT/$tgt ]; then |
431 log_info "Linking $lnk -> $tgt: not changed" |
458 log_info "Linking $lnk -> $tgt: not changed" |
432 |
459 |
433 else |
460 else |
434 log_info "Linking $lnk -> $tgt..." |
461 log_info "Linking $lnk -> $tgt..." |
503 fi |
530 fi |
504 } |
531 } |
505 |
532 |
506 # deploy new zone data to bind |
533 # deploy new zone data to bind |
507 function deploy_zones { |
534 function deploy_zones { |
508 cmd $RNDC reload |
535 indent " rndc: " $RNDC reload |
509 } |
536 } |
510 |
537 |
511 # commit data changes |
538 # commit data changes |
512 function commit_data { |
539 function commit_data { |
513 local repo=$DATA |
540 local repo=$1 |
514 |
541 |
515 if hg_modified $repo; then |
542 if hg_modified $repo; then |
516 log_info "Commit changes in $repo:" |
543 log_info "Commit changes in $repo:" |
517 |
544 |
518 indent " " hg_diff $repo |
545 indent " " hg_diff $repo |
519 |
546 |
520 hg_commit $repo "$COMMIT_MSG" |
547 hg_commit $repo "$COMMIT_MSG" |
521 else |
548 else |
522 log_info "Commit changes in $repo: no changes" |
549 log_info "Commit changes in $repo: no changes" |
550 fi |
|
551 } |
|
552 |
|
553 function ensure_dir { |
|
554 local dir=$1 |
|
555 |
|
556 if [ ! -d $ROOT/$dir ]; then |
|
557 log_warn "Creating output dir: $dir" |
|
558 cmd mkdir $ROOT/$dir |
|
523 fi |
559 fi |
524 } |
560 } |
525 |
561 |
526 function main { |
562 function main { |
527 # test tty |
563 # test tty |
528 [ -t 1 ] && IS_TTY=y |
564 [ -t 1 ] && IS_TTY=y |
565 |
|
566 local views=(internal external) |
|
529 |
567 |
530 parse_args "$@" |
568 parse_args "$@" |
531 |
569 |
532 ## test env |
570 ## test env |
533 [ -d $ROOT/$DATA ] || die "Missing data: $ROOT/$DATA" |
571 [ -d $ROOT/$DATA ] || die "Missing data: $ROOT/$DATA" |
534 [ -d $ROOT/$SERIALS ] || die "Missing serials: $ROOT/$SERIALS" |
572 ensure_dir $ZONES |
535 [ -d $ROOT/$ZONES ] || die "Missing zones: $ROOT/$ZONES" |
573 |
574 # views |
|
575 for view in "${views[@]}"; do |
|
576 ensure_dir $ZONES/$view |
|
577 done |
|
536 |
578 |
537 ## hosts |
579 ## hosts |
538 # test |
580 # test |
539 log "Testing hosts..." |
581 log "Testing hosts..." |
540 check_hosts $DATA/paivola.txt --check-exempt ufc |
582 check_hosts $DATA/paivola.txt --check-exempt ufc |
575 check_zone paivola.fi $ZONES/external/paivola.zone |
617 check_zone paivola.fi $ZONES/external/paivola.zone |
576 check_zone paivola.fi $ZONES/internal/paivola.zone |
618 check_zone paivola.fi $ZONES/internal/paivola.zone |
577 check_zone 235.197.194.in-addr.arpa $ZONES/paivola-reverse.zone |
619 check_zone 235.197.194.in-addr.arpa $ZONES/paivola-reverse.zone |
578 |
620 |
579 # extra zones... |
621 # extra zones... |
580 local views=(internal external) |
|
581 local base_zone=paivola |
622 local base_zone=paivola |
582 local link_zones=(paivola.fi paivola.net paivola.org paivola.info paivola.mobi xn--pivl-load8j.fi) |
623 local link_zones=(paivola.fi paivola.net paivola.org paivola.info paivola.mobi xn--pivl-load8j.fi) |
583 |
624 |
584 log "Linking extra zones..." |
625 log "Linking extra zones..." |
585 for view in "${views[@]}"; do |
626 for view in "${views[@]}"; do |
586 for zone in "${link_zones[@]}"; do |
627 for zone in "${link_zones[@]}"; do |
587 link_zone_view $zone $view $base_zone |
628 link_zone_view $zone $view $base_zone |
588 check_zone $zone $ZONES/$view/$zone.zone |
629 check_zone $zone $ZONES/$view/$zone.zone |
589 done |
630 done |
631 |
|
632 # reverse |
|
633 link_zone_view paivola-reverse $view paivola-reverse |
|
590 done |
634 done |
591 |
635 |
592 ## deploy |
636 ## deploy |
593 if [ $DEPLOY_SKIP ]; then |
637 if [ $DEPLOY_SKIP ]; then |
594 log "Deploy zones: skipped" |
638 log "Deploy zones: skipped" |
603 if [ $COMMIT_SKIP ] && [ ! $COMMIT_FORCE ]; then |
647 if [ $COMMIT_SKIP ] && [ ! $COMMIT_FORCE ]; then |
604 log "Commit data: skipped" |
648 log "Commit data: skipped" |
605 |
649 |
606 else |
650 else |
607 log "Commit data..." |
651 log "Commit data..." |
608 commit_data |
652 commit_data $REPO |
609 fi |
653 fi |
610 } |
654 } |
611 |
655 |
612 main "$@" |
656 main "$@" |