implement container prompt for backup and upgrade

This commit is contained in:
Marc Koch 2021-02-14 20:58:04 +01:00
parent 51d25e0b3f
commit 404f620cc7
Signed by: marc
GPG Key ID: AC2D4E00990A6767
2 changed files with 55 additions and 48 deletions

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import datetime import datetime
import os
import sys import sys
from pathlib import Path from pathlib import Path
import yaml import yaml
@ -10,6 +9,7 @@ import utils
from utils import _print from utils import _print
from models import Container from models import Container
from models import Log from models import Log
from simple_term_menu import TerminalMenu
def backup(): def backup():
@ -26,11 +26,18 @@ def backup():
log = Log(settings_list['log']['log_dir']) log = Log(settings_list['log']['log_dir'])
containers = Container.instantiate_containers(settings_list) containers = Container.instantiate_containers(settings_list)
# If any container names were passed as parameters, do only backup them # If any container names were passed as parameters, do only back up them
containers_wanted = {name: container for name, container in containers.items() if name in sys.argv} containers_wanted = {name: container for name, container in containers.items() if name in sys.argv}
if containers_wanted: if containers_wanted:
containers = containers_wanted containers = containers_wanted
# If no container was chosen ask for it
elif not utils.all_containers:
containers_to_choose_from = [container.name for container in containers.values()]
terminal_menu = TerminalMenu(containers_to_choose_from, title="Which Nextcloud instance do you want to back up?")
choice_index = terminal_menu.show()
containers = {containers_to_choose_from[choice_index]: containers.get(containers_to_choose_from[choice_index])}
# Loop through Nextcloud container instances # Loop through Nextcloud container instances
container: Container container: Container
for container in containers.values(): for container in containers.values():
@ -67,8 +74,6 @@ def backup():
# Clean up backup folder # Clean up backup folder
container.cleanup() container.cleanup()
return backup_status
if __name__ == '__main__': if __name__ == '__main__':
backup() backup()

View File

@ -11,10 +11,10 @@ from utils import _print
from models import Container from models import Container
from models import Log from models import Log
import backup import backup
from simple_term_menu import TerminalMenu
def upgrade(): def upgrade():
upgrade_status = True
# Set flags # Set flags
utils.set_flags(sys.argv) utils.set_flags(sys.argv)
@ -32,51 +32,53 @@ def upgrade():
if containers_wanted: if containers_wanted:
containers = containers_wanted containers = containers_wanted
# Loop through Nextcloud container instances # If no container was chosen ask for it
container: Container elif not utils.all_containers:
for container in containers.values(): containers_to_choose_from = [container.name for container in containers.values()]
terminal_menu = TerminalMenu(containers_to_choose_from, title="Which Nextcloud instance do you want to "
"upgrade?")
choice_index = terminal_menu.show()
containers = {containers_to_choose_from[choice_index]: containers.get(containers_to_choose_from[choice_index])}
go_on = True # Loop through Nextcloud container instances
# Make a backup container: Container
if not utils.no_backup: for container in containers.values():
utils.keep_maintenance_mode = True go_on = True
go_on = backup.backup() # Make a backup
if not utils.no_backup:
if go_on: utils.keep_maintenance_mode = True
# Make the upgrade go_on = backup.backup()
utils.keep_maintenance_mode = True if "--maintenance" in sys.argv else False if go_on:
_print("----------------------------------------------") # Make the upgrade
_print(F"Start upgrade for {container.name} at {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") utils.keep_maintenance_mode = True if "--maintenance" in sys.argv else False
result = container.upgrade() _print("----------------------------------------------")
if result == 1: _print(F"Start upgrade for {container.name} at {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
_print(F"{Fore.GREEN}{container.name} upgraded successfully{Style.RESET_ALL}") result = container.upgrade()
upgrade_status = True if result == 1:
elif result == 2: _print(F"{Fore.GREEN}{container.name} upgraded successfully{Style.RESET_ALL}")
_print(F"{Fore.GREEN}No upgrades available for {container.name}.{Style.RESET_ALL}") upgrade_status = True
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()
# Log upgrade
if not utils.no_log and settings_list['log']['logging']:
if upgrade_status:
log.log(F"Upgrade ; {container.name} ; SUCCESS")
else: else:
_print(F"{Fore.RED}Upgrade for {container.name} failed{Style.RESET_ALL}") log.log(F"Upgrade ; {container.name} ; FAIL")
for func, traceback in container.exceptions.items(): if len(log.exceptions) > 0:
_print() for func, traceback in log.exceptions.items():
_print(F"{Fore.YELLOW}Exception occurred in method: Container.{func}(){Style.RESET_ALL}") _print()
_print(traceback) _print(F"{Fore.YELLOW}Exception occurred in method: Log.{func}(){Style.RESET_ALL}")
_print() _print(traceback)
upgrade_status = False _print()
# 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__': if __name__ == '__main__':