Commit 9a11a203 authored by Tim Rozet's avatar Tim Rozet

Fixes attaching instack interfaces to host

This applies only to baremetal deployments.  Interfaces from admin and
public networks are attached from the host to the OVS bridges brbm and
brbm2 for external connectivity.

Change-Id: If3f5b33eab267e05ee9094396daa40f37e69319a
Signed-off-by: default avatarTim Rozet <trozet@redhat.com>
parent 194784ad
......@@ -2,7 +2,12 @@
#Clean script to uninstall provisioning server for Apex
#author: Dan Radez (dradez@redhat.com)
#
#author: Tim Rozet (trozet@redhat.com)
CONFIG=/var/opt/opnfv
##LIBRARIES
source $CONFIG/lib/common-functions.sh
vm_index=4
ovs_bridges="brbm brbm1 brbm2 brbm3"
# Clean off instack VM
......@@ -29,7 +34,9 @@ done
for bridge in ${ovs_bridges}; do
virsh net-destroy ${bridge} 2> /dev/null
virsh net-undefine ${bridge} 2> /dev/null
ovs-vsctl del-br ${bridge} 2> /dev/null
if detach_interface_from_ovs ${bridge}; then
ovs-vsctl del-br ${bridge} 2> /dev/null
fi
done
# clean pub keys from root's auth keys
......
......@@ -389,8 +389,13 @@ function configure_deps {
for network in ${enabled_network_list}; do
this_interface=$(eval echo \${${network}_bridged_interface})
# check if this a bridged interface for this network
if [[ -n "$this_interface" || "$this_interface" != "none" ]]; then
ovs-vsctl list-ports ${NET_MAP[$network]} | grep ${this_interface} || ovs-vsctl add-port ${NET_MAP[$network]} ${this_interface}
if [[ ! -z "$this_interface" || "$this_interface" != "none" ]]; then
if ! attach_interface_to_ovs ${NET_MAP[$network]} ${this_interface} ${network}; then
echo -e "${red}ERROR: Unable to bridge interface ${this_interface} to bridge ${NET_MAP[$network]} for enabled network: ${network}${reset}"
exit 1
else
echo -e "${blue}INFO: Interface ${this_interface} bridged to bridge ${NET_MAP[$network]} for enabled network: ${network}${reset}"
fi
else
echo "${red}ERROR: Unable to determine interface to bridge to for enabled network: ${network}${reset}"
exit 1
......
......@@ -312,3 +312,151 @@ function generate_floating_ip_range {
float_range_end=${last_ip}
echo "${float_range_start},${float_range_end}"
}
##attach interface to OVS and set the network config correctly
##params: bride to attach to, interface to attach, network type (optional)
##public indicates attaching to a public interface
function attach_interface_to_ovs {
local bridge interface
local if_ip if_mask if_gw if_file ovs_file
if [[ -z "$1" || -z "$2" ]]; then
return 1
else
bridge=$1
interface=$2
fi
if ovs-vsctl list-ports ${bridge} | grep ${interface}; then
return 0
fi
if_file=/etc/sysconfig/network-scripts/ifcfg-${interface}
ovs_file=/etc/sysconfig/network-scripts/ifcfg-${bridge}
if [ -e "$if_file" ]; then
if_ip=$(sed -n 's/^IPADDR=\(.*\)$/\1/p' ${if_file})
if_mask=$(sed -n 's/^NETMASK=\(.*\)$/\1/p' ${if_file})
if_gw=$(sed -n 's/^GATEWAY=\(.*\)$/\1/p' ${if_file})
else
echo "ERROR: ifcfg file missing for ${interface}"
return 1
fi
if [[ -z "$if_ip" || -z "$if_mask" ]]; then
echo "ERROR: IPADDR or NETMASK missing for ${interface}"
return 1
elif [[ -z "$if_gw" && "$3" == "public_network" ]]; then
echo "ERROR: GATEWAY missing for ${interface}, which is public"
return 1
fi
# move old config file to .orig
mv -f ${if_file} ${if_file}.orig
echo "DEVICE=${interface},
TYPE=OVSPort,
PEERDNS=no,
BOOTPROTO=static,
NM_CONTROLLED=no,
ONBOOT=yes,
OVS_BRIDGE=${bridge},
PROMISC=yes" > ${if_file}
if [ -z ${if_gw} ]; then
# create bridge cfg
echo "DEVICE=${bridge},
IPADDR=${if_ip},
NETMASK=${if_mask},
BOOTPROTO=static,
ONBOOT=yes,
TYPE=OVSBridge,
PROMISC=yes,
PEERDNS=no" > ${ovs_file}
else
echo "DEVICE=${bridge},
IPADDR=${if_ip},
NETMASK=${if_mask},
BOOTPROTO=static,
ONBOOT=yes,
TYPE=OVSBridge,
PROMISC=yes,
GATEWAY=${if_gw},
PEERDNS=no" > ${ovs_file}
fi
sudo systemctl restart network
}
##detach interface from OVS and set the network config correctly
##params: bridge to detach from
##assumes only 1 real interface attached to OVS
function detach_interface_from_ovs {
local bridge
local port_output ports_no_orig
local net_path
local if_ip if_mask if_gw
net_path=/etc/sysconfig/network-scripts/
if [[ -z "$1" ]]; then
return 1
else
bridge=$1
fi
# if no interfaces attached then return
if ! ovs-vsctl list-ports ${bridge} | grep -Ev "vnet[0-9]*"; then
return 0
fi
# look for .orig ifcfg files to use
port_output=$(ovs-vsctl list-ports ${bridge} | grep -Ev "vnet[0-9]*")
while read -r line; do
if [ -z "$line" ]; then
continue
elif [ -e ${net_path}/ifcfg-${line}.orig ]; then
mv -f ${net_path}/ifcfg-${line}.orig ${net_path}/ifcfg-${line}
elif [ -e ${net_path}/ifcfg-${bridge} ]; then
if_ip=$(sed -n 's/^IPADDR=\(.*\)$/\1/p' ${if_file})
if_mask=$(sed -n 's/^NETMASK=\(.*\)$/\1/p' ${if_file})
if_gw=$(sed -n 's/^GATEWAY=\(.*\)$/\1/p' ${if_file})
if [[ -z "$if_ip" || -z "$if_mask" ]]; then
echo "ERROR: IPADDR or NETMASK missing for ${bridge} and no .orig file for interface ${line}"
return 1
fi
if [ -z ${if_gw} ]; then
# create if cfg
echo "DEVICE=${line},
IPADDR=${if_ip},
NETMASK=${if_mask},
BOOTPROTO=static,
ONBOOT=yes,
TYPE=Ethernet,
NM_CONTROLLED=no,
PEERDNS=no" > ${net_path}/ifcfg-${line}
else
echo "DEVICE=${line},
IPADDR=${if_ip},
NETMASK=${if_mask},
BOOTPROTO=static,
ONBOOT=yes,
TYPE=Ethernet,
NM_CONTROLLED=no,
GATEWAY=${if_gw},
PEERDNS=no" > ${net_path}/ifcfg-${line}
fi
break
else
echo "ERROR: Real interface ${line} attached to bridge, but no interface or ${bridge} ifcfg file exists"
return 1
fi
done <<< "$port_output"
# now remove the bridge ifcfg file
rm -f ${net_path}/ifcfg-${bridge}
sudo systemctl restart network
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment