I can confirm Dan's validation that After=systemd-resolved.service doesn't buy us anything here because, although systemd-resolved.service is up, NetworkManager.service && NetworkManager-wait-online.service don't finish bringing link up for related network devices until After=dbus.service timeframe. So blocking on systemd-resolved.service tells us only that the service is running, not that it provides useful DNS lookups.
Since dbus.service is After=sysinit.target and sysinit.target is After=cloud-init.service we have an ordering cycle for NetworkManager that doesn't exist for systemd-networkd controlled environments. Any attempts to include After=NetworkManager-wait-online.service in cloud-init.service definition result in ordering cycles. Even if we try to add DefaultDependecies=no to both NetworkManager.service and NetworkManager-wait-online.service to prevent them from pulling in `After=sysinit.target` for ordering.
NetworkManager images (desktop) differ from cloud-init's systemd-networkd managed images (server) because systemd-networkd-wait-online.service doesn't have a strict After=dbus.service config systemd-networkd can poll for dbus availability and use it once it's available. But, it doesn't seem NetworkManager has that facility though I haven't dug deeply into NM yet.
I can confirm Dan's validation that After=systemd- resolved. service doesn't buy us anything here because, although systemd- resolved. service is up, NetworkManager. service && NetworkManager- wait-online. service don't finish bringing link up for related network devices until After=dbus.service timeframe. So blocking on systemd- resolved. service tells us only that the service is running, not that it provides useful DNS lookups.
Since dbus.service is After=sysinit. target and sysinit.target is After=cloud- init.service we have an ordering cycle for NetworkManager that doesn't exist for systemd-networkd controlled environments. Any attempts to include After=NetworkMa nager-wait- online. service in cloud-init.service definition result in ordering cycles. Even if we try to add DefaultDependec ies=no to both NetworkManager. service and NetworkManager- wait-online. service to prevent them from pulling in `After= sysinit. target` for ordering.
NetworkManager images (desktop) differ from cloud-init's systemd-networkd managed images (server) because systemd- networkd- wait-online. service doesn't have a strict After=dbus.service config systemd-networkd can poll for dbus availability and use it once it's available. But, it doesn't seem NetworkManager has that facility though I haven't dug deeply into NM yet.