[OVN] DevStack: Make the transition of DevStack module easier

This patch intends to make the transition of the OVN DevStack module
easier by allowing both copies of it to exist at the same time, the one
in Neutron repository and the one in the DevStack repository [0].

1) Make create_public_bridge idempotent

If we call this function more than once the second call and on will fail
with the following error:

2020-07-13 09:12:53.885633 | controller | ++
/opt/stack/neutron/devstack/lib/ovn_agent:create_public_bridge:263 :
sudo ip addr add 172.24.5.1/24 dev br-ex
2020-07-13 09:12:53.894247 | controller | RTNETLINK answers: File exists

During the transiton of moving the OVN DevStack from the Neutron
repository to the DevStack repository [0] this method is being invoked
twice in the ovn job in the DevStack gate because it will be cause as
part of the plugin being enabled and the normal code execution.

This patch makes the method idempotent by calling "addr replace" instead
of "addr add" to avoid the "RTNETLINK answers: File exists" error.

2) Move the setup of the tcpdump on br-ex to "extra" to it can start
after the create_public_bridge is called.

[0] https://review.opendev.org/#/c/734621/

Change-Id: I74b05ef245a343c7531fa45aeadb90060b2fd22e
Signed-off-by: Lucas Alvares Gomes <lucasagomes@gmail.com>
This commit is contained in:
Lucas Alvares Gomes 2020-07-13 11:44:47 +01:00
parent 73557abefc
commit e7df43395c
2 changed files with 11 additions and 11 deletions

View File

@ -260,7 +260,7 @@ function create_public_bridge {
ovs-vsctl set open . external-ids:ovn-bridge-mappings=$PHYSICAL_NETWORK:$ext_gw_ifc ovs-vsctl set open . external-ids:ovn-bridge-mappings=$PHYSICAL_NETWORK:$ext_gw_ifc
if [ -n "$FLOATING_RANGE" ]; then if [ -n "$FLOATING_RANGE" ]; then
local cidr_len=${FLOATING_RANGE#*/} local cidr_len=${FLOATING_RANGE#*/}
sudo ip addr add $PUBLIC_NETWORK_GATEWAY/$cidr_len dev $ext_gw_ifc sudo ip addr replace $PUBLIC_NETWORK_GATEWAY/$cidr_len dev $ext_gw_ifc
fi fi
# Ensure IPv6 RAs are accepted on the interface with the default route. # Ensure IPv6 RAs are accepted on the interface with the default route.
@ -274,7 +274,7 @@ function create_public_bridge {
sudo sysctl -w net.ipv6.conf.all.forwarding=1 sudo sysctl -w net.ipv6.conf.all.forwarding=1
if [ -n "$IPV6_PUBLIC_RANGE" ]; then if [ -n "$IPV6_PUBLIC_RANGE" ]; then
local ipv6_cidr_len=${IPV6_PUBLIC_RANGE#*/} local ipv6_cidr_len=${IPV6_PUBLIC_RANGE#*/}
sudo ip -6 addr add $IPV6_PUBLIC_NETWORK_GATEWAY/$ipv6_cidr_len dev $ext_gw_ifc sudo ip -6 addr replace $IPV6_PUBLIC_NETWORK_GATEWAY/$ipv6_cidr_len dev $ext_gw_ifc
# NOTE(numans): Commenting the below code for now as this is breaking # NOTE(numans): Commenting the below code for now as this is breaking
# the CI after xenial upgrade. # the CI after xenial upgrade.
# https://bugs.launchpad.net/networking-ovn/+bug/1648670 # https://bugs.launchpad.net/networking-ovn/+bug/1648670

View File

@ -116,15 +116,6 @@ if [[ "$1" == "stack" ]]; then
configure_ovn_plugin configure_ovn_plugin
start_ovn start_ovn
fi fi
if is_service_enabled br-ex-tcpdump ; then
# tcpdump monitor on br-ex for ARP, reverse ARP and ICMP v4 / v6 packets
sudo ip link set dev $PUBLIC_BRIDGE up
run_process br-ex-tcpdump "/usr/sbin/tcpdump -i $PUBLIC_BRIDGE arp or rarp or icmp or icmp6 -enlX" "$STACK_GROUP" root
fi
if is_service_enabled br-int-flows ; then
run_process br-int-flows "/bin/sh -c \"set +e; while true; do echo ovs-ofctl dump-flows br-int; ovs-ofctl dump-flows br-int ; sleep 30; done; \"" "$STACK_GROUP" root
fi
;; ;;
extra) extra)
if is_service_enabled q-sriov-agt neutron-sriov-agent; then if is_service_enabled q-sriov-agt neutron-sriov-agent; then
@ -141,6 +132,15 @@ if [[ "$1" == "stack" ]]; then
fi fi
fi fi
fi fi
if is_service_enabled br-ex-tcpdump ; then
# tcpdump monitor on br-ex for ARP, reverse ARP and ICMP v4 / v6 packets
sudo ip link set dev $PUBLIC_BRIDGE up
run_process br-ex-tcpdump "/usr/sbin/tcpdump -i $PUBLIC_BRIDGE arp or rarp or icmp or icmp6 -enlX" "$STACK_GROUP" root
fi
if is_service_enabled br-int-flows ; then
run_process br-int-flows "/bin/sh -c \"set +e; while true; do echo ovs-ofctl dump-flows br-int; ovs-ofctl dump-flows br-int ; sleep 30; done; \"" "$STACK_GROUP" root
fi
;; ;;
esac esac
elif [[ "$1" == "unstack" ]]; then elif [[ "$1" == "unstack" ]]; then