Hey,

If you are using standalone gateway hosts and compute nodes do not have access to external networks, I think it is expected that you can not bind a port from the external network to the VM.
In this case access to the external network is done only through L3 routers.

So the idea is the following:
You attach only a private (geneve) networks to the VMs. Then, you create a neutron router, which acts as a gateway for the private network, and is attached to an external network as well. Then you create a floating IP from the external network and attach it to the port of the VM from the internal one.  This way you make the external network routed via gateway hosts.

Also, regarding your original issue "The task includes an option with an undefined variable. The error was: list object has no element 1" - we had similar case in IRC yesterday, and James Denton has found the workaround there by defining the br-ex bridge instead of naming it as br-flat, here was his paste that worked out for the folk: https://paste.opendev.org/show/bjw3b5ncP6dbhj34ltJU/
He also found an issue in our logic that caused this issue and has proposed a patch for that:
https://review.opendev.org/c/openstack/openstack-ansible-os_neutron/+/893924