scwrypts v3 refactor
This commit is contained in:
97
scwrypts/home/update-all-servers
Executable file
97
scwrypts/home/update-all-servers
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/zsh
|
||||
DEPENDENCIES+=(
|
||||
hostnamectl
|
||||
)
|
||||
REQUIRED_ENV+=(
|
||||
WRYN__SERVER_HOSTNAMES
|
||||
)
|
||||
|
||||
CHECK_ENVIRONMENT
|
||||
#####################################################################
|
||||
|
||||
SESSION='update'
|
||||
LOCAL_HOST="$(hostnamectl --static)"
|
||||
|
||||
UPDATE_REMINDER="{ echo \\UPDATE : an error occured - you may want to stop execution of 'update-all-servers' on $LOCAL_HOST\\\"; read; }"
|
||||
|
||||
CHECK_SESSION() {
|
||||
tmux list-sessions >/dev/null 2>&1 \
|
||||
| grep -q "^$SESSION" && return 0 || return 1
|
||||
}
|
||||
|
||||
UPDATE_ALL() {
|
||||
STATUS "starting '$@'"
|
||||
for SERVER in ${WRYN__SERVER_HOSTNAMES[@]}; do UPDATE $SERVER "$@"; done
|
||||
WAIT_FOR_UPDATES \
|
||||
&& SUCCESS "'$@' finished across all servers" \
|
||||
|| FAIL 69 'user abort' \
|
||||
;
|
||||
}
|
||||
|
||||
UPDATE() {
|
||||
local SERVER_HOST="$1"
|
||||
local COMMAND="${@:2} || $UPDATE_REMINDER"
|
||||
[[ $2 =~ ^reboot ]] && [[ $SERVER_HOST =~ $LOCAL_HOST ]] && return 0
|
||||
|
||||
[[ $SERVER_HOST =~ $LOCAL_HOST ]] || {
|
||||
COMMAND="ssh -t $SERVER_HOST.local 'source ~/.zshrc >/dev/null 2>&1; $COMMAND'"
|
||||
}
|
||||
|
||||
tmux new-window -t $SESSION -n $SERVER_HOST "source ~/.zshrc >/dev/null 2>&1; $COMMAND"
|
||||
}
|
||||
|
||||
WAIT_FOR_UPDATES() {
|
||||
while [[ $(tmux list-windows -t $SESSION 2>/dev/null | wc -l) -gt 1 ]]
|
||||
do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
CHECK_SESSION
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
|
||||
CURRENT_SESSION=$(\
|
||||
tmux list-panes -a -F '#{pane_tty} #{session_name}' \
|
||||
| grep $(tty) \
|
||||
| awk '{print $2;}' \
|
||||
)
|
||||
|
||||
#####################################################################
|
||||
|
||||
CHECK_SESSION && FAIL 1 'update currently in progress'
|
||||
|
||||
tmux new -d -s $SESSION "echo 'updating all systems'; echo '(leave this window open)'; while true; do sleep 30; done"
|
||||
|
||||
yN 'after update, do you want to reboot all machines?' && REBOOT=1 || REBOOT=0
|
||||
REMINDER
|
||||
REMINDER 'manual action is required; (in another tab) connect to tmux:'
|
||||
REMINDER "tmux a -t $SESSION"
|
||||
REMINDER
|
||||
REMINDER 'to stop the update at any time, run:'
|
||||
REMINDER "tmux kill-session -t $SESSION"
|
||||
REMINDER
|
||||
|
||||
[ $CURRENT_SESSION ] && {
|
||||
SUCCESS 'currently in a tmux session; opening new window...'
|
||||
tmux new-window -t $CURRENT_SESSION "unset TMUX; tmux a -t $SESSION"
|
||||
}
|
||||
|
||||
UPDATE_ALL 'yay -Syu'
|
||||
UPDATE_ALL 'cd ~/.wryn; git pull --autostash'
|
||||
UPDATE_ALL '~/.wryn/bin/scwrypts config update'
|
||||
UPDATE_ALL '~/.wryn/bin/scwrypts media push'
|
||||
UPDATE_ALL '~/.wryn/bin/scwrypts media pull'
|
||||
UPDATE_ALL 'command -v i3-msg >/dev/null 2>&1 || exit 0; ~/.wryn/bin/scwrypts i3 font override'
|
||||
|
||||
[[ $REBOOT -eq 1 ]] && UPDATE_ALL 'reboot || sudo reboot'
|
||||
|
||||
tmux kill-session -t $SESSION >/dev/null 2>&1
|
||||
CHECK_SESSION && WARNING "unable to close tmux session '$SESSION'"
|
||||
|
||||
SUCCESS
|
||||
SUCCESS 'finished system update accross all servers'
|
||||
SUCCESS
|
||||
|
||||
[[ $REBOOT -eq 1 ]] && { STATUS 'rebooting host machine'; sleep 3; reboot || sudo reboot; }
|
Reference in New Issue
Block a user