520 lines
34 KiB
JSON
520 lines
34 KiB
JSON
[
|
|
{
|
|
"name": "the finding of a seat list unread, as the engine writes it",
|
|
"of": "state:findings/<key>",
|
|
"given": {
|
|
"v": 1,
|
|
"key": "machine.ace.seat-list-unread",
|
|
"kind": "seat-list-unread",
|
|
"subject": {
|
|
"scope": "machine",
|
|
"id": "ace",
|
|
"machine": "ace"
|
|
},
|
|
"severity": "warning",
|
|
"summary": "the seat list has not been read for five minutes",
|
|
"source": "node-engine.seat-list",
|
|
"observer": "mesh-host",
|
|
"at": "2026-11-05T14:00:00Z"
|
|
}
|
|
},
|
|
{
|
|
"name": "a node's packages, present and absent (captured from ace, shortened)",
|
|
"of": "state:packages/<node>",
|
|
"given": {
|
|
"node": "ace",
|
|
"packages": [
|
|
{
|
|
"absent": false,
|
|
"modules": [
|
|
"avahi"
|
|
],
|
|
"package": "avahi"
|
|
},
|
|
{
|
|
"absent": false,
|
|
"modules": [
|
|
"mesh-build-go",
|
|
"mesh-build-node"
|
|
],
|
|
"package": "bubblewrap"
|
|
},
|
|
{
|
|
"absent": true,
|
|
"modules": [
|
|
"time-sync"
|
|
],
|
|
"package": "ntp"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "buildah composed on ace (resources captured from the declaration of 2026-10-24; the fingerprint stands in for the indexer's)",
|
|
"of": "state:composed/<node>.<module>.<fingerprint>",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"module": "buildah",
|
|
"fp": "src2:62756c6c6462756c6c6462756c6c6462756c6c6462756c6c6462756c6c646275",
|
|
"resources": [
|
|
{
|
|
"id": "buildah.buildah",
|
|
"module": "buildah",
|
|
"package": "buildah",
|
|
"type": "package"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "node-tools composed with a filled file (captured; the fingerprint stands in)",
|
|
"of": "state:composed/<node>.<module>.<fingerprint>",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"module": "node-tools",
|
|
"fp": "src2:6e6f64652d6e6f64652d6e6f64652d6e6f64652d6e6f64652d6e6f64652d6e6f",
|
|
"resources": [
|
|
{
|
|
"id": "node-tools.mesh-state",
|
|
"mode": "0755",
|
|
"module": "node-tools",
|
|
"path": "/var/lib/mesh/node-tools",
|
|
"type": "directory"
|
|
},
|
|
{
|
|
"id": "node-tools.interpreter",
|
|
"module": "node-tools",
|
|
"package": "nodejs",
|
|
"type": "package"
|
|
},
|
|
{
|
|
"digest": "sha256:ef790876783d817903b337b8418b1eb21fb49d34128a390bbf7c3d08a4b2be8a",
|
|
"env": {
|
|
"MESH_AGENT_ACCOUNT": "ace",
|
|
"MESH_AGENT_HOME": "/home/ace",
|
|
"MESH_BROKER_FILE": "/var/lib/mesh/node-tools/broker",
|
|
"MESH_OPERATOR_ACCOUNT": "ace",
|
|
"MESH_OPERATOR_HOME": "/home/ace",
|
|
"MESH_TOOL_ENV": "{\"baserow\":{\"MESH_BASEROW_CONFIG_FILE\":\"/var/lib/mesh/baserow/config.json\",\"MESH_BASEROW_URL\":\"http://127.0.0.1:20011\"},\"bazarr\":{\"MESH_BAZARR_CONFIG_DIR\":\"/var/lib/bazarr/config\",\"MESH_BAZARR_CONFIG_FILE\":\"/var/lib/bazarr/config.json\",\"MESH_BAZARR_CONTAINER\":\"bazarr\",\"MESH_BAZARR_URL\":\"http://127.0.0.1:20020\"},\"bookshelf\":{\"MESH_BOOKSHELF_CONFIG_DIR\":\"/var/lib/bookshelf/config\",\"MESH_BOOKSHELF_URL\":\"http://127.0.0.1:20021\"},\"claude-code\":{\"MESH_CLAUDE_CODE_FACTS\":\"/var/lib/claude-code/facts.json\",\"MESH_CLAUDE_CODE_SETTINGS\":\"/var/lib/claude-code/settings.json\",\"MESH_CLAUDE_CODE_STATE\":\"/var/lib/claude-code\"},\"grafana\":{\"MESH_GRAFANA_CONFIG_FILE\":\"/var/lib/mesh/grafana/config.json\",\"MESH_GRAFANA_URL\":\"http://127.0.0.1:20012\"},\"home-assistant\":{\"MESH_HOMEASSISTANT_CONFIG_FILE\":\"/var/lib/mesh/home-assistant/config.json\",\"MESH_HOMEASSISTANT_TOKEN_FILE\":\"/var/lib/mesh/home-assistant/token\",\"MESH_HOMEASSISTANT_URL\":\"http://127.0.0.1:8123\"},\"icecast\":{\"MESH_ICECAST_ADMIN_PASSWORD_FILE\":\"/var/lib/icecast/admin.secret\",\"MESH_ICECAST_CONFIG_FILE\":\"/var/lib/mesh/icecast/config.json\",\"MESH_ICECAST_URL\":\"http://127.0.0.1:20005\"},\"influxdb\":{\"MESH_INFLUXDB_CONFIG_FILE\":\"/var/lib/mesh/influxdb/config.json\",\"MESH_INFLUXDB_TOKEN_FILE\":\"/var/lib/influxdb/admin-token.secret\",\"MESH_INFLUXDB_URL\":\"http://127.0.0.1:8086\",\"MESH_RECEIVES\":\"/var/lib/influxdb/grants/mesh.json\"},\"jackett\":{\"MESH_JACKETT_API_KEY_FILE\":\"/var/lib/mesh/jackett/api-key\",\"MESH_JACKETT_CONFIG_DIR\":\"/var/lib/jackett/config\",\"MESH_JACKETT_CONFIG_FILE\":\"/var/lib/jackett/config.json\",\"MESH_JACKETT_URL\":\"http://127.0.0.1:20004\"},\"kometa\":{\"MESH_KOMETA_CONFIG_DIR\":\"/var/lib/kometa/config\",\"MESH_KOMETA_CONFIG_FILE\":\"/var/lib/kometa/config.yml\"},\"letta\":{\"MESH_LETTA_CONFIG_FILE\":\"/var/lib/mesh/letta/config.json\",\"MESH_LETTA_URL\":\"http://127.0.0.1:20002\"},\"lidarr\":{\"MESH_LIDARR_API_KEY_FILE\":\"/var/lib/mesh/lidarr/api-key\",\"MESH_LIDARR_CONFIG_DIR\":\"/var/lib/lidarr/config\",\"MESH_LIDARR_RECYCLE_BIN\":\"/recycle/\",\"MESH_LIDARR_RECYCLE_DAYS\":\"7\",\"MESH_LIDARR_URL\":\"http://127.0.0.1:20022\",\"MESH_PLEX_BIND_FILE\":\"/var/lib/lidarr/plex-api.json\",\"MESH_PLEX_TOKEN_FILE\":\"/var/lib/lidarr/plex-api.secret\"},\"media-importer\":{\"MESH_MEDIA_IMPORTER_SETTINGS\":\"/var/lib/media-importer/settings.json\",\"MESH_MEDIA_IMPORTER_STATE\":\"/var/lib/media-importer\",\"MESH_MEDIA_LIBRARY\":\"/storage/media/poc\"},\"mesh-files\":{\"MESH_FILES_STATE\":\"/var/lib/mesh-files\",\"MESH_OWNED_PATHS\":\"{\\\"/etc/NetworkManager/conf.d/50-mesh.conf\\\":\\\"networkmanager (its own tools)\\\",\\\"/etc/claude-code\\\":\\\"claude-code (its own tools)\\\",\\\"/etc/claude-code/agent-account\\\":\\\"claude-code (its own tools)\\\",\\\"/etc/dnsmasq.conf\\\":\\\"dnsmasq (its own tools)\\\",\\\"/etc/docker/daemon.json\\\":\\\"docker (its own tools)\\\",\\\"/etc/fail2ban/action.d\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/action.d/iptables-allports-dualchain.conf\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/filter.d\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/jail.d\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/jail.d/recidive.conf\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/jail.d/sshd.conf\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/jail.local\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/fail2ban/mesh-own-addresses.json\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/hostname\\\":\\\"hostname (node-hostname)\\\",\\\"/etc/hosts\\\":\\\"hostname (node-hostname)\\\",\\\"/etc/locale.conf\\\":\\\"localization (its own tools)\\\",\\\"/etc/logrotate.conf\\\":\\\"logrotate (its own tools)\\\",\\\"/etc/logrotate.d/fail2ban\\\":\\\"fail2ban (its own tools)\\\",\\\"/etc/mesh-power\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/after-boot\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/after-wake\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/before-shutdown\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/before-sleep\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/on-battery\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-power/moments/on-mains\\\":\\\"power (its own tools)\\\",\\\"/etc/mesh-resolver/nodes.conf\\\":\\\"dnsmasq (its own tools)\\\",\\\"/etc/mesh-resolver/zones.conf\\\":\\\"dnsmasq (its own tools)\\\",\\\"/etc/nfs-server\\\":\\\"nfs-server (its own tools)\\\",\\\"/etc/nfs-server/machines\\\":\\\"nfs-server (its own tools)\\\",\\\"/etc/nfs-server/shares.conf\\\":\\\"nfs-server (its own tools)\\\",\\\"/etc/nfs.conf.d/50-mesh.conf\\\":\\\"nfs-server (its own tools)\\\",\\\"/etc/pacman.conf\\\":\\\"pacman (its own tools)\\\",\\\"/etc/pacman.d/hooks/90-mesh-kernel-boot-entries.hook\\\":\\\"kernel (its own tools)\\\",\\\"/etc/resolv.conf\\\":\\\"networkmanager (node-uplink)\\\",\\\"/etc/ssh/sshd_config.d/10-mesh.conf\\\":\\\"sshd (its own tools)\\\",\\\"/etc/sudoers.d/10-mesh-operator\\\":\\\"sudo (its own tools)\\\",\\\"/etc/systemd/logind.conf.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/logind.conf.d/power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/dnsmasq.service.d\\\":\\\"dnsmasq (its own tools)\\\",\\\"/etc/systemd/system/dnsmasq.service.d/mesh.conf\\\":\\\"dnsmasq (its own tools)\\\",\\\"/etc/systemd/system/docker-prune.service\\\":\\\"docker (its own tools)\\\",\\\"/etc/systemd/system/docker-prune.timer\\\":\\\"docker (its own tools)\\\",\\\"/etc/systemd/system/hibernate.target.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/hibernate.target.d/mesh-power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/hybrid-sleep.target.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/hybrid-sleep.target.d/mesh-power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/mesh-ca-trust.service\\\":\\\"ca-trust (its own tools)\\\",\\\"/etc/systemd/system/mesh-filter.service\\\":\\\"nftables (its own tools)\\\",\\\"/etc/systemd/system/mesh-kernel-boot-entries.service\\\":\\\"kernel (its own tools)\\\",\\\"/etc/systemd/system/mesh-kernel-huge-pages.service\\\":\\\"kernel (its own tools)\\\",\\\"/etc/systemd/system/mesh-power-after-boot.service\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/mesh-power-after-wake.service\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/mesh-power-before-shutdown.service\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/mesh-power-before-sleep.service\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/mesh-power-supply.service\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/nftables.service.d/mesh.conf\\\":\\\"nftables (its own tools)\\\",\\\"/etc/systemd/system/sleep.target.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/sleep.target.d/mesh-power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/suspend-then-hibernate.target.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/suspend-then-hibernate.target.d/mesh-power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/suspend.target.d\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/system/suspend.target.d/mesh-power.conf\\\":\\\"power (its own tools)\\\",\\\"/etc/systemd/timesyncd.conf.d/50-mesh.conf\\\":\\\"time-sync (its own tools)\\\",\\\"/etc/udev/rules.d/90-mesh-power.rules\\\":\\\"power (its own tools)\\\",\\\"/etc/vconsole.conf\\\":\\\"localization (its own tools)\\\",\\\"/etc/xdg/reflector/reflector.conf\\\":\\\"pacman (its own tools)\\\",\\\"/run/mesh-power\\\":\\\"power (its own tools)\\\",\\\"/run/nfs-server\\\":\\\"nfs-server (its own tools)\\\",\\\"/usr/lib/nox-mesh-host/launch\\\":\\\"mesh-host (its own tools)\\\",\\\"/usr/lib/nox-mesh-host/versions/4e121b6e88f1\\\":\\\"mesh-host (its own tools)\\\",\\\"/usr/local/bin\\\":\\\"mesh-cli (its own tools)\\\",\\\"/usr/local/bin/claude-agent\\\":\\\"claude-code (its own tools)\\\",\\\"/usr/local/lib/mesh-power\\\":\\\"power (its own tools)\\\",\\\"/var/lib/dnsmasq-watch\\\":\\\"dnsmasq (its own tools)\\\",\\\"/var/lib/mesh-fail2ban\\\":\\\"fail2ban (its own tools)\\\",\\\"/var/lib/mesh-fail2ban/own-addresses\\\":\\\"fail2ban (its own tools)\\\",\\\"/var/lib/mesh-store\\\":\\\"postgres (its own tools)\\\",\\\"/var/lib/nfs-server\\\":\\\"nfs-server (its own tools)\\\",\\\"/var/lib/nfs-server/from-bus\\\":\\\"nfs-server (its own tools)\\\",\\\"/var/lib/postgres\\\":\\\"postgres (its own tools)\\\",\\\"/var/lib/route-proxy/acme\\\":\\\"route-proxy (its own tools)\\\",\\\"/var/lib/route-proxy/ca\\\":\\\"route-proxy (its own tools)\\\",\\\"/var/lib/route-proxy/routes\\\":\\\"route-proxy (its own tools)\\\",\\\"/var/lib/systemd\\\":\\\"systemd (its own tools)\\\",\\\"/var/log/fail2ban.log\\\":\\\"fail2ban (its own tools)\\\",\\\"/var/run/fail2ban\\\":\\\"fail2ban (its own tools)\\\"}\",\"MESH_SECRET_PLACES\":\"[\\\"/var/lib/baserow\\\",\\\"/var/lib/bazarr/radarr-api.secret\\\",\\\"/var/lib/bazarr/sonarr-api.secret\\\",\\\"/var/lib/bookshelf/jackett-api.secret\\\",\\\"/var/lib/bookshelf/nzbget-api.secret\\\",\\\"/var/lib/bookshelf/qbittorrent-api.secret\\\",\\\"/var/lib/car-hunter\\\",\\\"/var/lib/claude-code/gitea-read.secret\\\",\\\"/var/lib/home-assistant/lidarr-api.secret\\\",\\\"/var/lib/home-assistant/mqtt-topic.secret\\\",\\\"/var/lib/home-assistant/radarr-api.secret\\\",\\\"/var/lib/home-assistant/sonarr-api.secret\\\",\\\"/var/lib/icecast/admin.secret\\\",\\\"/var/lib/icecast/relay.secret\\\",\\\"/var/lib/icecast/source.secret\\\",\\\"/var/lib/influxdb\\\",\\\"/var/lib/kometa\\\",\\\"/var/lib/letta\\\",\\\"/var/lib/lidarr/jackett-api.secret\\\",\\\"/var/lib/lidarr/nzbget-api.secret\\\",\\\"/var/lib/lidarr/plex-api.secret\\\",\\\"/var/lib/lidarr/qbittorrent-api.secret\\\",\\\"/var/lib/mesh-delivery-assigner\\\",\\\"/var/lib/mesh-provisioner-client\\\",\\\"/var/lib/mesh-reads\\\",\\\"/var/lib/mesh/dnsmasq\\\",\\\"/var/lib/mesh/grafana\\\",\\\"/var/lib/mesh/home-assistant\\\",\\\"/var/lib/mesh/jackett\\\",\\\"/var/lib/mesh/lidarr\\\",\\\"/var/lib/mesh/mosquitto\\\",\\\"/var/lib/mesh/node-tools\\\",\\\"/var/lib/mesh/nodered\\\",\\\"/var/lib/mesh/nzbget\\\",\\\"/var/lib/mesh/ombi\\\",\\\"/var/lib/mesh/pacman\\\",\\\"/var/lib/mesh/postgres\\\",\\\"/var/lib/mesh/qbittorrent\\\",\\\"/var/lib/mesh/radarr\\\",\\\"/var/lib/mesh/route-proxy\\\",\\\"/var/lib/mesh/searxng\\\",\\\"/var/lib/mesh/sonarr\\\",\\\"/var/lib/mesh/unifi\\\",\\\"/var/lib/mosquitto/grants\\\",\\\"/var/lib/mssql\\\",\\\"/var/lib/n8n/database.secret\\\",\\\"/var/lib/nodered/mqtt-topic.secret\\\",\\\"/var/lib/nzbgeek\\\",\\\"/var/lib/ombi/lidarr-api.secret\\\",\\\"/var/lib/ombi/plex-api.secret\\\",\\\"/var/lib/ombi/radarr-api.secret\\\",\\\"/var/lib/ombi/sonarr-api.secret\\\",\\\"/var/lib/radarr/jackett-api.secret\\\",\\\"/var/lib/radarr/nzbget-api.secret\\\",\\\"/var/lib/radarr/plex-api.secret\\\",\\\"/var/lib/radarr/qbittorrent-api.secret\\\",\\\"/var/lib/redis/default.secret\\\",\\\"/var/lib/redis/grants\\\",\\\"/var/lib/restic\\\",\\\"/var/lib/sonarr/jackett-api.secret\\\",\\\"/var/lib/sonarr/nzbget-api.secret\\\",\\\"/var/lib/sonarr/plex-api.secret\\\",\\\"/var/lib/sonarr/qbittorrent-api.secret\\\",\\\"/var/lib/supabase\\\",\\\"/var/lib/tautulli/plex-api.secret\\\",\\\"/var/lib/txt-game/database.secret\\\"]\"},\"mosquitto\":{\"MESH_MQTT_CTRL_CONTAINER\":\"mosquitto\",\"MESH_PROVISION_ADMIN_USER\":\"mesh-admin\",\"MESH_PROVISION_MQTT\":\"127.0.0.1:1883\",\"MESH_PROVISION_PASSWORD_FILE\":\"/var/lib/mesh/mosquitto/admin\",\"MESH_RECEIVES\":\"/var/lib/mosquitto/grants/mesh.json\"},\"mssql\":{\"MESH_MSSQL_READER_PASSWORD_FILE\":\"/var/lib/mssql/reader.secret\",\"MESH_PROVISION_MSSQL\":\"mssql://sa@127.0.0.1:4848/master\",\"MESH_PROVISION_PASSWORD_FILE\":\"/var/lib/mssql/sa.secret\",\"MESH_RECEIVES\":\"/var/lib/mssql/grants/mesh.json\"},\"nodered\":{\"MESH_NODERED_CONFIG_FILE\":\"/var/lib/mesh/nodered/config.json\",\"MESH_NODERED_URL\":\"http://127.0.0.1:20006\"},\"nzbgeek\":{\"MESH_NZBGEEK_KEY_FILE\":\"/var/lib/nzbgeek/api-key.secret\",\"MESH_NZBGEEK_SETTINGS\":\"/var/lib/nzbgeek/settings.json\"},\"nzbget\":{\"MESH_NZBGET_CONFIG_DIR\":\"/var/lib/nzbget/config\",\"MESH_NZBGET_CONFIG_FILE\":\"/var/lib/nzbget/config.json\",\"MESH_NZBGET_PASSWORD_FILE\":\"/var/lib/mesh/nzbget/password\",\"MESH_NZBGET_SECRETS_DIR\":\"/var/lib/mesh/nzbget\",\"MESH_NZBGET_STATE\":\"/var/lib/nzbget\",\"MESH_NZBGET_URL\":\"http://127.0.0.1:20017\"},\"ombi\":{\"MESH_OMBI_API_KEY_FILE\":\"/var/lib/mesh/ombi/api-key\",\"MESH_OMBI_CONFIG_FILE\":\"/var/lib/mesh/ombi/config.json\",\"MESH_OMBI_URL\":\"http://127.0.0.1:20024\"},\"pacman\":{\"PACMAN_KEEPER_CONFIG\":\"/var/lib/mesh/pacman/keeper.json\"},\"plex\":{\"MESH_PLEX_CONFIG_DIR\":\"/mnt/plex/config\",\"MESH_PLEX_URL\":\"http://127.0.0.1:32400\"},\"postgres\":{\"MESH_CONSUMERS_FILE\":\"/var/lib/mesh/postgres/consumers.json\",\"MESH_POSTGRES_READER_PASSWORD_FILE\":\"/var/lib/mesh/postgres/reader.secret\",\"MESH_PROVISION_PASSWORD_FILE\":\"/var/lib/mesh/postgres/superuser.secret\",\"MESH_PROVISION_POSTGRES\":\"postgres://postgres@127.0.0.1:5434/postgres?sslmode=disable\",\"MESH_RECEIVES\":\"/var/lib/mesh/postgres/grants/mesh.json\"},\"qbittorrent\":{\"MESH_QBITTORRENT_CONFIG_DIR\":\"/var/lib/qbittorrent/config\",\"MESH_QBITTORRENT_CONFIG_FILE\":\"/var/lib/qbittorrent/config.json\",\"MESH_QBITTORRENT_PASSWORD_FILE\":\"/var/lib/mesh/qbittorrent/password\",\"MESH_QBITTORRENT_URL\":\"http://127.0.0.1:8112\"},\"radarr\":{\"MESH_PLEX_BIND_FILE\":\"/var/lib/radarr/plex-api.json\",\"MESH_PLEX_TOKEN_FILE\":\"/var/lib/radarr/plex-api.secret\",\"MESH_RADARR_API_KEY_FILE\":\"/var/lib/mesh/radarr/api-key\",\"MESH_RADARR_CONFIG_DIR\":\"/var/lib/radarr/config\",\"MESH_RADARR_URL\":\"http://127.0.0.1:20019\"},\"redis\":{\"MESH_PROVISION_PASSWORD_FILE\":\"/var/lib/redis/default.secret\",\"MESH_PROVISION_REDIS\":\"127.0.0.1:20003\",\"MESH_RECEIVES\":\"/var/lib/redis/grants/mesh.json\"},\"restic\":{\"MESH_BACKUP_DATA\":\"/var/lib/restic/data.conf\",\"MESH_BACKUP_DECLARED\":\"/var/lib/restic/backups.conf\",\"MESH_BACKUP_PASSWORD_FILE\":\"/var/lib/restic/repository.secret\",\"MESH_BACKUP_REPOSITORY\":\"/storage/restic\",\"MESH_BACKUP_STATE\":\"/var/lib/restic\"},\"searxng\":{\"MESH_SEARXNG_CONFIG_FILE\":\"/var/lib/mesh/searxng/config.json\",\"MESH_SEARXNG_URL\":\"http://127.0.0.1:20000\"},\"sonarr\":{\"MESH_PLEX_BIND_FILE\":\"/var/lib/sonarr/plex-api.json\",\"MESH_PLEX_TOKEN_FILE\":\"/var/lib/sonarr/plex-api.secret\",\"MESH_SONARR_API_KEY_FILE\":\"/var/lib/mesh/sonarr/api-key\",\"MESH_SONARR_CONFIG_DIR\":\"/var/lib/sonarr/config\",\"MESH_SONARR_RECYCLE_DIR\":\"/var/lib/sonarr/recycle-bin\",\"MESH_SONARR_URL\":\"http://127.0.0.1:20018\"},\"systemd\":{\"MESH_SYSTEMD_STATE\":\"/var/lib/mesh/systemd\"},\"tautulli\":{\"MESH_TAUTULLI_CONFIG_DIR\":\"/var/lib/tautulli/config\",\"MESH_TAUTULLI_CONFIG_FILE\":\"/var/lib/mesh/tautulli/config.json\",\"MESH_TAUTULLI_CONTAINER\":\"tautulli\",\"MESH_TAUTULLI_URL\":\"http://127.0.0.1:20023\"},\"unifi\":{\"MESH_UNIFI_CONFIG_FILE\":\"/var/lib/mesh/unifi/config.json\",\"MESH_UNIFI_URL\":\"https://127.0.0.1:8443\"},\"youtube\":{\"MESH_YOUTUBE_DOWNLOADS\":\"/storage/downloads/youtube\",\"MESH_YOUTUBE_SETTINGS\":\"/var/lib/youtube/settings.json\"},\"zsh\":{\"ZSH_TOOLS_CONF\":\"/var/lib/zsh/tools.conf\"}}",
|
|
"MESH_TOOL_MODULES": "avahi=/var/lib/mesh/bundles/avahi/tools/avahi-tools,baserow=/var/lib/mesh/bundles/baserow/tools/tools/index.serve.mjs,bazarr=/var/lib/mesh/bundles/bazarr/code/index.serve.mjs,bazarr=/var/lib/mesh/bundles/bazarr/code/tools/index.serve.mjs,bookshelf=/var/lib/mesh/bundles/bookshelf/code/index.serve.mjs,bookshelf=/var/lib/mesh/bundles/bookshelf/code/tools/index.serve.mjs,claude-code=/var/lib/mesh/bundles/claude-code/tools/claude-code,dbus=/var/lib/mesh/bundles/dbus/tools-go/dbus-tools,disk-load=/var/lib/mesh/bundles/disk-load/tools-go/disk-load,dnsmasq=/var/lib/mesh/bundles/dnsmasq/tools/dnsmasq-tools,docker=/var/lib/mesh/bundles/docker/tools/docker-tools,fail2ban=/var/lib/mesh/bundles/fail2ban/tools/fail2ban-tools,grafana=/var/lib/mesh/bundles/grafana/code/index.serve.mjs,grafana=/var/lib/mesh/bundles/grafana/code/tools/index.serve.mjs,home-assistant=/var/lib/mesh/bundles/home-assistant/code/index.serve.mjs,home-assistant=/var/lib/mesh/bundles/home-assistant/code/tools/index.serve.mjs,hostname=/var/lib/mesh/bundles/hostname/tools/hostname-tools,icecast=/var/lib/mesh/bundles/icecast/code/index.serve.mjs,icecast=/var/lib/mesh/bundles/icecast/code/tools/index.serve.mjs,influxdb=/var/lib/mesh/bundles/influxdb/code/provisioner/index.serve.mjs,influxdb=/var/lib/mesh/bundles/influxdb/code/tools/index.serve.mjs,jackett=/var/lib/mesh/bundles/jackett/code/tools/index.serve.mjs,kernel=/var/lib/mesh/bundles/kernel/tools/kernel-tools,kometa=/var/lib/mesh/bundles/kometa/code/tools/index.serve.mjs,letta=/var/lib/mesh/bundles/letta/tools/tools/index.serve.mjs,lidarr=/var/lib/mesh/bundles/lidarr/tools-go/lidarr,localization=/var/lib/mesh/bundles/localization/tools/localization-tools,logrotate=/var/lib/mesh/bundles/logrotate/tools/logrotate-tools,media-importer=/var/lib/mesh/bundles/media-importer/tools/media-importer,mesh-files=/var/lib/mesh/bundles/mesh-files/tools/mesh-files,mosquitto=/var/lib/mesh/bundles/mosquitto/code/index.serve.mjs,mosquitto=/var/lib/mesh/bundles/mosquitto/code/provisioner/index.serve.mjs,mosquitto=/var/lib/mesh/bundles/mosquitto/code/tools/index.serve.mjs,mssql=/var/lib/mesh/bundles/mssql/code/index.serve.mjs,mssql=/var/lib/mesh/bundles/mssql/code/provisioner/index.serve.mjs,mssql=/var/lib/mesh/bundles/mssql/code/tools/index.serve.mjs,netcheck=/var/lib/mesh/bundles/netcheck/tools-go/netcheck,netcheck=/var/lib/mesh/bundles/netcheck/tools-typescript/tools/index.serve.mjs,networkmanager=/var/lib/mesh/bundles/networkmanager/tools/uplink-tools,nfs-server=/var/lib/mesh/bundles/nfs-server/tools/nfs-server,nftables=/var/lib/mesh/bundles/nftables/tools/tools/index.serve.mjs,nodered=/var/lib/mesh/bundles/nodered/code/tools/index.serve.mjs,nzbgeek=/var/lib/mesh/bundles/nzbgeek/tools/nzbgeek,nzbget=/var/lib/mesh/bundles/nzbget/code/nzbget,ombi=/var/lib/mesh/bundles/ombi/code/index.serve.mjs,ombi=/var/lib/mesh/bundles/ombi/code/tools/index.serve.mjs,pacman=/var/lib/mesh/bundles/pacman/tools/pacman-tools,plex=/var/lib/mesh/bundles/plex/code/plex,postgres=/var/lib/mesh/bundles/postgres/code/postgres-provider,power=/var/lib/mesh/bundles/power/tools-go/power,qbittorrent=/var/lib/mesh/bundles/qbittorrent/code/qbittorrent,radarr=/var/lib/mesh/bundles/radarr/tools-go/radarr,redis=/var/lib/mesh/bundles/redis/code/index.serve.mjs,redis=/var/lib/mesh/bundles/redis/code/provisioner/index.serve.mjs,redis=/var/lib/mesh/bundles/redis/code/tools/index.serve.mjs,restic=/var/lib/mesh/bundles/restic/tools/restic-backups,route-proxy=/var/lib/mesh/bundles/route-proxy/provider/route-provider,searxng=/var/lib/mesh/bundles/searxng/tools/tools/index.serve.mjs,sonarr=/var/lib/mesh/bundles/sonarr/code/index.serve.mjs,sonarr=/var/lib/mesh/bundles/sonarr/code/tools/index.serve.mjs,ssh-client=/var/lib/mesh/bundles/ssh-client/tools/ssh-client-tools,sudo=/var/lib/mesh/bundles/sudo/tools/sudo-tools,systemd=/var/lib/mesh/bundles/systemd/tools/systemd-tools,tautulli=/var/lib/mesh/bundles/tautulli/code/index.serve.mjs,tautulli=/var/lib/mesh/bundles/tautulli/code/tools/index.serve.mjs,time-sync=/var/lib/mesh/bundles/time-sync/tools/time-sync-tools,unifi=/var/lib/mesh/bundles/unifi/tools/tools/index.serve.mjs,youtube=/var/lib/mesh/bundles/youtube/tools/youtube,zsh=/var/lib/mesh/bundles/zsh/tools/tools/index.serve.mjs"
|
|
},
|
|
"id": "node-tools.runtime",
|
|
"module": "node-tools",
|
|
"name": "node-tools",
|
|
"restart-on": [
|
|
"avahi.bundle-tools",
|
|
"baserow.bundle-tools",
|
|
"bazarr.bundle-code",
|
|
"bookshelf.bundle-code",
|
|
"claude-code.bundle-tools",
|
|
"dbus.bundle-tools-go",
|
|
"disk-load.bundle-tools-go",
|
|
"dnsmasq.bundle-tools",
|
|
"docker.bundle-tools",
|
|
"fail2ban.bundle-tools",
|
|
"grafana.bundle-code",
|
|
"home-assistant.bundle-code",
|
|
"hostname.bundle-tools",
|
|
"icecast.bundle-code",
|
|
"influxdb.bundle-code",
|
|
"jackett.bundle-code",
|
|
"kernel.bundle-tools",
|
|
"kometa.bundle-code",
|
|
"letta.bundle-tools",
|
|
"lidarr.bundle-tools-go",
|
|
"localization.bundle-tools",
|
|
"logrotate.bundle-tools",
|
|
"media-importer.bundle-tools",
|
|
"mesh-files.bundle-tools",
|
|
"mosquitto.bundle-code",
|
|
"mssql.bundle-code",
|
|
"netcheck.bundle-tools-go",
|
|
"netcheck.bundle-tools-typescript",
|
|
"networkmanager.bundle-tools",
|
|
"nfs-server.bundle-tools",
|
|
"nftables.bundle-tools",
|
|
"node-tools.needs-broker",
|
|
"nodered.bundle-code",
|
|
"nzbgeek.bundle-tools",
|
|
"nzbget.bundle-code",
|
|
"ombi.bundle-code",
|
|
"pacman.bundle-tools",
|
|
"plex.bundle-code",
|
|
"postgres.bundle-code",
|
|
"power.bundle-tools-go",
|
|
"qbittorrent.bundle-code",
|
|
"radarr.bundle-tools-go",
|
|
"redis.bundle-code",
|
|
"restic.bundle-tools",
|
|
"route-proxy.bundle-provider",
|
|
"searxng.bundle-tools",
|
|
"sonarr.bundle-code",
|
|
"ssh-client.bundle-tools",
|
|
"sudo.bundle-tools",
|
|
"systemd.bundle-tools",
|
|
"tautulli.bundle-code",
|
|
"time-sync.bundle-tools",
|
|
"unifi.bundle-tools",
|
|
"youtube.bundle-tools",
|
|
"zsh.bundle-tools",
|
|
"baserow.runtime-config",
|
|
"bazarr.runtime-config",
|
|
"claude-code.facts",
|
|
"claude-code.settings",
|
|
"grafana.runtime-config",
|
|
"home-assistant.needs-token",
|
|
"home-assistant.runtime-config",
|
|
"icecast.runtime-config",
|
|
"icecast.secret-admin",
|
|
"influxdb.needs-admin-token",
|
|
"influxdb.received-influxdb-api",
|
|
"influxdb.runtime-config",
|
|
"jackett.needs-api-key",
|
|
"jackett.runtime-config",
|
|
"kometa.settings",
|
|
"letta.runtime-config",
|
|
"lidarr.bound-plex-api",
|
|
"lidarr.needs-api-key",
|
|
"lidarr.secret-plex-api",
|
|
"media-importer.settings",
|
|
"mosquitto.needs-admin",
|
|
"mosquitto.received-mqtt-topic",
|
|
"mssql.needs-reader",
|
|
"mssql.needs-sa",
|
|
"mssql.received-mssql-database",
|
|
"nodered.runtime-config",
|
|
"nzbgeek.needs-api-key",
|
|
"nzbgeek.settings",
|
|
"nzbget.needs-password",
|
|
"nzbget.runtime-config",
|
|
"ombi.needs-api-key",
|
|
"ombi.runtime-config",
|
|
"pacman.keeper-config",
|
|
"postgres.consumers",
|
|
"postgres.needs-reader",
|
|
"postgres.needs-superuser",
|
|
"postgres.received-postgres-database",
|
|
"qbittorrent.needs-password",
|
|
"qbittorrent.runtime-config",
|
|
"radarr.bound-plex-api",
|
|
"radarr.needs-api-key",
|
|
"radarr.secret-plex-api",
|
|
"redis.received-redis-cache",
|
|
"redis.secret-secret",
|
|
"restic.data-declared",
|
|
"restic.declared",
|
|
"restic.needs-repository",
|
|
"searxng.runtime-config",
|
|
"sonarr.bound-plex-api",
|
|
"sonarr.needs-api-key",
|
|
"sonarr.secret-plex-api",
|
|
"tautulli.runtime-config",
|
|
"unifi.runtime-config",
|
|
"youtube.settings",
|
|
"zsh.tools-conf"
|
|
],
|
|
"run": [
|
|
"./node-tools"
|
|
],
|
|
"source": "http://novox.internal:5100/v2/node-tools/runtime/blobs/sha256:ef790876783d817903b337b8418b1eb21fb49d34128a390bbf7c3d08a4b2be8a",
|
|
"type": "process",
|
|
"user": "ace"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "a module the engine could not compose",
|
|
"of": "state:composed/<node>.<module>.<fingerprint>",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"module": "nzbget",
|
|
"fp": "src2:62756c6c6462756c6c6462756c6c6462756c6c6462756c6c6462756c6c646275",
|
|
"resources": [],
|
|
"refused": "a secret the vault does not hold"
|
|
}
|
|
},
|
|
{
|
|
"name": "the node's own composition",
|
|
"of": "state:composed/<node>.node",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"resources": [],
|
|
"own": {
|
|
"adoption": {
|
|
"taken": [
|
|
"avahi"
|
|
],
|
|
"untaken": {
|
|
"plex": [
|
|
"plex.bundle-code"
|
|
]
|
|
}
|
|
},
|
|
"identities": [
|
|
{
|
|
"module": "plex",
|
|
"name": "plex",
|
|
"uid": 1001,
|
|
"gid": 1001,
|
|
"groups": [
|
|
1002
|
|
],
|
|
"runner": "plex"
|
|
}
|
|
],
|
|
"groups": [
|
|
{
|
|
"name": "mesh-media",
|
|
"gid": 1002
|
|
}
|
|
],
|
|
"libraries": [
|
|
{
|
|
"library": "movies",
|
|
"root": "/srv/media/movies",
|
|
"group": "mesh-media",
|
|
"gid": 1002,
|
|
"home": false,
|
|
"taken": true,
|
|
"paths": [
|
|
"/srv/media/movies"
|
|
]
|
|
}
|
|
],
|
|
"provisioner_account": "mesh-provisioner-client"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "a module running (typed from the engine's own values; no read tool answers a have key)",
|
|
"of": "state:have/<node>.<module>",
|
|
"given": {
|
|
"v": 1,
|
|
"fp": "src2:62756c6c6462756c6c6462756c6c6462756c6c6462756c6c6462756c6c646275",
|
|
"composed": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"build": "b1",
|
|
"phase": "running",
|
|
"health": "ok",
|
|
"sealed": [
|
|
"web.secret"
|
|
],
|
|
"sealed-at": {
|
|
"web.secret#sealed": "box1"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "a failed apply waiting on a store's holder (typed from the engine's values)",
|
|
"of": "state:have/<node>.<module>",
|
|
"given": {
|
|
"v": 1,
|
|
"fp": "src2:62756c6c6462756c6c6462756c6c6462756c6c6462756c6c6462756c6c646275",
|
|
"composed": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"phase": "failed",
|
|
"health": "failed",
|
|
"detail": "the pull met a store that is not settled",
|
|
"pull-wait": {
|
|
"image": "registry.example/web:1",
|
|
"seat": "container-image-registry",
|
|
"holder": "gitea",
|
|
"began": "2026-11-05T12:00:00Z",
|
|
"retried": "the holder settled",
|
|
"retried-at": "2026-11-05T12:05:00Z"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "a move waiting for a person's yes",
|
|
"of": "state:have/<node>.<module>",
|
|
"given": {
|
|
"v": 1,
|
|
"fp": "src2:62756c6c6462756c6c6462756c6c6462756c6c6462756c6c6462756c6c646275",
|
|
"composed": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"phase": "waiting-yes",
|
|
"health": "ok",
|
|
"judgement": "recreates",
|
|
"waits": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
"build-alone": true,
|
|
"kept": [
|
|
"tool runner not declared"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "the bus module's have carries the user list written (typed from the engine's values)",
|
|
"of": "state:have/<node>.<module>",
|
|
"given": {
|
|
"v": 1,
|
|
"phase": "running",
|
|
"health": "ok",
|
|
"user-list": {
|
|
"source": "user-list",
|
|
"revision": 7,
|
|
"wanted": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"users": 3,
|
|
"at": "2026-11-05T12:00:00Z",
|
|
"follows": "grants",
|
|
"key": "-----BEGIN PUBLIC KEY-----",
|
|
"handed": {
|
|
"from": "ace",
|
|
"to": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
"users": 3,
|
|
"box": {
|
|
"v": 1,
|
|
"eph": "e",
|
|
"iv": "i",
|
|
"tag": "t",
|
|
"ct": "c"
|
|
},
|
|
"at": "2026-11-05T12:00:00Z"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "a node's own facts with its record and an answer to a candidate (typed from the engine's values)",
|
|
"of": "state:have/<node>.node",
|
|
"given": {
|
|
"v": 1,
|
|
"composed": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"record": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"tunnel-key": "k",
|
|
"capabilities": [
|
|
"docker"
|
|
],
|
|
"networks": [
|
|
{
|
|
"link": "eth0",
|
|
"network": "192.0.2.0/24"
|
|
}
|
|
],
|
|
"networks-said": true,
|
|
"contract": 3
|
|
},
|
|
"composes": "own",
|
|
"candidates": {
|
|
"p1": {
|
|
"proposal": "p1",
|
|
"revision": 4,
|
|
"verdict": "differs",
|
|
"same": [
|
|
"web"
|
|
],
|
|
"differs": [
|
|
{
|
|
"module": "api",
|
|
"composed": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"running": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
"why": "a file differs",
|
|
"bodies": [
|
|
{
|
|
"id": "api.cfg",
|
|
"why": "content",
|
|
"paths": [
|
|
"/etc/api.conf"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"added": [
|
|
{
|
|
"module": "db",
|
|
"unissued": [
|
|
"db.secret"
|
|
]
|
|
}
|
|
],
|
|
"removed": [
|
|
"old"
|
|
],
|
|
"refusals": [
|
|
{
|
|
"module": "mail",
|
|
"why": "a value is missing",
|
|
"today": "runs"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "a module's data items on a node (typed from the engine's values)",
|
|
"of": "state:data/<node>.<module>",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"module": "postgres",
|
|
"digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"items": [
|
|
{
|
|
"module": "postgres",
|
|
"item": "cluster",
|
|
"class": "database",
|
|
"path": "/var/lib/postgres",
|
|
"covered_by": "/var/lib/postgres",
|
|
"protection": "backup",
|
|
"measure": "dataset"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "a node's health (typed from the engine's values)",
|
|
"of": "state:health/<node>",
|
|
"given": {
|
|
"v": 1,
|
|
"node": "ace",
|
|
"network": {
|
|
"state": "running",
|
|
"since": "2026-11-05T10:00:00Z",
|
|
"parts": [
|
|
{
|
|
"part": "resolver",
|
|
"state": "running",
|
|
"since": "2026-11-05T10:00:00Z"
|
|
}
|
|
]
|
|
},
|
|
"peers": [
|
|
{
|
|
"key": "k",
|
|
"addresses": [
|
|
"198.51.100.1"
|
|
],
|
|
"seen": true
|
|
}
|
|
],
|
|
"units": {
|
|
"state": "degraded",
|
|
"failed": [
|
|
{
|
|
"unit": "x.service",
|
|
"scope": "system",
|
|
"result": "exit-code",
|
|
"since": "2026-11-05T11:00:00Z"
|
|
}
|
|
]
|
|
},
|
|
"relogin": [
|
|
{
|
|
"account": "web",
|
|
"reason": "password changed",
|
|
"since": "2026-11-05T11:00:00Z"
|
|
}
|
|
],
|
|
"contract": 3,
|
|
"at": "2026-11-05T12:00:00Z"
|
|
}
|
|
}
|
|
]
|