bin/update
changeset 42 ef5bcc4145de
parent 41 baae373b787e
child 43 b2ac0fd85828
equal deleted inserted replaced
41:baae373b787e 42:ef5bcc4145de
   190 
   190 
   191         level=$(($level + 1))
   191         level=$(($level + 1))
   192     done
   192     done
   193 }
   193 }
   194 
   194 
       
   195 function func_caller {
       
   196     caller 1 | cut -d ' ' -f 2
       
   197 }
       
   198 
       
   199 function debug {
       
   200     printf -v prefix "%s" $(func_caller)
       
   201 
       
   202     log_debug "$prefix: $*"
       
   203 }
       
   204 
   195 function fail {
   205 function fail {
   196     func=$(caller 1 | cut -d ' ' -f 2)
   206     log_error "$(func_caller): $*"
   197     
       
   198     log_error "$func: $*"
       
   199 
   207 
   200     exit 2
   208     exit 2
   201 }
   209 }
   202 
   210 
   203 function die {
   211 function die {
   256 function hg_user {
   264 function hg_user {
   257     if [ ${SUDO_USER:-} ]; then
   265     if [ ${SUDO_USER:-} ]; then
   258         echo '-u' "$SUDO_USER"
   266         echo '-u' "$SUDO_USER"
   259 
   267 
   260     elif [ $HOME ] && [ -e $HOME/.hgrc ]; then
   268     elif [ $HOME ] && [ -e $HOME/.hgrc ]; then
   261         log_debug "using .hgrc user"
   269         debug "using .hgrc user"
   262         echo ''
   270         echo ''
   263 
   271 
   264     else
   272     else
   265         echo '-u' "$USER"
   273         echo '-u' "$USER"
   266     fi
   274     fi
   272 
   280 
   273 function hg_commit {
   281 function hg_commit {
   274     local msg=$2
   282     local msg=$2
   275     local user_opt=$(hg_user)
   283     local user_opt=$(hg_user)
   276     
   284     
   277     log_debug "commit: $user_opt: $msg"
   285     debug "$user_opt: $msg"
   278     hg commit $user_opt -m "$msg"
   286     hg commit $user_opt -m "$msg"
   279 }
   287 }
   280 
   288 
   281 
   289 
   282 ## functions
   290 ## functions
   283 function check_update {
   291 function check_update {
   284     # target
   292     # target
   285     local dst=$1; shift
   293     local dst=$1; shift
   286 
   294 
   287     log_debug "check_update: $dst"
   295     debug "$dst"
   288 
   296 
   289     # need update?
   297     # need update?
   290     local update=
   298     local update=
   291 
   299 
   292     if [ ! -e $dst ] || [ $UPDATE_FORCE ]; then
   300     if [ ${#@} == 0 ]; then
   293         log_debug "  update forced"
   301         debug "  update: unknown deps"
       
   302         update=y
       
   303 
       
   304     elif [ ! -e $dst ]; then
       
   305         debug "  update: dest missing"
       
   306         update=y
       
   307         
       
   308     elif [ $UPDATE_FORCE ]; then
       
   309         debug "  update: forced"
   294         update=y
   310         update=y
   295     fi
   311     fi
   296 
   312 
   297     # check deps
   313     # check deps
   298     for dep in "$@"; do
   314     for dep in "$@"; do
   302         # check
   318         # check
   303         if [ ! -e $ROOT/$dep ]; then
   319         if [ ! -e $ROOT/$dep ]; then
   304             fail "$dst: Missing source: $dep"
   320             fail "$dst: Missing source: $dep"
   305 
   321 
   306         elif [ $ROOT/$dst -ot $ROOT/$dep ]; then
   322         elif [ $ROOT/$dst -ot $ROOT/$dep ]; then
   307             log_debug "  changed: $dep"
   323             debug "  update: $dep"
   308             update=y
   324             update=y
       
   325         else
       
   326             debug "  check: $dep"
   309         fi
   327         fi
   310     done
   328     done
   311 
   329 
   312     [ ! $update ] && log_debug "  up-to-date"
   330     [ ! $update ] && debug "  up-to-date"
   313 
   331 
   314     # return
   332     # return
   315     [ $update ]
   333     [ $update ]
   316 }
   334 }
   317 
   335 
   318 function do_update {
   336 function do_update {
   319     local dst=$1; shift
   337     local dst=$1; shift
   320     local tmp=$dst.new
   338     local tmp=$dst.new
   321 
   339 
   322     log_debug "update: $dst"
   340     debug "$dst"
   323     cmd "$@" > $ROOT/$tmp
   341     cmd "$@" > $ROOT/$tmp
   324 
   342 
   325     # compare
   343     # compare
   326     if [ -e $ROOT/$dst ] && [ $UPDATE_DIFF ]; then
   344     if [ -e $ROOT/$dst ] && [ $UPDATE_DIFF ]; then
   327         log_debug "  changes:"
   345         debug "  changes:"
   328 
   346 
   329         # terse
   347         # terse
   330         indent "        " diff --unified=1 $ROOT/$dst $ROOT/$tmp || true
   348         indent "        " diff --unified=1 $ROOT/$dst $ROOT/$tmp || true
   331     fi
   349     fi
   332     
   350     
   333     if [ $UPDATE_NOOP ]; then
   351     if [ $UPDATE_NOOP ]; then
   334         # cleanup
   352         # cleanup
   335         log_debug "  no-op"
   353         debug "  no-op"
   336 
   354 
   337         cmd rm $ROOT/$tmp
   355         cmd rm $ROOT/$tmp
   338     else
   356     else
   339         # commit
   357         # commit
   340         log_debug "  update"
   358         debug "  commit"
   341 
   359 
   342         cmd mv $ROOT/$tmp $ROOT/$dst
   360         cmd mv $ROOT/$tmp $ROOT/$dst
   343     fi
   361     fi
   344 }
   362 }
   345 
   363 
   368     if check_update $dst "${dep[@]}"; then
   386     if check_update $dst "${dep[@]}"; then
   369         log_info "$msg..."
   387         log_info "$msg..."
   370 
   388 
   371         do_update $dst "${cmd[@]}"
   389         do_update $dst "${cmd[@]}"
   372     else
   390     else
   373         log_debug "$msg: not changed"
   391         log_skip "$msg: not changed"
   374 
   392 
   375     fi
   393     fi
   376 }
   394 }
   377 
   395 
   378 function check_link {
   396 function check_link {
   420     fi
   438     fi
   421 }
   439 }
   422 
   440 
   423 ## actions
   441 ## actions
   424 # serial
   442 # serial
   425 function update_serial {
   443 function do_update_serial {
   426     local zone=$1; shift
   444     local serial=$1
   427     
   445 
   428     local serial=$SERIALS/$zone.serial
       
   429    
       
   430     # read
   446     # read
   431     local old=$(test -e $ROOT/$serial && cat $ROOT/$serial || echo '')
   447     local old=$(test -e $ROOT/$serial && cat $ROOT/$serial || echo '')
   432 
   448 
   433     log_info "Updating $serial..."
       
   434 
   449 
   435     cmd $BIN/update-serial $ROOT/$serial
   450     cmd $BIN/update-serial $ROOT/$serial
   436     
   451     
   437     # read
   452     # read
   438     local new=$(cat $ROOT/$serial)
   453     local new=$(cat $ROOT/$serial)
   439         
   454         
   440     log_debug "  $old -> $new"
   455     debug "  $old -> $new"
       
   456 }
       
   457 
       
   458 function update_serial {
       
   459     local zone=$1; shift
       
   460     
       
   461     local serial=$SERIALS/$zone.serial
       
   462 
       
   463     # test
       
   464     if ! check_update $serial "$@"; then
       
   465         log_skip "Updating $serial: not changed"
       
   466 
       
   467     elif [ $SERIAL_NOUPDATE ]; then
       
   468         log_skip "Updating $serial: skipped"
       
   469 
       
   470     else
       
   471         log_info "Updating $serial..."
       
   472 
       
   473         do_update_serial $serial
       
   474     fi
   441 }
   475 }
   442 
   476 
   443 function link_serial {
   477 function link_serial {
   444     local zone=$1
   478     local zone=$1
   445     local base=$2
   479     local base=$2
   626         copy_zone           includes        paivola:external        paivola.zone.external
   660         copy_zone           includes        paivola:external        paivola.zone.external
   627         copy_zone           includes        paivola.auto            paivola.zone.auto
   661         copy_zone           includes        paivola.auto            paivola.zone.auto
   628         copy_zone           includes        paivola.services        paivola.zone.services
   662         copy_zone           includes        paivola.services        paivola.zone.services
   629 
   663 
   630     # serials
   664     # serials
   631     if [ $SERIAL_NOUPDATE ]; then
   665     log "Updating serials..."
   632         log "Updating serials: skipped"
   666 
   633 
   667     #                   zone            *deps
   634     else
   668     update_serial       pvl             $ZONES/hosts/pvl        $DATA/pvl.zone
   635         log "Updating serials..."
   669     update_serial       10              $ZONES/hosts/10         $DATA/10.zone
   636 
   670     update_serial       192.168         $ZONES/hosts/192.168    $DATA/192.168.zone
   637         #                   zone            base
   671 
   638         update_serial       pvl
   672     update_serial     paivola           \
   639         link_serial         10              pvl
   673         $ZONES/hosts/paivola:*          \
   640         link_serial         192.168         pvl
   674         $DATA/paivola.zone              \
   641 
   675         $ZONES/includes/paivola:*       \
   642         update_serial       paivola
   676         $ZONES/includes/paivola.*
   643         update_serial       194.197.235
   677 
   644     fi
   678     update_serial     194.197.235       \
       
   679         $ZONES/hosts/194.197.235        \
       
   680         $DATA/194.197.235.zone          
   645 
   681 
   646     # zones
   682     # zones
   647     log "Updating zones..."
   683     log "Updating zones..."
   648         #                   view        zone            base
   684         #                   view        zone            base
   649         update_zone         internal    pvl
   685         update_zone         internal    pvl