Skip to content

wizard: write static-IP config to OS network manager (systemd-networkd / netplan / NetworkManager) #1455

Description

@krisarmstrong

Summary

When the setup wizard sets a static IP, write the config to the host OS's network manager (systemd-networkd, netplan, or NetworkManager — detected at runtime) so the OS re-applies the settings on boot. This is the right fix for "settings should persist across reboot."

Context

Successor to #321, which proposed having seed re-apply config on startup. That pattern is a configurator-appliance model (Ekahau Sidekick / UniFi style) and conflicts with the 2026-05-19 strategy reset positioning seed as a troubleshooting tool. The underlying user need ("my static IP doesn't survive reboot") is real, but the correct solution is OS integration, not a seed-side apply-on-startup hook.

Acceptance criteria

  • Wizard's static-IP path detects whichever network manager is active (systemd-networkd / netplan / NetworkManager) and writes the right config file format.
  • Settings survive reboot with seed not running (OS owns persistence).
  • DHCP fallback path also writes through the OS manager (don't leave half-state).
  • Read path also uses the OS manager as source of truth (don't divergence-store in seed config).
  • Wizard surfaces an explicit warning if no supported manager is detected (legacy /etc/network/interfaces, BSD, etc.) — fail-loud, not silently no-op.
  • Unit tests for each manager backend with golden-file config output.
  • Integration test on dev-srv-ubuntu (systemd-networkd) and macOS (networksetup) — Windows handled separately or out of scope.

Out of scope

Priority

Medium — operator pain is real but workaround (manually editing OS config) exists.

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumUseful work with normal priority.type: featureNew feature or enhancement.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions