devstack/lib/opendaylight
Chris Dent 2f27a0ed3c Replace screen_it() with run_process() throughout
run_process will use screen if USE_SCREEN=True (the default),
otherwise it will simply start the requested service. Therefore
wherever screen_it used, run_process can be instead.

Where stop_screen was found it has been replaced with stop_process.

A tail_log function has been added which will tail a logfile in a
screen if USE_SCREEN is True.

lib/template has been updated to reflect the use of the new
functions.

When using sg the quoting in run_process gets very complicated.
To get around this run_process and the functions it calls accepts
an optional third argument. If set it is a group to be used with sg.

Change-Id: Ia3843818014f7c6c7526ef3aa9676bbddb8a85ca
2014-09-11 18:59:39 +01:00

175 lines
4.9 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}
# <define global variables here that belong to this project>
ODL_DIR=$DEST/opendaylight
# The OpenDaylight Package, currently using 'Hydrogen' release
ODL_PKG=${ODL_PKG:-distributions-virtualization-0.1.1-osgipackage.zip}
# The OpenDaylight URL
ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distributions-virtualization/0.1.1}
# 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:-60}
# The physical provider network to device mapping
ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS:-physnet1:eth1}
# Set up default directories
# 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 {
# Remove simple forwarder
rm -f $ODL_DIR/opendaylight/plugins/org.opendaylight.controller.samples.simpleforwarding*
# Configure OpenFlow 1.3
echo "ovsdb.of.version=1.3" >> $ODL_DIR/opendaylight/configuration/config.ini
}
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
# NOTE(chdent): Leaving this as screen_it instead of run_process until
# the right thing for this service is determined.
screen_it odl-server "cd $ODL_DIR/opendaylight && JAVA_HOME=$JHOME ./run.sh $ODL_ARGS -of13 -virt ovsdb"
# 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: