5 1. [Overview](#overview)
6 2. [Module Description](#module-description)
9 - [What `opendaylight` affects](#what-opendaylight-affects)
10 - [Beginning with `opendaylight`](#beginning-with-opendaylight)
14 - [Karaf Features](#karaf-features)
15 - [RPM Repo](#rpm-repo)
16 - [Deb Repo](#deb-repo)
18 - [Log Verbosity](#log-verbosity)
19 - [Enabling ODL HA](#enabling-odl-ha)
21 5. [Reference ](#reference)
22 6. [Limitations](#limitations)
23 7. [Development](#development)
24 8. [Release Notes/Contributors](#release-notescontributors)
28 Puppet module that installs and configures the [OpenDaylight Software Defined
29 Networking (SDN) controller][1].
33 Deploys OpenDaylight to various OSs either via an RPM or a Deb.
35 All OpenDaylight configuration should be handled through the ODL Puppet
36 module's [params](#parameters).
38 By default, the master branch installs OpenDaylight from the latest testing
39 RPM repository or from the latest stable Deb repository depending on the OS.
40 The stable/<release> branches install corresponding older ODL versions.
44 ### What `opendaylight` affects
46 - Installs Java, which is required by ODL.
47 - Creates `odl:odl` user:group if they don't already exist.
48 - Installs [OpenDaylight][1], including a systemd unit file.
49 - Manipulates OpenDaylight's configuration files according to the params
50 passed to the `::opendaylight` class.
51 - Starts the `opendaylight` systemd service.
53 ### Beginning with `opendaylight`
55 Getting started with the OpenDaylight Puppet module is as simple as declaring
56 the `::opendaylight` class.
60 The most basic usage, passing no parameters to the OpenDaylight class, will
61 install and start OpenDaylight with a default configuration.
64 class { 'opendaylight':
70 To set extra Karaf features to be installed at OpenDaylight start time, pass
71 them in a list to the `extra_features` param. The extra features you pass will
72 typically be driven by the requirements of your ODL install. You'll almost
73 certainly need to pass some.
76 class { 'opendaylight':
77 extra_features => ['odl-netvirt-openstack'],
81 OpenDaylight normally installs a default set of Karaf features at boot. They
82 are recommended, so the ODL Puppet mod defaults to installing them. This can
83 be customized by overriding the `default_features` param. You shouldn't
84 normally need to do so.
87 class { 'opendaylight':
88 default_features => ['config', 'standard', 'region', 'package', 'kar', 'ssh', 'management'],
94 The `rpm_repo` param can be used to configure which RPM repository
95 OpenDaylight is installed from.
98 class { 'opendaylight':
99 rpm_repo => 'https://nexus.opendaylight.org/content/repositories/opendaylight-fluorine-epel-7-$basearch-devel',
103 The URL should be formatted like a baseurl in RPM .repo config files. In
104 particular, note the $basearch variable, which should be left form the
105 package manager (yum, dnf) to populate.
107 For additional information about ODL RPM repos, see the [Integration/Packaging
108 RPM repositories documentation][2].
110 This is only read for Red Hat-family operating systems.
114 The `deb_repo` param can be used to configure which Deb repository
115 OpenDaylight is installed from.
118 class { 'opendaylight':
119 deb_repo => 'ppa:odl-team/nitrogen',
123 The naming convention is same as the naming convention of Launchpad PPA's,
124 which is where ODL .debs are hosted. The `ppa:odl-team/nitrogen` example above
125 would install OpenDaylight Nitrogen from the [Nitrogen launchpad repo][3].
127 This is only read for Debian-family operating systems.
131 To change the port on which OpenDaylight's northbound listens for REST API
132 calls, use the `odl_rest_port` param.
135 class { 'opendaylight':
136 odl_rest_port => '8181',
142 It's possible to define custom logger verbosity levels via the `log_levels`
146 class { 'opendaylight':
147 log_levels => { 'org.opendaylight.ovsdb' => 'TRACE', 'org.opendaylight.ovsdb.lib' => 'INFO' },
153 To enable ODL HA, use the `enable_ha` flag. It's disabled by default.
155 When `enable_ha` is set to true the `ha_node_ips` should be populated with the
156 IP addresses that ODL will listen on for each node in the HA cluster and
157 `odl_bind_ip` should be set with the IP address from `ha_node_ips` configured
158 for the particular node that puppet is configuring as part of the
161 By default a single ODL instance will become the leader for the entire
162 datastore. In order to distribute the datastore over multiple ODL instances,
163 `ha_db_modules` parameter may be specified which will include the modules
164 desired to separate out from the default shard, along with the Yang namespace
168 class { 'opendaylight':
170 ha_node_ips => ['10.10.10.1', '10.10.10.1', '10.10.10.3'],
172 ha_db_modules => {'default' => false, 'topology' => 'urn:opendaylight:topology'}
176 ### Configuring websocket address
178 Websocket address can be configured to the IP of ODL rather than default 0.0.0.0. This IP will
179 be defined by `odl_bind_ip`.
181 ### Enabling TLS with OpenDaylight
183 It is possible to enable TLS encrypted communication for OpenDaylight Northbound REST
184 along with Southbound OVSDB/OpenFlow communication with Open vSwitch. To enable
185 TLS, use the `enable_tls` flag. This option will create two keystores in OpenDaylight
186 which are stored in '/opt/opendaylight/configuration/ssl'. The first keystore
187 is the controller keystore, which will hold the private key and ODL certificate,
188 along with the Certificate Authority (CA) certificate if provided. The second
189 keystore is the trust keystore, which will hold the trusted OVS switch certificates.
191 In order to enable TLS, it is required to provide the `tls_keystore_password`
192 parameter. This represents the password to use for the controller and truststore
193 keystores. With only providing these parameters, ODL will generate the
194 controller keystore with a random private key and self-signed certficate.
196 Additionally the `tls_key_file` and `tls_cert_file` parameters may be provided.
197 These represent ODL's private key file and certificate file to be used when building
198 the controller keystore. Optionally the `tls_ca_cert_file` may be provided which
199 will chain the CA certificate to the keystore for client validation.
201 `tls_trusted_certs` may be provided as an array of trusted certificates to be
202 added to the trusted keystore. This allows OpenDaylight to identify trusted
203 clients which may connect to ODL Southbound and Northbound.
211 - `::opendaylight`: Main entry point to the module. All ODL knobs should be
212 managed through its params.
216 - `::opendaylight::params`: Contains default `opendaylight` class param values.
217 - `::opendaylight::install`: Installs ODL from an RPM or a Deb.
218 - `::opendaylight::config`: Manages ODL config, including Karaf features and
220 - `::opendaylight::service`: Starts the OpenDaylight service.
226 ##### `default_features`
228 Sets the Karaf features to install by default. These should not normally need
231 Default: `['config', 'standard', 'region', 'package', 'kar', 'ssh', 'management']`
233 Valid options: A list of Karaf feature names as strings.
235 ##### `extra_features`
237 Specifies Karaf features to install in addition to the defaults listed in
240 You will likely need to customize this to your use-case.
244 Valid options: A list of Karaf feature names as strings.
246 ##### `odl_rest_port`
248 Specifies the port for the ODL northbound REST interface to listen on.
252 Valid options: A valid port number as a string or integer.
256 Repo URL to install ODL RPM from, in .repo baseurl format.
260 OpenDaylight Launchpad PPA repo to install .deb from (ppa:odl-team/boron,
261 ppa:odl-team/nitrogen, ...).
265 Custom OpenDaylight logger verbosity configuration.
269 Valid options: A hash of loggers to log levels.
272 { 'org.opendaylight.ovsdb' => 'TRACE', 'org.opendaylight.ovsdb.lib' => 'INFO' }
275 Valid log levels are TRACE, DEBUG, INFO, WARN, and ERROR.
277 The above example would add the following logging configuration to
278 `/opt/opendaylight/etc/org.ops4j.pax.logging.cfg`.
281 # Log level config added by puppet-opendaylight
282 log4j2.logger.org_opendaylight_ovsdb.level = TRACE
283 log4j2.logger.org_opendaylight_ovsdb.name = org.opendaylight.ovsdb
285 # Log level config added by puppet-opendaylight
286 log4j2.logger.org_opendaylight_ovsdb_lib.level = INFO
287 log4j2.logger.org_opendaylight_ovsdb_lib.name = org.opendaylight.ovsdb.lib
290 To view loggers and their verbosity levels, use `log:list` at the ODL Karaf shell.
293 opendaylight-user@root>log:list
295 ----------------------------------
297 org.opendaylight.ovsdb | TRACE
298 org.opendaylight.ovsdb.lib | INFO
301 The main log output file is `/opt/opendaylight/data/log/karaf.log`.
305 Maximum size of OpenDaylight's log file, `/opt/opendaylight/data/log/karaf.log`.
307 Once this size is reached, the log will be rolled over, with up to
308 `log_max_rollover` log rollovers preserved in total.
312 Valid options: A valid size as a string with unit specified.
314 ##### `log_max_rollover`
316 Maximum number of OpenDaylight karaf.log rollovers to keep.
318 Note that if this is set to 1, log rollovers will result in loosing newly
319 logged data. It's recommended to use values greater than one to prune from
324 Valid options: An integer greater than 0.
326 ##### `log_mechanism`
328 Logging mechanism for karaf logs. They are logged either to a file or console.
329 When `log_mechanism` is `file`, log files are configured as per `log_max_size`
330 and `log_max_rollover`.
334 Valid options: `file`, `console`.
338 Enable or disable ODL High Availablity.
342 Valid options: The boolean values `true` and `false`.
344 Requires: `ha_node_ips`, `odl_bind_ip`
346 The ODL Clustering XML for HA are configured and enabled.
350 Specifies the IPs that are part of the HA cluster enabled by `enable_ha`.
354 Valid options: An array of IP addresses `['10.10.10.1', '10.10.10.1', '10.10.10.3']`.
356 Required by: `enable_ha`
358 ##### `ha_db_modules`
360 Specifies the modules to use for distributing and sharding the ODL datastore.
362 Default: `{'default'=> false}`
364 Valid options: A hash of module and Yang namespace for the module (default has no namespace).
366 Requires: `enable_ha`
368 ##### `ha_node_index`
370 Specifies the index of the IP for the node being configured from the array `ha_node_ips`.
374 Valid options: Index of a member of the array `ha_node_ips`: `0`.
376 This parameter is now deprecated and is no longer used.
378 ##### `snat_mechanism`
380 Specifies the mechanism to be used for SNAT.
382 Default: `controller`
384 Valid options: `conntrack`, `controller`
386 ##### `vpp_routing_node`
388 Specifies the routing node for VPP deployment. A non-empty string will create config file
389 org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.startup.cfg with routing-node set.
393 Valid options: A valid host name to a VPP node handling routing.
397 Specifies the Java options to run ODL with as a string. Note, these options
398 are in addition to the default Java options set by the karaf/ODL boot scripts.
400 Default: `'-Djava.net.preferIPv4Stack=true'`
402 Valid options: A string of valid Java options.
406 Specifies the username to set for admin role in ODL.
410 Valid options: A username string.
414 Specifies the password to set for admin role in ODL.
418 Valid options: A password string.
420 ### `inherit_dscp_marking`
422 Specifies whether DSCP marking is enabled for packets egressing out of OVS through
427 Valid options: `true`, `false`
431 - Tested on CentOS 7 and Ubuntu 16.04.
432 - Fedora is allowed but not well-tested, no Beaker coverage.
436 We welcome contributions and work to make them easy!
438 See [CONTRIBUTING.markdown][4] for details about how to contribute to the
439 OpenDaylight Puppet module.
443 See the [CHANGELOG][5] for information about releases.
445 [1]: http://www.opendaylight.org/ "OpenDaylight homepage"
447 [2]: http://docs.opendaylight.org/en/latest/submodules/integration/packaging/docs/rpms.html#repositories "ODL RPM repo docs"
449 [3]: https://launchpad.net/~odl-team/+archive/ubuntu/nitrogen "ODL Nitrogen Deb repo"
451 [4]: https://git.opendaylight.org/gerrit/gitweb?p=integration/packaging/puppet-opendaylight.git;a=blob;f=CONTRIBUTING.markdown "Contributing docs"
453 [5]: https://git.opendaylight.org/gerrit/gitweb?p=integration/packaging/puppet-opendaylight.git;a=blob;f=CHANGELOG "Chagelog"