This is the second boot, so cloud-init should not actually do anything any more (it takes muuuch longer on the first boot).
pollinate should not run in containers at all, as containers take randomness from the host. Also, for VMs it should only run for the first boot. Both upstart and systemd save the random seed on shutdown and load it at boot, which is a lot faster than pollinate.
Booting a xenial cloud image in lxd shows that pollinate by far is the biggest bottleneck:
$ systemd-analyze blame local.service service
2.756s pollinate.service
656ms cloud-init-
598ms cloud-init.service
509ms cloud-config.
393ms cloud-final.service
147ms networking.service
[...]
This is the second boot, so cloud-init should not actually do anything any more (it takes muuuch longer on the first boot).
pollinate should not run in containers at all, as containers take randomness from the host. Also, for VMs it should only run for the first boot. Both upstart and systemd save the random seed on shutdown and load it at boot, which is a lot faster than pollinate.
So pollinate.service should grow
ConditionVirt ualization= !container Exists= !/var/lib/ systemd/ random- seed
ConditionPath