feat(backup): integrate backup functionality into multiple extensions and config management

This commit is contained in:
dw-0
2025-09-30 20:36:42 +02:00
parent 5b68710b23
commit 8a8afc60ee
10 changed files with 27 additions and 3 deletions

View File

@@ -96,6 +96,7 @@ def install_klipperscreen() -> None:
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None: def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
BackupService().backup_moonraker_conf()
add_config_section( add_config_section(
section=KLIPPERSCREEN_UPDATER_SECTION_NAME, section=KLIPPERSCREEN_UPDATER_SECTION_NAME,
instances=instances, instances=instances,
@@ -182,6 +183,7 @@ def remove_klipperscreen() -> None:
mr_instances: List[Moonraker] = get_instances(Moonraker) mr_instances: List[Moonraker] = get_instances(Moonraker)
if mr_instances: if mr_instances:
Logger.print_status("Removing KlipperScreen from update manager ...") Logger.print_status("Removing KlipperScreen from update manager ...")
BackupService().backup_moonraker_conf()
remove_config_section("update_manager KlipperScreen", mr_instances) remove_config_section("update_manager KlipperScreen", mr_instances)
Logger.print_ok("KlipperScreen successfully removed from update manager!") Logger.print_ok("KlipperScreen successfully removed from update manager!")

View File

@@ -16,6 +16,7 @@ from components.webui_client.base_data import BaseWebClientConfig
from core.logger import Logger from core.logger import Logger
from core.services.message_service import Message from core.services.message_service import Message
from core.types.color import Color from core.types.color import Color
from utils.common import backup_printer_config_dir
from utils.config_utils import remove_config_section from utils.config_utils import remove_config_section
from utils.fs_utils import run_remove_routines from utils.fs_utils import run_remove_routines
from utils.instance_type import InstanceType from utils.instance_type import InstanceType
@@ -35,6 +36,8 @@ def run_client_config_removal(
if run_remove_routines(client_config.config_dir): if run_remove_routines(client_config.config_dir):
completion_msg.text.append(f"{client_config.display_name} removed") completion_msg.text.append(f"{client_config.display_name} removed")
backup_printer_config_dir()
completion_msg = remove_moonraker_config_section( completion_msg = remove_moonraker_config_section(
completion_msg, client_config, mr_instances completion_msg, client_config, mr_instances
) )

View File

@@ -67,6 +67,7 @@ def run_client_removal(
if remove_client_nginx_logs(client, kl_instances): if remove_client_nginx_logs(client, kl_instances):
completion_msg.text.append("● NGINX logs removed") completion_msg.text.append("● NGINX logs removed")
BackupService().backup_moonraker_conf()
section = f"update_manager {client_name}" section = f"update_manager {client_name}"
handled_instances: List[Moonraker] = remove_config_section( handled_instances: List[Moonraker] = remove_config_section(
section, mr_instances section, mr_instances

View File

@@ -151,6 +151,7 @@ class MobilerakerExtension(BaseExtension):
Logger.print_status( Logger.print_status(
"Removing Mobileraker's companion from update manager ..." "Removing Mobileraker's companion from update manager ..."
) )
BackupService().backup_moonraker_conf()
remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances) remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances)
Logger.print_ok( Logger.print_ok(
"Mobileraker's companion successfully removed from update manager!" "Mobileraker's companion successfully removed from update manager!"
@@ -162,6 +163,7 @@ class MobilerakerExtension(BaseExtension):
Logger.print_error(f"Error removing Mobileraker's companion:\n{e}") Logger.print_error(f"Error removing Mobileraker's companion:\n{e}")
def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None: def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None:
BackupService().backup_moonraker_conf()
add_config_section( add_config_section(
section=MOBILERAKER_UPDATER_SECTION_NAME, section=MOBILERAKER_UPDATER_SECTION_NAME,
instances=instances, instances=instances,

View File

@@ -31,7 +31,11 @@ from extensions.obico import (
from extensions.obico.moonraker_obico import ( from extensions.obico.moonraker_obico import (
MoonrakerObico, MoonrakerObico,
) )
from utils.common import check_install_dependencies, moonraker_exists from utils.common import (
backup_printer_config_dir,
check_install_dependencies,
moonraker_exists,
)
from utils.config_utils import ( from utils.config_utils import (
add_config_section, add_config_section,
remove_config_section, remove_config_section,
@@ -119,6 +123,8 @@ class ObicoExtension(BaseExtension):
cmd_sysctl_manage("daemon-reload") cmd_sysctl_manage("daemon-reload")
backup_printer_config_dir()
# add to klippers config # add to klippers config
self._patch_printer_cfg(kl_instances) self._patch_printer_cfg(kl_instances)
InstanceManager.restart_all(kl_instances) InstanceManager.restart_all(kl_instances)
@@ -165,6 +171,7 @@ class ObicoExtension(BaseExtension):
self._remove_obico_instances(ob_instances) self._remove_obico_instances(ob_instances)
self._remove_obico_dir() self._remove_obico_dir()
self._remove_obico_env() self._remove_obico_env()
backup_printer_config_dir()
remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances) remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances)
remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances) remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -13,6 +13,7 @@ from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker from components.moonraker.moonraker import Moonraker
from core.instance_manager.instance_manager import InstanceManager from core.instance_manager.instance_manager import InstanceManager
from core.logger import DialogType, Logger from core.logger import DialogType, Logger
from core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.octoapp import ( from extensions.octoapp import (
OA_DEPS_JSON_FILE, OA_DEPS_JSON_FILE,
@@ -133,6 +134,7 @@ class OctoappExtension(BaseExtension):
self._remove_OA_store_dirs() self._remove_OA_store_dirs()
self._remove_OA_dir() self._remove_OA_dir()
self._remove_OA_env() self._remove_OA_env()
BackupService().backup_moonraker_conf()
remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances) remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances)
run_remove_routines(OA_INSTALLER_LOG_FILE) run_remove_routines(OA_INSTALLER_LOG_FILE)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -12,6 +12,7 @@ from typing import List
from components.moonraker.moonraker import Moonraker from components.moonraker.moonraker import Moonraker
from core.instance_manager.instance_manager import InstanceManager from core.instance_manager.instance_manager import InstanceManager
from core.logger import DialogType, Logger from core.logger import DialogType, Logger
from core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.octoeverywhere import ( from extensions.octoeverywhere import (
OE_DEPS_JSON_FILE, OE_DEPS_JSON_FILE,
@@ -133,6 +134,7 @@ class OctoeverywhereExtension(BaseExtension):
self._remove_oe_instances(ob_instances) self._remove_oe_instances(ob_instances)
self._remove_oe_dir() self._remove_oe_dir()
self._remove_oe_env() self._remove_oe_env()
BackupService().backup_moonraker_conf()
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances) remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
run_remove_routines(OE_INSTALLER_LOG_FILE) run_remove_routines(OE_INSTALLER_LOG_FILE)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -100,6 +100,7 @@ class SpoolmanExtension(BaseExtension):
mr_instances: List[Moonraker] = mrsvc.get_all_instances() mr_instances: List[Moonraker] = mrsvc.get_all_instances()
Logger.print_status("Removing Spoolman configuration from moonraker.conf...") Logger.print_status("Removing Spoolman configuration from moonraker.conf...")
BackupService().backup_moonraker_conf()
remove_config_section("spoolman", mr_instances) remove_config_section("spoolman", mr_instances)
Logger.print_status("Removing Spoolman from moonraker.asvc...") Logger.print_status("Removing Spoolman from moonraker.asvc...")
@@ -289,6 +290,7 @@ class SpoolmanExtension(BaseExtension):
mrsvc.load_instances() mrsvc.load_instances()
mr_instances = mrsvc.get_all_instances() mr_instances = mrsvc.get_all_instances()
BackupService().backup_moonraker_conf()
# noinspection HttpUrlsUsage # noinspection HttpUrlsUsage
add_config_section( add_config_section(
section="spoolman", section="spoolman",

View File

@@ -13,6 +13,7 @@ from typing import List
from components.moonraker.moonraker import Moonraker from components.moonraker.moonraker import Moonraker
from core.instance_manager.instance_manager import InstanceManager from core.instance_manager.instance_manager import InstanceManager
from core.logger import DialogType, Logger from core.logger import DialogType, Logger
from core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE
from extensions.telegram_bot.moonraker_telegram_bot import ( from extensions.telegram_bot.moonraker_telegram_bot import (
@@ -105,6 +106,7 @@ class TelegramBotExtension(BaseExtension):
cmd_sysctl_manage("daemon-reload") cmd_sysctl_manage("daemon-reload")
# add to moonraker update manager # add to moonraker update manager
BackupService().backup_moonraker_conf()
self._patch_bot_update_manager(mr_instances) self._patch_bot_update_manager(mr_instances)
# restart moonraker # restart moonraker
@@ -150,6 +152,7 @@ class TelegramBotExtension(BaseExtension):
self._remove_bot_instances(tb_instances) self._remove_bot_instances(tb_instances)
self._remove_bot_dir() self._remove_bot_dir()
self._remove_bot_env() self._remove_bot_env()
BackupService().backup_moonraker_conf()
remove_config_section("update_manager moonraker-telegram-bot", mr_instances) remove_config_section("update_manager moonraker-telegram-bot", mr_instances)
self._delete_bot_logs(tb_instances) self._delete_bot_logs(tb_instances)
except Exception as e: except Exception as e:

View File

@@ -73,7 +73,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
tmp.writelines(org_content) tmp.writelines(org_content)
cfg_file.unlink() cfg_file.unlink()
shutil.move(tmp_cfg_path, cfg_file) shutil.move(tmp_cfg_path.as_posix(), cfg_file)
Logger.print_ok("OK!") Logger.print_ok("OK!")
@@ -81,7 +81,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
def remove_config_section( def remove_config_section(
section: str, instances: List[InstanceType] section: str, instances: List[InstanceType]
) -> List[InstanceType]: ) -> List[InstanceType]:
removed_from: List[instances] = [] removed_from: List[InstanceType] = []
for instance in instances: for instance in instances:
cfg_file = instance.cfg_file cfg_file = instance.cfg_file
Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...") Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...")