make a backup before upgrade

+ add no_backup flag
+ add keep_maintenance_mode internal flag
This commit is contained in:
Marc Koch 2020-12-16 23:06:27 +01:00
parent def0776066
commit 4bf6a7d91f
Signed by: marc
GPG Key ID: AC2D4E00990A6767
3 changed files with 60 additions and 43 deletions

View File

@ -9,6 +9,7 @@ import shutil
from colorama import Fore, Style
from pathlib import Path
from utils import _print
import utils
class Container:
@ -198,21 +199,24 @@ class Container:
return False
# Disable Nextcloud maintenance mode
def __disable_maintenance_mode(self):
try:
disable_maintenance_mode = check_output(
["docker", "exec", "--user", "www-data", self.app_container, "php", "occ", "maintenance:mode", "--off"])
chunks = disable_maintenance_mode.decode("utf-8").split('\n')
if 'Maintenance mode disabled' in chunks:
_print(F"Disable Nextcloud maintenance mode: {self.SUCCESS}")
return True
else:
def __disable_maintenance_mode(self) -> bool:
if not utils.keep_maintenance_mode:
try:
disable_maintenance_mode = check_output(
["docker", "exec", "--user", "www-data", self.app_container, "php", "occ", "maintenance:mode", "--off"])
chunks = disable_maintenance_mode.decode("utf-8").split('\n')
if 'Maintenance mode disabled' in chunks:
_print(F"Disable Nextcloud maintenance mode: {self.SUCCESS}")
return True
else:
_print(F"Disable Nextcloud maintenance mode: {self.FAILED}")
return False
except:
self.exceptions.update({'__disable_maintenance_mode': traceback.format_exc()})
_print(F"Disable Nextcloud maintenance mode: {self.FAILED}")
return False
except:
self.exceptions.update({'__disable_maintenance_mode': traceback.format_exc()})
_print(F"Disable Nextcloud maintenance mode: {self.FAILED}")
return False
else:
return True
# Pull new docker images
def __pull_images(self):

View File

@ -10,6 +10,7 @@ import utils
from utils import _print
from models import Container
from models import Log
import backup
def upgrade():
@ -35,40 +36,48 @@ def upgrade():
container: Container
for container in containers.values():
# Start backup
_print("----------------------------------------------")
_print(F"Start upgrade for {container.name} at {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
result = container.upgrade()
if result == 1:
_print(F"{Fore.GREEN}{container.name} upgraded successfully{Style.RESET_ALL}")
upgrade_status = True
elif result == 2:
_print(F"{Fore.GREEN}No upgrades available for {container.name}.{Style.RESET_ALL}")
upgrade_status = True
else:
_print(F"{Fore.RED}Upgrade for {container.name} failed{Style.RESET_ALL}")
for func, traceback in container.exceptions.items():
_print()
_print(F"{Fore.YELLOW}Exception occurred in method: Container.{func}(){Style.RESET_ALL}")
_print(traceback)
_print()
upgrade_status = False
go_on = True
# Make a backup
if not utils.no_backup:
utils.keep_maintenance_mode = True
go_on = backup.backup()
# Log upgrade
if not utils.no_log and settings_list['log']['logging']:
if upgrade_status:
log.log(F"Upgrade ; {container.name} ; SUCCESS")
if go_on:
# Make the upgrade
utils.keep_maintenance_mode = True if "--maintenance" in sys.argv else False
_print("----------------------------------------------")
_print(F"Start upgrade for {container.name} at {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
result = container.upgrade()
if result == 1:
_print(F"{Fore.GREEN}{container.name} upgraded successfully{Style.RESET_ALL}")
upgrade_status = True
elif result == 2:
_print(F"{Fore.GREEN}No upgrades available for {container.name}.{Style.RESET_ALL}")
upgrade_status = True
else:
log.log(F"Upgrade ; {container.name} ; FAIL")
if len(log.exceptions) > 0:
for func, traceback in log.exceptions.items():
_print()
_print(F"{Fore.YELLOW}Exception occurred in method: Log.{func}(){Style.RESET_ALL}")
_print(traceback)
_print()
_print(F"{Fore.RED}Upgrade for {container.name} failed{Style.RESET_ALL}")
for func, traceback in container.exceptions.items():
_print()
_print(F"{Fore.YELLOW}Exception occurred in method: Container.{func}(){Style.RESET_ALL}")
_print(traceback)
_print()
upgrade_status = False
# Log upgrade
if not utils.no_log and settings_list['log']['logging']:
if upgrade_status:
log.log(F"Upgrade ; {container.name} ; SUCCESS")
else:
log.log(F"Upgrade ; {container.name} ; FAIL")
if len(log.exceptions) > 0:
for func, traceback in log.exceptions.items():
_print()
_print(F"{Fore.YELLOW}Exception occurred in method: Log.{func}(){Style.RESET_ALL}")
_print(traceback)
_print()
return upgrade_status
if __name__ == '__main__':
upgrade()
upgrade()

View File

@ -4,7 +4,10 @@ no_log = False
no_cleanup = False
all_containers = False
no_confirm = False
no_backup = False
# intern Flags
keep_maintenance_mode = False
def set_flags(flags=list):
@ -20,6 +23,7 @@ def set_flags(flags=list):
all_containers = "--all" in flags
no_cleanup = "--nocleanup" in flags
no_confirm = "--yes" in flags
no_backup = "--nobackup" in flags
def _print(text=None):