Description of problem: When a deployment uses ml2+ovs and multiple bridge mappings are defined by role specific NeutronBridgeMappings, an invalid bridge is created in overcloud nodes. Version-Release number of selected component (if applicable): How reproducible: Always Steps to Reproduce: 1. Deploy overcloud with the following environment file ~~~ parameter_defaults: ComputeParameters: NeutronBridgeMappings: 'datacentre:br-ex,datacentre2:br-ex2' ~~~ Actual results: The following ovs bridge is created in compute nodes. - br-ex,datacentre2 Expected results: The following two ovs bridges are created - br-ex - br-ex2 Additional info:
This issue is caused by the following implementations in tht and puppet. - In tht, role specific parameters don't rely on parameter interface of heat templates. Because of that NeutronBridgeMappings in role specific parameters is not converted to a list automatically - The following logic triggers creation of ovs bridge, implemented in puppet-neutron. https://github.com/openstack/tripleo-heat-templates/blob/461adac8f4effb591aafe7bfcdffea75cd01990f/deployment/neutron/neutron-ovs-agent-container-puppet.yaml#L302-L336 - The current logic in puppet-neutron doesn't handle a comma-separated list in String. https://github.com/openstack/puppet-neutron/blob/424320c268d931df89212b69b9ffbbe95765fdb6/manifests/agents/ml2/ovs.pp#L328 https://github.com/openstack/puppet-neutron/blob/424320c268d931df89212b69b9ffbbe95765fdb6/manifests/plugins/ovs/bridge.pp#L6-L12
To avoid the issue we can fix puppet-neutron to handle a string value properly. However I'm wondering why these ovs bridges are managed by puppet while these bridges are supposed to be managed by os-net-config as part of network deployment. The only configuration specific to puppet is the definition of external_id but is this really required ? https://github.com/openstack/puppet-neutron/blob/424320c268d931df89212b69b9ffbbe95765fdb6/manifests/plugins/ovs/bridge.pp#L11 If we don't need to run that logic to apply external_id then I tend to disable management of ovs bridge by puppet.
Just leaving a note... One more option to workaround the issue easily would be to define an array value for the role specific parameter ~~~ parameter_defaults: ComputeParameters: NeutronBridgeMappings: - datacentre:br-ex - datacentre2:br-ex2 ~~~
Initially I explained the three ovs bridges are created but it was wrong and only the one with an invalid name is created by puppet. I updated the problem description accordingly.