|  | #!/bin/bash | 
|  | # | 
|  | # 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: |