8c6710326e
This patch fixes several issues related to the installation with OVN backend with the OVS/OVN compilation enabled. The OVS/OVN local directories prefix, when both services are compiled, is now "/usr/local". The "ovn_agent._run_process" function is calling "ovs-appctl" to configure the logging settings of several services. Instead of using the service name, the ctl socket file is used instead. That is more robust and does not fail in systems with previous installations. Closes-Bug: #1960514 Change-Id: I69de5333393957593db6e05495f0c3c758efefdf
137 lines
4.4 KiB
Bash
137 lines
4.4 KiB
Bash
#!/bin/bash
|
|
#
|
|
# common functions for ovs based plugin
|
|
# -------------------------------------
|
|
|
|
# Save trace setting
|
|
_XTRACE_NEUTRON_OVS_BASE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
# Load devstack ovs compliation and loading functions
|
|
source ${TOP_DIR}/lib/neutron_plugins/ovs_source
|
|
|
|
# Defaults
|
|
# --------
|
|
|
|
OVS_BRIDGE=${OVS_BRIDGE:-br-int}
|
|
# OVS recognize default 'system' datapath or 'netdev' for userspace datapath
|
|
OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-system}
|
|
OVS_TUNNEL_BRIDGE=${OVS_TUNNEL_BRIDGE:-br-tun}
|
|
|
|
function is_neutron_ovs_base_plugin {
|
|
# Yes, we use OVS.
|
|
return 0
|
|
}
|
|
|
|
function _neutron_ovs_base_add_bridge {
|
|
local bridge=$1
|
|
local addbr_cmd="sudo ovs-vsctl -- --may-exist add-br $bridge"
|
|
|
|
if [ "$OVS_DATAPATH_TYPE" != "system" ] ; then
|
|
addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
|
|
fi
|
|
|
|
$addbr_cmd
|
|
}
|
|
|
|
function _neutron_ovs_base_setup_bridge {
|
|
local bridge=$1
|
|
neutron-ovs-cleanup --config-file $NEUTRON_CONF
|
|
_neutron_ovs_base_add_bridge $bridge
|
|
sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
|
|
}
|
|
|
|
function neutron_ovs_base_cleanup {
|
|
# remove all OVS ports that look like Neutron created ports
|
|
for port in $(sudo ovs-vsctl list port | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
|
|
sudo ovs-vsctl del-port ${port}
|
|
done
|
|
|
|
# remove all OVS bridges created by Neutron
|
|
for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE} -e ${OVS_TUNNEL_BRIDGE}); do
|
|
sudo ovs-vsctl del-br ${bridge}
|
|
done
|
|
}
|
|
|
|
function _neutron_ovs_base_install_ubuntu_dkms {
|
|
# install Dynamic Kernel Module Support packages if needed
|
|
local kernel_version
|
|
kernel_version=$(uname -r)
|
|
local kernel_major_minor
|
|
kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
|
|
# From kernel 3.13 on, openvswitch-datapath-dkms is not needed
|
|
if vercmp "$kernel_major_minor" "<" "3.13" ; then
|
|
install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_install_agent_packages {
|
|
if [ "$Q_BUILD_OVS_FROM_GIT" == "True" ]; then
|
|
remove_ovs_packages
|
|
compile_ovs False /usr/local /var
|
|
load_conntrack_gre_module
|
|
start_new_ovs
|
|
else
|
|
# Install deps
|
|
install_package $(get_packages "openvswitch")
|
|
if is_ubuntu; then
|
|
_neutron_ovs_base_install_ubuntu_dkms
|
|
restart_service openvswitch-switch
|
|
elif is_fedora; then
|
|
restart_service openvswitch
|
|
sudo systemctl enable openvswitch
|
|
elif is_suse; then
|
|
if [[ $DISTRO == "sle12" ]] && vercmp "$os_RELEASE" "<" "12.2" ; then
|
|
restart_service openvswitch-switch
|
|
else
|
|
# workaround for https://bugzilla.suse.com/show_bug.cgi?id=1085971
|
|
if [[ $DISTRO =~ "tumbleweed" ]]; then
|
|
sudo sed -i -e "s,^OVS_USER_ID=.*,OVS_USER_ID='root:root'," /etc/sysconfig/openvswitch
|
|
fi
|
|
restart_service openvswitch || {
|
|
journalctl -xe || :
|
|
systemctl status openvswitch
|
|
}
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_firewall_driver {
|
|
if [[ "$Q_USE_SECGROUP" == "True" ]]; then
|
|
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver openvswitch
|
|
if ! running_in_container; then
|
|
enable_kernel_bridge_firewall
|
|
fi
|
|
else
|
|
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver noop
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_l3_agent {
|
|
neutron-ovs-cleanup --config-file $NEUTRON_CONF
|
|
if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
|
|
ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
|
|
sudo ip link add $Q_PUBLIC_VETH_INT type veth \
|
|
peer name $Q_PUBLIC_VETH_EX
|
|
sudo ip link set $Q_PUBLIC_VETH_INT up
|
|
sudo ip link set $Q_PUBLIC_VETH_EX up
|
|
sudo ip addr flush dev $Q_PUBLIC_VETH_EX
|
|
else
|
|
_neutron_ovs_base_add_public_bridge
|
|
sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_add_public_bridge {
|
|
_neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
|
|
set_mtu $PUBLIC_BRIDGE $PUBLIC_BRIDGE_MTU
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_nova_vif_driver {
|
|
:
|
|
}
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_NEUTRON_OVS_BASE
|