neutron: Call destroy-patch-ports before starting ovs-agent

The script called destroy-patch-ports will break connection between the
integration bridge and provider bridges configured in Neutron config
files. See https://bugzilla.redhat.com/show_bug.cgi?id=1490281 for more
details about the reason.

With systemd, we have control over dependencies between services,
therefore we can tell that destroy-patch-ports service must be run
before neutron-openvswitch-agent. But we do not have this ability using
docker. That's why this patch simply calls the script before each start
of the agent. To avoid unnecessary breakage of patch ports, the script
was enhanced to check a canary flow on integration bridge and in case
the flow is there, it will not delete the patch ports. Presence of
canary flow on integration bridge means that bridge has been already
configured. It also implies provider bridges are configured too and thus
they can't cause the ARP storm as described in Red Hat Bugzilla 1490281.

NOTE: This patch requires the packaging side to be merged first:
      https://review.rdoproject.org/r/#/c/10480/

Co-Authored-By: Dan Prince <dprince@redhat.com>

Closes-bug: #1731924

Change-Id: I005af23b1815c904ef63676553df9b14b7edfbfc
This commit is contained in:
Jakub Libosvar 2017-11-13 13:25:47 +00:00 committed by Dan Prince
parent d87f2dbe9c
commit e860b9580c
1 changed files with 10 additions and 5 deletions

View File

@ -88,11 +88,7 @@ outputs:
- /run/openvswitch:/run/openvswitch
kolla_config:
/var/lib/kolla/config_files/neutron_ovs_agent.json:
command:
list_join:
- ' '
- - /usr/bin/neutron-openvswitch-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini --config-file /etc/neutron/plugins/ml2/ml2_conf.ini --config-dir /etc/neutron/conf.d/common
- get_attr: [NeutronLogging, cmd_extra_args]
command: /neutron_ovs_agent_launcher.sh
config_files:
- source: "/var/lib/kolla/config_files/src/*"
dest: "/"
@ -102,6 +98,14 @@ outputs:
- path: /var/log/neutron
owner: neutron:neutron
recurse: true
docker_config_scripts:
neutron_ovs_agent_launcher.sh:
mode: "0755"
content: |
#!/bin/bash
set -xe
/usr/bin/python -m neutron.cmd.destroy_patch_ports --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-openvswitch-agent
/usr/bin/neutron-openvswitch-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini --config-file /etc/neutron/plugins/ml2/ml2_conf.ini --config-dir /etc/neutron/conf.d/common --log-file=/var/log/neutron/openvswitch-agent.log
docker_config:
step_3:
neutron_ovs_bridge:
@ -151,6 +155,7 @@ outputs:
-
- /var/lib/kolla/config_files/neutron_ovs_agent.json:/var/lib/kolla/config_files/config.json:ro
- /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
- /var/lib/docker-config-scripts/neutron_ovs_agent_launcher.sh:/neutron_ovs_agent_launcher.sh:ro
- /lib/modules:/lib/modules:ro
- /run/openvswitch:/run/openvswitch
environment: