As of this writing, when we need to create a bridge for the neutron-l3-agent we create a resource via puppet openstack::neutron::bridge. This in turns deploys a config file /etc/network/interafaces.d/<bridge_name>
In the case of our neutron l3 setup, we have 2 bridges with 1 port each, one for the external vlan and other for the internal vlan.
Then, when ifup is called at boot (via networking.service), the bridge will be empty of ports if the vlan interfaces aren't up beforehand. An ordering problem.
Moreover, we have seen the behavior be different if the vlan interface is called eno50.1105 or just vlan1105.
This setup is fragile and can lead to severe network outages.