devstack/lib/neutron_thirdparty/trema
armando-migliaccio ef1e08022b Add sanity check framework to verify neutron server/backend integration
Some Neutron plugins require controllers and multiple backend services
to operate correctly. This patch adds the framework for third party
plugins to run sanity checks after Neutron Server has started.

This simple addition may reveal potential configuration pitfalls
much earlier in the dev/test cycle, thus speeding up the build
churn process.

The first plugin that uses this framework is the VMware NSX one.

Closes-bug: #1265671

Change-Id: I17f9c5c8e828316ff03f0eff42ae4ae6c6c58733
2014-01-14 08:14:25 -08:00

118 lines
3.4 KiB
Plaintext

# Trema Sliceable Switch
# ----------------------
# Trema is a Full-Stack OpenFlow Framework in Ruby and C
# https://github.com/trema/trema
#
# Trema Sliceable Switch is an OpenFlow controller which provides
# virtual layer-2 network slices.
# https://github.com/trema/apps/wiki
# Trema Sliceable Switch (OpenFlow Controller)
TREMA_APPS_REPO=${TREMA_APPS_REPO:-https://github.com/trema/apps.git}
TREMA_APPS_BRANCH=${TREMA_APPS_BRANCH:-master}
# Save trace setting
MY_XTRACE=$(set +o | grep xtrace)
set +o xtrace
TREMA_DIR=${TREMA_DIR:-$DEST/trema}
TREMA_SS_DIR="$TREMA_DIR/apps/sliceable_switch"
TREMA_DATA_DIR=${TREMA_DATA_DIR:-$DATA_DIR/trema}
TREMA_SS_ETC_DIR=$TREMA_DATA_DIR/sliceable_switch/etc
TREMA_SS_DB_DIR=$TREMA_DATA_DIR/sliceable_switch/db
TREMA_SS_SCRIPT_DIR=$TREMA_DATA_DIR/sliceable_switch/script
TREMA_TMP_DIR=$TREMA_DATA_DIR/trema
TREMA_LOG_LEVEL=${TREMA_LOG_LEVEL:-info}
TREMA_SS_CONFIG=$TREMA_SS_ETC_DIR/sliceable.conf
TREMA_SS_APACHE_CONFIG=/etc/apache2/sites-available/sliceable_switch.conf
# configure_trema - Set config files, create data dirs, etc
function configure_trema() {
# prepare dir
for d in $TREMA_SS_ETC_DIR $TREMA_SS_DB_DIR $TREMA_SS_SCRIPT_DIR; do
sudo mkdir -p $d
sudo chown -R `whoami` $d
done
sudo mkdir -p $TREMA_TMP_DIR
}
# init_trema - Initialize databases, etc.
function init_trema() {
local _pwd=$(pwd)
# Initialize databases for Sliceable Switch
cd $TREMA_SS_DIR
rm -f filter.db slice.db
./create_tables.sh
mv filter.db slice.db $TREMA_SS_DB_DIR
# Make sure that apache cgi has write access to the databases
sudo chown -R www-data.www-data $TREMA_SS_DB_DIR
cd $_pwd
# Setup HTTP Server for sliceable_switch
cp $TREMA_SS_DIR/{Slice.pm,Filter.pm,config.cgi} $TREMA_SS_SCRIPT_DIR
sed -i -e "s|/home/sliceable_switch/db|$TREMA_SS_DB_DIR|" \
$TREMA_SS_SCRIPT_DIR/config.cgi
sudo cp $TREMA_SS_DIR/apache/sliceable_switch $TREMA_SS_APACHE_CONFIG
sudo sed -i -e "s|/home/sliceable_switch/script|$TREMA_SS_SCRIPT_DIR|" \
$TREMA_SS_APACHE_CONFIG
sudo a2enmod rewrite actions
sudo a2ensite sliceable_switch.conf
cp $TREMA_SS_DIR/sliceable_switch_null.conf $TREMA_SS_CONFIG
sed -i -e "s|^\$apps_dir.*$|\$apps_dir = \"$TREMA_DIR/apps\"|" \
-e "s|^\$db_dir.*$|\$db_dir = \"$TREMA_SS_DB_DIR\"|" \
$TREMA_SS_CONFIG
}
function gem_install() {
[[ "$OFFLINE" = "True" ]] && return
[ -n "$RUBYGEMS_CMD" ] || get_gem_command
local pkg=$1
$RUBYGEMS_CMD list | grep "^${pkg} " && return
sudo $RUBYGEMS_CMD install $pkg
}
function get_gem_command() {
# Trema requires ruby 1.8, so gem1.8 is checked first
RUBYGEMS_CMD=$(which gem1.8 || which gem)
if [ -z "$RUBYGEMS_CMD" ]; then
echo "Warning: ruby gems command not found."
fi
}
function install_trema() {
# Trema
gem_install trema
# Sliceable Switch
git_clone $TREMA_APPS_REPO $TREMA_DIR/apps $TREMA_APPS_BRANCH
make -C $TREMA_DIR/apps/topology
make -C $TREMA_DIR/apps/flow_manager
make -C $TREMA_DIR/apps/sliceable_switch
}
function start_trema() {
# APACHE_NAME is defined in init_horizon (in lib/horizon)
restart_service $APACHE_NAME
sudo LOGGING_LEVEL=$TREMA_LOG_LEVEL TREMA_TMP=$TREMA_TMP_DIR \
trema run -d -c $TREMA_SS_CONFIG
}
function stop_trema() {
sudo TREMA_TMP=$TREMA_TMP_DIR trema killall
}
function check_trema() {
:
}
# Restore xtrace
$MY_XTRACE