implement container prompt for backup and upgrade
This commit is contained in:
parent
51d25e0b3f
commit
404f620cc7
13
backup.py
13
backup.py
|
|
@ -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()
|
||||||
|
|
|
||||||
90
upgrade.py
90
upgrade.py
|
|
@ -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__':
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue