From a3c103be7dd218168fcd9f4d78a113490902a26d Mon Sep 17 00:00:00 2001 From: Akihiro Motoki Date: Sun, 8 Mar 2015 15:13:23 +0900 Subject: [PATCH] neutron-nec: Vendor code split Neutron NEC plugin support is configured using DevStack external plugin mechanism. The following needs to be added in local.conf: Q_PLUGIN=nec enable_plugin networking-nec https://git.openstack.org/stackforge/networking-nec Also removes lib/neutron_thirdparty/trema and files/debs/trema. DevStack external plugin for Trema Sliceable Switch is available and the following is needed to enable it in DevStack. enable_plugin trema-devstack-plugin https://github.com/nec-openstack/trema-devstack-plugin Change-Id: If983b986355fcc0118b6e0446b3b295f23b3c40e --- files/debs/trema | 15 ----- lib/neutron_plugins/nec | 127 +---------------------------------- lib/neutron_thirdparty/trema | 119 -------------------------------- 3 files changed, 3 insertions(+), 258 deletions(-) delete mode 100644 files/debs/trema delete mode 100644 lib/neutron_thirdparty/trema diff --git a/files/debs/trema b/files/debs/trema deleted file mode 100644 index f685ca53b4..0000000000 --- a/files/debs/trema +++ /dev/null @@ -1,15 +0,0 @@ -# Trema -make -ruby1.8 -rubygems1.8 -ruby1.8-dev -libpcap-dev -libsqlite3-dev -libglib2.0-dev - -# Sliceable Switch -sqlite3 -libdbi-perl -libdbd-sqlite3-perl -apache2 -libjson-perl diff --git a/lib/neutron_plugins/nec b/lib/neutron_plugins/nec index 3b1a25716a..9ea7338696 100644 --- a/lib/neutron_plugins/nec +++ b/lib/neutron_plugins/nec @@ -1,131 +1,10 @@ #!/bin/bash -# -# Neutron NEC OpenFlow plugin -# --------------------------- -# Save trace setting -NEC_XTRACE=$(set +o | grep xtrace) -set +o xtrace - -# Configuration parameters -OFC_HOST=${OFC_HOST:-127.0.0.1} -OFC_PORT=${OFC_PORT:-8888} - -OFC_API_HOST=${OFC_API_HOST:-$OFC_HOST} -OFC_API_PORT=${OFC_API_PORT:-$OFC_PORT} -OFC_OFP_HOST=${OFC_OFP_HOST:-$OFC_HOST} -OFC_OFP_PORT=${OFC_OFP_PORT:-6633} -OFC_DRIVER=${OFC_DRIVER:-trema} -OFC_RETRY_MAX=${OFC_RETRY_MAX:-0} -OFC_RETRY_INTERVAL=${OFC_RETRY_INTERVAL:-1} - -# Main logic -# --------------------------- - -source $TOP_DIR/lib/neutron_plugins/ovs_base - -function neutron_plugin_create_nova_conf { - _neutron_ovs_base_configure_nova_vif_driver -} - -function neutron_plugin_install_agent_packages { - # SKIP_OVS_INSTALL is useful when we want to use Open vSwitch whose - # version is different from the version provided by the distribution. - if [[ "$SKIP_OVS_INSTALL" = "True" ]]; then - echo "You need to install Open vSwitch manually." - return - fi - _neutron_ovs_base_install_agent_packages -} - -function neutron_plugin_configure_common { - Q_PLUGIN_CONF_PATH=etc/neutron/plugins/nec - Q_PLUGIN_CONF_FILENAME=nec.ini - Q_PLUGIN_CLASS="neutron.plugins.nec.nec_plugin.NECPluginV2" -} - -function neutron_plugin_configure_debug_command { - _neutron_ovs_base_configure_debug_command -} - -function neutron_plugin_configure_dhcp_agent { - : -} - -function neutron_plugin_configure_l3_agent { - _neutron_ovs_base_configure_l3_agent -} - -function _quantum_plugin_setup_bridge { - if [[ "$SKIP_OVS_BRIDGE_SETUP" = "True" ]]; then - return - fi - # Set up integration bridge - _neutron_ovs_base_setup_bridge $OVS_BRIDGE - # Generate datapath ID from HOST_IP - local dpid=$(printf "%07d%03d%03d%03d\n" ${HOST_IP//./ }) - sudo ovs-vsctl --no-wait set Bridge $OVS_BRIDGE other-config:datapath-id=$dpid - sudo ovs-vsctl --no-wait set-fail-mode $OVS_BRIDGE secure - sudo ovs-vsctl --no-wait set-controller $OVS_BRIDGE tcp:$OFC_OFP_HOST:$OFC_OFP_PORT - if [ -n "$OVS_INTERFACE" ]; then - sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_BRIDGE $OVS_INTERFACE - fi - _neutron_setup_ovs_tunnels $OVS_BRIDGE -} - -function neutron_plugin_configure_plugin_agent { - _quantum_plugin_setup_bridge - - AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-nec-agent" - - _neutron_ovs_base_configure_firewall_driver -} - -function neutron_plugin_configure_service { - iniset $NEUTRON_CONF DEFAULT api_extensions_path neutron/plugins/nec/extensions/ - iniset /$Q_PLUGIN_CONF_FILE ofc host $OFC_API_HOST - iniset /$Q_PLUGIN_CONF_FILE ofc port $OFC_API_PORT - iniset /$Q_PLUGIN_CONF_FILE ofc driver $OFC_DRIVER - iniset /$Q_PLUGIN_CONF_FILE ofc api_retry_max OFC_RETRY_MAX - iniset /$Q_PLUGIN_CONF_FILE ofc api_retry_interval OFC_RETRY_INTERVAL - - _neutron_ovs_base_configure_firewall_driver -} - -function neutron_plugin_setup_interface_driver { - local conf_file=$1 - iniset $conf_file DEFAULT interface_driver neutron.agent.linux.interface.OVSInterfaceDriver - iniset $conf_file DEFAULT ovs_use_veth True -} - -# Utility functions -# --------------------------- - -# Setup OVS tunnel manually -function _neutron_setup_ovs_tunnels { - local bridge=$1 - local id=0 - GRE_LOCAL_IP=${GRE_LOCAL_IP:-$HOST_IP} - if [ -n "$GRE_REMOTE_IPS" ]; then - for ip in ${GRE_REMOTE_IPS//:/ }; do - if [[ "$ip" == "$GRE_LOCAL_IP" ]]; then - continue - fi - sudo ovs-vsctl --no-wait add-port $bridge gre$id -- \ - set Interface gre$id type=gre options:remote_ip=$ip - id=`expr $id + 1` - done - fi -} +# This file is needed so Q_PLUGIN=nec will work. +# FIXME(amotoki): This function should not be here, but unfortunately +# devstack calls it before the external plugins are fetched function has_neutron_plugin_security_group { # 0 means True here return 0 } - -function neutron_plugin_check_adv_test_requirements { - is_service_enabled q-agt && is_service_enabled q-dhcp && return 0 -} - -# Restore xtrace -$NEC_XTRACE diff --git a/lib/neutron_thirdparty/trema b/lib/neutron_thirdparty/trema deleted file mode 100644 index 075f013ded..0000000000 --- a/lib/neutron_thirdparty/trema +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash -# -# 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 -TREMA3_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=$(apache_site_config_for sliceable_switch) - -# 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 - # TODO(gabriel-bezerra): use some function from lib/apache to enable these modules - sudo a2enmod rewrite actions - enable_apache_site sliceable_switch - - 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 { - restart_apache_server - - 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 -$TREMA3_XTRACE