cloud-init already has *very* strong dependencies:
Requires=networking.service
Before=basic.target
(which is sorting the early boot fairly strictly). But I guess in the same vein, if cloud-init wants to run in between networkd and basic.target, it needs to grow an After=systemd-networkd.service. I also suggest to replace the "Requires=networking.service" with "After=networking.service" as ifupdown is not mandatory any more.
networkd can run without D-Bus in principle, but if that is not running yet but dbus.socket is we'll run into deadlocks again -- and if we start it before we need to teach it to connect to D-Bus once it becomes available.
cloud-init already has *very* strong dependencies:
Requires= networking. service basic.target
Before=
(which is sorting the early boot fairly strictly). But I guess in the same vein, if cloud-init wants to run in between networkd and basic.target, it needs to grow an After=systemd- networkd. service. I also suggest to replace the "Requires= networking. service" with "After= networking. service" as ifupdown is not mandatory any more.
However, due to networkd's After=dbus.service this wouldn't work yet, as dbus.service runs in late boot -- I proposed/tried to change this, but it's not ready for that (bug 1629797, https:/ /bugs.freedeskt op.org/ show_bug. cgi?id= 98254).
networkd can run without D-Bus in principle, but if that is not running yet but dbus.socket is we'll run into deadlocks again -- and if we start it before we need to teach it to connect to D-Bus once it becomes available.