It appears that the networkd in Xenial is sensitive to dbus service being available; it times out a bit waiting for dbus before continuing; this is the delay.
If I drop cloud-init.service 'Before=dbus.socket' and 'Before=basic.target'; Add 'After=systemd-networkd-wait-online.service'; then ensure that we have a symlink to systemd-networkd.service and systemd-networkd-wait-online.service in /etc/systemd/system/network-online.target.wants/ then I can get reliable service; networkd comes up, waits for eth0 to DHCP, then when complete, cloud-init init runs and eth0 is up.
This of course diverges cloud-init.service from trunk;
Ideally we'd be able to run networkd without dbus *and* without timeouts.
It appears that the networkd in Xenial is sensitive to dbus service being available; it times out a bit waiting for dbus before continuing; this is the delay.
If I drop cloud-init.service 'Before= dbus.socket' and 'Before= basic.target' ; Add 'After= systemd- networkd- wait-online. service' ; then ensure that we have a symlink to systemd- networkd. service and systemd- networkd- wait-online. service in /etc/systemd/ system/ network- online. target. wants/ then I can get reliable service; networkd comes up, waits for eth0 to DHCP, then when complete, cloud-init init runs and eth0 is up.
This of course diverges cloud-init.service from trunk;
Ideally we'd be able to run networkd without dbus *and* without timeouts.