I realize this is an old thread, but in case someone else is wondering how to fetch metadata on an instance connected directly to the provider network, just enabling dhcp on the provider network won't do it because you need a router for the metadata to be serverd.
The simple workaround is to create your public(provider) network and subnet and enable dhcp on it.(this is for images that require dhcp for an ip; if you have an image that already has an ip address assigned to it in the range of the public subnet than there is no need for dhcp; or if you connect to the instance through the novnc window and set it static ip, than on the next reboot it will get the metadata).
Then create a router and attach a port to the public subnet (do not set gateway to this network;leave it empty). This will help the instance get the metadata.
After this, update the public subnet with the following host routes either by cli using
--host-route destination=169.254.169.254/32,nexthop=[ROUTER_PORT_IP] \
--host-route destination=0.0.0.0/0,nexthop=[PHYSICAL_ROUTER_GATEWAY] [NETWORK_NAME] NETWORK_ADDRESS/NETMASK
Or by going into the network section in horizon, select public/provider network and edit subnet and under Host Route :
169.254.169.254/32,[ROUTER_PORT_IP]
0.0.0.0/0,[PHYSICAL_ROUTER_GATEWAY]
And then you can boot instances with metadata support!
loginto the VM from Horizon and run the dhclient program to see what's happening. You can use tools like tcpdump. My guess is that the request is not reaching the DHCP server.