#!/bin/bash # # Author: Daniel Smith (Ericsson) # # Script to update neutron configuration for OVSDB/ODL integratino # # Usage - Set / pass CONTROL_HOST to your needs # ### SET THIS VALUE TO MATCH YOUR SYSTEM CONTROL_HOST=192.168.0.2 BR_EX_IP=172.30.9.70 # ENV source ~/openrc # VARS ML2_CONF=/etc/neutron/plugins/ml2/ml2_conf.ini MODE=0 # FUNCTIONS # Update ml2_conf.ini function update_ml2conf { echo "Backing up and modifying ml2_conf.ini" cp $ML2_CONF $ML2_CONF.bak sed -i -e 's/mechanism_drivers =openvswitch/mechanism_drivers = opendaylight/g' $ML2_CONF sed -i -e 's/tenant_network_types = flat,vlan,gre,vxlan/tenant_network_types = vxlan/g' $ML2_CONF sed -i -e 's/bridge_mappings=physnet2:br-prv/bridge_mappings=physnet1:br-ex/g' $ML2_CONF echo "[ml2_odl]" >> $ML2_CONF echo "password = admin" >> $ML2_CONF echo "username = admin" >> $ML2_CONF echo "url = http://${CONTROL_HOST}:8080/controller/nb/v2/neutron" >> $ML2_CONF } function reset_neutrondb { echo "Reseting DB" mysql -e "drop database if exists neutron_ml2;" mysql -e "create database neutron_ml2 character set utf8;" mysql -e "grant all on neutron_ml2.* to 'neutron'@'%';" neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head } function restart_neutron { echo "Restarting Neutron Server" service neutron-server restart echo "Should see Neutron runing now" service neutron-server status echo "Shouldnt be any nets, but should work (return empty)" neutron net-list } function stop_neutron { echo "Stopping Neutron / OVS components" service neutron-plugin-openvswitch-agent stop if [ $MODE == "0" ] then service neutron-server stop fi } function disable_agent { echo "Disabling Neutron Plugin Agents from running" service neutron-plugin-openvswitch-agent stop echo 'manual' > /etc/init/neutron-plugin-openvswitch-agent.override } function verify_ML2_working { echo "checking that we can talk via ML2 properly" curl -u admin:admin http://${CONTROL_HOST}:8080/controller/nb/v2/neutron/networks > /tmp/check_ml2 if grep "network" /tmp/check_ml2 then echo "Success - ML2 to ODL is working" else echo "im sorry Jim, but its dead" fi } function set_mode { if [ -d "/var/lib/glance/images" ] then echo "Controller Mode" MODE=0 else echo "Compute Mode" MODE=1 fi } function stop_ovs { echo "Stopping OpenVSwitch" service openvswitch-switch stop } function start_ovs { echo "Starting OVS" service openvswitch-vswitch start ovs-vsctl show } function control_setup { echo "Modifying Controller" stop_neutron stop_ovs disable_agent rm -rf /var/log/openvswitch/* mkdir -p /opt/opnfv/odl/ovs_back mv /etc/openvswitch/conf.db /opt/opnfv/odl/ovs_back/. mv /etc/openvswitch/.conf*lock* /opt/opnfv/odl/ovs_back/. rm -rf /etc/openvswitch/conf.db rm -rf /etc/openvswitch/.conf* service openvswitch-switch start ovs-vsctl add-br br-ex ovs-vsctl add-port br-ex eth0 ovs-vsctl set interface br-ex type=external ifconfig br-ex 172.30.9.70/24 up service neutron-server restart echo "setting up networks" ip link add link eth1 name br-mgmt type vlan id 300 ifconfig br-mgmt `grep address /etc/network/interfaces.d/ifcfg-br-mgmt | awk -F" " '{print $2}'`/24 up arp ip link add link eth1 name br-storage type vlan id 301 ip link add link eth1 name br-prv type vlan id 1000 ifconfig br-storage `grep address /etc/network/interfaces.d/ifcfg-br-storage | awk -F" " '{print $2}'`/24 up arp ifconfig eth1 `grep address /etc/network/interfaces.d/ifcfg-br-fw-admin | awk -F" " '{print $2}'`/24 up arp echo "Setting ODL Manager IP" ovs-vsctl set-manager tcp:192.168.0.2:6640 echo "Verifying ODL ML2 plugin is working" verify_ML2_working # BAD HACK - Should be parameterized - this is to catch up route add default gw 172.30.9.1 } function clean_ovs { echo "cleaning OVS DB" stop_ovs rm -rf /var/log/openvswitch/* mkdir -p /opt/opnfv/odl/ovs_back cp -pr /etc/openvswitch/* /opt/opnfv/odl/ovs_back/. rm -rf /etc/openvswitch/conf.db echo "restarting OVS - you should see Nothing there" start_ovs } function compute_setup { echo "Modifying Compute" echo "Disabling neutron openvswitch plugin" stop_neutron disable_agent ip link add link eth1 name br-mgmt type vlan id 300 ifconfig br-mgmt `grep address /etc/network/interfaces.d/ifcfg-br-mgmt | awk -F" " '{print $2}'`/24 up arp ip link add link eth1 name br-storage type vlan id 301 ip link add link eth1 name br-prv type vlan id 1000 ifconfig br-storage `grep address /etc/network/interfaces.d/ifcfg-br-storage | awk -F" " '{print $2}'`/24 up arp ifconfig eth1 `grep address /etc/network/interfaces.d/ifcfg-br-fw-admin | awk -F" " '{print $2}'`/24 up arp echo "set manager, and route for ODL controller" ovs-vsctl set-manager tcp:192.168.0.2:6640 route add 172.17.0.1 gw 192.168.0.2 verify_ML2_working } # MAIN echo "Starting to make call" update_ml2conf echo "Check Mode" set_mode if [ $MODE == "0" ]; then echo "Calling control setup" control_setup elif [ $MODE == "1" ]; then echo "Calling compute setup" compute_setup else echo "Something is bad - call for help" exit fi