Files
ioBroker.docker/amd64/scripts/maintenance.sh
2021-08-30 19:20:17 +02:00

195 lines
5.7 KiB
Bash

#!/bin/bash
############################
##### default settings #####
############################
autoconfirm=no # yould be set to true by commandline option
####################################
##### declaration of functions #####
####################################
# display help text
display_help() {
echo "This script is build to manage your ioBroker container!"
echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]"
echo " maint [ COMMAND ] [ OPTIONS ]"
echo ''
echo "COMMANDS"
echo "------------------"
echo " status > gives the current state of maintenance mode"
echo " on > switches mantenance mode ON"
echo " off > switches mantenance mode OFF and shuts down/ restarts container"
echo " upgrade > will put container to maintenance mode and upgrade iobroker"
echo ''
echo "OPTIONS"
echo "------------------"
echo " -h|--help > shows this help"
echo " -y|--yes > confirms the used command without asking"
echo ''
exit 0
}
# checking maintenance mode status
check_status() {
if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ]
then
echo 'Maintenance mode is turned ON.'
elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ]
then
echo 'Maintenance mode is turned OFF.'
fi
}
# turn maintenance mode ON
switch_on() {
if [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "no" ] # maintenance mode OFF / autoconfirm = no
then
echo 'You are now going to stop ioBroker and activating maintenance mode for this container.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
exit 0
else
exit 0
fi
elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "yes" ] # maintenance mode OFF / autoconfirm = yes
then
echo 'You are now going to stop ioBroker and activating maintenance mode for this container.'
echo 'This command was already confirmed by -y or --yes option.'
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
exit 0
else
echo 'Maintenance mode is already turned ON.'
fi
}
# turn maintenance mode OFF
switch_off() {
echo 'You are now going to deactivate maintenance mode for this container.'
echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Deactivating maintenance mode and forcing container to stop/ restart...'
echo "stopping" > /opt/scripts/.docker_config/.healthcheck
pkill -u root
exit 0
else
exit 0
fi
}
# upgrade js-controller
upgrade() {
echo 'You are now going to upgrade your js-controller.'
echo 'As this will change data in /opt/iobroker, make sure you have a backup!'
echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.'
echo 'Depending of the restart policy, you container will be stoped/ restarted automatically after the upgrade.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
echo 'Upgrading js-controller...'
iobroker update
iobroker upgrade self
sleep 1
echo 'Done.'
echo 'Container will be stopped/ restarted in 5 seconds...'
sleep 5
echo "stopping" > /opt/scripts/.docker_config/.healthcheck
pkill -u root
exit 0
else
exit 0
fi
}
########################################
##### parsing commands and options #####
########################################
for i in "$@"; do
case $i in
help|-h|--help)
display_help # calling function to display help text
exit
;;
status)
check_status # calling function to check maintenance mode status
;;
-y|--yes)
autoconfirm=yes # answers prompts with "yes"
;;
on|-on)
switch_on # calling function to switch maintenance mode on
exit
;;
-a=*|--argument=*) # dummy exaple for parsing option with value
ARGUMENT="${i#*=}"
shift
;;
-?*)
printf 'WARN: Unknown option (ignored): %s\n' "$1"
;;
*) # Default case: No more options, so break out of the loop.
break
;;
esac
done
while :; do
case $1 in
-h|--help)
display_help # calling function to display help text
exit
;;
-y|--yes)
autoconfirm=yes # answers prompts with "yes"
;;
status)
check_status # calling function to check maintenance mode status
;;
on|-on)
switch_on # calling function to switch maintenance mode on
exit
;;
--) # End of all options.
shift
break
;;
-?*)
printf 'WARN: Unknown option (ignored): %s\n' "$1"
;;
*) # Default case: No more options, so break out of the loop.
break
esac
shift
done
exit 0