blob: bdebe5846df60f6fb0204dee1a53b859292cd0cb [file] [log] [blame]
Kyle Mesteryd44517d2014-01-28 20:29:18 +00001# lib/opendaylight
2# Functions to control the configuration and operation of the opendaylight service
3
4# Dependencies:
5#
Dean Troyer3324f192014-09-18 09:26:39 -05006# ``functions`` file
7# ``DEST`` must be defined
8# ``STACK_USER`` must be defined
Kyle Mesteryd44517d2014-01-28 20:29:18 +00009
10# ``stack.sh`` calls the entry points in this order:
11#
12# - is_opendaylight_enabled
13# - is_opendaylight-compute_enabled
14# - install_opendaylight
15# - install_opendaylight-compute
16# - configure_opendaylight
17# - init_opendaylight
18# - start_opendaylight
19# - stop_opendaylight-compute
20# - stop_opendaylight
21# - cleanup_opendaylight
22
23# Save trace setting
24XTRACE=$(set +o | grep xtrace)
25set +o xtrace
26
27
28# For OVS_BRIDGE and PUBLIC_BRIDGE
29source $TOP_DIR/lib/neutron_plugins/ovs_base
30
31# Defaults
32# --------
33
34# The IP address of ODL. Set this in local.conf.
35# ODL_MGR_IP=
36ODL_MGR_IP=${ODL_MGR_IP:-$SERVICE_HOST}
37
Simon Pasquiercfc9ebb2014-04-08 09:34:44 +020038# The ODL endpoint URL
39ODL_ENDPOINT=${ODL_ENDPOINT:-http://${ODL_MGR_IP}:8080/controller/nb/v2/neutron}
40
41# The ODL username
42ODL_USERNAME=${ODL_USERNAME:-admin}
43
44# The ODL password
45ODL_PASSWORD=${ODL_PASSWORD:-admin}
46
Kyle Mestery6a709ab2014-11-06 08:36:09 +000047# Short name of ODL package
48ODL_NAME=${ODL_NAME:-distribution-karaf-0.2.0-Helium}
49
Kyle Mesteryd44517d2014-01-28 20:29:18 +000050# <define global variables here that belong to this project>
51ODL_DIR=$DEST/opendaylight
52
53# The OpenDaylight Package, currently using 'Hydrogen' release
Kyle Mestery3d6d8992014-10-15 16:30:15 +000054ODL_PKG=${ODL_PKG:-distribution-karaf-0.2.0-Helium.zip}
Kyle Mesteryd44517d2014-01-28 20:29:18 +000055
56# The OpenDaylight URL
Kyle Mestery3d6d8992014-10-15 16:30:15 +000057ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.0-Helium}
Kyle Mesteryd44517d2014-01-28 20:29:18 +000058
59# Default arguments for OpenDaylight. This is typically used to set
60# Java memory options.
Dean Troyer3324f192014-09-18 09:26:39 -050061# ``ODL_ARGS=Xmx1024m -XX:MaxPermSize=512m``
Kyle Mesteryd44517d2014-01-28 20:29:18 +000062ODL_ARGS=${ODL_ARGS:-"-XX:MaxPermSize=384m"}
63
64# How long to pause after ODL starts to let it complete booting
Kyle Mestery3d6d8992014-10-15 16:30:15 +000065ODL_BOOT_WAIT=${ODL_BOOT_WAIT:-20}
Kyle Mesteryd44517d2014-01-28 20:29:18 +000066
Sam Hague09b56b12014-05-05 10:30:09 -040067# The physical provider network to device mapping
68ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS:-physnet1:eth1}
69
Kyle Mestery3d6d8992014-10-15 16:30:15 +000070# Enable OpenDaylight l3 forwarding
71ODL_L3=${ODL_L3:-False}
72
Kyle Mesteryd44517d2014-01-28 20:29:18 +000073
74# Entry Points
75# ------------
76
77# Test if OpenDaylight is enabled
78# is_opendaylight_enabled
79function is_opendaylight_enabled {
80 [[ ,${ENABLED_SERVICES} =~ ,"odl-" ]] && return 0
81 return 1
82}
83
84# cleanup_opendaylight() - Remove residual data files, anything left over from previous
85# runs that a clean run would need to clean up
86function cleanup_opendaylight {
87 :
88}
89
90# configure_opendaylight() - Set config files, create data dirs, etc
91function configure_opendaylight {
Kyle Mestery3d6d8992014-10-15 16:30:15 +000092 # Add odl-ovsdb-openstack if it's not already there
Kyle Mestery6a709ab2014-11-06 08:36:09 +000093 local ODLOVSDB=$(cat $ODL_DIR/$ODL_NAME/etc/org.apache.karaf.features.cfg | grep featuresBoot= | grep odl)
Kyle Mestery3d6d8992014-10-15 16:30:15 +000094 if [ "$ODLOVSDB" == "" ]; then
Kyle Mestery6a709ab2014-11-06 08:36:09 +000095 sed -i '/^featuresBoot=/ s/$/,odl-ovsdb-openstack/' $ODL_DIR/$ODL_NAME/etc/org.apache.karaf.features.cfg
Kyle Mestery3d6d8992014-10-15 16:30:15 +000096 fi
Kyle Mesteryd44517d2014-01-28 20:29:18 +000097
Kyle Mestery3d6d8992014-10-15 16:30:15 +000098 # Configure OpenFlow 1.3 if it's not there
Kyle Mestery6a709ab2014-11-06 08:36:09 +000099 local OFLOW13=$(cat $ODL_DIR/$ODL_NAME/etc/custom.properties | grep ^of.version)
Kyle Mestery3d6d8992014-10-15 16:30:15 +0000100 if [ "$OFLOW13" == "" ]; then
Kyle Mestery6a709ab2014-11-06 08:36:09 +0000101 echo "ovsdb.of.version=1.3" >> $ODL_DIR/$ODL_NAME/etc/custom.properties
Kyle Mestery3d6d8992014-10-15 16:30:15 +0000102 fi
103
104 # Configure L3 if the user wants it
105 if [ "${ODL_L3}" == "True" ]; then
106 # Configure L3 FWD if it's not there
Kyle Mestery6a709ab2014-11-06 08:36:09 +0000107 local L3FWD=$(cat $ODL_DIR/$ODL_NAME/etc/custom.properties | grep ^ovsdb.l3.fwd.enabled)
Kyle Mestery3d6d8992014-10-15 16:30:15 +0000108 if [ "$L3FWD" == "" ]; then
Kyle Mestery6a709ab2014-11-06 08:36:09 +0000109 echo "ovsdb.l3.fwd.enabled=yes" >> $ODL_DIR/$ODL_NAME/etc/custom.properties
Kyle Mestery3d6d8992014-10-15 16:30:15 +0000110 fi
111 fi
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000112}
113
Simon Pasquiercfc9ebb2014-04-08 09:34:44 +0200114function configure_ml2_odl {
115 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl url=$ODL_ENDPOINT
116 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl username=$ODL_USERNAME
117 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl password=$ODL_PASSWORD
118}
119
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000120# init_opendaylight() - Initialize databases, etc.
121function init_opendaylight {
122 # clean up from previous (possibly aborted) runs
123 # create required data files
124 :
125}
126
127# install_opendaylight() - Collect source and prepare
128function install_opendaylight {
129 local _pwd=$(pwd)
130
131 if is_ubuntu; then
132 install_package maven openjdk-7-jre openjdk-7-jdk
133 else
134 yum_install maven java-1.7.0-openjdk
135 fi
136
137 # Download OpenDaylight
138 mkdir -p $ODL_DIR
139 cd $ODL_DIR
140 wget -N $ODL_URL/$ODL_PKG
141 unzip -u $ODL_PKG
142}
143
Kyle Mestery86af4a02014-06-24 11:07:54 +0000144# install_opendaylight-compute - Make sure OVS is installed
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000145function install_opendaylight-compute {
Kyle Mestery86af4a02014-06-24 11:07:54 +0000146 # packages are the same as for Neutron OVS agent
147 _neutron_ovs_base_install_agent_packages
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000148}
149
150# start_opendaylight() - Start running processes, including screen
151function start_opendaylight {
152 if is_ubuntu; then
153 JHOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
154 else
155 JHOME=/usr/lib/jvm/java-1.7.0-openjdk
156 fi
157
158 # The flags to ODL have the following meaning:
159 # -of13: runs ODL using OpenFlow 1.3 protocol support.
160 # -virt ovsdb: Runs ODL in "virtualization" mode with OVSDB support
Dean Troyer3324f192014-09-18 09:26:39 -0500161
Kyle Mestery6a709ab2014-11-06 08:36:09 +0000162 run_process odl-server "cd $ODL_DIR/$ODL_NAME && JAVA_HOME=$JHOME bin/karaf"
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000163
164 # Sleep a bit to let OpenDaylight finish starting up
165 sleep $ODL_BOOT_WAIT
166}
167
168# stop_opendaylight() - Stop running processes (non-screen)
169function stop_opendaylight {
Chris Dent2f27a0e2014-09-09 13:46:02 +0100170 stop_process odl-server
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000171}
172
173# stop_opendaylight-compute() - Remove OVS bridges
174function stop_opendaylight-compute {
175 # remove all OVS ports that look like Neutron created ports
176 for port in $(sudo ovs-vsctl list port | grep -o -e tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
177 sudo ovs-vsctl del-port ${port}
178 done
179
180 # remove all OVS bridges created by Neutron
181 for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE}); do
182 sudo ovs-vsctl del-br ${bridge}
183 done
184}
185
186# Restore xtrace
187$XTRACE
188
189# Tell emacs to use shell-script-mode
190## Local variables:
191## mode: shell-script
192## End: