v0.2.1
What's new in 0.2.0
All-trunks provisioner redesign. dynavlan now provisions VLANs on every carrier-up trunk with detected tags, not one selected trunk. A box with two live trunks gets both provisioned in one unified netplan try. The universal token is now iface.id (e.g. enp1s0.100), so two trunks sharing the same VLAN id provision as distinct interfaces.
--reapply (FR-39). Regenerate and apply the current VLAN set with the running build's config. Use after an upgrade or a config change like VLAN_ROUTES=true.
--version / -V and build identity (FR-38). Every install is stamped with its git commit. Works unprivileged and with a broken config.
Opt-in routed mode (FR-37). VLAN_ROUTES=true accepts DHCP routes at per-VLAN metrics. DNS/NTP stay declined.
Hardware-validated 2026-07-30 on a Protectli/igb dual-trunk appliance with a Meraki switch: dual leasing (L3-29), carrier-pull preserve (L3-30), routed multi-trunk (L3-31), and unified revert (L3-32) all PASS.
0.2.1 fix
backend_list_managed_vlansawk assumedlink:beforeid:innetplan getoutput; netplan 0.107 emitsid:first. Found in code review; 3 tests added.
See CHANGELOG.md for the full list of changes, removals, and fixes.