various updates
[distro-setup] / mount-latest-remote
index 76c1bef04b72fd7cda40cf42cb37276faf6649bf..978b21124990747fb9da70a8a3ccfd25c90405ca 100755 (executable)
@@ -25,13 +25,35 @@ fi
 $script_dir/install-my-scripts
 cd /usr/local
 
+ecode=0
+failed_hosts=()
+
+# exit code run
+er() {
+  local ret=0
+  "$@" || ret=$?
+  if (( ret )); then
+    echo "$0: failed command: $*"
+    failed_hosts+=($tg)
+  fi
+  if (( ret > ecode )); then
+    ecode=$ret
+  fi
+}
 for tg; do
   rsynctg=$tg
   if [[ $tg == *:* ]]; then
     rsynctg="[$tg]"
   fi
   # R = relative, t = times, O = omit-dir-times, p = perms
-  rsync -RtOp bin/{mount-latest-subvol,check-subvol-stale} lib/err "root@$rsynctg:/usr/local"
+  er rsync -RtOp bin/{mount-latest-subvol,check-subvol-stale} lib/err "root@$rsynctg:/usr/local" || continue
   # this can hang if we have an old nfs mount
-  ssh root@$tg timeout -s 9 600 /usr/local/bin/mount-latest-subvol
+  ssh root@$tg timeout -s 9 600 /usr/local/bin/mount-latest-subvol ||:
 done
+
+if (( $# == ${#failed_hosts[@]} )); then
+  echo "$0: error: all hosts failed: $*" >&2
+elif (( ${#failed_hosts[@]} )); then
+  echo "$0: error: some hosts failed: ${failed_hosts[@]}" >&2
+fi
+exit $ecode