Something I ran into when developing the novajoin service was that my cloud-init script was not executed if either force_config_drive was True in nova.conf or if config_drive was enabled for a particular instance. What I’d see is that no metadata would come across and cloud-init would do very little work at all beyond adding keypairs and configuring networking.
The image I was working on was CentOS-7-x86_64-GenericCloud.qcow2 (1511). If I used a similar RHEL 7 image things worked fine.
I determined the issue to be with the version of cloud-init. You need cloud-init-0.7.6 for config-drive to work. I got a copy of the cloud-init rpm that Red Hat uses and used virt-customize to update my CentOS image and things worked after that.
$ virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --install http://192.168.0.1/updates/x86_64/os/Packages/cloud-init-0.7.6-9.el7.x86_64.rpm
With this image the novajoin service can push a cloud-init script that will enroll the instance into IPA.