It was definitely a headache for me as well, but you need a guest agent (like vmwaretools or qemu-guest-agent), a cloud init ready template for the distro of your choice, a cloud init config file (network/user/vendor) and a custom SCSI/ide cloudinit cdrom mounted at boot on your VM.
You also can find cloudinit logs on your VM to try and figure out what’s missing or what went wrong.
It was definitely a headache for me as well, but you need a guest agent (like vmwaretools or qemu-guest-agent), a cloud init ready template for the distro of your choice, a cloud init config file (network/user/vendor) and a custom SCSI/ide cloudinit cdrom mounted at boot on your VM. You also can find cloudinit logs on your VM to try and figure out what’s missing or what went wrong.