bin/update
changeset 31 2b7aad3466c6
parent 30 1a8bc67b1eb7
child 32 694dab02a6b0
equal deleted inserted replaced
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 "$@"