The fix that went in to xenial for this (and present in current yakkety and trunk cloud-init) is for cloud-init to read its networking configuration effectively from the kernel command line.
If cloud-init sees network-config= or ip= on the kernel command line, then it will parse the /run/net-*.conf files that are written by the ipconfig in the initramfs and use them as a source of networking information. The kernel's command line overrides a datasource or builtin configuration, so the end result is that the 'ip=' declares the system's network configuration.
The fix that went in to xenial for this (and present in current yakkety and trunk cloud-init) is for cloud-init to read its networking configuration effectively from the kernel command line.
If cloud-init sees network-config= or ip= on the kernel command line, then it will parse the /run/net-*.conf files that are written by the ipconfig in the initramfs and use them as a source of networking information. The kernel's command line overrides a datasource or builtin configuration, so the end result is that the 'ip=' declares the system's network configuration.