mirror of
https://github.com/buanet/ioBroker.docker.git
synced 2025-12-17 10:29:00 +02:00
195 lines
5.7 KiB
Bash
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
|