LXD Enrollment Fails¶
The Enroll LXD Node modal returns an error instead of a green confirmation.
Cannot reach <host>:8443¶
Cannot reach 192.168.10.56:8443 — Verify LXD is running and listening
The TLS port isn't open / LXD isn't listening:
# On the LXD host
ss -tlnp | grep :8443
# Empty? Then LXD isn't bound. Fix:
lxc config set core.https_address :8443
ss -tlnp | grep :8443 # confirm now bound
Firewall check (Rocky / RHEL):
firewall-cmd --list-ports | grep 8443 || \
firewall-cmd --add-port=8443/tcp --permanent && firewall-cmd --reload
Trust token rejected¶
LXD trust failed: ... not a valid token
The token from lxc config trust add --name mfcloud is one-shot and short-lived (5 minutes by default). If you took longer than that to paste it, generate a fresh one.
TLS handshake / fingerprint mismatch¶
[LXD] server fingerprint mismatch — possible MITM or re-installed daemon
The stored lxd_server_fingerprint doesn't match the cert the LXD host is now presenting. Common after:
- Reinstalling LXD / Incus on the host.
- Restoring the host from a snapshot.
- Migrating the LXD database between hosts.
Fix: Containers tab → host row → 🛡 Re-trust clears the pin and re-captures on the next call. Note the new fingerprint in the toast and verify it matches what the host is serving:
If the displayed fingerprint differs from the one in the toast, you have a real MITM or are pointing at the wrong host — investigate, don't blindly re-trust.
Worker side: ModuleNotFoundError: core.lxd¶
The worker on the LXD host doesn't have core/lxd.py. Run Containers → host row → 🛠 Repair Agent to re-push the module set; this now includes core/lxd.py and core/ssh.py, not just tasks/.
Python 3.9 syntax error on the worker¶
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'
Rocky 9 ships Python 3.9, which doesn't support PEP 604 X | None syntax without from __future__ import annotations. If you see this after editing a file under core/ and SFTPing it manually, add the future-import to the top of the file.