diff --git a/README.md b/README.md index afdaa7b..5e31370 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,21 @@ -# snapper: ZFS Snapshot Browser Based GUI +# bale: ZFS Snapshot Browser Based GUI ## Demo -https://github.com/natankeddem/snapper/assets/44515217/dfd1257a-7465-4a92-94f2-29eb6aaaa85e + +https://github.com/natankeddem/bale/assets/44515217/dfd1257a-7465-4a92-94f2-29eb6aaaa85e ## ⚠️ **_WARNING_** + **This utility is currently in early development and may undergo breaking changes in future updates. Your configuration may be lost, and snapshot functionality might be affected. Use with caution; data loss may occur.** ## Features -- **Remote Management**: Snapper handles all interactions over SSH, eliminating the need for local installation. You can manage your ZFS snapshots from anywhere. -- **Multi-Host Support**: Configure Snapper to manage multiple hosts within the same installation, making it a versatile choice for system administrators. +- **Remote Management**: bale handles all interactions over SSH, eliminating the need for local installation. You can manage your ZFS snapshots from anywhere. +- **Multi-Host Support**: Configure bale to manage multiple hosts within the same installation, making it a versatile choice for system administrators. - **User-Friendly GUI**: Easily manage your ZFS snapshots with an intuitive web-based interface that simplifies the process. -- **Automation**: Snapper can automate generic remote and local applications as well as work seamlessly with zfs_autobackup, streamlining your backup and snapshot tasks. +- **Automation**: bale can automate generic remote and local applications as well as work seamlessly with zfs_autobackup, streamlining your backup and snapshot tasks. - **Download**: Easily download files directly from your ZFS snapshots through the web interface. - + ## Installation ### Using Docker @@ -44,6 +46,6 @@ https://github.com/natankeddem/snapper/assets/44515217/dfd1257a-7465-4a92-94f2-2 ### Access GUI -Access snapper by navigating to `http://host:8080`. +Access bale by navigating to `http://host:8080`. --- diff --git a/snapper.code-workspace b/bale.code-workspace similarity index 100% rename from snapper.code-workspace rename to bale.code-workspace diff --git a/snapper/__init__.py b/bale/__init__.py similarity index 100% rename from snapper/__init__.py rename to bale/__init__.py diff --git a/snapper/apps/__init__.py b/bale/apps/__init__.py similarity index 100% rename from snapper/apps/__init__.py rename to bale/apps/__init__.py diff --git a/snapper/apps/zab.py b/bale/apps/zab.py similarity index 100% rename from snapper/apps/zab.py rename to bale/apps/zab.py diff --git a/snapper/content.py b/bale/content.py similarity index 93% rename from snapper/content.py rename to bale/content.py index 0875518..c5a21cc 100644 --- a/snapper/content.py +++ b/bale/content.py @@ -2,11 +2,11 @@ from nicegui import app, ui import re from datetime import datetime import asyncio -from snapper import elements as el -import snapper.logo as logo -from snapper.tabs.manage import Manage -from snapper.tabs.history import History -from snapper.tabs.automation import Automation +from bale import elements as el +import bale.logo as logo +from bale.tabs.manage import Manage +from bale.tabs.history import History +from bale.tabs.automation import Automation import logging logger = logging.getLogger(__name__) diff --git a/snapper/drawer.py b/bale/drawer.py similarity index 98% rename from snapper/drawer.py rename to bale/drawer.py index 922ce83..026cf05 100644 --- a/snapper/drawer.py +++ b/bale/drawer.py @@ -1,7 +1,7 @@ from nicegui import ui -from snapper import elements as el -from snapper.tabs import Tab -from snapper.interfaces import ssh +from bale import elements as el +from bale.tabs import Tab +from bale.interfaces import ssh import logging logger = logging.getLogger(__name__) diff --git a/snapper/elements.py b/bale/elements.py similarity index 99% rename from snapper/elements.py rename to bale/elements.py index 424294b..f6426dd 100644 --- a/snapper/elements.py +++ b/bale/elements.py @@ -5,7 +5,7 @@ from nicegui.tailwind_types.height import Height from nicegui.tailwind_types.width import Width from nicegui.elements.mixins.validation_element import ValidationElement from nicegui.events import GenericEventArguments, handle_event -from snapper.interfaces import cli +from bale.interfaces import cli import logging logger = logging.getLogger(__name__) diff --git a/snapper/interfaces/__init__.py b/bale/interfaces/__init__.py similarity index 100% rename from snapper/interfaces/__init__.py rename to bale/interfaces/__init__.py diff --git a/snapper/interfaces/cli.py b/bale/interfaces/cli.py similarity index 99% rename from snapper/interfaces/cli.py rename to bale/interfaces/cli.py index 5eeb43d..5b1952d 100644 --- a/snapper/interfaces/cli.py +++ b/bale/interfaces/cli.py @@ -5,7 +5,7 @@ import contextlib import shlex from datetime import datetime from nicegui import app, ui -from snapper.result import Result +from bale.result import Result import logging logger = logging.getLogger(__name__) diff --git a/snapper/interfaces/ssh.py b/bale/interfaces/ssh.py similarity index 98% rename from snapper/interfaces/ssh.py rename to bale/interfaces/ssh.py index f47a21c..cc518b8 100644 --- a/snapper/interfaces/ssh.py +++ b/bale/interfaces/ssh.py @@ -2,8 +2,8 @@ from typing import Dict, Union import os import asyncio from pathlib import Path -from snapper.result import Result -from snapper.interfaces.cli import Cli +from bale.result import Result +from bale.interfaces.cli import Cli def get_hosts(path): diff --git a/snapper/interfaces/sshdl.py b/bale/interfaces/sshdl.py similarity index 99% rename from snapper/interfaces/sshdl.py rename to bale/interfaces/sshdl.py index 0c956fb..63f4451 100644 --- a/snapper/interfaces/sshdl.py +++ b/bale/interfaces/sshdl.py @@ -6,8 +6,8 @@ import uuid from nicegui import app, events, ui from fastapi.responses import StreamingResponse import asyncssh -from snapper import elements as el -from snapper.interfaces.zfs import Ssh +from bale import elements as el +from bale.interfaces.zfs import Ssh def format_bytes(size: Union[int, float]) -> str: diff --git a/snapper/interfaces/zfs.py b/bale/interfaces/zfs.py similarity index 98% rename from snapper/interfaces/zfs.py rename to bale/interfaces/zfs.py index 3398217..24a23c5 100644 --- a/snapper/interfaces/zfs.py +++ b/bale/interfaces/zfs.py @@ -2,9 +2,9 @@ from typing import Any, Dict, Union import re from datetime import datetime from dataclasses import dataclass -from snapper.result import Result -from snapper.interfaces import ssh -from snapper import elements as el +from bale.result import Result +from bale.interfaces import ssh +from bale import elements as el import logging logger = logging.getLogger(__name__) diff --git a/snapper/logo.py b/bale/logo.py similarity index 100% rename from snapper/logo.py rename to bale/logo.py diff --git a/snapper/page.py b/bale/page.py similarity index 87% rename from snapper/page.py rename to bale/page.py index 4235ab5..d08dee4 100644 --- a/snapper/page.py +++ b/bale/page.py @@ -1,8 +1,8 @@ from nicegui import ui -from snapper import elements as el -from snapper.drawer import Drawer -from snapper.content import Content -from snapper.interfaces import cli +from bale import elements as el +from bale.drawer import Drawer +from bale.content import Content +from bale.interfaces import cli import logging logger = logging.getLogger(__name__) diff --git a/snapper/result.py b/bale/result.py similarity index 100% rename from snapper/result.py rename to bale/result.py diff --git a/snapper/scheduler.py b/bale/scheduler.py similarity index 100% rename from snapper/scheduler.py rename to bale/scheduler.py diff --git a/snapper/tabs/__init__.py b/bale/tabs/__init__.py similarity index 96% rename from snapper/tabs/__init__.py rename to bale/tabs/__init__.py index 8765c34..0a87e3f 100644 --- a/snapper/tabs/__init__.py +++ b/bale/tabs/__init__.py @@ -4,10 +4,10 @@ import asyncio from datetime import datetime import time from nicegui import ui -from snapper.interfaces.zfs import Ssh -from snapper import elements as el -from snapper.result import Result -from snapper.interfaces import cli +from bale.interfaces.zfs import Ssh +from bale import elements as el +from bale.result import Result +from bale.interfaces import cli @dataclass(kw_only=True) diff --git a/snapper/tabs/automation.py b/bale/tabs/automation.py similarity index 99% rename from snapper/tabs/automation.py rename to bale/tabs/automation.py index 5e743c1..aedace5 100644 --- a/snapper/tabs/automation.py +++ b/bale/tabs/automation.py @@ -8,13 +8,13 @@ from apscheduler.triggers.cron import CronTrigger from apscheduler.triggers.interval import IntervalTrigger from . import Tab from nicegui import ui, Tailwind, events -from snapper import elements as el -from snapper.result import Result -from snapper.interfaces import cli -from snapper.interfaces import ssh -from snapper.interfaces import zfs -from snapper.apps import zab -from snapper import scheduler +from bale import elements as el +from bale.result import Result +from bale.interfaces import cli +from bale.interfaces import ssh +from bale.interfaces import zfs +from bale.apps import zab +from bale import scheduler from cron_validator import CronValidator from cron_descriptor import get_description import logging diff --git a/snapper/tabs/history.py b/bale/tabs/history.py similarity index 96% rename from snapper/tabs/history.py rename to bale/tabs/history.py index 8d374e9..22bd45e 100644 --- a/snapper/tabs/history.py +++ b/bale/tabs/history.py @@ -1,9 +1,9 @@ from datetime import datetime from . import Tab from nicegui import ui -from snapper import elements as el -from snapper.result import Result -from snapper.interfaces import zfs +from bale import elements as el +from bale.result import Result +from bale.interfaces import zfs import logging logger = logging.getLogger(__name__) diff --git a/snapper/tabs/manage.py b/bale/tabs/manage.py similarity index 99% rename from snapper/tabs/manage.py rename to bale/tabs/manage.py index 91c97a4..513e250 100644 --- a/snapper/tabs/manage.py +++ b/bale/tabs/manage.py @@ -2,10 +2,10 @@ import asyncio from copy import deepcopy from nicegui import ui from . import Tab, Task -from snapper.result import Result -from snapper import elements as el -from snapper.interfaces import zfs -from snapper.interfaces import sshdl +from bale.result import Result +from bale import elements as el +from bale.interfaces import zfs +from bale.interfaces import sshdl import logging logger = logging.getLogger(__name__) diff --git a/snapper/tabs/settings.py b/bale/tabs/settings.py similarity index 100% rename from snapper/tabs/settings.py rename to bale/tabs/settings.py diff --git a/docker-compose.yml b/docker-compose.yml index a7ac9d5..ab5755c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: "3.8" services: - snapper: - image: ghcr.io/natankeddem/snapper:latest + bale: + image: ghcr.io/natankeddem/bale:latest ports: - 8080:8080 volumes: diff --git a/inv.yml b/inv.yml index 6c59f1d..6345511 100644 --- a/inv.yml +++ b/inv.yml @@ -3,7 +3,7 @@ all: proxmox_host: ansible_host: ##PROXMOXHOST## lxc_hostname: - ansible_host: snapper + ansible_host: bale vars: ansible_ssh_common_args: "-o StrictHostKeyChecking=no" ansible_user: root @@ -12,9 +12,9 @@ all: proxmox_node: ##PROXMOXNODE## template_storage: local lxc_template: debian-12-standard_12.2-1_amd64.tar.zst - lxc_hostname: snapper + lxc_hostname: bale lxc_id: 200 lxc_password: ##PASSWORD## lxc_storage: local lxc_network: vmbr0 - app_name: snapper + app_name: bale diff --git a/main.py b/main.py index 9e9a451..4e0cdfe 100644 --- a/main.py +++ b/main.py @@ -8,11 +8,11 @@ if not os.path.exists("data"): os.makedirs("data") os.environ.setdefault("NICEGUI_STORAGE_PATH", "data") from nicegui import ui -from snapper import page, logo, scheduler +from bale import page, logo, scheduler if __name__ in {"__main__", "__mp_main__"}: page.build() s = scheduler.Scheduler() ui.timer(0.1, s.start, once=True) - ui.run(title="Snapper", favicon=logo.favicon, dark=True, reload=False) + ui.run(title="bale", favicon=logo.favicon, dark=True, reload=False) diff --git a/resources/bale.service b/resources/bale.service new file mode 100644 index 0000000..2f5a7aa --- /dev/null +++ b/resources/bale.service @@ -0,0 +1,11 @@ +[Unit] +Description=bale Application Service +After=network.target + +[Service] +Type=simple +WorkingDirectory=/root/bale +ExecStart=/root/bale/venv/bin/python /root/bale/main.py + +[Install] +WantedBy=multi-user.target diff --git a/resources/snapper.service b/resources/snapper.service deleted file mode 100644 index 60b15de..0000000 --- a/resources/snapper.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Snapper Application Service -After=network.target - -[Service] -Type=simple -WorkingDirectory=/root/snapper -ExecStart=/root/snapper/venv/bin/python /root/snapper/main.py - -[Install] -WantedBy=multi-user.target