From 3c353d36085d84a16a119fff458fa949cd0dc33e Mon Sep 17 00:00:00 2001 From: clerie Date: Wed, 5 Nov 2025 20:25:47 +0100 Subject: [PATCH] Migrate to nodes directory and make bwfiles base configurable --- nodes.py | 77 +++++++--------------------------- nodes/clerie.uber.space.py | 24 +++++++++++ nodes/cleriewi.uber.space.py | 22 ++++++++++ nodes/mercury.net.clerie.de.py | 16 +++++++ 4 files changed, 77 insertions(+), 62 deletions(-) create mode 100644 nodes/clerie.uber.space.py create mode 100644 nodes/cleriewi.uber.space.py create mode 100644 nodes/mercury.net.clerie.de.py diff --git a/nodes.py b/nodes.py index 50d1336..907a260 100644 --- a/nodes.py +++ b/nodes.py @@ -1,6 +1,16 @@ -bws = libs.bwsops.BwSops("secrets.json") +from bundlewrap.utils import error_context +import os +from pathlib import Path + uberspaceify = libs.uberspace.Uberspaceify() +# Lookup other nodes from different path +bwfiles_base_path = Path(os.environ.get("BWFILES_BASE_PATH", ".")).absolute() +bwfiles_nodes_dir_path = bwfiles_base_path / "nodes" +bwfiles_secrets_file_path = bwfiles_base_path / "secrets.json" + +bws = libs.bwsops.BwSops(bwfiles_secrets_file_path) + def generate_default_repos(node_name, username): return { "main-cyan": { @@ -31,64 +41,7 @@ def generate_default_repos(node_name, username): }, } -nodes = uberspaceify.nodes({ - "clerie.uber.space": { - "bundles": ( - "uberspace-redirect-clerie", - "uberspace-clerie-backup", - "uberspace-clerie-monitoring", - "uberspace-crontab-dir", - "uberspace-supervisord", - ), - "metadata": { - "clerie-backup": { - "repos": generate_default_repos("clerie.uber.space", "clerie"), - }, - "cron": { - "jobs": { - "backup_main-cyan": "42 */2 * * * clerie-backup main-cyan backup && clerie-backup-update-monitoring main cyan", - "backup_main-cyan_mysql": "52 */2 * * * clerie-backup main-cyan restic backup --stdin-filename mysql-databases.sql --stdin-from-command -- mysqldump --all-databases && clerie-backup-update-monitoring main_mysql cyan", - "backup_main-magenta": "13 */2 * * * clerie-backup main-magenta backup && clerie-backup-update-monitoring main magenta", - "backup_main-magenta_mysql": "23 */2 * * * clerie-backup main-magenta restic backup --stdin-filename mysql-databases.sql --stdin-from-command -- mysqldump --all-databases && clerie-backup-update-monitoring main_mysql magenta", - }, - }, - }, - }, - "cleriewi.uber.space": { - "bundles": ( - "uberspace-redirect-clerie", - "uberspace-clerie-backup", - "uberspace-clerie-monitoring", - "uberspace-crontab-dir", - "uberspace-supervisord", - ), - "metadata": { - "clerie-backup": { - "repos": generate_default_repos("cleriewi.uber.space", "cleriewi"), - }, - "cron": { - "jobs": { - "backup_main-cyan": "42 */2 * * * clerie-backup main-cyan backup && clerie-backup-update-monitoring main cyan", - "backup_main-magenta": "13 */2 * * * clerie-backup main-magenta backup && clerie-backup-update-monitoring main magenta", - }, - }, - }, - }, -}) - -nodes.update({ - "mercury.net.clerie.de": { - "username": "root", - "bundles": ( - "systemd", - "debian-user-clerie", - "debian-clerie-monitoring", - ), - "metadata": { - "clerie-monitoring": { - "id": 401, - "private-key": bws.get(["mercury.net.clerie.de", "wg-monitoring"]), - }, - }, - }, -}) +for node_file in sorted(node_file.absolute() for node_file in bwfiles_nodes_dir_path.iterdir() if node_file.is_file() and node_file.suffix == ".py"): + with error_context(filename=str(node_file)): + with node_file.open() as f: + exec(f.read()) diff --git a/nodes/clerie.uber.space.py b/nodes/clerie.uber.space.py new file mode 100644 index 0000000..b81c235 --- /dev/null +++ b/nodes/clerie.uber.space.py @@ -0,0 +1,24 @@ +nodes.update(uberspaceify.nodes({ + "clerie.uber.space": { + "bundles": ( + "uberspace-redirect-clerie", + "uberspace-clerie-backup", + "uberspace-clerie-monitoring", + "uberspace-crontab-dir", + "uberspace-supervisord", + ), + "metadata": { + "clerie-backup": { + "repos": generate_default_repos("clerie.uber.space", "clerie"), + }, + "cron": { + "jobs": { + "backup_main-cyan": "42 */2 * * * clerie-backup main-cyan backup && clerie-backup-update-monitoring main cyan", + "backup_main-cyan_mysql": "52 */2 * * * clerie-backup main-cyan restic backup --stdin-filename mysql-databases.sql --stdin-from-command -- mysqldump --all-databases && clerie-backup-update-monitoring main_mysql cyan", + "backup_main-magenta": "13 */2 * * * clerie-backup main-magenta backup && clerie-backup-update-monitoring main magenta", + "backup_main-magenta_mysql": "23 */2 * * * clerie-backup main-magenta restic backup --stdin-filename mysql-databases.sql --stdin-from-command -- mysqldump --all-databases && clerie-backup-update-monitoring main_mysql magenta", + }, + }, + }, + }, +})) diff --git a/nodes/cleriewi.uber.space.py b/nodes/cleriewi.uber.space.py new file mode 100644 index 0000000..489bfee --- /dev/null +++ b/nodes/cleriewi.uber.space.py @@ -0,0 +1,22 @@ +nodes.update(uberspaceify.nodes({ + "cleriewi.uber.space": { + "bundles": ( + "uberspace-redirect-clerie", + "uberspace-clerie-backup", + "uberspace-clerie-monitoring", + "uberspace-crontab-dir", + "uberspace-supervisord", + ), + "metadata": { + "clerie-backup": { + "repos": generate_default_repos("cleriewi.uber.space", "cleriewi"), + }, + "cron": { + "jobs": { + "backup_main-cyan": "42 */2 * * * clerie-backup main-cyan backup && clerie-backup-update-monitoring main cyan", + "backup_main-magenta": "13 */2 * * * clerie-backup main-magenta backup && clerie-backup-update-monitoring main magenta", + }, + }, + }, + }, +})) diff --git a/nodes/mercury.net.clerie.de.py b/nodes/mercury.net.clerie.de.py new file mode 100644 index 0000000..fcc2c66 --- /dev/null +++ b/nodes/mercury.net.clerie.de.py @@ -0,0 +1,16 @@ +nodes.update({ + "mercury.net.clerie.de": { + "username": "root", + "bundles": ( + "systemd", + "debian-user-clerie", + "debian-clerie-monitoring", + ), + "metadata": { + "clerie-monitoring": { + "id": 401, + "private-key": bws.get(["mercury.net.clerie.de", "wg-monitoring"]), + }, + }, + }, +})