devstack/lib/opendaylight
Kyle Mestery ff8de0c707 Update the ODL support to Helium SR1.
This commit updates the default ODL package to be tested with to the
first stable release of Helium. Critically, this includes ODL fixes
for some IPV6 issues.

Change-Id: I4eaa52a8baffdcc3a5e74cabca2f9cd7ea4ec237
2014-11-25 02:31:04 +00:00

193 lines
5.6 KiB
Plaintext

# lib/opendaylight
# Functions to control the configuration and operation of the opendaylight service
# Dependencies:
#
# ``functions`` file
# ``DEST`` must be defined
# ``STACK_USER`` must be defined
# ``stack.sh`` calls the entry points in this order:
#
# - is_opendaylight_enabled
# - is_opendaylight-compute_enabled
# - install_opendaylight
# - install_opendaylight-compute
# - configure_opendaylight
# - init_opendaylight
# - start_opendaylight
# - stop_opendaylight-compute
# - stop_opendaylight
# - cleanup_opendaylight
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# For OVS_BRIDGE and PUBLIC_BRIDGE
source $TOP_DIR/lib/neutron_plugins/ovs_base
# Defaults
# --------
# The IP address of ODL. Set this in local.conf.
# ODL_MGR_IP=
ODL_MGR_IP=${ODL_MGR_IP:-$SERVICE_HOST}
# The ODL endpoint URL
ODL_ENDPOINT=${ODL_ENDPOINT:-http://${ODL_MGR_IP}:8080/controller/nb/v2/neutron}
# The ODL username
ODL_USERNAME=${ODL_USERNAME:-admin}
# The ODL password
ODL_PASSWORD=${ODL_PASSWORD:-admin}
# Short name of ODL package
ODL_NAME=${ODL_NAME:-distribution-karaf-0.2.1-Helium-SR1}
# <define global variables here that belong to this project>
ODL_DIR=$DEST/opendaylight
# The OpenDaylight Package, currently using 'Hydrogen' release
ODL_PKG=${ODL_PKG:-distribution-karaf-0.2.1-Helium-SR1.zip}
# The OpenDaylight URL
ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.2.1-Helium-SR1/}
# Default arguments for OpenDaylight. This is typically used to set
# Java memory options.
# ``ODL_ARGS=Xmx1024m -XX:MaxPermSize=512m``
ODL_ARGS=${ODL_ARGS:-"-XX:MaxPermSize=384m"}
# How long to pause after ODL starts to let it complete booting
ODL_BOOT_WAIT=${ODL_BOOT_WAIT:-20}
# The physical provider network to device mapping
ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS:-physnet1:eth1}
# Enable OpenDaylight l3 forwarding
ODL_L3=${ODL_L3:-False}
# Entry Points
# ------------
# Test if OpenDaylight is enabled
# is_opendaylight_enabled
function is_opendaylight_enabled {
[[ ,${ENABLED_SERVICES} =~ ,"odl-" ]] && return 0
return 1
}
# cleanup_opendaylight() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_opendaylight {
:
}
# configure_opendaylight() - Set config files, create data dirs, etc
function configure_opendaylight {
# Add odl-ovsdb-openstack if it's not already there
local ODLOVSDB=$(cat $ODL_DIR/$ODL_NAME/etc/org.apache.karaf.features.cfg | grep featuresBoot= | grep odl)
if [ "$ODLOVSDB" == "" ]; then
sed -i '/^featuresBoot=/ s/$/,odl-ovsdb-openstack/' $ODL_DIR/$ODL_NAME/etc/org.apache.karaf.features.cfg
fi
# Configure OpenFlow 1.3 if it's not there
local OFLOW13=$(cat $ODL_DIR/$ODL_NAME/etc/custom.properties | grep ^of.version)
if [ "$OFLOW13" == "" ]; then
echo "ovsdb.of.version=1.3" >> $ODL_DIR/$ODL_NAME/etc/custom.properties
fi
# Configure L3 if the user wants it
if [ "${ODL_L3}" == "True" ]; then
# Configure L3 FWD if it's not there
local L3FWD=$(cat $ODL_DIR/$ODL_NAME/etc/custom.properties | grep ^ovsdb.l3.fwd.enabled)
if [ "$L3FWD" == "" ]; then
echo "ovsdb.l3.fwd.enabled=yes" >> $ODL_DIR/$ODL_NAME/etc/custom.properties
fi
fi
}
function configure_ml2_odl {
populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl url=$ODL_ENDPOINT
populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl username=$ODL_USERNAME
populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl password=$ODL_PASSWORD
}
# init_opendaylight() - Initialize databases, etc.
function init_opendaylight {
# clean up from previous (possibly aborted) runs
# create required data files
:
}
# install_opendaylight() - Collect source and prepare
function install_opendaylight {
local _pwd=$(pwd)
if is_ubuntu; then
install_package maven openjdk-7-jre openjdk-7-jdk
else
yum_install maven java-1.7.0-openjdk
fi
# Download OpenDaylight
mkdir -p $ODL_DIR
cd $ODL_DIR
wget -N $ODL_URL/$ODL_PKG
unzip -u $ODL_PKG
}
# install_opendaylight-compute - Make sure OVS is installed
function install_opendaylight-compute {
# packages are the same as for Neutron OVS agent
_neutron_ovs_base_install_agent_packages
}
# start_opendaylight() - Start running processes, including screen
function start_opendaylight {
if is_ubuntu; then
JHOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
else
JHOME=/usr/lib/jvm/java-1.7.0-openjdk
fi
# The flags to ODL have the following meaning:
# -of13: runs ODL using OpenFlow 1.3 protocol support.
# -virt ovsdb: Runs ODL in "virtualization" mode with OVSDB support
run_process odl-server "cd $ODL_DIR/$ODL_NAME && JAVA_HOME=$JHOME bin/karaf"
# Sleep a bit to let OpenDaylight finish starting up
sleep $ODL_BOOT_WAIT
}
# stop_opendaylight() - Stop running processes (non-screen)
function stop_opendaylight {
stop_process odl-server
}
# stop_opendaylight-compute() - Remove OVS bridges
function stop_opendaylight-compute {
# remove all OVS ports that look like Neutron created ports
for port in $(sudo ovs-vsctl list port | grep -o -e 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}); do
sudo ovs-vsctl del-br ${bridge}
done
}
# Restore xtrace
$XTRACE
# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End: