From 0c61bad10238ae99ad344f2164ed9636ce54c327 Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 27 Oct 2026 08:34:10 +0100 Subject: [PATCH] =?UTF-8?q?Seed=20the=20placement=20files=20from=20what=20?= =?UTF-8?q?each=20node=20runs=20today,=20so=20placement=20lives=20in=20the?= =?UTF-8?q?=20catalogue=20(issue=201126,=20ADR=200549=20=C2=A74)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- placement/ace.json | 1113 +++++++++++++++++++++++++++++++++++++++++ placement/g14.json | 269 ++++++++++ placement/novox.json | 584 +++++++++++++++++++++ placement/shanks.json | 290 +++++++++++ 4 files changed, 2256 insertions(+) create mode 100644 placement/ace.json create mode 100644 placement/g14.json create mode 100644 placement/novox.json create mode 100644 placement/shanks.json diff --git a/placement/ace.json b/placement/ace.json new file mode 100644 index 00000000..b82ce55f --- /dev/null +++ b/placement/ace.json @@ -0,0 +1,1113 @@ +{ + "v": 1, + "node": "ace", + "decided": { + "site": "home", + "address": "10.10.0.2", + "public-domain": "zurag.be", + "account": "ace", + "tunnel": { + "interface": "wg0", + "unit": "wg-quick@wg0", + "config": "/etc/wireguard/wg0.conf", + "port": 51820, + "address": "10.10.0.2/24", + "range": "10.10.0.0/24", + "public-key": "zTKYP6Sz1hDwnwxIHgiGXYAeGcWbqti3tcSvKEA0Ew4=" + } + }, + "modules": [ + { + "module": "avahi" + }, + { + "module": "baserow", + "ports": { + "80": 20011 + }, + "bindings": { + "postgres-database": { + "node": "ace", + "module": "postgres" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "baserow", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "bazarr", + "ports": { + "6767": 20020 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "anime": "/storage/media/anime", + "downloads": "/storage/downloads", + "movies": "/storage/media/movies", + "series": "/storage/media/series" + }, + "endpoints": { + "web": { + "label": "subs", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/bazarr/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "bookshelf", + "ports": { + "8787": 20021 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "books": "/data/media/books", + "downloads": "/data/downloads" + }, + "endpoints": { + "web": { + "label": "books", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1000:1000", + "path": "/var/lib/bookshelf/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "downloads": { + "jackett-api": { + "adopt-hosts": [ + "jackett" + ] + }, + "nzbget-api": { + "name": "NZBGet" + }, + "qbittorrent-api": { + "name": "qBitTorrent" + } + }, + "pgid": 1000, + "puid": 1000 + } + }, + { + "module": "buildah" + }, + { + "module": "ca-trust" + }, + { + "module": "car-hunter", + "ports": { + "3000": 20016 + }, + "bindings": { + "oidc-client": { + "node": "novox", + "module": "keycloak" + }, + "postgres-database": { + "node": "ace", + "module": "postgres" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "car-hunter", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "claude-code", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "dbus" + }, + { + "module": "dev-tools" + }, + { + "module": "disk-load" + }, + { + "module": "dnsmasq" + }, + { + "module": "docker" + }, + { + "module": "f1-circuits", + "ports": { + "8000": 20007 + }, + "layer": { + "endpoints": { + "web": { + "label": "f1-circuits", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "fail2ban" + }, + { + "module": "go" + }, + { + "module": "grafana", + "ports": { + "3000": 20012 + }, + "bindings": { + "influxdb-api": { + "node": "ace", + "module": "influxdb" + }, + "oidc-client": { + "node": "novox", + "module": "keycloak" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "grafana", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "home-assistant", + "bindings": { + "mqtt-topic": { + "node": "ace", + "module": "mosquitto" + } + }, + "layer": { + "endpoints": { + "sonos-events": { + "reach": "public" + }, + "web": { + "label": "home-assistant", + "reach": "both" + }, + "webrtc": { + "reach": "public" + } + }, + "places": { + "config": { + "path": "/var/lib/home-assistant/config" + } + } + }, + "has-layer": true + }, + { + "module": "hostname", + "has-layer": true + }, + { + "module": "icecast", + "ports": { + "8000": 20005 + }, + "bindings": { + "secret": { + "node": "novox", + "module": "mesh-vault" + } + }, + "layer": { + "endpoints": { + "stream": { + "label": "icecast", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "influxdb", + "layer": { + "endpoints": { + "api": { + "label": "influx", + "port": 8086, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "jackett", + "ports": { + "9117": 20004 + }, + "has-mesh-wide": true, + "layer": { + "endpoints": { + "web": { + "label": "indexers", + "reach": "public" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + } + }, + { + "module": "kernel", + "has-layer": true + }, + { + "module": "kometa", + "layer": { + "places": { + "config": { + "owner": "1000:1000", + "path": "/var/lib/kometa/config" + } + } + }, + "has-layer": true, + "values": { + "libraries": { + "Formula 1": { + "metadata_files": [ + { + "url": "https://f1-circuits.zurag.be/kometa/formula-1-metadata.yml" + } + ] + } + }, + "pgid": 1000, + "puid": 1000 + } + }, + { + "module": "letta", + "ports": { + "8283": 20002 + }, + "bindings": { + "postgres-database": { + "node": "ace", + "module": "postgres" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "letta", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "lidarr", + "ports": { + "8686": 20022 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "downloads": "/storage/downloads", + "music": "/storage/media/music" + }, + "endpoints": { + "web": { + "label": "lidarr", + "reach": "both" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/lidarr/config" + }, + "custom-cont-init": { + "path": "/var/lib/lidarr/custom-cont-init" + }, + "custom-services": { + "path": "/var/lib/lidarr/custom-services" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "downloads": { + "jackett-api": { + "adopt-hosts": [ + "indexers.zurag.be", + "jackett" + ] + }, + "nzbget-api": { + "name": "NZBGet" + }, + "qbittorrent-api": { + "name": "qBitTorrent" + } + }, + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "localization" + }, + { + "module": "logrotate" + }, + { + "module": "matrix", + "ports": { + "6167": 20008, + "80": 20009 + }, + "layer": { + "endpoints": { + "client": { + "label": "matrix", + "reach": "public" + }, + "web": { + "label": "element", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "media-importer", + "layer": { + "accesses": { + "downloads": "/storage/downloads" + }, + "places": { + "library": "/storage/media/poc" + } + }, + "has-layer": true + }, + { + "module": "mesh-build-go", + "has-layer": true + }, + { + "module": "mesh-build-image" + }, + { + "module": "mesh-build-node", + "bindings": { + "npm-package-registry": { + "node": "novox", + "module": "gitea" + } + } + }, + { + "module": "mesh-cli" + }, + { + "module": "mesh-delivery-assigner" + }, + { + "module": "mesh-files" + }, + { + "module": "mesh-host", + "has-layer": true + }, + { + "module": "mesh-provisioner-client" + }, + { + "module": "mesh-reads" + }, + { + "module": "mesh-wireguard" + }, + { + "module": "mosquitto", + "layer": { + "endpoints": { + "mqtt": { + "port": 1883, + "reach": "public" + }, + "mqtt-websockets": { + "port": 8081, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "mssql", + "layer": { + "endpoints": { + "database": { + "port": 4848, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "n8n", + "ports": { + "5678": 20025 + }, + "bindings": { + "postgres-database": { + "node": "ace", + "module": "postgres" + } + }, + "layer": { + "accesses": { + "media": "/storage/media" + }, + "endpoints": { + "web": { + "label": "n8n", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "netcheck" + }, + { + "module": "networkmanager" + }, + { + "module": "nfs-server", + "has-layer": true + }, + { + "module": "nftables" + }, + { + "module": "node-env" + }, + { + "module": "node-tools" + }, + { + "module": "nodejs" + }, + { + "module": "nodered", + "ports": { + "1880": 20006 + }, + "bindings": { + "mqtt-topic": { + "node": "ace", + "module": "mosquitto" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "nodered", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "nzbgeek" + }, + { + "module": "nzbget", + "ports": { + "6789": 20017 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "downloads": "/storage/downloads" + }, + "endpoints": { + "web": { + "label": "nzbget", + "reach": "internal" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/nzbget/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "max-download-speed": 10, + "options": { + "UMask": "0000" + }, + "pgid": 2000, + "puid": 1001, + "username": "nzbget" + } + }, + { + "module": "ombi", + "ports": { + "3579": 20024 + }, + "has-mesh-wide": true, + "layer": { + "endpoints": { + "web": { + "label": "ombi", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/ombi/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "pacman", + "has-layer": true + }, + { + "module": "plex", + "has-mesh-wide": true, + "layer": { + "accesses": { + "anime": "/storage/media/anime", + "audiobooks": "/storage/media/audiobooks", + "formula-1": "/storage/media/formula-1", + "live-shows": "/storage/media/live-shows", + "movies": "/storage/media/movies", + "music": "/storage/media/music", + "series": "/storage/media/series", + "sport-games": "/storage/media/sport-games" + }, + "endpoints": { + "gdm-1": { + "reach": "public" + }, + "gdm-2": { + "reach": "public" + }, + "gdm-3": { + "reach": "public" + }, + "gdm-4": { + "reach": "public" + }, + "stream": { + "label": "plex" + } + }, + "expose": { + "32400": "anywhere" + }, + "places": { + "config": { + "owner": "1000:1000", + "path": "/mnt/plex/config" + }, + "data": { + "owner": "1000:1000", + "path": "/mnt/plex/data" + }, + "previews": { + "owner": "1000:1000", + "path": "/storage/plex-media" + }, + "transcode": { + "owner": "1000:1000", + "path": "/mnt/plex/temp" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "pgid": 1000, + "puid": 1000 + } + }, + { + "module": "postgres", + "layer": { + "endpoints": { + "database": { + "port": 5434, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "power", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "powerlevel10k" + }, + { + "module": "qbittorrent", + "has-mesh-wide": true, + "layer": { + "accesses": { + "downloads": "/storage/downloads" + }, + "endpoints": { + "peers": { + "reach": "public" + }, + "peers-udp": { + "reach": "public" + }, + "web": { + "label": "tor", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/qbittorrent/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "max-download-speed": 10, + "pgid": 2000, + "puid": 1001, + "username": "admin" + } + }, + { + "module": "radarr", + "ports": { + "7878": 20019 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "downloads": "/storage/downloads", + "movies": "/storage/media/movies" + }, + "endpoints": { + "web": { + "label": "movies", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/radarr/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "downloads": { + "jackett-api": { + "adopt-hosts": [ + "jackett" + ] + }, + "nzbget-api": { + "name": "NZBGet" + }, + "qbittorrent-api": { + "name": "qBitTorrent" + } + }, + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "redis", + "ports": { + "6379": 20003 + }, + "bindings": { + "secret": { + "node": "novox", + "module": "mesh-vault" + } + }, + "layer": { + "endpoints": { + "cache": { + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "restic", + "layer": { + "places": { + "repository": "/storage/restic" + } + }, + "has-layer": true + }, + { + "module": "route-proxy" + }, + { + "module": "searxng", + "ports": { + "8080": 20000 + }, + "layer": { + "endpoints": { + "web": { + "label": "searxng", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "snake", + "ports": { + "80": 20015 + }, + "layer": { + "endpoints": { + "web": { + "label": "snake", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "sonarr", + "ports": { + "8989": 20018 + }, + "has-mesh-wide": true, + "layer": { + "accesses": { + "anime": "/storage/media/anime", + "downloads": "/storage/downloads", + "series": "/storage/media/series" + }, + "endpoints": { + "web": { + "label": "series", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/sonarr/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "downloads": { + "jackett-api": { + "adopt-hosts": [ + "jackett" + ] + }, + "nzbget-api": { + "name": "NZBGet" + }, + "qbittorrent-api": { + "name": "qBitTorrent" + } + }, + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "ssh-client" + }, + { + "module": "sshd" + }, + { + "module": "sudo" + }, + { + "module": "supabase", + "ports": { + "8000": 20010 + }, + "layer": { + "endpoints": { + "api": { + "label": "supabase", + "reach": "public" + }, + "pooler-session": { + "port": 5433, + "reach": "internal" + }, + "pooler-transaction": { + "port": 6543, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "systemd" + }, + { + "module": "tautulli", + "ports": { + "8181": 20023 + }, + "has-mesh-wide": true, + "layer": { + "endpoints": { + "web": { + "label": "tautulli", + "reach": "public" + } + }, + "places": { + "config": { + "owner": "1001:2000", + "path": "/var/lib/tautulli/config" + } + } + }, + "has-layer": true, + "mesh-wide-values": { + "pgid": 1000, + "puid": 1000 + }, + "values": { + "pgid": 2000, + "puid": 1001 + } + }, + { + "module": "time-sync" + }, + { + "module": "txt-game", + "ports": { + "3000": 20001 + }, + "bindings": { + "postgres-database": { + "node": "ace", + "module": "postgres" + } + }, + "layer": { + "endpoints": { + "web": { + "label": "txt", + "reach": "public" + } + } + }, + "has-layer": true + }, + { + "module": "unifi", + "layer": { + "endpoints": { + "discovery": { + "port": 10001, + "reach": "public" + }, + "discovery-l2": { + "port": 1902, + "reach": "internal" + }, + "inform": { + "port": 8080, + "reach": "public" + }, + "portal": { + "port": 8880, + "reach": "internal" + }, + "portal-tls": { + "port": 8843, + "reach": "internal" + }, + "speedtest": { + "port": 6789, + "reach": "internal" + }, + "stun": { + "port": 3478, + "reach": "public" + }, + "syslog": { + "port": 5514, + "reach": "internal" + }, + "web": { + "label": "unifi", + "port": 8443, + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "youtube", + "layer": { + "accesses": { + "downloads": "/storage/downloads" + }, + "places": { + "downloads": "/storage/downloads/youtube" + } + }, + "has-layer": true + }, + { + "module": "zsh" + }, + { + "module": "zsh-autosuggestions" + }, + { + "module": "zsh-syntax-highlighting" + } + ], + "pins": { + "postgres-database": { + "node": "ace", + "module": "postgres" + }, + "wildcard-resolution": { + "node": "novox", + "module": "dnsmasq" + } + }, + "holds": [ + { + "claim": "mesh-dns-resolver", + "scope": "mesh", + "module": "dnsmasq", + "site": "home" + } + ] +} diff --git a/placement/g14.json b/placement/g14.json new file mode 100644 index 00000000..74ea2fb4 --- /dev/null +++ b/placement/g14.json @@ -0,0 +1,269 @@ +{ + "v": 1, + "node": "g14", + "decided": { + "address": "10.10.0.4", + "account": "jochen", + "tunnel": { + "interface": "wg0", + "unit": "wg-quick@wg0", + "config": "/etc/wireguard/wg0.conf", + "port": 51820, + "mtu": 1380, + "address": "10.10.0.4/24", + "range": "10.10.0.0/24", + "public-key": "mq76YPW0FrExhAvt/ZG1SB2BK6/cPISKgXO53SEMazU=" + } + }, + "modules": [ + { + "module": "adwaita" + }, + { + "module": "asus-zephyrus-g14" + }, + { + "module": "avahi" + }, + { + "module": "blueman" + }, + { + "module": "bluetooth" + }, + { + "module": "ca-trust" + }, + { + "module": "claude-code", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "clipmenu" + }, + { + "module": "cups" + }, + { + "module": "dbus" + }, + { + "module": "dev-tools" + }, + { + "module": "disk-load" + }, + { + "module": "dmenu" + }, + { + "module": "docker" + }, + { + "module": "docker-compose" + }, + { + "module": "dunst", + "has-layer": true + }, + { + "module": "fail2ban" + }, + { + "module": "feh" + }, + { + "module": "flatpak" + }, + { + "module": "fonts" + }, + { + "module": "forticlient" + }, + { + "module": "gnome-keyring" + }, + { + "module": "go" + }, + { + "module": "hostname", + "has-layer": true + }, + { + "module": "i3" + }, + { + "module": "i3status-rust" + }, + { + "module": "kernel" + }, + { + "module": "lemurs" + }, + { + "module": "localization" + }, + { + "module": "logrotate" + }, + { + "module": "memory-pressure" + }, + { + "module": "mesh-build-go", + "has-layer": true + }, + { + "module": "mesh-build-node", + "bindings": { + "npm-package-registry": { + "node": "novox", + "module": "gitea" + } + } + }, + { + "module": "mesh-cli" + }, + { + "module": "mesh-files" + }, + { + "module": "mesh-host", + "has-layer": true + }, + { + "module": "mesh-mail-notifier" + }, + { + "module": "mesh-provisioner-client" + }, + { + "module": "mesh-reads" + }, + { + "module": "mesh-wireguard" + }, + { + "module": "netcheck" + }, + { + "module": "networkmanager" + }, + { + "module": "nextcloud-client" + }, + { + "module": "nftables" + }, + { + "module": "nm-applet" + }, + { + "module": "node-env" + }, + { + "module": "node-tools" + }, + { + "module": "nodejs" + }, + { + "module": "okioki", + "has-layer": true + }, + { + "module": "openrazer" + }, + { + "module": "pacman", + "has-layer": true + }, + { + "module": "picom" + }, + { + "module": "polychromatic" + }, + { + "module": "power", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "powerlevel10k" + }, + { + "module": "restic" + }, + { + "module": "rofi" + }, + { + "module": "screen-lock" + }, + { + "module": "sensors" + }, + { + "module": "slack" + }, + { + "module": "snapd" + }, + { + "module": "ssh-client" + }, + { + "module": "sshd" + }, + { + "module": "sudo" + }, + { + "module": "systemd" + }, + { + "module": "systemd-resolved" + }, + { + "module": "time-sync" + }, + { + "module": "triggerhappy" + }, + { + "module": "xclip" + }, + { + "module": "xdg", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "xorg" + }, + { + "module": "xterm" + }, + { + "module": "zsh" + }, + { + "module": "zsh-autosuggestions" + }, + { + "module": "zsh-syntax-highlighting" + } + ], + "pins": { + "wildcard-resolution": { + "node": "novox", + "module": "dnsmasq" + } + } +} diff --git a/placement/novox.json b/placement/novox.json new file mode 100644 index 00000000..740397d1 --- /dev/null +++ b/placement/novox.json @@ -0,0 +1,584 @@ +{ + "v": 1, + "node": "novox", + "decided": { + "endpoint": "142.132.152.141:51820", + "site": "hosting", + "hub": true, + "address": "10.10.0.1", + "public-domain": "novox.be", + "account": "jochens", + "agent-account": "nox", + "tunnel": { + "interface": "wg0", + "unit": "wg-quick@wg0", + "config": "/etc/wireguard/wg0.conf", + "port": 51820, + "address": "10.10.0.1/24", + "range": "10.10.0.0/24", + "public-key": "xW0ETQwyR9rHi2XSfOJrKkairE+Fp70FPNNcirqMixY=" + }, + "peer-names": { + "XT1l25Z0/YhRNQ8FQM+9XsAp7chx5MI0eLOOg1SUEXA=": "shanks", + "mq76YPW0FrExhAvt/ZG1SB2BK6/cPISKgXO53SEMazU=": "g14", + "zTKYP6Sz1hDwnwxIHgiGXYAeGcWbqti3tcSvKEA0Ew4=": "ace" + } + }, + "modules": [ + { + "module": "artifact-store-tools", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "avahi" + }, + { + "module": "ca-trust" + }, + { + "module": "claude-code", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "claude-licence-manager", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "secret": { + "node": "novox", + "module": "mesh-vault" + } + } + }, + { + "module": "dbus" + }, + { + "module": "de-spiegel", + "ports": { + "35621": 20005 + }, + "bindings": { + "smtp": { + "node": "novox", + "module": "mailu" + } + } + }, + { + "module": "desk-channel", + "has-layer": true + }, + { + "module": "dev-tools" + }, + { + "module": "disk-load" + }, + { + "module": "distribution", + "layer": { + "ports": { + "5000": 5100 + } + }, + "has-layer": true + }, + { + "module": "dnsmasq" + }, + { + "module": "docker" + }, + { + "module": "fail2ban" + }, + { + "module": "gitea", + "ports": { + "3000": 20000 + }, + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "secret": { + "node": "novox", + "module": "mesh-vault" + } + }, + "layer": { + "expose": { + "22": "anywhere" + }, + "ports": { + "22": 222 + } + }, + "has-layer": true + }, + { + "module": "go" + }, + { + "module": "hostname", + "has-layer": true + }, + { + "module": "invoicing", + "ports": { + "80": 20007, + "9000": 20008 + }, + "bindings": { + "mongodb-database": { + "node": "novox", + "module": "mongodb" + }, + "s3-bucket": { + "node": "novox", + "module": "minio" + } + } + }, + { + "module": "kernel", + "has-layer": true + }, + { + "module": "keycloak", + "ports": { + "8080": 20009 + }, + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + } + }, + "has-layer": true + }, + { + "module": "link2pay" + }, + { + "module": "localization" + }, + { + "module": "logrotate" + }, + { + "module": "mailu", + "ports": { + "110": 110, + "143": 143, + "25": 25, + "4243": 20004, + "465": 465, + "587": 587, + "8080": 20010, + "993": 993, + "995": 995 + }, + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "secret": { + "node": "novox", + "module": "mesh-vault" + } + }, + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "mesh-build-go", + "has-layer": true + }, + { + "module": "mesh-build-node", + "bindings": { + "npm-package-registry": { + "node": "novox", + "module": "gitea" + } + } + }, + { + "module": "mesh-catalog", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + } + } + }, + { + "module": "mesh-cli" + }, + { + "module": "mesh-config" + }, + { + "module": "mesh-controller" + }, + { + "module": "mesh-delivery-checker" + }, + { + "module": "mesh-delivery-forge-bridge" + }, + { + "module": "mesh-delivery-gate", + "has-layer": true + }, + { + "module": "mesh-delivery-indexer" + }, + { + "module": "mesh-delivery-teller" + }, + { + "module": "mesh-delivery-watchman" + }, + { + "module": "mesh-files" + }, + { + "module": "mesh-grants" + }, + { + "module": "mesh-host", + "has-layer": true + }, + { + "module": "mesh-issues" + }, + { + "module": "mesh-knowledge", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + } + } + }, + { + "module": "mesh-mail", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "s3-bucket": { + "node": "novox", + "module": "minio" + } + }, + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "mesh-mail-reader", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + } + } + }, + { + "module": "mesh-mail-web", + "bindings": { + "oidc-client": { + "node": "novox", + "module": "keycloak" + } + }, + "layer": { + "endpoints": { + "web": { + "reach": "internal" + } + } + }, + "has-layer": true + }, + { + "module": "mesh-provisioner" + }, + { + "module": "mesh-provisioner-client" + }, + { + "module": "mesh-reads" + }, + { + "module": "mesh-vault" + }, + { + "module": "mesh-wireguard" + }, + { + "module": "messenger", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "minio", + "ports": { + "9000": 20001, + "9001": 20002 + } + }, + { + "module": "mongodb", + "ports": { + "27017": 20006 + } + }, + { + "module": "mssql", + "layer": { + "ports": { + "1433": 4848 + } + }, + "has-layer": true + }, + { + "module": "nats" + }, + { + "module": "netcheck" + }, + { + "module": "nextcloud", + "ports": { + "80": 20003 + }, + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "s3-bucket": { + "node": "novox", + "module": "minio" + } + } + }, + { + "module": "nftables" + }, + { + "module": "node-env" + }, + { + "module": "node-tools" + }, + { + "module": "nodejs" + }, + { + "module": "only-office" + }, + { + "module": "pacman", + "has-layer": true + }, + { + "module": "photos", + "ports": { + "9000": 20011 + }, + "bindings": { + "mongodb-database": { + "node": "novox", + "module": "mongodb" + }, + "s3-bucket": { + "node": "novox", + "module": "minio" + } + } + }, + { + "module": "postgres", + "layer": { + "ports": { + "5432": 6852 + } + }, + "has-layer": true + }, + { + "module": "power", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "powerlevel10k" + }, + { + "module": "records", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "restic", + "layer": { + "places": { + "repository": "/home/restic" + } + }, + "has-layer": true + }, + { + "module": "route-proxy" + }, + { + "module": "ssh-client" + }, + { + "module": "sshd" + }, + { + "module": "step-ca" + }, + { + "module": "sudo" + }, + { + "module": "systemd" + }, + { + "module": "systemd-networkd" + }, + { + "module": "telegram" + }, + { + "module": "time-sync" + }, + { + "module": "umami", + "bindings": { + "postgres-database": { + "node": "novox", + "module": "postgres" + }, + "secret": { + "node": "novox", + "module": "mesh-vault" + } + }, + "layer": { + "expose": { + "3000": "mesh" + }, + "ports": { + "3000": 1212 + } + }, + "has-layer": true + }, + { + "module": "website", + "ports": { + "8080": 20012 + } + }, + { + "module": "zsh", + "has-layer": true + }, + { + "module": "zsh-autosuggestions" + }, + { + "module": "zsh-syntax-highlighting" + } + ], + "holds": [ + { + "claim": "git", + "scope": "mesh", + "module": "gitea", + "site": "hosting" + }, + { + "claim": "mesh-artifact-store", + "scope": "mesh", + "module": "distribution", + "site": "hosting" + }, + { + "claim": "mesh-broker", + "scope": "mesh", + "module": "nats", + "site": "hosting" + }, + { + "claim": "mesh-catalog", + "scope": "mesh", + "module": "mesh-catalog", + "site": "hosting" + }, + { + "claim": "mesh-config", + "scope": "mesh", + "module": "mesh-config", + "site": "hosting" + }, + { + "claim": "mesh-controller", + "scope": "mesh", + "module": "mesh-controller", + "site": "hosting" + }, + { + "claim": "mesh-delivery", + "scope": "mesh", + "module": "mesh-delivery-gate", + "site": "hosting" + }, + { + "claim": "mesh-dns-resolver", + "scope": "mesh", + "module": "dnsmasq", + "site": "hosting" + }, + { + "claim": "mesh-provisioner", + "scope": "mesh", + "module": "mesh-provisioner", + "site": "hosting" + }, + { + "claim": "mesh-store", + "scope": "mesh", + "module": "postgres", + "site": "hosting" + }, + { + "claim": "mesh-vault", + "scope": "mesh", + "module": "mesh-vault", + "site": "hosting" + }, + { + "claim": "npm-package-registry", + "scope": "mesh", + "module": "gitea", + "site": "hosting" + } + ] +} diff --git a/placement/shanks.json b/placement/shanks.json new file mode 100644 index 00000000..3d69e3ea --- /dev/null +++ b/placement/shanks.json @@ -0,0 +1,290 @@ +{ + "v": 1, + "node": "shanks", + "decided": { + "site": "home", + "address": "10.10.0.3", + "account": "jochen", + "tunnel": { + "interface": "wg0", + "unit": "wg-quick@wg0", + "config": "/etc/wireguard/wg0.conf", + "port": 51820, + "address": "10.10.0.3/24", + "range": "10.10.0.0/24", + "public-key": "XT1l25Z0/YhRNQ8FQM+9XsAp7chx5MI0eLOOg1SUEXA=" + } + }, + "modules": [ + { + "module": "adwaita" + }, + { + "module": "avahi" + }, + { + "module": "blueman" + }, + { + "module": "bluetooth" + }, + { + "module": "brother", + "bindings": { + "s3-bucket": { + "node": "novox", + "module": "minio" + } + }, + "has-layer": true + }, + { + "module": "buildah" + }, + { + "module": "ca-trust" + }, + { + "module": "claude-code", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "clipmenu" + }, + { + "module": "cups" + }, + { + "module": "dbus" + }, + { + "module": "dev-tools" + }, + { + "module": "disk-load" + }, + { + "module": "dmenu" + }, + { + "module": "docker" + }, + { + "module": "docker-compose" + }, + { + "module": "dunst" + }, + { + "module": "fail2ban" + }, + { + "module": "feh" + }, + { + "module": "flatpak" + }, + { + "module": "fonts" + }, + { + "module": "forticlient" + }, + { + "module": "gnome-keyring" + }, + { + "module": "go" + }, + { + "module": "hostname", + "has-layer": true + }, + { + "module": "i3" + }, + { + "module": "i3status-rust" + }, + { + "module": "kernel", + "has-layer": true + }, + { + "module": "lab", + "bindings": { + "npm-package-registry": { + "node": "novox", + "module": "gitea" + } + }, + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "lemurs" + }, + { + "module": "localization" + }, + { + "module": "logrotate" + }, + { + "module": "mesh-build-go", + "has-layer": true + }, + { + "module": "mesh-build-image" + }, + { + "module": "mesh-build-node", + "bindings": { + "npm-package-registry": { + "node": "novox", + "module": "gitea" + } + } + }, + { + "module": "mesh-cli" + }, + { + "module": "mesh-delivery-builder" + }, + { + "module": "mesh-delivery-view" + }, + { + "module": "mesh-files" + }, + { + "module": "mesh-host", + "has-layer": true + }, + { + "module": "mesh-mail-notifier" + }, + { + "module": "mesh-provisioner-client" + }, + { + "module": "mesh-reads" + }, + { + "module": "mesh-wireguard" + }, + { + "module": "mounts", + "has-layer": true + }, + { + "module": "netcheck" + }, + { + "module": "networkmanager" + }, + { + "module": "nextcloud-client" + }, + { + "module": "nftables" + }, + { + "module": "nm-applet" + }, + { + "module": "node-env" + }, + { + "module": "node-tools" + }, + { + "module": "nodejs" + }, + { + "module": "openrazer" + }, + { + "module": "pacman", + "has-layer": true + }, + { + "module": "picom" + }, + { + "module": "polychromatic" + }, + { + "module": "power", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "powerlevel10k" + }, + { + "module": "restic" + }, + { + "module": "rofi" + }, + { + "module": "screen-lock" + }, + { + "module": "slack" + }, + { + "module": "snapd" + }, + { + "module": "ssh-client" + }, + { + "module": "sshd" + }, + { + "module": "sudo" + }, + { + "module": "systemd" + }, + { + "module": "systemd-resolved" + }, + { + "module": "time-sync" + }, + { + "module": "xclip" + }, + { + "module": "xdg", + "has-mesh-wide": true, + "has-layer": true + }, + { + "module": "xorg" + }, + { + "module": "xterm" + }, + { + "module": "zsh" + }, + { + "module": "zsh-autosuggestions" + }, + { + "module": "zsh-syntax-highlighting" + } + ], + "pins": { + "wildcard-resolution": { + "node": "novox", + "module": "dnsmasq" + } + } +}