fuel-plugin-bigswitch/deployment_scripts/puppet/modules/bcf/files/p_v/ivs-setup.sh

141 lines
4.3 KiB
Bash

#!/bin/bash
set -x
if [ "$#" -ne 7 ]; then
echo "Usage: $0 <management interface> <management ip> <uplinks> <all used interfaces> <bridges' ip> <fuel_deployment_id> <bcf_version>" >&2
exit 1
fi
mgmt_itf=$1
IFS='/'
declare -a mgmt_ip_attr=($2)
mgmt_ip=${mgmt_ip_attr[0]}
IFS=','
declare -a uplinks=($3)
declare -a interfaces=($4)
IFS='{}'
read -ra array1 <<< $5
deployment_id=$6
bcf_version=$7
cdr2mask ()
{
# Number of args to shift, 255..255, first non-255 byte, zeroes
set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
[ $1 -gt 1 ] && shift $1 || shift
echo ${1-0}.${2-0}.${3-0}.${4-0}
}
# install ivs
apt-get install -y libnl-genl-3-200
apt-get -f install -y
dpkg --force-all -i "/etc/fuel/plugins/fuel-plugin-bigswitch-1.0/ivs_packages/ubuntu/ivs_${bcf_version}_amd64.deb"
dpkg --force-all -i "/etc/fuel/plugins/fuel-plugin-bigswitch-1.0/ivs_packages/ubuntu/ivs-dbg_${bcf_version}_amd64.deb"
apt-get install -y apport
# full installation
if [[ -f /etc/init/neutron-plugin-openvswitch-agent.override ]]; then
cp /etc/init/neutron-plugin-openvswitch-agent.override /etc/init/neutron-bsn-agent.override
fi
echo '' > /etc/network/interfaces
# Process input arguments
IFS=','
declare -a array2=(${array1[0]})
#IFS='=>'
len=${#array2[@]}
for (( i=0; i<$len; i++ )); do
# entry = "br-storage"=>["192.168.1.3/24"]
entry=${array2[$i]}
IFS='=>'
declare -a bridge_ip=(${entry})
key=$(echo "${bridge_ip[0]}" | sed -e 's/"//' -e 's/"//')
netmask=""
if [[ "$key" =~ "br-storage" ]] || [[ "$key" =~ "br-mgmt" ]]; then
itf_ip=$(echo "${bridge_ip[2]}" | sed -e 's/\[//' -e 's/"//' -e 's/"//' -e 's/]//')
IFS='/'
declare -a ip_address=(${itf_ip})
netmask=$( cdr2mask ${ip_address[1]} )
fi
internal_interface=""
if [[ "$key" =~ "br-storage" ]]; then
internal_interface="sto${deployment_id}"
elif [[ "$key" =~ "br-mgmt" ]]; then
internal_interface="mgm${deployment_id}"
elif [[ "$key" =~ "br-ex" ]]; then
internal_interface="ex${deployment_id}"
fi
if [[ "$internal_interface" =~ "$deployment_id" ]]; then
echo -e 'auto' ${internal_interface} >> /etc/network/interfaces
echo -e 'iface' ${internal_interface} 'inet manual' >> /etc/network/interfaces
if [[ ! -z ${netmask} ]]; then
echo -e ' address' ${ip_address[0]} >> /etc/network/interfaces
echo -e ' netmask' ${netmask} >> /etc/network/interfaces
ifconfig $internal_interface up
ip link set $internal_interface up
ifconfig $internal_interface ${ip_address[0]}
ifconfig $internal_interface netmask ${netmask}
fi
echo -e '\n' >> /etc/network/interfaces
fi
done
# /etc/network/interfaces
len=${#interfaces[@]}
for (( i=0; i<$len; i++ )); do
echo -e 'auto' ${interfaces[$i]} >> /etc/network/interfaces
echo -e 'iface' ${interfaces[$i]} 'inet manual' >> /etc/network/interfaces
echo -e '\n' >> /etc/network/interfaces
done
echo -e 'auto br_fw_admin' >> /etc/network/interfaces
echo -e 'iface br_fw_admin inet static' >> /etc/network/interfaces
echo -e ' bridge_ports' ${mgmt_itf} >> /etc/network/interfaces
echo -e ' address' ${mgmt_ip} >> /etc/network/interfaces
echo -e '\n' >> /etc/network/interfaces
#reset uplinks to move them out of bond
len=${#uplinks[@]}
for (( i=0; i<$len; i++ )); do
ip link set ${uplinks[$i]} down
done
sleep 2
for (( i=0; i<$len; i++ )); do
ip link set ${uplinks[$i]} up
done
# assign ip to ivs internal ports
#bash /etc/rc.local
echo 'Restart openstack-nova-compute and neutron-bsn-agent'
service nova-compute restart
service neutron-bsn-agent restart
set +e
# Make sure only root can run this script
if [[ "$(id -u)" != "0" ]]; then
echo -e "Please run as root"
exit 1
fi
apt-get install ubuntu-cloud-keyring
apt-get update -y
apt-get install -y linux-headers-$(uname -r) build-essential
apt-get install -y python-dev python-setuptools
apt-get install -y puppet dpkg
apt-get install -y vlan ethtool
apt-get install -y libssl-dev libffi6 libffi-dev
apt-get install -y libnl-genl-3-200
apt-get -f install -y
apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y neutron-common
easy_install pip
puppet module install --force puppetlabs-inifile
puppet module install --force puppetlabs-stdlib
exit 0