blob: 0ac7f2b0e5295df25d5ce03d6b5fabe0baf9a214 [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#
6# - ``functions`` file
7# # ``DEST`` must be defined
8# # ``STACK_USER`` must be defined
9
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 Mesteryd44517d2014-01-28 20:29:18 +000047# <define global variables here that belong to this project>
48ODL_DIR=$DEST/opendaylight
49
50# The OpenDaylight Package, currently using 'Hydrogen' release
51ODL_PKG=${ODL_PKG:-distributions-virtualization-0.1.1-osgipackage.zip}
52
53# The OpenDaylight URL
54ODL_URL=${ODL_URL:-https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distributions-virtualization/0.1.1}
55
56# Default arguments for OpenDaylight. This is typically used to set
57# Java memory options.
58# ODL_ARGS=Xmx1024m -XX:MaxPermSize=512m
59ODL_ARGS=${ODL_ARGS:-"-XX:MaxPermSize=384m"}
60
61# How long to pause after ODL starts to let it complete booting
62ODL_BOOT_WAIT=${ODL_BOOT_WAIT:-60}
63
Sam Hague09b56b12014-05-05 10:30:09 -040064# The physical provider network to device mapping
65ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS:-physnet1:eth1}
66
Kyle Mesteryd44517d2014-01-28 20:29:18 +000067# Set up default directories
68
69
70# Entry Points
71# ------------
72
73# Test if OpenDaylight is enabled
74# is_opendaylight_enabled
75function is_opendaylight_enabled {
76 [[ ,${ENABLED_SERVICES} =~ ,"odl-" ]] && return 0
77 return 1
78}
79
80# cleanup_opendaylight() - Remove residual data files, anything left over from previous
81# runs that a clean run would need to clean up
82function cleanup_opendaylight {
83 :
84}
85
86# configure_opendaylight() - Set config files, create data dirs, etc
87function configure_opendaylight {
88 # Remove simple forwarder
89 rm -f $ODL_DIR/opendaylight/plugins/org.opendaylight.controller.samples.simpleforwarding*
90
91 # Configure OpenFlow 1.3
92 echo "ovsdb.of.version=1.3" >> $ODL_DIR/opendaylight/configuration/config.ini
93}
94
Simon Pasquiercfc9ebb2014-04-08 09:34:44 +020095function configure_ml2_odl {
96 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl url=$ODL_ENDPOINT
97 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl username=$ODL_USERNAME
98 populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_odl password=$ODL_PASSWORD
99}
100
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000101# init_opendaylight() - Initialize databases, etc.
102function init_opendaylight {
103 # clean up from previous (possibly aborted) runs
104 # create required data files
105 :
106}
107
108# install_opendaylight() - Collect source and prepare
109function install_opendaylight {
110 local _pwd=$(pwd)
111
112 if is_ubuntu; then
113 install_package maven openjdk-7-jre openjdk-7-jdk
114 else
115 yum_install maven java-1.7.0-openjdk
116 fi
117
118 # Download OpenDaylight
119 mkdir -p $ODL_DIR
120 cd $ODL_DIR
121 wget -N $ODL_URL/$ODL_PKG
122 unzip -u $ODL_PKG
123}
124
125# install_opendaylight-compute - Make sure OVS is install
126function install_opendaylight-compute {
127 local kernel_version
128 # Install deps
129 # FIXME add to ``files/apts/neutron``, but don't install if not needed!
130 if is_ubuntu; then
131 kernel_version=`cat /proc/version | cut -d " " -f3`
132 install_package make fakeroot dkms openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
133 elif is_fedora; then
134 install_package openvswitch
135 # Ensure that the service is started
136 restart_service openvswitch
137 elif is_suse; then
Ralf Haferkampce03d102014-04-07 17:01:53 +0200138 install_package openvswitch-switch
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000139 restart_service openvswitch-switch
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000140 fi
141}
142
143# start_opendaylight() - Start running processes, including screen
144function start_opendaylight {
145 if is_ubuntu; then
146 JHOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
147 else
148 JHOME=/usr/lib/jvm/java-1.7.0-openjdk
149 fi
150
151 # The flags to ODL have the following meaning:
152 # -of13: runs ODL using OpenFlow 1.3 protocol support.
153 # -virt ovsdb: Runs ODL in "virtualization" mode with OVSDB support
fujioka yuuichi41ca6dc2014-03-20 03:03:26 +0000154 screen_it odl-server "cd $ODL_DIR/opendaylight && JAVA_HOME=$JHOME ./run.sh $ODL_ARGS -of13 -virt ovsdb"
Kyle Mesteryd44517d2014-01-28 20:29:18 +0000155
156 # Sleep a bit to let OpenDaylight finish starting up
157 sleep $ODL_BOOT_WAIT
158}
159
160# stop_opendaylight() - Stop running processes (non-screen)
161function stop_opendaylight {
162 screen_stop odl-server
163}
164
165# stop_opendaylight-compute() - Remove OVS bridges
166function stop_opendaylight-compute {
167 # remove all OVS ports that look like Neutron created ports
168 for port in $(sudo ovs-vsctl list port | grep -o -e tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
169 sudo ovs-vsctl del-port ${port}
170 done
171
172 # remove all OVS bridges created by Neutron
173 for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE}); do
174 sudo ovs-vsctl del-br ${bridge}
175 done
176}
177
178# Restore xtrace
179$XTRACE
180
181# Tell emacs to use shell-script-mode
182## Local variables:
183## mode: shell-script
184## End: