+- `::opendaylight::params`: Contains default `opendaylight` class param values.
+- `::opendaylight::install`: Installs ODL from an RPM or a Deb.
+- `::opendaylight::config`: Manages ODL config, including Karaf features and
+ REST port.
+- `::opendaylight::service`: Starts the OpenDaylight service.
+
+### `::opendaylight`
+
+#### Parameters
+
+##### `default_features`
+
+Sets the Karaf features to install by default. These should not normally need
+to be overridden.
+
+Default: `['config', 'standard', 'region', 'package', 'kar', 'ssh', 'management']`
+
+Valid options: A list of Karaf feature names as strings.
+
+##### `extra_features`
+
+Specifies Karaf features to install in addition to the defaults listed in
+`default_features`.
+
+You will likely need to customize this to your use-case.
+
+Default: `[]`
+
+Valid options: A list of Karaf feature names as strings.
+
+##### `odl_rest_port`
+
+Specifies the port for the ODL northbound REST interface to listen on.
+
+Default: `'8080'`
+
+Valid options: A valid port number as a string or integer.
+
+##### `rpm_repo`
+
+OpenDaylight CentOS CBS repo to install RPM from (opendaylight-4-testing,
+opendaylight-40-release, ...).
+
+##### `deb_repo`
+
+OpenDaylight Launchpad PPA repo to install .deb from (ppa:odl-team/boron,
+ppa:odl-team/carbon, ...).
+
+##### `log_levels`
+
+Custom OpenDaylight logger verbosity configuration.
+
+Default: `{}`
+
+Valid options: A hash of loggers to log levels.
+
+```
+{ 'org.opendaylight.ovsdb' => 'TRACE', 'org.opendaylight.ovsdb.lib' => 'INFO' }
+```
+
+Valid log levels are TRACE, DEBUG, INFO, WARN, and ERROR.
+
+The above example would add the following logging configuration to
+`/opt/opendaylight/etc/org.ops4j.pax.logging.cfg`.
+
+```
+# Log level config added by puppet-opendaylight
+log4j.logger.org.opendaylight.ovsdb = TRACE
+
+# Log level config added by puppet-opendaylight
+log4j.logger.org.opendaylight.ovsdb.lib = INFO
+```
+
+To view loggers and their verbosity levels, use `log:list` at the ODL Karaf shell.
+
+```
+opendaylight-user@root>log:list
+Logger | Level
+----------------------------------
+ROOT | INFO
+org.opendaylight.ovsdb | TRACE
+org.opendaylight.ovsdb.lib | INFO
+```
+
+The main log output file is `/opt/opendaylight/data/log/karaf.log`.
+
+##### `enable_ha`
+
+Enable or disable ODL High Availablity.
+
+Default: `false`
+
+Valid options: The boolean values `true` and `false`.
+
+Requires: `ha_node_ips`, `ha_node_index`
+
+The ODL Clustering XML for HA are configured and enabled.
+
+##### `ha_node_ips`
+
+Specifies the IPs that are part of the HA cluster enabled by `enable_ha`.
+
+Default: \[]
+
+Valid options: An array of IP addresses `['10.10.10.1', '10.10.10.1', '10.10.10.3']`.
+
+Required by: `enable_ha`
+
+##### `ha_node_index`
+
+Specifies the index of the IP for the node being configured from the array `ha_node_ips`.
+
+Default: ''
+
+Valid options: Index of a member of the array `ha_node_ips`: `0`.
+
+Required by: `enable_ha`, `ha_node_ips`
+
+##### `security_group_mode`
+
+Specifies the mode to use for security groups.
+
+Default: `stateful`
+
+Valid options: `transparent`, `learn`, `stateless`
+
+##### `vpp_routing_node`
+
+Specifies the routing node for VPP deployment. A non-empty string will create config file
+org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.startup.cfg with routing-node set.
+
+Default: `''`
+
+Valid options: A valid host name to a VPP node handling routing.
+
+##### `java_opts`
+
+Specifies the Java options to run ODL with as a string.
+
+Default: `'-Djava.net.preferIPv4Stack=true'`
+
+Valid options: A string of valid Java options.
+
+##### `username`
+
+Specifies the username to set for admin role in ODL.
+
+Default: `'admin'`
+
+Valid options: A username string.
+
+##### `password`
+
+Specifies the password to set for admin role in ODL.
+
+Default: `'admin'`
+
+Valid options: A password string.