mirror of
https://github.com/natankeddem/bale.git
synced 2026-04-23 06:50:41 +00:00
rebrand to bale
This commit is contained in:
16
README.md
16
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`.
|
||||
|
||||
---
|
||||
|
||||
@@ -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__)
|
||||
@@ -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__)
|
||||
@@ -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__)
|
||||
@@ -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__)
|
||||
@@ -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):
|
||||
@@ -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:
|
||||
@@ -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__)
|
||||
@@ -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__)
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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__)
|
||||
@@ -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__)
|
||||
@@ -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:
|
||||
|
||||
6
inv.yml
6
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
|
||||
|
||||
4
main.py
4
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)
|
||||
|
||||
11
resources/bale.service
Normal file
11
resources/bale.service
Normal file
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user