From e860b9580c708ef8fb810f95563ec1f956952bb1 Mon Sep 17 00:00:00 2001 From: Jakub Libosvar Date: Mon, 13 Nov 2017 13:25:47 +0000 Subject: [PATCH] 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 Closes-bug: #1731924 Change-Id: I005af23b1815c904ef63676553df9b14b7edfbfc --- docker/services/neutron-ovs-agent.yaml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docker/services/neutron-ovs-agent.yaml b/docker/services/neutron-ovs-agent.yaml index 9d0b92cd42..ceff8653fb 100644 --- a/docker/services/neutron-ovs-agent.yaml +++ b/docker/services/neutron-ovs-agent.yaml @@ -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: