New Upstream Release - puppet-module-voxpupuli-collectd

Ready changes

Summary

Merged new upstream version: 14.0.0 (was: 11.0.0).

Resulting package

Built on 2023-04-22T06:57 (took 6m38s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases puppet-module-voxpupuli-collectd

Lintian Result

Diff

diff --git a/.editorconfig b/.editorconfig
index d77700e..ecb10a8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,6 +1,7 @@
 # editorconfig.org
 
-# MANAGED BY MODULESYNC
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 
 root = true
 
diff --git a/.fixtures.yml b/.fixtures.yml
index 91d3bbc..b52c99c 100644
--- a/.fixtures.yml
+++ b/.fixtures.yml
@@ -1,9 +1,7 @@
 fixtures:
   repositories:
-    apt: 'git://github.com/puppetlabs/puppetlabs-apt'
-    stdlib: 'git://github.com/puppetlabs/puppetlabs-stdlib'
-    concat: 'git://github.com/puppetlabs/puppetlabs-concat'
-    epel: 'https://github.com/stahnma/puppet-module-epel'
-    yumrepo_core:
-      repo: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git
-      puppet_version: ">= 6.0.0"
+    apt: https://github.com/puppetlabs/puppetlabs-apt.git
+    stdlib: https://github.com/puppetlabs/puppetlabs-stdlib.git
+    concat: https://github.com/puppetlabs/puppetlabs-concat.git
+    epel: https://github.com/voxpupuli/puppet-epel.git
+    yumrepo_core: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 5d04747..8b466cf 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,3 +1,18 @@
+# Contribution guidelines
+
+## Table of contents
+
+* [Contributing](#contributing)
+* [Writing proper commits - short version](#writing-proper-commits-short-version)
+* [Writing proper commits - long version](#writing-proper-commits-long-version)
+* [Dependencies](#dependencies)
+  * [Note for OS X users](#note-for-os-x-users)
+* [The test matrix](#the-test-matrix)
+* [Syntax and style](#syntax-and-style)
+* [Running the unit tests](#running-the-unit-tests)
+* [Unit tests in docker](#unit-tests-in-docker)
+* [Integration tests](#integration-tests)
+
 This module has grown over time based on a range of contributions from
 people using it. If you follow these contributing guidelines your patch
 will likely make it into a release a little more quickly.
@@ -8,29 +23,94 @@ Please note that this project is released with a Contributor Code of Conduct.
 By participating in this project you agree to abide by its terms.
 [Contributor Code of Conduct](https://voxpupuli.org/coc/).
 
-1. Fork the repo.
-
-1. Create a separate branch for your change.
-
-1. We only take pull requests with passing tests, and documentation. [travis-ci](http://travis-ci.org)
-   runs the tests for us. You can also execute them locally. This is explained
-   in a later section.
-
-1. Checkout [our docs](https://voxpupuli.org/docs/#reviewing-a-module-pr) we
-   use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html).
-   They provide some guidance for new code that might help you before you submit a pull request.
-
-1. Add a test for your change. Only refactoring and documentation
-   changes require no new tests. If you are adding functionality
-   or fixing a bug, please add a test.
-
-1. Squash your commits down into logical components. Make sure to rebase
-   against our current master.
-
-1. Push the branch to your fork and submit a pull request.
-
-Please be prepared to repeat some of these steps as our contributors review
-your code.
+* Fork the repo.
+* Create a separate branch for your change.
+* We only take pull requests with passing tests, and documentation. [GitHub Actions](https://docs.github.com/en/actions) run the tests for us. You can also execute them locally. This is explained [in a later section](#the-test-matrix).
+* Checkout [our docs](https://voxpupuli.org/docs/reviewing_pr/) we use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html). They provide some guidance for new code that might help you before you submit a pull request.
+* Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, please add a test.
+* Squash your commits down into logical components. Make sure to rebase against our current master.
+* Push the branch to your fork and submit a pull request.
+
+Please be prepared to repeat some of these steps as our contributors review your code.
+
+Also consider sending in your profile code that calls this component module as an acceptance test or provide it via an issue. This helps reviewers a lot to test your use case and prevents future regressions!
+
+## Writing proper commits - short version
+
+* Make commits of logical units.
+* Check for unnecessary whitespace with "git diff --check" before committing.
+* Commit using Unix line endings (check the settings around "crlf" in git-config(1)).
+* Do not check in commented out code or unneeded files.
+* The first line of the commit message should be a short description (50 characters is the soft limit, excluding ticket number(s)), and should skip the full stop.
+* Associate the issue in the message. The first line should include the issue number in the form "(#XXXX) Rest of message".
+* The body should provide a meaningful commit message, which:
+  *uses the imperative, present tense: `change`, not `changed` or `changes`.
+  * includes motivation for the change, and contrasts its implementation with the previous behavior.
+  * Make sure that you have tests for the bug you are fixing, or feature you are adding.
+  * Make sure the test suites passes after your commit:
+  * When introducing a new feature, make sure it is properly documented in the README.md
+
+## Writing proper commits - long version
+
+  1.  Make separate commits for logically separate changes.
+
+      Please break your commits down into logically consistent units
+      which include new or changed tests relevant to the rest of the
+      change.  The goal of doing this is to make the diff easier to
+      read for whoever is reviewing your code.  In general, the easier
+      your diff is to read, the more likely someone will be happy to
+      review it and get it into the code base.
+
+      If you are going to refactor a piece of code, please do so as a
+      separate commit from your feature or bug fix changes.
+
+      We also really appreciate changes that include tests to make
+      sure the bug is not re-introduced, and that the feature is not
+      accidentally broken.
+
+      Describe the technical detail of the change(s).  If your
+      description starts to get too long, that is a good sign that you
+      probably need to split up your commit into more finely grained
+      pieces.
+
+      Commits which plainly describe the things which help
+      reviewers check the patch and future developers understand the
+      code are much more likely to be merged in with a minimum of
+      bike-shedding or requested changes.  Ideally, the commit message
+      would include information, and be in a form suitable for
+      inclusion in the release notes for the version of Puppet that
+      includes them.
+
+      Please also check that you are not introducing any trailing
+      whitespace or other "whitespace errors".  You can do this by
+      running "git diff --check" on your changes before you commit.
+
+  2.  Sending your patches
+
+      To submit your changes via a GitHub pull request, we _highly_
+      recommend that you have them on a topic branch, instead of
+      directly on `master`.
+      It makes things much easier to keep track of, especially if
+      you decide to work on another thing before your first change
+      is merged in.
+
+      GitHub has some pretty good
+      [general documentation](http://help.github.com/) on using
+      their site.  They also have documentation on
+      [creating pull requests](http://help.github.com/send-pull-requests/).
+
+      In general, after pushing your topic branch up to your
+      repository on GitHub, you can switch to the branch in the
+      GitHub UI and click "Pull Request" towards the top of the page
+      in order to open a pull request.
+
+
+  3.  Update the related GitHub issue.
+
+      If there is a GitHub issue associated with the change you
+      submitted, then you should update the ticket to include the
+      location of your branch, along with any other commentary you
+      may wish to make.
 
 ## Dependencies
 
@@ -44,29 +124,46 @@ If you have Ruby 2.x or want a specific version of Puppet,
 you must set an environment variable such as:
 
 ```sh
-export PUPPET_VERSION="~> 5.5.6"
+export PUPPET_GEM_VERSION="~> 6.1.0"
 ```
 
 You can install all needed gems for spec tests into the modules directory by
 running:
 
 ```sh
-bundle install --path .vendor/ --without development system_tests release
+bundle install --path .vendor/ --without development system_tests release --jobs "$(nproc)"
 ```
 
 If you also want to run acceptance tests:
 
 ```sh
-bundle install --path .vendor/ --with system_tests --without development release
+bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"
 ```
 
 Our all in one solution if you don't know if you need to install or update gems:
 
 ```sh
-bundle install --path .vendor/ --with system_tests --without development release; bundle update; bundle clean
+bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"; bundle update; bundle clean
+```
+
+As an alternative to the `--jobs "$(nproc)` parameter, you can set an
+environment variable:
+
+```sh
+BUNDLE_JOBS="$(nproc)"
+```
+
+### Note for OS X users
+
+`nproc` isn't a valid command under OS x. As an alternative, you can do:
+
+```sh
+--jobs "$(sysctl -n hw.ncpu)"
 ```
 
-## Syntax and style
+## The test matrix
+
+### Syntax and style
 
 The test suite will run [Puppet Lint](http://puppet-lint.com/) and
 [Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to
@@ -84,7 +181,7 @@ against it. You can run those locally ahead of time with:
 bundle exec rake rubocop
 ```
 
-## Running the unit tests
+### Running the unit tests
 
 The unit test suite covers most of the code, as mentioned above please
 add tests if you're adding new functionality. If you've not used
@@ -109,7 +206,7 @@ To run a specific spec test set the `SPEC` variable:
 bundle exec rake spec SPEC=spec/foo_spec.rb
 ```
 
-### Unit tests in docker
+#### Unit tests in docker
 
 Some people don't want to run the dependencies locally or don't want to install
 ruby. We ship a Dockerfile that enables you to run all unit tests and linting.
@@ -124,7 +221,7 @@ permission to talk to it. You can specify a remote docker host by setting the
 `DOCKER_HOST` environment variable. it will copy the content of the module into
 the docker image. So it will not work if a Gemfile.lock exists.
 
-## Integration tests
+### Integration tests
 
 The unit tests just check the code runs, not that it does exactly what
 we want on a real machine. For that we're using
@@ -135,50 +232,20 @@ simple tests against it after applying the module. You can run this
 with:
 
 ```sh
-bundle exec rake acceptance
-```
-
-This will run the tests on the module's default nodeset. You can override the
-nodeset used, e.g.,
-
-```sh
-BEAKER_set=centos-7-x64 bundle exec rake acceptance
-```
-
-There are default rake tasks for the various acceptance test modules, e.g.,
-
-```sh
-bundle exec rake beaker:centos-7-x64
-bundle exec rake beaker:ssh:centos-7-x64
+BEAKER_setfile=debian11-64 bundle exec rake beaker
 ```
 
-If you don't want to have to recreate the virtual machine every time you can
-use `BEAKER_destroy=no` and `BEAKER_provision=no`. On the first run you will at
-least need `BEAKER_provision` set to yes (the default). The Vagrantfile for the
-created virtual machines will be in `.vagrant/beaker_vagrant_files`.
-
-Beaker also supports docker containers. We also use that in our automated CI
-pipeline at [travis-ci](http://travis-ci.org). To use that instead of Vagrant:
-
-```
-PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian9-64{hypervisor=docker} BEAKER_destroy=yes bundle exec rake beaker
-```
-
-You can replace the string `debian9` with any common operating system.
+You can replace the string `debian10` with any common operating system.
 The following strings are known to work:
 
-* ubuntu1604
 * ubuntu1804
-* debian8
-* debian9
-* centos6
+* ubuntu2004
+* debian10
+* debian11
 * centos7
+* centos8
 
-The easiest way to debug in a docker container is to open a shell:
-
-```sh
-docker exec -it -u root ${container_id_or_name} bash
-```
+For more information and tips & tricks, see [voxpupuli-acceptance's documentation](https://github.com/voxpupuli/voxpupuli-acceptance#running-tests).
 
 The source of this file is in our [modulesync_config](https://github.com/voxpupuli/modulesync_config/blob/master/moduleroot/.github/CONTRIBUTING.md.erb)
 repository.
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
new file mode 100644
index 0000000..cacadf2
--- /dev/null
+++ b/.github/SECURITY.md
@@ -0,0 +1,3 @@
+# Vox Pupuli Security Policy
+
+Our vulnerabilities reporting process is at https://voxpupuli.org/security/
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..8a07791
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,18 @@
+---
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
+name: CI
+
+on: pull_request
+
+concurrency:
+  group: ${{ github.ref_name }}
+  cancel-in-progress: true
+
+jobs:
+  puppet:
+    name: Puppet
+    uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v1
+    with:
+      pidfile_workaround: 'false'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..15f1721
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,22 @@
+---
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
+name: Release
+
+on:
+  push:
+    tags:
+      - '*'
+
+jobs:
+  release:
+    name: Release
+    uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v1
+    with:
+      allowed_owner: 'voxpupuli'
+    secrets:
+      # Configure secrets here:
+      #  https://docs.github.com/en/actions/security-guides/encrypted-secrets
+      username: ${{ secrets.PUPPET_FORGE_USERNAME }}
+      api_key: ${{ secrets.PUPPET_FORGE_API_KEY }}
diff --git a/.gitignore b/.gitignore
index e9b3cf4..9b95224 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
 pkg/
 Gemfile.lock
 Gemfile.local
diff --git a/.msync.yml b/.msync.yml
index 5519891..0235385 100644
--- a/.msync.yml
+++ b/.msync.yml
@@ -1 +1,5 @@
-modulesync_config_version: '2.7.0'
+---
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
+modulesync_config_version: '5.3.0'
diff --git a/.overcommit.yml b/.overcommit.yml
index 1b03fad..d367ada 100644
--- a/.overcommit.yml
+++ b/.overcommit.yml
@@ -1,4 +1,5 @@
-# Managed by https://github.com/voxpupuli/modulesync_configs
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 #
 # Hooks are only enabled if you take action.
 #
@@ -61,4 +62,4 @@ PrePush:
       - 'validate'
       - 'test'
       - 'rubocop'
-    command: [ 'bundle', 'exec', 'rake' ]
+    command: ['bundle', 'exec', 'rake']
diff --git a/.pmtignore b/.pmtignore
index 4e6d54b..65f5051 100644
--- a/.pmtignore
+++ b/.pmtignore
@@ -1,11 +1,15 @@
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
 docs/
 pkg/
+Gemfile
 Gemfile.lock
 Gemfile.local
 vendor/
 .vendor/
-spec/fixtures/manifests/
-spec/fixtures/modules/
+spec/
+Rakefile
 .vagrant/
 .bundle/
 .ruby-version
@@ -13,9 +17,21 @@ coverage/
 log/
 .idea/
 .dependencies/
+.github/
 .librarian/
 Puppetfile.lock
 *.iml
+.editorconfig
+.fixtures.yml
+.gitignore
+.msync.yml
+.overcommit.yml
+.pmtignore
+.rspec
+.rspec_parallel
+.rubocop.yml
+.sync.yml
 .*.sw?
 .yardoc/
+.yardopts
 Dockerfile
diff --git a/.puppet-lint.rc b/.puppet-lint.rc
new file mode 100644
index 0000000..dd8272c
--- /dev/null
+++ b/.puppet-lint.rc
@@ -0,0 +1,3 @@
+--fail-on-warnings
+--no-parameter_documentation-check
+--no-parameter_types-check
diff --git a/.rspec b/.rspec
index 8c18f1a..f634583 100644
--- a/.rspec
+++ b/.rspec
@@ -1,2 +1,5 @@
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
 --format documentation
 --color
diff --git a/.rspec_parallel b/.rspec_parallel
index e4d136b..a9a84f8 100644
--- a/.rspec_parallel
+++ b/.rspec_parallel
@@ -1 +1,4 @@
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
 --format progress
diff --git a/.rubocop.yml b/.rubocop.yml
index 099a11c..fded90c 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,545 +1,7 @@
-require: rubocop-rspec
-AllCops:
-  TargetRubyVersion: 1.9
-  Include:
-    - ./**/*.rb
-  Exclude:
-    - files/**/*
-    - vendor/**/*
-    - .vendor/**/*
-    - pkg/**/*
-    - spec/fixtures/**/*
-    - Gemfile
-    - Rakefile
-    - Guardfile
-    - Vagrantfile
-Lint/ConditionPosition:
-  Enabled: True
+---
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 
-Lint/ElseLayout:
-  Enabled: True
-
-Lint/UnreachableCode:
-  Enabled: True
-
-Lint/UselessComparison:
-  Enabled: True
-
-Lint/EnsureReturn:
-  Enabled: True
-
-Lint/HandleExceptions:
-  Enabled: True
-
-Lint/LiteralInCondition:
-  Enabled: True
-
-Lint/ShadowingOuterLocalVariable:
-  Enabled: True
-
-Lint/LiteralInInterpolation:
-  Enabled: True
-
-Style/HashSyntax:
-  Enabled: True
-
-Style/RedundantReturn:
-  Enabled: True
-
-Layout/EndOfLine:
-  Enabled: False
-
-Lint/AmbiguousOperator:
-  Enabled: True
-
-Lint/AssignmentInCondition:
-  Enabled: True
-
-Layout/SpaceBeforeComment:
-  Enabled: True
-
-Style/AndOr:
-  Enabled: True
-
-Style/RedundantSelf:
-  Enabled: True
-
-Metrics/BlockLength:
-  Enabled: False
-
-# Method length is not necessarily an indicator of code quality
-Metrics/MethodLength:
-  Enabled: False
-
-# Module length is not necessarily an indicator of code quality
-Metrics/ModuleLength:
-  Enabled: False
-
-Style/WhileUntilModifier:
-  Enabled: True
-
-Lint/AmbiguousRegexpLiteral:
-  Enabled: True
-
-Security/Eval:
-  Enabled: True
-
-Lint/BlockAlignment:
-  Enabled: True
-
-Lint/DefEndAlignment:
-  Enabled: True
-
-Lint/EndAlignment:
-  Enabled: True
-
-Lint/DeprecatedClassMethods:
-  Enabled: True
-
-Lint/Loop:
-  Enabled: True
-
-Lint/ParenthesesAsGroupedExpression:
-  Enabled: True
-
-Lint/RescueException:
-  Enabled: True
-
-Lint/StringConversionInInterpolation:
-  Enabled: True
-
-Lint/UnusedBlockArgument:
-  Enabled: True
-
-Lint/UnusedMethodArgument:
-  Enabled: True
-
-Lint/UselessAccessModifier:
-  Enabled: True
-
-Lint/UselessAssignment:
-  Enabled: True
-
-Lint/Void:
-  Enabled: True
-
-Layout/AccessModifierIndentation:
-  Enabled: True
-
-Style/AccessorMethodName:
-  Enabled: True
-
-Style/Alias:
-  Enabled: True
-
-Layout/AlignArray:
-  Enabled: True
-
-Layout/AlignHash:
-  Enabled: True
-
-Layout/AlignParameters:
-  Enabled: True
-
-Metrics/BlockNesting:
-  Enabled: True
-
-Style/AsciiComments:
-  Enabled: True
-
-Style/Attr:
-  Enabled: True
-
-Style/BracesAroundHashParameters:
-  Enabled: True
-
-Style/CaseEquality:
-  Enabled: True
-
-Layout/CaseIndentation:
-  Enabled: True
-
-Style/CharacterLiteral:
-  Enabled: True
-
-Style/ClassAndModuleCamelCase:
-  Enabled: True
-
-Style/ClassAndModuleChildren:
-  Enabled: False
-
-Style/ClassCheck:
-  Enabled: True
-
-# Class length is not necessarily an indicator of code quality
-Metrics/ClassLength:
-  Enabled: False
-
-Style/ClassMethods:
-  Enabled: True
-
-Style/ClassVars:
-  Enabled: True
-
-Style/WhenThen:
-  Enabled: True
-
-Style/WordArray:
-  Enabled: True
-
-Style/UnneededPercentQ:
-  Enabled: True
-
-Layout/Tab:
-  Enabled: True
-
-Layout/SpaceBeforeSemicolon:
-  Enabled: True
-
-Layout/TrailingBlankLines:
-  Enabled: True
-
-Layout/SpaceInsideBlockBraces:
-  Enabled: True
-
-Layout/SpaceInsideBrackets:
-  Enabled: True
-
-Layout/SpaceInsideHashLiteralBraces:
-  Enabled: True
-
-Layout/SpaceInsideParens:
-  Enabled: True
-
-Layout/LeadingCommentSpace:
-  Enabled: True
-
-Layout/SpaceBeforeFirstArg:
-  Enabled: True
-
-Layout/SpaceAfterColon:
-  Enabled: True
-
-Layout/SpaceAfterComma:
-  Enabled: True
-
-Layout/SpaceAfterMethodName:
-  Enabled: True
-
-Layout/SpaceAfterNot:
-  Enabled: True
-
-Layout/SpaceAfterSemicolon:
-  Enabled: True
-
-Layout/SpaceAroundEqualsInParameterDefault:
-  Enabled: True
-
-Layout/SpaceAroundOperators:
-  Enabled: True
-
-Layout/SpaceBeforeBlockBraces:
-  Enabled: True
-
-Layout/SpaceBeforeComma:
-  Enabled: True
-
-Style/CollectionMethods:
-  Enabled: True
-
-Layout/CommentIndentation:
-  Enabled: True
-
-Style/ColonMethodCall:
-  Enabled: True
-
-Style/CommentAnnotation:
-  Enabled: True
-
-# 'Complexity' is very relative
-Metrics/CyclomaticComplexity:
-  Enabled: False
-
-Style/ConstantName:
-  Enabled: True
-
-Style/Documentation:
-  Enabled: False
-
-Style/DefWithParentheses:
-  Enabled: True
-
-Style/PreferredHashMethods:
-  Enabled: True
-
-Layout/DotPosition:
-  EnforcedStyle: trailing
-
-Style/DoubleNegation:
-  Enabled: True
-
-Style/EachWithObject:
-  Enabled: True
-
-Layout/EmptyLineBetweenDefs:
-  Enabled: True
-
-Layout/IndentArray:
-  Enabled: True
-
-Layout/IndentHash:
-  Enabled: True
-
-Layout/IndentationConsistency:
-  Enabled: True
-
-Layout/IndentationWidth:
-  Enabled: True
-
-Layout/EmptyLines:
-  Enabled: True
-
-Layout/EmptyLinesAroundAccessModifier:
-  Enabled: True
-
-Style/EmptyLiteral:
-  Enabled: True
-
-# Configuration parameters: AllowURI, URISchemes.
-Metrics/LineLength:
-  Enabled: False
-
-Style/MethodCallWithoutArgsParentheses:
-  Enabled: True
-
-Style/MethodDefParentheses:
-  Enabled: True
-
-Style/LineEndConcatenation:
-  Enabled: True
-
-Layout/TrailingWhitespace:
-  Enabled: True
-
-Style/StringLiterals:
-  Enabled: True
-
-Style/TrailingCommaInArguments:
-  Enabled: True
-
-Style/TrailingCommaInLiteral:
-  Enabled: True
-
-Style/GlobalVars:
-  Enabled: True
-
-Style/GuardClause:
-  Enabled: True
-
-Style/IfUnlessModifier:
-  Enabled: True
-
-Style/MultilineIfThen:
-  Enabled: True
-
-Style/NegatedIf:
-  Enabled: True
-
-Style/NegatedWhile:
-  Enabled: True
-
-Style/Next:
-  Enabled: True
-
-Style/SingleLineBlockParams:
-  Enabled: True
-
-Style/SingleLineMethods:
-  Enabled: True
-
-Style/SpecialGlobalVars:
-  Enabled: True
-
-Style/TrivialAccessors:
-  Enabled: True
-
-Style/UnlessElse:
-  Enabled: True
-
-Style/VariableInterpolation:
-  Enabled: True
-
-Style/VariableName:
-  Enabled: True
-
-Style/WhileUntilDo:
-  Enabled: True
-
-Style/EvenOdd:
-  Enabled: True
-
-Style/FileName:
-  Enabled: True
-
-Style/For:
-  Enabled: True
-
-Style/Lambda:
-  Enabled: True
-
-Style/MethodName:
-  Enabled: True
-
-Style/MultilineTernaryOperator:
-  Enabled: True
-
-Style/NestedTernaryOperator:
-  Enabled: True
-
-Style/NilComparison:
-  Enabled: True
-
-Style/FormatString:
-  Enabled: True
-
-Style/MultilineBlockChain:
-  Enabled: True
-
-Style/Semicolon:
-  Enabled: True
-
-Style/SignalException:
-  Enabled: True
-
-Style/NonNilCheck:
-  Enabled: True
-
-Style/Not:
-  Enabled: True
-
-Style/NumericLiterals:
-  Enabled: True
-
-Style/OneLineConditional:
-  Enabled: True
-
-Style/OpMethod:
-  Enabled: True
-
-Style/ParenthesesAroundCondition:
-  Enabled: True
-
-Style/PercentLiteralDelimiters:
-  Enabled: True
-
-Style/PerlBackrefs:
-  Enabled: True
-
-Style/PredicateName:
-  Enabled: True
-
-Style/RedundantException:
-  Enabled: True
-
-Style/SelfAssignment:
-  Enabled: True
-
-Style/Proc:
-  Enabled: True
-
-Style/RaiseArgs:
-  Enabled: True
-
-Style/RedundantBegin:
-  Enabled: True
-
-Style/RescueModifier:
-  Enabled: True
-
-# based on https://github.com/voxpupuli/modulesync_config/issues/168
-Style/RegexpLiteral:
-  EnforcedStyle: percent_r
-  Enabled: True
-
-Lint/UnderscorePrefixedVariableName:
-  Enabled: True
-
-Metrics/ParameterLists:
-  Enabled: False
-
-Lint/RequireParentheses:
-  Enabled: True
-
-Style/ModuleFunction:
-  Enabled: True
-
-Lint/Debugger:
-  Enabled: True
-
-Style/IfWithSemicolon:
-  Enabled: True
-
-Style/Encoding:
-  Enabled: True
-
-Style/BlockDelimiters:
-  Enabled: True
-
-Layout/MultilineBlockLayout:
-  Enabled: True
-
-# 'Complexity' is very relative
-Metrics/AbcSize:
-  Enabled: False
-
-# 'Complexity' is very relative
-Metrics/PerceivedComplexity:
-  Enabled: False
-
-Lint/UselessAssignment:
-  Enabled: True
-
-Layout/ClosingParenthesisIndentation:
-  Enabled: True
-
-# RSpec
-
-RSpec/BeforeAfterAll:
-  Exclude:
-    - spec/acceptance/**/*
-
-# We don't use rspec in this way
-RSpec/DescribeClass:
-  Enabled: False
-
-# Example length is not necessarily an indicator of code quality
-RSpec/ExampleLength:
-  Enabled: False
-
-RSpec/NamedSubject:
-  Enabled: False
-
-# disabled for now since they cause a lot of issues
-# these issues aren't easy to fix
-RSpec/RepeatedDescription:
-  Enabled: False
-
-RSpec/NestedGroups:
-  Enabled: False
-
-# this is broken on ruby1.9
-Layout/IndentHeredoc:
-  Enabled: False
-
-# disable Yaml safe_load. This is needed to support ruby2.0.0 development envs
-Security/YAMLLoad:
-  Enabled: false
-
-# This affects hiera interpolation, as well as some configs that we push.
-Style/FormatStringToken:
-  Enabled: false
-
-# This is useful, but sometimes a little too picky about where unit tests files
-# are located.
-RSpec/FilePath:
-  Enabled: false
+inherit_from: .rubocop_todo.yml
+inherit_gem:
+  voxpupuli-test: rubocop.yml
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
new file mode 100644
index 0000000..0f2b1fc
--- /dev/null
+++ b/.rubocop_todo.yml
@@ -0,0 +1,4 @@
+---
+# Is very common in this module
+RSpec/MultipleMemoizedHelpers:
+  Enabled: false
diff --git a/.sync.yml b/.sync.yml
index b8bb292..46f86a0 100644
--- a/.sync.yml
+++ b/.sync.yml
@@ -1,12 +1,5 @@
 ---
-.travis.yml:
-  docker_sets:
-    - set: ubuntu1404-64
-    - set: ubuntu1604-64
-    - set: ubuntu1804-64
-    - set: centos7-64
-    - set: debian8-64
-  secure: "FAK3Izs5bSZyblGvcFnGWm0exZV5+v9pbwfRDD2oihWxX3U3pArGW+3XcwcJfLQgrUYBsOTmHC8yPjlgTBYeIt/5pvg9X+3jwNgeto6kozpI/nvAq4NtcHhzxRejuPELhFYeXZ3hEw0w+v/ZRo2cNLwI0LLpiWEDvCMZN1CJ2RY="
+.github/workflows/ci.yml:
+  timeout_minutes: 75
 spec/spec_helper.rb:
   spec_overrides: "require 'spec_helper_methods'"
-  mock_with: ':mocha'
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 8624d6f..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,87 +0,0 @@
----
-dist: xenial
-language: ruby
-cache: bundler
-before_install:
-  - gem update --system
-  - gem update bundler
-  - bundle --version
-script:
-  - 'bundle exec rake $CHECK'
-matrix:
-  fast_finish: true
-  include:
-  - rvm: 2.4.4
-    bundler_args: --without system_tests development release
-    env: PUPPET_VERSION="~> 5.0" CHECK=test
-  - rvm: 2.5.3
-    bundler_args: --without system_tests development release
-    env: PUPPET_VERSION="~> 6.0" CHECK=test_with_coveralls
-  - rvm: 2.5.3
-    bundler_args: --without system_tests development release
-    env: PUPPET_VERSION="~> 6.0" CHECK=rubocop
-  - rvm: 2.4.4
-    bundler_args: --without system_tests development release
-    env: PUPPET_VERSION="~> 5.0" CHECK=build DEPLOY_TO_FORGE=yes
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=ubuntu1404-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=ubuntu1404-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=ubuntu1604-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=ubuntu1604-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=ubuntu1804-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=ubuntu1804-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=centos7-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian8-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-  - rvm: 2.5.3
-    bundler_args: --without development release
-    env: PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=debian8-64 BEAKER_HYPERVISOR=docker CHECK=beaker
-    services: docker
-branches:
-  only:
-  - master
-  - /^v\d/
-notifications:
-  email: false
-  irc:
-    on_success: always
-    on_failure: always
-    channels:
-      - "chat.freenode.org#voxpupuli-notifications"
-deploy:
-  provider: puppetforge
-  user: puppet
-  password:
-    secure: "FAK3Izs5bSZyblGvcFnGWm0exZV5+v9pbwfRDD2oihWxX3U3pArGW+3XcwcJfLQgrUYBsOTmHC8yPjlgTBYeIt/5pvg9X+3jwNgeto6kozpI/nvAq4NtcHhzxRejuPELhFYeXZ3hEw0w+v/ZRo2cNLwI0LLpiWEDvCMZN1CJ2RY="
-  on:
-    tags: true
-    # all_branches is required to use tags
-    all_branches: true
-    # Only publish the build marked with "DEPLOY_TO_FORGE"
-    condition: "$DEPLOY_TO_FORGE = yes"
diff --git a/.yardopts b/.yardopts
deleted file mode 100644
index 3687f51..0000000
--- a/.yardopts
+++ /dev/null
@@ -1,2 +0,0 @@
---markup markdown
---output-dir docs/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a9719f5..ed13c9a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,217 @@ All notable changes to this project will be documented in this file.
 Each new release typically also includes the latest modulesync defaults.
 These should not affect the functionality of the module.
 
+## [v14.0.0](https://github.com/voxpupuli/puppet-collectd/tree/v14.0.0) (2022-09-07)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v13.0.0...v14.0.0)
+
+**Breaking changes:**
+
+- Drop support of Debian 9, Ubuntu 16.04 and FreeBSD 11 \(EOL\) [\#990](https://github.com/voxpupuli/puppet-collectd/pull/990) ([smortex](https://github.com/smortex))
+- Make port and host optional for mysql plugin [\#988](https://github.com/voxpupuli/puppet-collectd/pull/988) ([jovandeginste](https://github.com/jovandeginste))
+
+**Implemented enhancements:**
+
+- Add support for EL9 [\#1005](https://github.com/voxpupuli/puppet-collectd/pull/1005) ([jovandeginste](https://github.com/jovandeginste))
+- puppet/epel: Allow 4.x [\#1004](https://github.com/voxpupuli/puppet-collectd/pull/1004) ([jovandeginste](https://github.com/jovandeginste))
+- move typesdb with concat resources [\#996](https://github.com/voxpupuli/puppet-collectd/pull/996) ([fe80](https://github.com/fe80))
+- Add support for FreeBSD 13 [\#991](https://github.com/voxpupuli/puppet-collectd/pull/991) ([smortex](https://github.com/smortex))
+
+**Fixed bugs:**
+
+- Rely on autorequires of files when using concat [\#1003](https://github.com/voxpupuli/puppet-collectd/pull/1003) ([traylenator](https://github.com/traylenator))
+
+**Closed issues:**
+
+- File\['collectd.d'\] -\> Concat \<| tag == 'collectd' |\> is too greedy [\#1000](https://github.com/voxpupuli/puppet-collectd/issues/1000)
+
+**Merged pull requests:**
+
+- rubocop compliance for modulesync\_config 5.3.0 [\#1001](https://github.com/voxpupuli/puppet-collectd/pull/1001) ([traylenator](https://github.com/traylenator))
+- Drop Arch Linux support [\#997](https://github.com/voxpupuli/puppet-collectd/pull/997) ([bastelfreak](https://github.com/bastelfreak))
+
+## [v13.0.0](https://github.com/voxpupuli/puppet-collectd/tree/v13.0.0) (2021-09-13)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v12.2.0...v13.0.0)
+
+**Breaking changes:**
+
+- Drop EoL Puppet 5 support; Add Puppet 7 support / Allow latest dependencies / Drop EoL Debian 8 [\#975](https://github.com/voxpupuli/puppet-collectd/pull/975) ([bastelfreak](https://github.com/bastelfreak))
+
+**Implemented enhancements:**
+
+- plugin::mysql::database - remove default 'UNSET' values [\#724](https://github.com/voxpupuli/puppet-collectd/issues/724)
+- Add support for Debian 11 [\#984](https://github.com/voxpupuli/puppet-collectd/pull/984) ([smortex](https://github.com/smortex))
+- MySQL database plugin: allow no password; default Host, User, and Password to undef [\#970](https://github.com/voxpupuli/puppet-collectd/pull/970) ([ph448](https://github.com/ph448))
+- Add ubuntu 20 support [\#941](https://github.com/voxpupuli/puppet-collectd/pull/941) ([bastelfreak](https://github.com/bastelfreak))
+
+**Fixed bugs:**
+
+- postgresql plugin does not produce working database configuration with writer query [\#971](https://github.com/voxpupuli/puppet-collectd/issues/971)
+- .sync.yml: load spec\_helper\_methods in spec\_helper.rb [\#979](https://github.com/voxpupuli/puppet-collectd/pull/979) ([bastelfreak](https://github.com/bastelfreak))
+- Removing extra whitespaces wrom carbon template [\#978](https://github.com/voxpupuli/puppet-collectd/pull/978) ([markasammut](https://github.com/markasammut))
+- Emit CommitInterval when writer is configured for database [\#972](https://github.com/voxpupuli/puppet-collectd/pull/972) ([ph448](https://github.com/ph448))
+- Convert plugin\_instance\_format from Enum to String [\#969](https://github.com/voxpupuli/puppet-collectd/pull/969) ([leifmadsen](https://github.com/leifmadsen))
+- Fix dbi query.conf.erg template [\#960](https://github.com/voxpupuli/puppet-collectd/pull/960) ([VtG242](https://github.com/VtG242))
+- Fix type mismatch for ovs\_stats port [\#959](https://github.com/voxpupuli/puppet-collectd/pull/959) ([mrunge](https://github.com/mrunge))
+- Fix `ignoreselected` typo in protocols.conf.erb template [\#957](https://github.com/voxpupuli/puppet-collectd/pull/957) ([VtG242](https://github.com/VtG242))
+- Drop erroneous double quotes from virt plugin template [\#954](https://github.com/voxpupuli/puppet-collectd/pull/954) ([leifmadsen](https://github.com/leifmadsen))
+
+**Closed issues:**
+
+- \[release request\] v12.3.0 [\#974](https://github.com/voxpupuli/puppet-collectd/issues/974)
+- collectd::plugin::virt plugin\_instance\_format should not be Enum [\#968](https://github.com/voxpupuli/puppet-collectd/issues/968)
+- Python plugin template does not create valid module configuration [\#964](https://github.com/voxpupuli/puppet-collectd/issues/964)
+- ovs\_stats port number mismatch [\#958](https://github.com/voxpupuli/puppet-collectd/issues/958)
+- collectd fails to load when using multiple hostname format values [\#953](https://github.com/voxpupuli/puppet-collectd/issues/953)
+
+**Merged pull requests:**
+
+- Allow stdlib 8.0.0 [\#983](https://github.com/voxpupuli/puppet-collectd/pull/983) ([smortex](https://github.com/smortex))
+- Update badges in README.md [\#982](https://github.com/voxpupuli/puppet-collectd/pull/982) ([bastelfreak](https://github.com/bastelfreak))
+- Adding Reverse Host parameter [\#973](https://github.com/voxpupuli/puppet-collectd/pull/973) ([markasammut](https://github.com/markasammut))
+- Install collectd-mcelog package on RedHat [\#962](https://github.com/voxpupuli/puppet-collectd/pull/962) ([uvNikita](https://github.com/uvNikita))
+
+## [v12.2.0](https://github.com/voxpupuli/puppet-collectd/tree/v12.2.0) (2020-09-18)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v12.1.0...v12.2.0)
+
+**Implemented enhancements:**
+
+- Add PluginInstanceFormat parameter to virt plugin [\#955](https://github.com/voxpupuli/puppet-collectd/pull/955) ([leifmadsen](https://github.com/leifmadsen))
+- Add support for Header and Metrics configuration for write\_http plugin [\#944](https://github.com/voxpupuli/puppet-collectd/pull/944) ([paramite](https://github.com/paramite))
+
+**Fixed bugs:**
+
+- Remove redundant white space from python templates [\#943](https://github.com/voxpupuli/puppet-collectd/pull/943) ([traylenator](https://github.com/traylenator))
+- Fix unixsock default path [\#940](https://github.com/voxpupuli/puppet-collectd/pull/940) ([smortex](https://github.com/smortex))
+
+**Merged pull requests:**
+
+- Convert mocha tests to rspec [\#952](https://github.com/voxpupuli/puppet-collectd/pull/952) ([KeithWard](https://github.com/KeithWard))
+- modulesync 3.0.0 / fix several puppet-ling warnings [\#951](https://github.com/voxpupuli/puppet-collectd/pull/951) ([bastelfreak](https://github.com/bastelfreak))
+- Add options to limit the send queue length [\#950](https://github.com/voxpupuli/puppet-collectd/pull/950) ([mrunge](https://github.com/mrunge))
+- Allow to set separate interval for database resource [\#945](https://github.com/voxpupuli/puppet-collectd/pull/945) ([oleksandriegorov](https://github.com/oleksandriegorov))
+
+## [v12.1.0](https://github.com/voxpupuli/puppet-collectd/tree/v12.1.0) (2020-05-04)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v12.0.0...v12.1.0)
+
+**Implemented enhancements:**
+
+- Add support for Debian 9/10 [\#938](https://github.com/voxpupuli/puppet-collectd/pull/938) ([dhoppe](https://github.com/dhoppe))
+
+**Fixed bugs:**
+
+- Snmp agent fix [\#937](https://github.com/voxpupuli/puppet-collectd/pull/937) ([MichalRebisz](https://github.com/MichalRebisz))
+- Fix Logparser template datatype handling [\#936](https://github.com/voxpupuli/puppet-collectd/pull/936) ([MichalRebisz](https://github.com/MichalRebisz))
+
+**Merged pull requests:**
+
+- Use voxpupuli-acceptance [\#934](https://github.com/voxpupuli/puppet-collectd/pull/934) ([ekohl](https://github.com/ekohl))
+
+## [v12.0.0](https://github.com/voxpupuli/puppet-collectd/tree/v12.0.0) (2020-04-04)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v11.4.0...v12.0.0)
+
+**Breaking changes:**
+
+- \[collectd\] rename log\_parser to logparser [\#930](https://github.com/voxpupuli/puppet-collectd/pull/930) ([prabiegx](https://github.com/prabiegx))
+- Change all `port` parameters to use `Stdlib::Port` [\#906](https://github.com/voxpupuli/puppet-collectd/pull/906) ([bastelfreak](https://github.com/bastelfreak))
+
+**Fixed bugs:**
+
+- Install disk package if required prior CentOS 8 [\#929](https://github.com/voxpupuli/puppet-collectd/pull/929) ([NikolayTsvetkov](https://github.com/NikolayTsvetkov))
+
+## [v11.4.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.4.0) (2020-03-29)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v11.3.0...v11.4.0)
+
+**Implemented enhancements:**
+
+- Add Plugin Log parser [\#912](https://github.com/voxpupuli/puppet-collectd/pull/912) ([MichalRebisz](https://github.com/MichalRebisz))
+
+**Fixed bugs:**
+
+- processes-config.conf file is not created [\#926](https://github.com/voxpupuli/puppet-collectd/issues/926)
+- Create processes plugin configuration on RedHat [\#927](https://github.com/voxpupuli/puppet-collectd/pull/927) ([traylenator](https://github.com/traylenator))
+- Skip Load:ReportRelative as problematic for collectd 5.9.0 [\#924](https://github.com/voxpupuli/puppet-collectd/pull/924) ([traylenator](https://github.com/traylenator))
+- Ignore more installed versions of python during tests [\#923](https://github.com/voxpupuli/puppet-collectd/pull/923) ([traylenator](https://github.com/traylenator))
+
+## [v11.3.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.3.0) (2020-03-19)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v11.2.0...v11.3.0)
+
+**Implemented enhancements:**
+
+- New utils parameter to install collectdctl [\#919](https://github.com/voxpupuli/puppet-collectd/pull/919) ([traylenator](https://github.com/traylenator))
+- Require puppet-epel over stahnma-epel [\#918](https://github.com/voxpupuli/puppet-collectd/pull/918) ([traylenator](https://github.com/traylenator))
+- Add CentOS 8 support [\#917](https://github.com/voxpupuli/puppet-collectd/pull/917) ([traylenator](https://github.com/traylenator))
+- Add dpdk\_telemetry plugin [\#913](https://github.com/voxpupuli/puppet-collectd/pull/913) ([prabiegx](https://github.com/prabiegx))
+
+**Fixed bugs:**
+
+- write\_http/disk is own sub package on CentOS 8 [\#920](https://github.com/voxpupuli/puppet-collectd/pull/920) ([traylenator](https://github.com/traylenator))
+
+**Closed issues:**
+
+- Time for a new version ? [\#684](https://github.com/voxpupuli/puppet-collectd/issues/684)
+
+## [v11.2.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.2.0) (2020-02-25)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v11.1.0...v11.2.0)
+
+**Implemented enhancements:**
+
+- Add dcpmm plugin [\#914](https://github.com/voxpupuli/puppet-collectd/pull/914) ([prabiegx](https://github.com/prabiegx))
+- Add pcie\_errors plugin [\#911](https://github.com/voxpupuli/puppet-collectd/pull/911) ([prabiegx](https://github.com/prabiegx))
+- Add SNMP agent plugin [\#910](https://github.com/voxpupuli/puppet-collectd/pull/910) ([MichalRebisz](https://github.com/MichalRebisz))
+
+**Merged pull requests:**
+
+- Plugin Mcelog default config [\#909](https://github.com/voxpupuli/puppet-collectd/pull/909) ([MichalRebisz](https://github.com/MichalRebisz))
+
+## [v11.1.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.1.0) (2020-02-08)
+
+[Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v11.0.0...v11.1.0)
+
+**Implemented enhancements:**
+
+- Add Mce log plugin [\#904](https://github.com/voxpupuli/puppet-collectd/pull/904) ([MichalRebisz](https://github.com/MichalRebisz))
+- Fix stdlib deprecation warnings [\#895](https://github.com/voxpupuli/puppet-collectd/pull/895) ([amorphina](https://github.com/amorphina))
+- Add ReconnectInterval option to the write\_graphite plugin \(defaults to zero, introduced in version 5.6\) [\#892](https://github.com/voxpupuli/puppet-collectd/pull/892) ([markasammut](https://github.com/markasammut))
+- Plugin write kafka custom properties and meta [\#888](https://github.com/voxpupuli/puppet-collectd/pull/888) ([nitrik](https://github.com/nitrik))
+- Accept to use python3 if python is not on the path [\#885](https://github.com/voxpupuli/puppet-collectd/pull/885) ([traylenator](https://github.com/traylenator))
+
+**Fixed bugs:**
+
+- fixes \#901 by excluding the ReportRelative option [\#907](https://github.com/voxpupuli/puppet-collectd/pull/907) ([bastelfreak](https://github.com/bastelfreak))
+- plugin/java: handle OpenJDK as well [\#880](https://github.com/voxpupuli/puppet-collectd/pull/880) ([GiedriusS](https://github.com/GiedriusS))
+
+**Closed issues:**
+
+- Error with Plugin "Load" with collectd-5.9 and RHEL-8 [\#901](https://github.com/voxpupuli/puppet-collectd/issues/901)
+- ProcEvent plugin uses ProcessRegex instead of RegexProcess [\#897](https://github.com/voxpupuli/puppet-collectd/issues/897)
+
+**Merged pull requests:**
+
+- update repo links to https [\#903](https://github.com/voxpupuli/puppet-collectd/pull/903) ([bastelfreak](https://github.com/bastelfreak))
+- modulesync 2.10.1 / Drop FreeBSD 9 & 10 / Add FreeBSD 11 and 12 / Drop Solaris [\#899](https://github.com/voxpupuli/puppet-collectd/pull/899) ([dhoppe](https://github.com/dhoppe))
+- Remove duplicate CONTRIBUTING.md file [\#898](https://github.com/voxpupuli/puppet-collectd/pull/898) ([dhoppe](https://github.com/dhoppe))
+- RegexProcess has been renamed during collectd [\#896](https://github.com/voxpupuli/puppet-collectd/pull/896) ([mrunge](https://github.com/mrunge))
+- drop Ubuntu 14.04 support [\#894](https://github.com/voxpupuli/puppet-collectd/pull/894) ([bastelfreak](https://github.com/bastelfreak))
+- Clean up acceptance spec helper [\#893](https://github.com/voxpupuli/puppet-collectd/pull/893) ([ekohl](https://github.com/ekohl))
+- drop legacy precise code [\#891](https://github.com/voxpupuli/puppet-collectd/pull/891) ([bastelfreak](https://github.com/bastelfreak))
+- travis: switch base OS from xenial to bionic [\#890](https://github.com/voxpupuli/puppet-collectd/pull/890) ([bastelfreak](https://github.com/bastelfreak))
+- Apt update before installation of collectd [\#889](https://github.com/voxpupuli/puppet-collectd/pull/889) ([theosotr](https://github.com/theosotr))
+
 ## [v11.0.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.0.0) (2019-06-16)
 
 [Full Changelog](https://github.com/voxpupuli/puppet-collectd/compare/v10.1.0...v11.0.0)
 
 **Breaking changes:**
 
+- drop EOL Ubuntu 14.04 [\#884](https://github.com/voxpupuli/puppet-collectd/pull/884) ([bastelfreak](https://github.com/bastelfreak))
 - modulesync 2.6.0 and drop Puppet 4 [\#872](https://github.com/voxpupuli/puppet-collectd/pull/872) ([bastelfreak](https://github.com/bastelfreak))
 
 **Implemented enhancements:**
@@ -315,9 +520,9 @@ These should not affect the functionality of the module.
 - Add tests for the AMQP plugin and fix broken StoreRates configuration when amqpformat = JSON [\#661](https://github.com/voxpupuli/puppet-collectd/pull/661) ([oranenj](https://github.com/oranenj))
 - provide sane defaults for manage\_repo [\#658](https://github.com/voxpupuli/puppet-collectd/pull/658) ([bastelfreak](https://github.com/bastelfreak))
 - openldap - add binddn and password parameters [\#657](https://github.com/voxpupuli/puppet-collectd/pull/657) ([leonkyneur](https://github.com/leonkyneur))
-- Added ISC DHCP pool metrics plugin [\#650](https://github.com/voxpupuli/puppet-collectd/pull/650) ([Yuav](https://github.com/Yuav))
+- Added ISC DHCP pool metrics plugin [\#650](https://github.com/voxpupuli/puppet-collectd/pull/650) ([jskarpe](https://github.com/jskarpe))
 - df: add devices parameter [\#646](https://github.com/voxpupuli/puppet-collectd/pull/646) ([maage](https://github.com/maage))
-- Added cuda GPU plugin [\#645](https://github.com/voxpupuli/puppet-collectd/pull/645) ([Yuav](https://github.com/Yuav))
+- Added cuda GPU plugin [\#645](https://github.com/voxpupuli/puppet-collectd/pull/645) ([jskarpe](https://github.com/jskarpe))
 - Plugin turbostat [\#642](https://github.com/voxpupuli/puppet-collectd/pull/642) ([jkroepke](https://github.com/jkroepke))
 - Parametrize destination of python config [\#637](https://github.com/voxpupuli/puppet-collectd/pull/637) ([Pigueiras](https://github.com/Pigueiras))
 - Stop specifying $name as the default host value [\#631](https://github.com/voxpupuli/puppet-collectd/pull/631) ([jamtur01](https://github.com/jamtur01))
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 8cac3bd..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,97 +0,0 @@
-This module has grown over time based on a range of contributions from
-people using it. If you follow these contributing guidelines your patch
-will likely make it into a release a little quicker.
-
-
-## Contributing
-
-Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. [Contributor Code of Conduct](https://voxpupuli.org/coc/).
-
-1. Fork the repo.
-
-1. Create a separate branch for your change.
-
-1. Run the tests. We only take pull requests with passing tests, and
-   documentation.
-
-1. Add a test for your change. Only refactoring and documentation
-   changes require no new tests. If you are adding functionality
-   or fixing a bug, please add a test.
-
-1. Squash your commits down into logical components. Make sure to rebase
-   against the current master.
-
-1. Push the branch to your fork and submit a pull request.
-
-Please be prepared to repeat some of these steps as our contributors review
-your code.
-
-## Dependencies
-
-The testing and development tools have a bunch of dependencies,
-all managed by [bundler](http://bundler.io/) according to the
-[Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions).
-
-By default the tests use a baseline version of Puppet.
-
-If you have Ruby 2.x or want a specific version of Puppet,
-you must set an environment variable such as:
-
-    export PUPPET_VERSION="~> 4.2.0"
-
-Install the dependencies like so...
-
-    bundle install
-
-## Syntax and style
-
-The test suite will run [Puppet Lint](http://puppet-lint.com/) and
-[Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to
-check various syntax and style things. You can run these locally with:
-
-    bundle exec rake lint
-    bundle exec rake validate
-
-## Running the unit tests
-
-The unit test suite covers most of the code, as mentioned above please
-add tests if you're adding new functionality. If you've not used
-[rspec-puppet](http://rspec-puppet.com/) before then feel free to ask
-about how best to test your new feature.
-
-To run your all the unit tests
-
-    bundle exec rake spec SPEC_OPTS='--format documentation'
-
-To run a specific spec test set the `SPEC` variable:
-
-    bundle exec rake spec SPEC=spec/foo_spec.rb
-
-To run the linter, the syntax checker and the unit tests:
-
-    bundle exec rake test
-
-
-## Integration tests
-
-The unit tests just check the code runs, not that it does exactly what
-we want on a real machine. For that we're using
-[beaker](https://github.com/puppetlabs/beaker).
-
-This fires up a new virtual machine (using vagrant) and runs a series of
-simple tests against it after applying the module. You can run this
-with:
-
-    bundle exec rake acceptance
-
-This will run the tests on an Ubuntu 12.04 virtual machine. You can also
-run the integration tests against Centos 6.5 with.
-
-    BEAKER_set=centos-64-x64 bundle exec rake acceptances
-
-If you don't want to have to recreate the virtual machine every time you
-can use `BEAKER_DESTROY=no` and `BEAKER_PROVISION=no`. On the first run you will
-at least need `BEAKER_PROVISION` set to yes (the default). The Vagrantfile
-for the created virtual machines will be in `.vagrant/beaker_vagrant_fies`.
-
-# vim: syntax=markdown
diff --git a/Dockerfile b/Dockerfile
index 67048bb..8dd82d6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,11 +1,14 @@
-FROM ruby:2.5.3
+# MANAGED BY MODULESYNC
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
+
+FROM ruby:2.7
 
 WORKDIR /opt/puppet
 
 # https://github.com/puppetlabs/puppet/blob/06ad255754a38f22fb3a22c7c4f1e2ce453d01cb/lib/puppet/provider/service/runit.rb#L39
 RUN mkdir -p /etc/sv
 
-ARG PUPPET_VERSION="~> 6.0"
+ARG PUPPET_GEM_VERSION="~> 6.0"
 ARG PARALLEL_TEST_PROCESSORS=4
 
 # Cache gems
@@ -15,7 +18,7 @@ RUN bundle install --without system_tests development release --path=${BUNDLE_PA
 COPY . .
 
 RUN bundle install
-RUN bundle exec release_checks
+RUN bundle exec rake release_checks
 
 # Container should not saved
 RUN exit 1
diff --git a/Gemfile b/Gemfile
index 24dbb7f..07209b7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,82 +1,34 @@
-source ENV['GEM_SOURCE'] || "https://rubygems.org"
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 
-def location_for(place, fake_version = nil)
-  if place =~ /^(git[:@][^#]*)#(.*)/
-    [fake_version, { :git => $1, :branch => $2, :require => false }].compact
-  elsif place =~ /^file:\/\/(.*)/
-    ['>= 0', { :path => File.expand_path($1), :require => false }]
-  else
-    [place, { :require => false }]
-  end
-end
+source ENV['GEM_SOURCE'] || 'https://rubygems.org'
 
 group :test do
-  gem 'puppetlabs_spec_helper', '>= 2.14.0',                        :require => false
-  gem 'rspec-puppet-facts', '>= 1.8.0',                             :require => false
-  gem 'rspec-puppet-utils',                                         :require => false
-  gem 'puppet-lint-leading_zero-check',                             :require => false
-  gem 'puppet-lint-trailing_comma-check',                           :require => false
-  gem 'puppet-lint-version_comparison-check',                       :require => false
-  gem 'puppet-lint-classes_and_types_beginning_with_digits-check',  :require => false
-  gem 'puppet-lint-unquoted_string-check',                          :require => false
-  gem 'puppet-lint-variable_contains_upcase',                       :require => false
-  gem 'puppet-lint-absolute_classname-check',                       :require => false
-  gem 'metadata-json-lint',                                         :require => false
-  gem 'redcarpet',                                                  :require => false
-  gem 'rubocop', '~> 0.49.1',                                       :require => false
-  gem 'rubocop-rspec', '~> 1.15.0',                                 :require => false
-  gem 'mocha', '~> 1.4.0',                                          :require => false
-  gem 'coveralls',                                                  :require => false
-  gem 'simplecov-console',                                          :require => false
-  gem 'parallel_tests',                                             :require => false
+  gem 'voxpupuli-test', '~> 5.4',   :require => false
+  gem 'coveralls',                  :require => false
+  gem 'simplecov-console',          :require => false
+  gem 'puppet_metadata', '~> 1.0',  :require => false
 end
 
 group :development do
-  gem 'travis',                   :require => false
-  gem 'travis-lint',              :require => false
   gem 'guard-rake',               :require => false
   gem 'overcommit', '>= 0.39.1',  :require => false
 end
 
 group :system_tests do
-  gem 'winrm',                              :require => false
-  if beaker_version = ENV['BEAKER_VERSION']
-    gem 'beaker', *location_for(beaker_version)
-  else
-    gem 'beaker', '>= 4.2.0', :require => false
-  end
-  if beaker_rspec_version = ENV['BEAKER_RSPEC_VERSION']
-    gem 'beaker-rspec', *location_for(beaker_rspec_version)
-  else
-    gem 'beaker-rspec',  :require => false
-  end
-  gem 'serverspec',                         :require => false
-  gem 'beaker-hostgenerator', '>= 1.1.22',  :require => false
-  gem 'beaker-docker',                      :require => false
-  gem 'beaker-puppet',                      :require => false
-  gem 'beaker-puppet_install_helper',       :require => false
-  gem 'beaker-module_install_helper',       :require => false
-  gem 'rbnacl', '>= 4',                     :require => false
-  gem 'rbnacl-libsodium',                   :require => false
-  gem 'bcrypt_pbkdf',                       :require => false
+  gem 'voxpupuli-acceptance', '~> 1.0',  :require => false
 end
 
 group :release do
-  gem 'github_changelog_generator',  :require => false, :git => 'https://github.com/github-changelog-generator/github-changelog-generator'
-  gem 'puppet-blacksmith',           :require => false
-  gem 'voxpupuli-release',           :require => false, :git => 'https://github.com/voxpupuli/voxpupuli-release-gem'
-  gem 'puppet-strings', '>= 2.2',    :require => false
+  gem 'github_changelog_generator', '>= 1.16.1',  :require => false if RUBY_VERSION >= '2.5'
+  gem 'voxpupuli-release', '>= 1.2.0',            :require => false
+  gem 'puppet-strings', '>= 2.2',                 :require => false
 end
 
+gem 'rake', :require => false
+gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test]
 
-
-if facterversion = ENV['FACTER_GEM_VERSION']
-  gem 'facter', facterversion.to_s, :require => false, :groups => [:test]
-else
-  gem 'facter', :require => false, :groups => [:test]
-end
-
-ENV['PUPPET_VERSION'].nil? ? puppetversion = '~> 6.0' : puppetversion = ENV['PUPPET_VERSION'].to_s
+puppetversion = ENV['PUPPET_GEM_VERSION'] || '>= 6.0'
 gem 'puppet', puppetversion, :require => false, :groups => [:test]
 
 # vim: syntax=ruby
diff --git a/README.md b/README.md
index 8e7e040..d21fc82 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,13 @@
 # Collectd module for Puppet
 
-[![Build Status](https://travis-ci.org/voxpupuli/puppet-collectd.png?branch=master)](https://travis-ci.org/voxpupuli/puppet-collectd)
-[![Code Coverage](https://coveralls.io/repos/github/voxpupuli/puppet-collectd/badge.svg?branch=master)](https://coveralls.io/github/voxpupuli/puppet-collectd)
+[![Build Status](https://github.com/voxpupuli/puppet-collectd/workflows/CI/badge.svg)](https://github.com/voxpupuli/puppet-collectd/actions?query=workflow%3ACI)
+[![Release](https://github.com/voxpupuli/puppet-collectd/actions/workflows/release.yml/badge.svg)](https://github.com/voxpupuli/puppet-collectd/actions/workflows/release.yml)
 [![Puppet Forge](https://img.shields.io/puppetforge/v/puppet/collectd.svg)](https://forge.puppetlabs.com/puppet/collectd)
 [![Puppet Forge - downloads](https://img.shields.io/puppetforge/dt/puppet/collectd.svg)](https://forge.puppetlabs.com/puppet/collectd)
 [![Puppet Forge - endorsement](https://img.shields.io/puppetforge/e/puppet/collectd.svg)](https://forge.puppetlabs.com/puppet/collectd)
 [![Puppet Forge - scores](https://img.shields.io/puppetforge/f/puppet/collectd.svg)](https://forge.puppetlabs.com/puppet/collectd)
+[![puppetmodule.info docs](http://www.puppetmodule.info/images/badge.png)](http://www.puppetmodule.info/m/puppet-collectd)
+[![Apache-2.0 License](https://img.shields.io/github/license/voxpupuli/puppet-collectd.svg)](LICENSE)
 
 ## Description
 
@@ -120,6 +122,8 @@ documentation for each plugin for configurable attributes.
 * `df`  (see [collectd::plugin::df](#class-collectdplugindf) below)
 * `disk` (see [collectd::plugin::disk](#class-collectdplugindisk) below)
 * `dns` (see [collectd::plugin::dns](#class-collectdplugindns) below)
+* `dcpmm` (see [collectd::plugin::dcpmm](#class-collectdplugindcpmm) below)
+* `dpdk_telemetry` (see [collectd::plugin::dpdk_telemetry](#class-collectdplugindpdk_telemetry) below)
 * `entropy`  (see [collectd::plugin::entropy](#class-collectdpluginentropy) below)
 * `exec`  (see [collectd::plugin::exec](#class-collectdpluginexec) below)
 * `ethstat`  (see [collectd::plugin::ethstat](#class-collectdpluginethstat) below)
@@ -145,6 +149,7 @@ documentation for each plugin for configurable attributes.
 * `logfile` (see [collectd::plugin::logfile](#class-collectdpluginlogfile) below)
 * `virt` (see [collectd::plugin::virt](#class-collectdpluginvirt) below)
 * `lvm` (see [collectd::plugin::lvm](#class-collectdpluginlvm) below)
+* `mcelog` (see [collectd::plugin::mcelog](#class-collectdpluginmcelog) below)
 * `memcached`(see [collectd::plugin::memcached](#class-collectdpluginmemcached)
   below )
 * `memory`(see [collectd::plugin::memory](#class-collectdpluginmemory) below )
@@ -159,6 +164,7 @@ documentation for each plugin for configurable attributes.
 * `nut` (see [collectd::plugin::nut](#class-collectdpluginnut) below)
 * `openldap` (see [collectd::plugin::openldap](#class-collectdpluginopenldap) below)
 * `openvpn` (see [collectd::plugin::openvpn](#class-collectdpluginopenvpn) below)
+* `pcie_errors` (see [collectd::plugin::pcie_errors](#class-collectdpluginpcie_errors) below)
 * `perl` (see [collectd::plugin::perl](#class-collectdpluginperl) below)
 * `ping` (see [collectd::plugin::ping](#class-collectdpluginping) below)
 * `postgresql` (see [collectd::plugin::postgresql](#class-collectdpluginpostgresql)
@@ -175,6 +181,7 @@ documentation for each plugin for configurable attributes.
 * `sensors` (see [collectd::plugin::sensors](#class-collectdpluginsensors) below)
 * `smart` (see [collectd::plugin::smart](#class-collectdpluginsmart) below)
 * `snmp` (see [collectd::plugin::snmp](#class-collectdpluginsnmp) below)
+* `snmp_agent` (see [collectd::plugin::snmp_agent](#class-collectdpluginsnmpagent) below)
 * `statsd` (see [collectd::plugin::statsd](#class-collectdpluginstatsd) below)
 * `swap` (see [collectd::plugin::swap](#class-collectdpluginswap) below)
 * `syslog` (see [collectd::plugin::syslog](#class-collectdpluginsyslog) below)
@@ -581,6 +588,26 @@ Boolean for SelectNumericQueryTypes configuration option.
 
 - *Default*: true
 
+#### Class: `collectd::plugin::dpdk_telemetry`
+
+```puppet
+class { 'collectd::plugin::dpdk_telemetry':
+  client_socket_path => '/var/run/.client',
+  dpdk_socket_path   => '/var/run/dpdk/rte/telemetry',
+}
+```
+
+#### Class: `collectd::plugin::dcpmm`
+
+```puppet
+class { 'collectd::plugin::dcpmm':
+  interval             => 10.0,
+  collect_health       => false,
+  collect_perf_metrics => true,
+  enable_dispatch_all  => false,
+}
+```
+
 #### Class: `collectd::plugin::entropy`
 
 ```puppet
@@ -894,6 +921,16 @@ class { 'collectd::plugin::intel_pmu':
 }
 ```
 
+#### Class: `collectd::plugin::mcelog`
+
+```puppet
+class { 'collectd::plugin::mcelog':
+  mceloglogfile           => '/var/log/mcelog'
+  memory                  => true
+  mcelogclientsocket      => '/var/run/mcelog-client'
+  persistentnotification  => true
+}
+```
 #### Class: `collectd::plugin::intel_rdt`
 ```puppet
 class { 'collectd::plugin::intel_rdt':
@@ -1234,6 +1271,17 @@ class { 'collectd::plugin::openvpn':
 }
 ```
 
+#### Class: `collectd::plugin::pcie_errors`
+
+```puppet
+class { 'collectd::plugin::pcie_errors':
+  source                   => undef,
+  access_dir               => undef,
+  report_masked            => false,
+  persistent_notifications => false,
+}
+```
+
 #### Class: `collectd::plugin::perl`
 
 This class has no parameters and will load the actual perl plugin.
@@ -1453,8 +1501,8 @@ class { 'collectd::plugin::protocols':
 
 #### Class: `collectd::plugin::python`
 The plugin uses a fact `python_dir` to find the python load path for modules.
-python must be installed as a pre-requisite for the this fact to give a
-non-default value.
+python or python3 must be installed as a pre-requisite for the this
+fact to give a non-default value.
 
 * `modulepaths` is an array of paths where will be Collectd looking for Python
   modules, Puppet will ensure that each of specified directories exists and it
@@ -1576,6 +1624,8 @@ You will need to add this to [collectd::config::typesdb](https://github.com/voxp
 via hiera or in a manifest. Failure to set the types.db.custom content will
 result in *no* metrics from the rabbitmq plugin.
 
+The rabbitmq plugin has not been ported to python3 and will fail on CentOS 8 [#75](https://github.com/nytimes/collectd-rabbitmq/issues/75)
+
 set typesdb to include the collectd-rabbitmq types.db.custom
 
 ```yaml
@@ -1691,7 +1741,39 @@ class { 'collectd::plugin::snmp':
   },
 }
 ```
+#### Class: `collectd::plugin::snmp_agent`
 
+```puppet
+class {'collectd::plugin::snmp_agent':
+  table => {
+    ifTable => {
+      'indexoid' => 'IF-MIB::ifIndex',
+      'sizeoid' => 'IF-MIB::ifNumber',
+      data => [{
+        ifDescr => {
+          'plugin' => 'interface',
+          'oids' => 'IF-MIB::ifDescr'
+        },
+        'ifDescr2' => {
+          'plugin' => 'interface2',
+          'oids' => 'IF-MIB::ifDescr2'
+        }
+      }]
+    }
+  },
+  data => {
+    memAvailReal => {
+      'plugin' => 'memory',
+      'type' => 'memory',
+      'oids' => '1.3.6.1.4.1.2021.4.6.0',
+      'typeinstance' => 'free',
+      'indexkey' => {
+      'source' => 'PluginInstance'
+      }
+    }
+  }
+}
+```
 #### Class: `collectd::plugin::statsd`
 
 ```puppet
@@ -1965,6 +2047,12 @@ class { 'collectd::plugin::write_kafka':
   kafka_port => 9092,
   topics     => {
     'mytopic'      => { 'format' => 'JSON' },
+  },
+  properties => {
+    'myproperty'   => { 'myvalue' },
+  },
+  meta       => {
+    'mymeta'       => { 'myvalue' },
   }
 }
 ```
diff --git a/REFERENCE.md b/REFERENCE.md
new file mode 100644
index 0000000..fe3ef6c
--- /dev/null
+++ b/REFERENCE.md
@@ -0,0 +1,10498 @@
+# Reference
+
+<!-- DO NOT EDIT: This document was generated by Puppet Strings -->
+
+## Table of Contents
+
+### Classes
+
+#### Public Classes
+
+* [`collectd`](#collectd): installs and configures collectd
+* [`collectd::config`](#collectdconfig): private
+* [`collectd::params`](#collectdparams)
+* [`collectd::plugin::aggregation`](#collectdpluginaggregation): collectd::plugin::aggregation
+* [`collectd::plugin::amqp`](#collectdpluginamqp): https://collectd.org/wiki/index.php/Plugin:AMQP
+* [`collectd::plugin::amqp1`](#collectdpluginamqp1): == Class: collectd::plugin::amqp1  Class to manage amqp1 write plugin for collectd  Documentation:   https://collectd.org/documentation/manpa
+* [`collectd::plugin::apache`](#collectdpluginapache): https://collectd.org/wiki/index.php/Plugin:Apache
+* [`collectd::plugin::battery`](#collectdpluginbattery): == Class: collectd::plugin::battery  Class to manage battery write plugin for collectd  Documentation:   https://collectd.org/documentation/m
+* [`collectd::plugin::bind`](#collectdpluginbind): https://collectd.org/wiki/index.php/Plugin:BIND
+* [`collectd::plugin::ceph`](#collectdpluginceph): == Class: collectd::plugin::ceph  Class to manage ceph plugin for collectd === Parameters [*ensure*]   ensure param for collectd::plugin type
+* [`collectd::plugin::cgroups`](#collectdplugincgroups): https://collectd.org/wiki/index.php/Plugin:cgroups
+* [`collectd::plugin::chain`](#collectdpluginchain)
+* [`collectd::plugin::connectivity`](#collectdpluginconnectivity): == Class: collectd::plugin::connectivity  Class to manage connectivity plugin for collectd  Documentation:   https://collectd.org/documentati
+* [`collectd::plugin::conntrack`](#collectdpluginconntrack): https://collectd.org/wiki/index.php/Plugin:ConnTrack
+* [`collectd::plugin::contextswitch`](#collectdplugincontextswitch): https://collectd.org/wiki/index.php/Plugin:ContextSwitch
+* [`collectd::plugin::cpu`](#collectdplugincpu): https://collectd.org/wiki/index.php/Plugin:CPU
+* [`collectd::plugin::cpufreq`](#collectdplugincpufreq): https://collectd.org/wiki/index.php/Plugin:CPUFreq
+* [`collectd::plugin::csv`](#collectdplugincsv): https://collectd.org/wiki/index.php/Plugin:CSV
+* [`collectd::plugin::cuda`](#collectdplugincuda): Class: collectd::plugin::cuda
+* [`collectd::plugin::curl`](#collectdplugincurl)
+* [`collectd::plugin::dbi`](#collectdplugindbi): https://collectd.org/wiki/index.php/Plugin:DBI
+* [`collectd::plugin::dcpmm`](#collectdplugindcpmm): Class to manage dcpmm plugin for collectd.  The dcpmm plugin will collect Intel(R) Optane(TM) DC Persistent Memory related performance statis
+* [`collectd::plugin::df`](#collectdplugindf): https://collectd.org/wiki/index.php/Plugin:DF
+* [`collectd::plugin::disk`](#collectdplugindisk): https://collectd.org/wiki/index.php/Plugin:Disk
+* [`collectd::plugin::dns`](#collectdplugindns): Class: collectd::plugin::dns
+* [`collectd::plugin::dpdk_telemetry`](#collectdplugindpdk_telemetry): Class to manage dpdk_telemetry plugin for collectd.  The dpdk_telemetry plugin collects DPDK ethernet device metrics via dpdk_telemetry libra
+* [`collectd::plugin::entropy`](#collectdpluginentropy): https://collectd.org/wiki/index.php/Plugin:Entropy
+* [`collectd::plugin::ethstat`](#collectdpluginethstat): https://collectd.org/wiki/index.php/Plugin:Ethstat
+* [`collectd::plugin::exec`](#collectdpluginexec): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_exec
+* [`collectd::plugin::fhcount`](#collectdpluginfhcount): https://collectd.org/wiki/index.php/Plugin:Fhcount
+* [`collectd::plugin::filecount`](#collectdpluginfilecount): https://collectd.org/wiki/index.php/Plugin:FileCount
+* [`collectd::plugin::filter`](#collectdpluginfilter): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::fscache`](#collectdpluginfscache): https://collectd.org/wiki/index.php/Plugin:FSCache
+* [`collectd::plugin::genericjmx`](#collectdplugingenericjmx): https://collectd.org/wiki/index.php/Plugin:GenericJMX
+* [`collectd::plugin::hddtemp`](#collectdpluginhddtemp): https://collectd.org/wiki/index.php/Plugin:HDDTemp
+* [`collectd::plugin::hugepages`](#collectdpluginhugepages): == Class: collectd::plugin::hugepages  Class to manage hugepages write plugin for collectd  Documentation:   https://collectd.org/documentati
+* [`collectd::plugin::intel_pmu`](#collectdpluginintel_pmu): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_intel_pmu
+* [`collectd::plugin::intel_rdt`](#collectdpluginintel_rdt): == Class: collectd::plugin::intel_rdt  Class to manage intel_rdt write plugin for collectd  Documentation:   https://collectd.org/documentati
+* [`collectd::plugin::interface`](#collectdplugininterface): https://collectd.org/wiki/index.php/Plugin:Interface
+* [`collectd::plugin::ipc`](#collectdpluginipc): == Class: collectd::plugin::ipc  Class to manage ipc write plugin for collectd  Documentation:   https://collectd.org/documentation/manpages/
+* [`collectd::plugin::ipmi`](#collectdpluginipmi): https://collectd.org/wiki/index.php/Plugin:IPMI
+* [`collectd::plugin::iptables`](#collectdpluginiptables): https://collectd.org/wiki/index.php/Plugin:IPTables
+* [`collectd::plugin::irq`](#collectdpluginirq): https://collectd.org/wiki/index.php/Plugin:IRQ
+* [`collectd::plugin::iscdhcp`](#collectdpluginiscdhcp): Class: collectd::plugin::iscdhcp
+* [`collectd::plugin::java`](#collectdpluginjava): https://collectd.org/wiki/index.php/Plugin:Java
+* [`collectd::plugin::load`](#collectdpluginload): https://collectd.org/wiki/index.php/Plugin:Load
+* [`collectd::plugin::logfile`](#collectdpluginlogfile): https://collectd.org/wiki/index.php/Plugin:LogFile
+* [`collectd::plugin::logparser`](#collectdpluginlogparser): https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+* [`collectd::plugin::lvm`](#collectdpluginlvm): https://collectd.org/wiki/index.php/Plugin:LVM
+* [`collectd::plugin::mcelog`](#collectdpluginmcelog): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+* [`collectd::plugin::memcached`](#collectdpluginmemcached): https://collectd.org/wiki/index.php/Plugin:memcached
+* [`collectd::plugin::memory`](#collectdpluginmemory): https://collectd.org/wiki/index.php/Plugin:Memory
+* [`collectd::plugin::mongodb`](#collectdpluginmongodb): Class: collectd::plugin::mongodb
+* [`collectd::plugin::mysql`](#collectdpluginmysql): MySQL plugin https://collectd.org/wiki/index.php/Plugin:MySQL
+* [`collectd::plugin::netlink`](#collectdpluginnetlink): https://collectd.org/wiki/index.php/Plugin:Netlink
+* [`collectd::plugin::network`](#collectdpluginnetwork): https://collectd.org/wiki/index.php/Plugin:Network
+* [`collectd::plugin::nfs`](#collectdpluginnfs): https://collectd.org/wiki/index.php/Plugin:NFS
+* [`collectd::plugin::nginx`](#collectdpluginnginx): https://collectd.org/wiki/index.php/Plugin:nginx
+* [`collectd::plugin::ntpd`](#collectdpluginntpd): https://collectd.org/wiki/index.php/Plugin:NTPd
+* [`collectd::plugin::numa`](#collectdpluginnuma): == Class: collectd::plugin::numa  Class to manage numa write plugin for collectd  Documentation:   https://collectd.org/documentation/manpage
+* [`collectd::plugin::nut`](#collectdpluginnut): https://collectd.org/wiki/index.php/Plugin:Nut
+* [`collectd::plugin::openldap`](#collectdpluginopenldap): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_openldap
+* [`collectd::plugin::openvpn`](#collectdpluginopenvpn): https://collectd.org/wiki/index.php/Plugin:OpenVPN
+* [`collectd::plugin::oracle`](#collectdpluginoracle): Oracle plugin https://collectd.org/wiki/index.php/Plugin:Oracle
+* [`collectd::plugin::ovs_events`](#collectdpluginovs_events): == Class: collectd::plugin::ovs_events  Class to manage ovs_events plugin for collectd  Documentation:   https://collectd.org/documentation/m
+* [`collectd::plugin::ovs_stats`](#collectdpluginovs_stats): == Class: collectd::plugin::ovs_stats  Class to manage ovs_stats plugin for collectd  Documentation:   https://collectd.org/documentation/man
+* [`collectd::plugin::pcie_errors`](#collectdpluginpcie_errors): Class to manage pcie_errors plugin for collectd
+* [`collectd::plugin::perl`](#collectdpluginperl): See http://collectd.org/documentation/manpages/collectd-perl.5.shtml
+* [`collectd::plugin::ping`](#collectdpluginping): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_ping
+* [`collectd::plugin::postgresql`](#collectdpluginpostgresql): https://collectd.org/wiki/index.php/Plugin:PostgreSQL
+* [`collectd::plugin::powerdns`](#collectdpluginpowerdns): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_powerdns
+* [`collectd::plugin::processes`](#collectdpluginprocesses): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_processes
+* [`collectd::plugin::procevent`](#collectdpluginprocevent): == Class: collectd::plugin::procevent  Class to manage procevent plugin for collectd  Documentation:   https://collectd.org/documentation/man
+* [`collectd::plugin::protocols`](#collectdpluginprotocols): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_protocols
+* [`collectd::plugin::python`](#collectdpluginpython): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_python
+* [`collectd::plugin::rabbitmq`](#collectdpluginrabbitmq): rabbitmq plugin https://pypi.python.org/pypi/collectd-rabbitmq  == Class collectd::plugin::rabbitmq   Configures rabbitmq metrics collection.
+* [`collectd::plugin::redis`](#collectdpluginredis): https://collectd.org/wiki/index.php/Plugin:Redis
+* [`collectd::plugin::rrdcached`](#collectdpluginrrdcached): https://collectd.org/wiki/index.php/Rrdcached
+* [`collectd::plugin::rrdtool`](#collectdpluginrrdtool): https://collectd.org/wiki/index.php/Plugin:RRDtool
+* [`collectd::plugin::sensors`](#collectdpluginsensors): https://collectd.org/wiki/index.php/Plugin:Sensors
+* [`collectd::plugin::smart`](#collectdpluginsmart): https://collectd.org/wiki/index.php/Plugin:SMART
+* [`collectd::plugin::snmp`](#collectdpluginsnmp): https://collectd.org/wiki/index.php/Plugin:SNMP
+* [`collectd::plugin::snmp_agent`](#collectdpluginsnmp_agent): Class: collectd::plugin::snmp_agent
+* [`collectd::plugin::statsd`](#collectdpluginstatsd): https://collectd.org/wiki/index.php/Plugin:StatsD
+* [`collectd::plugin::swap`](#collectdpluginswap): https://collectd.org/wiki/index.php/Plugin:Swap
+* [`collectd::plugin::sysevent`](#collectdpluginsysevent): == Class: collectd::plugin::sysevent  Class to manage sysevent plugin for collectd  Documentation:   https://collectd.org/documentation/manpa
+* [`collectd::plugin::syslog`](#collectdpluginsyslog): https://collectd.org/wiki/index.php/Plugin:SysLog
+* [`collectd::plugin::table`](#collectdplugintable): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::tail`](#collectdplugintail): Tail plugin https://collectd.org/wiki/index.php/Plugin:Tail
+* [`collectd::plugin::tail_csv`](#collectdplugintail_csv): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+* [`collectd::plugin::target_v5upgrade`](#collectdplugintarget_v5upgrade): https://collectd.org/wiki/index.php/Target:v5_upgrade
+* [`collectd::plugin::tcpconns`](#collectdplugintcpconns): https://collectd.org/wiki/index.php/Plugin:TCPConns
+* [`collectd::plugin::thermal`](#collectdpluginthermal): https://collectd.org/wiki/index.php/Plugin:thermal
+* [`collectd::plugin::threshold`](#collectdpluginthreshold): http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_threshold
+* [`collectd::plugin::turbostat`](#collectdpluginturbostat): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_turbostat
+* [`collectd::plugin::unixsock`](#collectdpluginunixsock): https://collectd.org/wiki/index.php/Plugin:UnixSock
+* [`collectd::plugin::uptime`](#collectdpluginuptime): https://collectd.org/wiki/index.php/Plugin:Uptime
+* [`collectd::plugin::users`](#collectdpluginusers): https://collectd.org/wiki/index.php/Plugin:Users
+* [`collectd::plugin::uuid`](#collectdpluginuuid): https://collectd.org/wiki/index.php/Plugin:UUID
+* [`collectd::plugin::varnish`](#collectdpluginvarnish): https://collectd.org/wiki/index.php/Plugin:Varnish
+* [`collectd::plugin::virt`](#collectdpluginvirt): https://collectd.org/wiki/index.php/Plugin:virt
+* [`collectd::plugin::vmem`](#collectdpluginvmem): https://collectd.org/wiki/index.php/Plugin:vmem
+* [`collectd::plugin::write_graphite`](#collectdpluginwrite_graphite): https://collectd.org/wiki/index.php/Graphite
+* [`collectd::plugin::write_http`](#collectdpluginwrite_http): Enable write_http plugin
+* [`collectd::plugin::write_kafka`](#collectdpluginwrite_kafka)
+* [`collectd::plugin::write_log`](#collectdpluginwrite_log)
+* [`collectd::plugin::write_network`](#collectdpluginwrite_network): A define to make a generic network output for collectd
+* [`collectd::plugin::write_prometheus`](#collectdpluginwrite_prometheus)
+* [`collectd::plugin::write_riemann`](#collectdpluginwrite_riemann): https://collectd.org/wiki/index.php/Plugin:Write_Riemann
+* [`collectd::plugin::write_sensu`](#collectdpluginwrite_sensu): https://collectd.org/wiki/index.php/Plugin:Write_Sensu
+* [`collectd::plugin::write_tsdb`](#collectdpluginwrite_tsdb): https://collectd.org/wiki/index.php/Plugin:Write_TSDB
+* [`collectd::plugin::zfs_arc`](#collectdpluginzfs_arc): https://collectd.org/wiki/index.php/Plugin:ZFS_ARC
+* [`collectd::plugin::zookeeper`](#collectdpluginzookeeper)
+* [`collectd::repo`](#collectdrepo): collectd::repo Handle package repo configuration
+* [`collectd::repo::debian`](#collectdrepodebian)
+* [`collectd::repo::redhat`](#collectdreporedhat)
+* [`collectd::service`](#collectdservice)
+
+#### Private Classes
+
+* `collectd::install`: installs collectd
+
+### Defined types
+
+* [`collectd::plugin`](#collectdplugin)
+* [`collectd::plugin::aggregation::aggregator`](#collectdpluginaggregationaggregator)
+* [`collectd::plugin::apache::instance`](#collectdpluginapacheinstance): https://collectd.org/wiki/index.php/Plugin:Apache
+* [`collectd::plugin::curl::page`](#collectdplugincurlpage)
+* [`collectd::plugin::curl_json`](#collectdplugincurl_json): See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_curl_json
+* [`collectd::plugin::dbi::database`](#collectdplugindbidatabase): database allows you to create <Database> blocks with the same name of database,
+* [`collectd::plugin::dbi::query`](#collectdplugindbiquery)
+* [`collectd::plugin::exec::cmd`](#collectdpluginexeccmd)
+* [`collectd::plugin::filecount::directory`](#collectdpluginfilecountdirectory): https://collectd.org/wiki/index.php/Plugin:FileCount
+* [`collectd::plugin::filter::chain`](#collectdpluginfilterchain): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::filter::match`](#collectdpluginfiltermatch): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::filter::rule`](#collectdpluginfilterrule): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::filter::target`](#collectdpluginfiltertarget): https://collectd.org/wiki/index.php/Chains
+* [`collectd::plugin::genericjmx::connection`](#collectdplugingenericjmxconnection): https://collectd.org/wiki/index.php/Plugin:GenericJMX
+* [`collectd::plugin::genericjmx::mbean`](#collectdplugingenericjmxmbean): https://collectd.org/wiki/index.php/Plugin:GenericJMX
+* [`collectd::plugin::mysql::database`](#collectdpluginmysqldatabase)
+* [`collectd::plugin::network::listener`](#collectdpluginnetworklistener)
+* [`collectd::plugin::network::server`](#collectdpluginnetworkserver)
+* [`collectd::plugin::nut::ups`](#collectdpluginnutups)
+* [`collectd::plugin::oracle::database`](#collectdpluginoracledatabase): https://collectd.org/wiki/index.php/Plugin:Oracle
+* [`collectd::plugin::oracle::query`](#collectdpluginoraclequery): https://collectd.org/wiki/index.php/Plugin:Oracle
+* [`collectd::plugin::perl::plugin`](#collectdpluginperlplugin)
+* [`collectd::plugin::postgresql::database`](#collectdpluginpostgresqldatabase): databasename allows you to create <Database> blocks with the same name of database, useful if you have multiple instances of different versio
+* [`collectd::plugin::postgresql::query`](#collectdpluginpostgresqlquery)
+* [`collectd::plugin::postgresql::writer`](#collectdpluginpostgresqlwriter)
+* [`collectd::plugin::powerdns::recursor`](#collectdpluginpowerdnsrecursor)
+* [`collectd::plugin::powerdns::server`](#collectdpluginpowerdnsserver)
+* [`collectd::plugin::processes::process`](#collectdpluginprocessesprocess)
+* [`collectd::plugin::processes::processmatch`](#collectdpluginprocessesprocessmatch)
+* [`collectd::plugin::python::module`](#collectdpluginpythonmodule): Single module definition
+* [`collectd::plugin::snmp::data`](#collectdpluginsnmpdata): https://collectd.org/wiki/index.php/Plugin:SNMP
+* [`collectd::plugin::snmp::host`](#collectdpluginsnmphost): https://collectd.org/wiki/index.php/Plugin:SNMP
+* [`collectd::plugin::tail::file`](#collectdplugintailfile)
+* [`collectd::plugin::write_graphite::carbon`](#collectdpluginwrite_graphitecarbon): a single graphite backend
+* [`collectd::type`](#collectdtype)
+* [`collectd::typesdb`](#collectdtypesdb): This define initialize a collectd typesdb file
+
+### Functions
+
+* [`collectd::indent`](#collectdindent)
+* [`collectd_convert_processes`](#collectd_convert_processes): Converts the array from the old style to define process or processmatch in the processes plugin into a create_resources compatible hash which
+
+### Data types
+
+* [`Collectd::Amqp::Format`](#collectdamqpformat): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_amqp
+* [`Collectd::Bind::View`](#collectdbindview): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_bind
+* [`Collectd::Filter::Builtintarget`](#collectdfilterbuiltintarget): https://collectd.org/wiki/index.php/Chains#Built-in_targets
+* [`Collectd::Filter::Match`](#collectdfiltermatch): https://collectd.org/wiki/index.php/Table_of_Matches
+* [`Collectd::Filter::Plugintarget`](#collectdfilterplugintarget): https://collectd.org/wiki/index.php/Table_of_Targets
+* [`Collectd::Filter::Target`](#collectdfiltertarget): https://collectd.org/wiki/index.php/Chains
+* [`Collectd::LOGPARSER::Logfile`](#collectdlogparserlogfile): https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+* [`Collectd::LOGPARSER::Match`](#collectdlogparsermatch): https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+* [`Collectd::LOGPARSER::Message`](#collectdlogparsermessage): https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+* [`Collectd::MCELOG::Memory`](#collectdmcelogmemory): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+* [`Collectd::Manifests::Init`](#collectdmanifestsinit)
+* [`Collectd::Network::SecurityLevel`](#collectdnetworksecuritylevel)
+* [`Collectd::Redis::Node`](#collectdredisnode)
+* [`Collectd::SNMP::AuthProtocol`](#collectdsnmpauthprotocol)
+* [`Collectd::SNMP::Data`](#collectdsnmpdata)
+* [`Collectd::SNMP::Host`](#collectdsnmphost)
+* [`Collectd::SNMP::Host::V2`](#collectdsnmphostv2)
+* [`Collectd::SNMP::Host::V3`](#collectdsnmphostv3)
+* [`Collectd::SNMP::PrivacyProtocol`](#collectdsnmpprivacyprotocol)
+* [`Collectd::SNMP::SecurityLevel`](#collectdsnmpsecuritylevel)
+* [`Collectd::SNMP::Version`](#collectdsnmpversion)
+* [`Collectd::SNMP::Version::V2`](#collectdsnmpversionv2)
+* [`Collectd::SNMP::Version::V3`](#collectdsnmpversionv3)
+* [`Collectd::SNMP_AGENT::Data`](#collectdsnmp_agentdata): https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+* [`Collectd::SNMP_AGENT::IndexKey`](#collectdsnmp_agentindexkey): https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+* [`Collectd::SNMP_AGENT::Table`](#collectdsnmp_agenttable): https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+* [`Collectd::Table::Result`](#collectdtableresult): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_table
+* [`Collectd::Table::Table`](#collectdtabletable): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_table
+* [`Collectd::Tail_Csv::File`](#collectdtail_csvfile): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+* [`Collectd::Tail_Csv::Metric`](#collectdtail_csvmetric): https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+* [`Collectd::Threshold::Host`](#collectdthresholdhost)
+* [`Collectd::Threshold::Plugin`](#collectdthresholdplugin)
+* [`Collectd::Threshold::Type`](#collectdthresholdtype)
+* [`Collectd::Write_riemann::Node`](#collectdwrite_riemannnode)
+
+### Tasks
+
+* [`getval`](#getval): Get a particular metric for a host
+* [`listval`](#listval): Lists all available collectd metrics
+
+## Classes
+
+### <a name="collectd"></a>`collectd`
+
+installs and configures collectd
+
+#### Examples
+
+##### Install collectd utilities
+
+```puppet
+class{'collectd':
+  utils => true,
+}
+```
+
+#### Parameters
+
+The following parameters are available in the `collectd` class:
+
+* [`utils`](#utils)
+* [`autoloadplugin`](#autoloadplugin)
+* [`collectd_hostname`](#collectd_hostname)
+* [`conf_content`](#conf_content)
+* [`config_file`](#config_file)
+* [`fqdnlookup`](#fqdnlookup)
+* [`has_wordexp`](#has_wordexp)
+* [`include`](#include)
+* [`interval`](#interval)
+* [`internal_stats`](#internal_stats)
+* [`manage_package`](#manage_package)
+* [`manage_repo`](#manage_repo)
+* [`ci_package_repo`](#ci_package_repo)
+* [`manage_service`](#manage_service)
+* [`minimum_version`](#minimum_version)
+* [`package_ensure`](#package_ensure)
+* [`package_install_options`](#package_install_options)
+* [`package_keyserver`](#package_keyserver)
+* [`package_name`](#package_name)
+* [`package_provider`](#package_provider)
+* [`plugin_conf_dir`](#plugin_conf_dir)
+* [`plugin_conf_dir_mode`](#plugin_conf_dir_mode)
+* [`purge`](#purge)
+* [`purge_config`](#purge_config)
+* [`read_threads`](#read_threads)
+* [`recurse`](#recurse)
+* [`config_group`](#config_group)
+* [`config_mode`](#config_mode)
+* [`config_owner`](#config_owner)
+* [`service_enable`](#service_enable)
+* [`service_ensure`](#service_ensure)
+* [`service_name`](#service_name)
+* [`timeout`](#timeout)
+* [`typesdb`](#typesdb)
+* [`write_queue_limit_high`](#write_queue_limit_high)
+* [`write_queue_limit_low`](#write_queue_limit_low)
+* [`write_threads`](#write_threads)
+
+##### <a name="utils"></a>`utils`
+
+Data type: `Boolean`
+
+Install collectd utilities package containing collectdctl, collectd-nagios
+
+Default value: `$collectd::params::utils`
+
+##### <a name="autoloadplugin"></a>`autoloadplugin`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::autoloadplugin`
+
+##### <a name="collectd_hostname"></a>`collectd_hostname`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::collectd_hostname`
+
+##### <a name="conf_content"></a>`conf_content`
+
+Data type: `Optional[String]`
+
+
+
+Default value: `$collectd::params::conf_content`
+
+##### <a name="config_file"></a>`config_file`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::config_file`
+
+##### <a name="fqdnlookup"></a>`fqdnlookup`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::fqdnlookup`
+
+##### <a name="has_wordexp"></a>`has_wordexp`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::has_wordexp`
+
+##### <a name="include"></a>`include`
+
+Data type: `Array`
+
+
+
+Default value: `$collectd::params::include`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Integer[1]`
+
+
+
+Default value: `$collectd::params::interval`
+
+##### <a name="internal_stats"></a>`internal_stats`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::internal_stats`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::manage_package`
+
+##### <a name="manage_repo"></a>`manage_repo`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::manage_repo`
+
+##### <a name="ci_package_repo"></a>`ci_package_repo`
+
+Data type: `Optional[Collectd::Manifests::Init]`
+
+
+
+Default value: `$collectd::params::ci_package_repo`
+
+##### <a name="manage_service"></a>`manage_service`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::manage_service`
+
+##### <a name="minimum_version"></a>`minimum_version`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::minimum_version`
+
+##### <a name="package_ensure"></a>`package_ensure`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::package_ensure`
+
+##### <a name="package_install_options"></a>`package_install_options`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: `$collectd::params::package_install_options`
+
+##### <a name="package_keyserver"></a>`package_keyserver`
+
+Data type: `Stdlib::Fqdn`
+
+
+
+Default value: `$collectd::params::package_keyserver`
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `Variant[String[1],Array[String[1]]]`
+
+
+
+Default value: `$collectd::params::package_name`
+
+##### <a name="package_provider"></a>`package_provider`
+
+Data type: `Optional[String]`
+
+
+
+Default value: `$collectd::params::package_provider`
+
+##### <a name="plugin_conf_dir"></a>`plugin_conf_dir`
+
+Data type: `Stdlib::Absolutepath`
+
+
+
+Default value: `$collectd::params::plugin_conf_dir`
+
+##### <a name="plugin_conf_dir_mode"></a>`plugin_conf_dir_mode`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::plugin_conf_dir_mode`
+
+##### <a name="purge"></a>`purge`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::purge`
+
+##### <a name="purge_config"></a>`purge_config`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::purge_config`
+
+##### <a name="read_threads"></a>`read_threads`
+
+Data type: `Integer[1]`
+
+
+
+Default value: `$collectd::params::read_threads`
+
+##### <a name="recurse"></a>`recurse`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::recurse`
+
+##### <a name="config_group"></a>`config_group`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::config_group`
+
+##### <a name="config_mode"></a>`config_mode`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::config_mode`
+
+##### <a name="config_owner"></a>`config_owner`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::config_owner`
+
+##### <a name="service_enable"></a>`service_enable`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::params::service_enable`
+
+##### <a name="service_ensure"></a>`service_ensure`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::service_ensure`
+
+##### <a name="service_name"></a>`service_name`
+
+Data type: `String`
+
+
+
+Default value: `$collectd::params::service_name`
+
+##### <a name="timeout"></a>`timeout`
+
+Data type: `Integer[1]`
+
+
+
+Default value: `$collectd::params::timeout`
+
+##### <a name="typesdb"></a>`typesdb`
+
+Data type: `Array`
+
+
+
+Default value: `$collectd::params::typesdb`
+
+##### <a name="write_queue_limit_high"></a>`write_queue_limit_high`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: `$collectd::params::write_queue_limit_high`
+
+##### <a name="write_queue_limit_low"></a>`write_queue_limit_low`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: `$collectd::params::write_queue_limit_low`
+
+##### <a name="write_threads"></a>`write_threads`
+
+Data type: `Integer[1]`
+
+
+
+Default value: `$collectd::params::write_threads`
+
+### <a name="collectdconfig"></a>`collectd::config`
+
+private
+
+### <a name="collectdparams"></a>`collectd::params`
+
+The collectd::params class.
+
+### <a name="collectdpluginaggregation"></a>`collectd::plugin::aggregation`
+
+collectd::plugin::aggregation
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::aggregation` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`aggregators`](#aggregators)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="aggregators"></a>`aggregators`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginamqp"></a>`collectd::plugin::amqp`
+
+https://collectd.org/wiki/index.php/Plugin:AMQP
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::amqp` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`amqphost`](#amqphost)
+* [`amqpport`](#amqpport)
+* [`amqpvhost`](#amqpvhost)
+* [`amqpuser`](#amqpuser)
+* [`amqppass`](#amqppass)
+* [`amqpformat`](#amqpformat)
+* [`amqpstorerates`](#amqpstorerates)
+* [`amqpexchange`](#amqpexchange)
+* [`amqppersistent`](#amqppersistent)
+* [`amqproutingkey`](#amqproutingkey)
+* [`graphiteprefix`](#graphiteprefix)
+* [`escapecharacter`](#escapecharacter)
+* [`interval`](#interval)
+* [`graphiteseparateinstances`](#graphiteseparateinstances)
+* [`graphitealwaysappendds`](#graphitealwaysappendds)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="amqphost"></a>`amqphost`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="amqpport"></a>`amqpport`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `5672`
+
+##### <a name="amqpvhost"></a>`amqpvhost`
+
+Data type: `String`
+
+
+
+Default value: `'graphite'`
+
+##### <a name="amqpuser"></a>`amqpuser`
+
+Data type: `String`
+
+
+
+Default value: `'graphite'`
+
+##### <a name="amqppass"></a>`amqppass`
+
+Data type: `String`
+
+
+
+Default value: `'graphite'`
+
+##### <a name="amqpformat"></a>`amqpformat`
+
+Data type: `Collectd::Amqp::Format`
+
+
+
+Default value: `'Graphite'`
+
+##### <a name="amqpstorerates"></a>`amqpstorerates`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="amqpexchange"></a>`amqpexchange`
+
+Data type: `String`
+
+
+
+Default value: `'metrics'`
+
+##### <a name="amqppersistent"></a>`amqppersistent`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="amqproutingkey"></a>`amqproutingkey`
+
+Data type: `String`
+
+
+
+Default value: `'collectd'`
+
+##### <a name="graphiteprefix"></a>`graphiteprefix`
+
+Data type: `String`
+
+
+
+Default value: `'collectd.'`
+
+##### <a name="escapecharacter"></a>`escapecharacter`
+
+Data type: `String[1]`
+
+
+
+Default value: `'_'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="graphiteseparateinstances"></a>`graphiteseparateinstances`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="graphitealwaysappendds"></a>`graphitealwaysappendds`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginamqp1"></a>`collectd::plugin::amqp1`
+
+== Class: collectd::plugin::amqp1
+
+Class to manage amqp1 write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_amqp1
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*manage_package*]
+ Set to true if Puppet should manage plugin package installation.
+ Defaults to $collectd::manage_package
+
+[*transport*]
+ Name of the transport.
+ Default to 'metrics'
+
+[*host*]
+ Hostname or IP address of the AMQP 1.0 intermediary.
+ Defaults to the 'localhost'
+
+[*port*]
+ Service name or port number on which the AMQP 1.0 intermediary accepts
+ connections. This argument must be a string, even if the numeric form
+ is used.
+ Defaults to 5672
+
+[*user*]
+ User part of credentials used to authenticate to the AMQP 1.0 intermediary.
+ Defaults to 'guest'
+
+[*password*]
+ Password part of credentials used to authenticate to the AMQP 1.0
+ intermediary.
+ Defaults to 'guest'
+
+[*address*]
+ This option specifies the prefix for the send-to value in the message.
+ Defaults to 'collectd'
+
+[*retry_delay*]
+ When the AMQP1 connection is lost, defines the time in seconds to wait
+ before attempting to reconnect.
+ Defaults to 1
+
+[*send_queue_limit*]
+ Limits the SentQueue to a defined value, helps to keep memory usage low
+ when the write target does not respond.
+
+[*interval*]
+ Interval setting for the plugin
+ Defaults to undef
+
+[*instances*]
+ Hash of Hashes representing Instance blocks in plugin configuration file.
+ Key of outter hash represents instance name. The 'address' value concatenated
+ with the 'name' given will be used as the send-to address for communications
+ over the messaging link. Only following keys on inner hashes are taken into
+ account:
+  - format (string):
+     'Command'|'JSON'|'Graphite'; defines format in which messages are sent
+     to the intermediary
+  - presettle (bool):
+     If set to false (the default), the plugin will wait for a message
+     acknowledgement from the messaging bus before sending the next message.
+     Otherwise the plugin will not wait for a message acknowledgement.
+  - notify (bool):
+     If set to false (the default), the plugin will service the instance
+     write call back as a value list. If set to true the plugin will service
+     the instance as a write notification callback for alert formatting.
+  - store_rates (bool):
+     Determines whether or not COUNTER, DERIVE and ABSOLUTE data sources are
+     converted to a rate (GAUGE value). If set to false (the default),
+     no conversion is performed. Otherwise the conversion is performed using
+     the internal value cache. Please note that currently this option is only
+     used if the 'format' option has been set to 'JSON'.
+  - graphite_prefix (string):
+     A prefix can be added in the metric name when outputting in the
+    'Graphite' format. It's added before the host name.
+  - graphite_postfix (string):
+     A postfix can be added in the metric name when outputting in the
+     'Graphite' format. It's added after the host name.
+  - graphite_escape_char (string):
+     Specify a character to replace dots in the host part of the metric name.
+     In 'Graphite' metric name, dots are used as separators between different
+     metric parts (host, plugin, type). Default is '_'.
+  - graphite_separate_instances (bool):
+     If set to true, the plugin instance and type instance will be
+     in their own path component, for example 'host.cpu.0.cpu.idle'. If set
+     to false (the default), the plugin and plugin instance (and likewise
+     the type and type instance) are put into one component, for example
+     'host.cpu-0.cpu-idle'.
+  - graphite_always_append_ds (bool):
+     If set to true, append the name of the data Source> (DS) to the 'metric'
+     identifier. If set to false (the default), this is only done when there
+     is more than one DS.
+  - graphite_preserve_separator (bool):
+     If set to false (the default) the dot character is replaced with
+     GraphiteEscapeChar. Otherwise, if set to true, the dot character is
+     preserved, i.e. passed through.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::amqp1` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`transport`](#transport)
+* [`host`](#host)
+* [`port`](#port)
+* [`user`](#user)
+* [`password`](#password)
+* [`address`](#address)
+* [`instances`](#instances)
+* [`retry_delay`](#retry_delay)
+* [`send_queue_limit`](#send_queue_limit)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="transport"></a>`transport`
+
+Data type: `String`
+
+
+
+Default value: `'metrics'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `5672`
+
+##### <a name="user"></a>`user`
+
+Data type: `String`
+
+
+
+Default value: `'guest'`
+
+##### <a name="password"></a>`password`
+
+Data type: `String`
+
+
+
+Default value: `'guest'`
+
+##### <a name="address"></a>`address`
+
+Data type: `String`
+
+
+
+Default value: `'collectd'`
+
+##### <a name="instances"></a>`instances`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="retry_delay"></a>`retry_delay`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="send_queue_limit"></a>`send_queue_limit`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginapache"></a>`collectd::plugin::apache`
+
+https://collectd.org/wiki/index.php/Plugin:Apache
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::apache` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`instances`](#instances)
+* [`interval`](#interval)
+* [`package_install_options`](#package_install_options)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="instances"></a>`instances`
+
+Data type: `Hash`
+
+
+
+Default value: `{ 'localhost' => { 'url' => 'http://localhost/mod_status?auto' } }`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_install_options"></a>`package_install_options`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: `$collectd::package_install_options`
+
+### <a name="collectdpluginbattery"></a>`collectd::plugin::battery`
+
+== Class: collectd::plugin::battery
+
+Class to manage battery write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_battery
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*interval*]
+ Interval setting for the plugin
+ Defaults to undef
+
+[*values_percentage*]
+ When enabled, remaining capacity is reported as a percentage instead of raw
+ data (most likely in "Wh")
+ Defaults to false
+
+[*report_degraded*]
+ When set to true, the battery plugin will report three values: charged
+ (remaining capacity), discharged (difference between "last full capacity"
+ and "remaining capacity") and degraded (difference between "design capacity"
+ and "last full capacity"). Otherwise only the remaining capacity is
+ reported.
+ Defaults to false
+
+[*query_state_fs*]
+ When set to true, the battery plugin will only read statistics related to
+ battery performance as exposed by StateFS at /run/state.
+ Defaults to false
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::battery` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`values_percentage`](#values_percentage)
+* [`report_degraded`](#report_degraded)
+* [`query_state_fs`](#query_state_fs)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="values_percentage"></a>`values_percentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="report_degraded"></a>`report_degraded`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="query_state_fs"></a>`query_state_fs`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginbind"></a>`collectd::plugin::bind`
+
+https://collectd.org/wiki/index.php/Plugin:BIND
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::bind` class:
+
+* [`url`](#url)
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`memorystats`](#memorystats)
+* [`opcodes`](#opcodes)
+* [`parsetime`](#parsetime)
+* [`qtypes`](#qtypes)
+* [`resolverstats`](#resolverstats)
+* [`serverstats`](#serverstats)
+* [`zonemaintstats`](#zonemaintstats)
+* [`views`](#views)
+* [`interval`](#interval)
+
+##### <a name="url"></a>`url`
+
+Data type: `Stdlib::Httpurl`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="memorystats"></a>`memorystats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="opcodes"></a>`opcodes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="parsetime"></a>`parsetime`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="qtypes"></a>`qtypes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="resolverstats"></a>`resolverstats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="serverstats"></a>`serverstats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="zonemaintstats"></a>`zonemaintstats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="views"></a>`views`
+
+Data type: `Array[Collectd::Bind::View]`
+
+
+
+Default value: `[]`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginceph"></a>`collectd::plugin::ceph`
+
+== Class: collectd::plugin::ceph
+
+Class to manage ceph plugin for collectd
+=== Parameters
+[*ensure*]
+  ensure param for collectd::plugin type
+
+[*daemons*]
+  array of ceph daemons to create config for (replace clustername, hostname as appropriate)
+  example: [ '[clustername]-osd.1', '[clustername]-osd.2', '[clustername]-osd.3', '[clustername]-mon.[hostname].asok' ]
+
+
+[*longrunavglatency*] If enabled, latency values(sum,count pairs) are
+  calculated as the long run average - average since the ceph daemon was
+  started = (sum / count). i When disabled, latency values are calculated as
+  the average since the last collection = (sum_now - sum_last) / (count_now -
+  count_last).
+
+[*convertspecialmetrictypes*}
+  If enabled, special metrics (metrics that differ in type from similar
+  counters) are converted to the type of those similar counters.  This
+  currently only applies to filestore.journal_wr_bytes which is a counter for
+  OSD daemons. The ceph schema reports this metric type as a sum,count pair i
+  while similar counters are treated as derive types. When converted, the sum
+  is used as the counter value and is treated as a derive type. When
+  disabled, all metrics are treated as the types received from the ceph
+  schema.
+
+[*manage_package*]
+  If enabled, manages separate package for plugin
+
+[*package_name*]
+  to be used with manage_package; if manage_package is true, this gives the name
+  of the package to manage. Defaults to 'collectd-ceph'
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ceph` class:
+
+* [`daemons`](#daemons)
+* [`ensure`](#ensure)
+* [`longrunavglatency`](#longrunavglatency)
+* [`convertspecialmetrictypes`](#convertspecialmetrictypes)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+
+##### <a name="daemons"></a>`daemons`
+
+Data type: `Array`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="longrunavglatency"></a>`longrunavglatency`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="convertspecialmetrictypes"></a>`convertspecialmetrictypes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `String`
+
+
+
+Default value: `'collectd-ceph'`
+
+### <a name="collectdplugincgroups"></a>`collectd::plugin::cgroups`
+
+https://collectd.org/wiki/index.php/Plugin:cgroups
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::cgroups` class:
+
+* [`cgroups`](#cgroups)
+* [`ensure`](#ensure)
+* [`ignore_selected`](#ignore_selected)
+* [`interval`](#interval)
+
+##### <a name="cgroups"></a>`cgroups`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignore_selected"></a>`ignore_selected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginchain"></a>`collectd::plugin::chain`
+
+The collectd::plugin::chain class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::chain` class:
+
+* [`chainname`](#chainname)
+* [`ensure`](#ensure)
+* [`defaulttarget`](#defaulttarget)
+* [`rules`](#rules)
+
+##### <a name="chainname"></a>`chainname`
+
+Data type: `String`
+
+
+
+Default value: `'Main'`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="defaulttarget"></a>`defaulttarget`
+
+Data type: `Collectd::Filter::Target`
+
+
+
+Default value: `'write'`
+
+##### <a name="rules"></a>`rules`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginconnectivity"></a>`collectd::plugin::connectivity`
+
+== Class: collectd::plugin::connectivity
+
+Class to manage connectivity plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_connectivity
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*manage_package*]
+ Set to true if Puppet should manage plugin package installation.
+ Defaults to $collectd::manage_package
+
+[*interfaces*]
+ Array of interface(s) to monitor connect to. Empty arrayf means all interfaces
+ Defaults to []
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::connectivity` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interfaces`](#interfaces)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="interfaces"></a>`interfaces`
+
+Data type: `Array[String[1]]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginconntrack"></a>`collectd::plugin::conntrack`
+
+https://collectd.org/wiki/index.php/Plugin:ConnTrack
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::conntrack` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdplugincontextswitch"></a>`collectd::plugin::contextswitch`
+
+https://collectd.org/wiki/index.php/Plugin:ContextSwitch
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::contextswitch` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugincpu"></a>`collectd::plugin::cpu`
+
+https://collectd.org/wiki/index.php/Plugin:CPU
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::cpu` class:
+
+* [`ensure`](#ensure)
+* [`reportbystate`](#reportbystate)
+* [`reportbycpu`](#reportbycpu)
+* [`valuespercentage`](#valuespercentage)
+* [`reportnumcpu`](#reportnumcpu)
+* [`reportgueststate`](#reportgueststate)
+* [`subtractgueststate`](#subtractgueststate)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="reportbystate"></a>`reportbystate`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="reportbycpu"></a>`reportbycpu`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuespercentage"></a>`valuespercentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportnumcpu"></a>`reportnumcpu`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportgueststate"></a>`reportgueststate`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="subtractgueststate"></a>`subtractgueststate`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugincpufreq"></a>`collectd::plugin::cpufreq`
+
+https://collectd.org/wiki/index.php/Plugin:CPUFreq
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::cpufreq` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdplugincsv"></a>`collectd::plugin::csv`
+
+https://collectd.org/wiki/index.php/Plugin:CSV
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::csv` class:
+
+* [`ensure`](#ensure)
+* [`datadir`](#datadir)
+* [`interval`](#interval)
+* [`storerates`](#storerates)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="datadir"></a>`datadir`
+
+Data type: `Any`
+
+
+
+Default value: `'/etc/collectd/var/lib/collectd/csv'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="storerates"></a>`storerates`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+### <a name="collectdplugincuda"></a>`collectd::plugin::cuda`
+
+Class: collectd::plugin::cuda
+
+* **See also**
+  * https://pypi.python.org/pypi/collectd-cuda
+    * Configures cuda metrics collection. Optionally installs the plugin
+Note, it is up to you to support package installation and sources
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::cuda` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`package_provider`](#package_provider)
+* [`provider_proxy`](#provider_proxy)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+Optional[String] Passed to package and collectd::plugin resources (both). Default: present
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+Optional[Boolean] Toggles installation of plugin. Default: undef
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `String[1]`
+
+Optional[String] Name of plugin package to install. Default: collectd-cuda
+
+Default value: `'collectd-cuda'`
+
+##### <a name="package_provider"></a>`package_provider`
+
+Data type: `Optional[String[1]]`
+
+Optional[String] Passed to package resource. Default: pip
+
+Default value: ``undef``
+
+##### <a name="provider_proxy"></a>`provider_proxy`
+
+Data type: `Optional[String[1]]`
+
+Optional[String] Proxy for provider. Default: undef
+
+Default value: ``undef``
+
+### <a name="collectdplugincurl"></a>`collectd::plugin::curl`
+
+The collectd::plugin::curl class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::curl` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+* [`pages`](#pages)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="pages"></a>`pages`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+### <a name="collectdplugindbi"></a>`collectd::plugin::dbi`
+
+https://collectd.org/wiki/index.php/Plugin:DBI
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dbi` class:
+
+* [`ensure`](#ensure)
+* [`databases`](#databases)
+* [`queries`](#queries)
+* [`packages`](#packages)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="databases"></a>`databases`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="queries"></a>`queries`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="packages"></a>`packages`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugindcpmm"></a>`collectd::plugin::dcpmm`
+
+Class to manage dcpmm plugin for collectd.
+
+The dcpmm plugin will collect Intel(R) Optane(TM) DC Persistent Memory related performance statistics.
+Plugin requires root privileges to perform the statistics collection.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dcpmm` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`collect_health`](#collect_health)
+* [`collect_perf_metrics`](#collect_perf_metrics)
+* [`enable_dispatch_all`](#enable_dispatch_all)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+Ensure param for collectd::plugin type.
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Float`
+
+Sets interval (in seconds) in which the values will be collected.
+
+Default value: `10.0`
+
+##### <a name="collect_health"></a>`collect_health`
+
+Data type: `Boolean`
+
+Collects health information. collect_health and collect_perf_metrics cannot be true at the same time.
+
+Default value: ``false``
+
+##### <a name="collect_perf_metrics"></a>`collect_perf_metrics`
+
+Data type: `Boolean`
+
+Collects memory performance metrics. collect_health and collect_perf_metrics cannot be true at the same time.
+
+Default value: ``true``
+
+##### <a name="enable_dispatch_all"></a>`enable_dispatch_all`
+
+Data type: `Boolean`
+
+This parameter helps to seamlessly enable simultaneous health and memory perf metrics collection in future. Unused at the moment and must always be false.
+
+Default value: ``false``
+
+### <a name="collectdplugindf"></a>`collectd::plugin::df`
+
+https://collectd.org/wiki/index.php/Plugin:DF
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::df` class:
+
+* [`ensure`](#ensure)
+* [`devices`](#devices)
+* [`fstypes`](#fstypes)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+* [`mountpoints`](#mountpoints)
+* [`reportbydevice`](#reportbydevice)
+* [`reportinodes`](#reportinodes)
+* [`reportreserved`](#reportreserved)
+* [`valuesabsolute`](#valuesabsolute)
+* [`valuespercentage`](#valuespercentage)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="devices"></a>`devices`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="fstypes"></a>`fstypes`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="mountpoints"></a>`mountpoints`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="reportbydevice"></a>`reportbydevice`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportinodes"></a>`reportinodes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="reportreserved"></a>`reportreserved`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuesabsolute"></a>`valuesabsolute`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuespercentage"></a>`valuespercentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdplugindisk"></a>`collectd::plugin::disk`
+
+https://collectd.org/wiki/index.php/Plugin:Disk
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::disk` class:
+
+* [`disks`](#disks)
+* [`ensure`](#ensure)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`udevnameattr`](#udevnameattr)
+* [`package_install_options`](#package_install_options)
+
+##### <a name="disks"></a>`disks`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd-disk'`
+
+##### <a name="udevnameattr"></a>`udevnameattr`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_install_options"></a>`package_install_options`
+
+Data type: `Optional[Array[String]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugindns"></a>`collectd::plugin::dns`
+
+Class: collectd::plugin::dns
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dns` class:
+
+* [`ensure`](#ensure)
+* [`ignoresource`](#ignoresource)
+* [`interface`](#interface)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`selectnumericquerytypes`](#selectnumericquerytypes)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present','absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignoresource"></a>`ignoresource`
+
+Data type: `Optional[Stdlib::IP::Address]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interface"></a>`interface`
+
+Data type: `String`
+
+
+
+Default value: `'any'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd-dns'`
+
+##### <a name="selectnumericquerytypes"></a>`selectnumericquerytypes`
+
+Data type: `Variant[String,Boolean]`
+
+
+
+Default value: ``true``
+
+### <a name="collectdplugindpdk_telemetry"></a>`collectd::plugin::dpdk_telemetry`
+
+Class to manage dpdk_telemetry plugin for collectd.
+
+The dpdk_telemetry plugin collects DPDK ethernet device metrics via
+dpdk_telemetry library.
+
+Plugin retrieves metrics from a DPDK packet forwarding application
+by sending the JSON formatted message via a UNIX domain socket.
+DPDK telemetry component will respond with a JSON formatted reply
+delivering the requested metrics. Plugin parses the JSON data
+and publishes the metric values to collectd for further use.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dpdk_telemetry` class:
+
+* [`ensure`](#ensure)
+* [`client_socket_path`](#client_socket_path)
+* [`dpdk_socket_path`](#dpdk_socket_path)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+Ensure param for collectd::plugin type.
+
+Default value: `'present'`
+
+##### <a name="client_socket_path"></a>`client_socket_path`
+
+Data type: `Stdlib::Absolutepath`
+
+UNIX domain client socket to receive messages from DPDK telemetry library.
+
+Default value: `'/var/run/.client'`
+
+##### <a name="dpdk_socket_path"></a>`dpdk_socket_path`
+
+Data type: `Stdlib::Absolutepath`
+
+UNIX domain DPDK telemetry socket to be connected to send messages.
+
+Default value: `'/var/run/dpdk/rte/telemetry'`
+
+### <a name="collectdpluginentropy"></a>`collectd::plugin::entropy`
+
+https://collectd.org/wiki/index.php/Plugin:Entropy
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::entropy` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginethstat"></a>`collectd::plugin::ethstat`
+
+https://collectd.org/wiki/index.php/Plugin:Ethstat
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ethstat` class:
+
+* [`ensure`](#ensure)
+* [`interfaces`](#interfaces)
+* [`maps`](#maps)
+* [`mappedonly`](#mappedonly)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interfaces"></a>`interfaces`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="maps"></a>`maps`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="mappedonly"></a>`mappedonly`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginexec"></a>`collectd::plugin::exec`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_exec
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::exec` class:
+
+* [`commands`](#commands)
+* [`commands_defaults`](#commands_defaults)
+* [`interval`](#interval)
+* [`ensure`](#ensure)
+* [`globals`](#globals)
+
+##### <a name="commands"></a>`commands`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="commands_defaults"></a>`commands_defaults`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="globals"></a>`globals`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginfhcount"></a>`collectd::plugin::fhcount`
+
+https://collectd.org/wiki/index.php/Plugin:Fhcount
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::fhcount` class:
+
+* [`ensure`](#ensure)
+* [`valuesabsolute`](#valuesabsolute)
+* [`valuespercentage`](#valuespercentage)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="valuesabsolute"></a>`valuesabsolute`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuespercentage"></a>`valuespercentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginfilecount"></a>`collectd::plugin::filecount`
+
+https://collectd.org/wiki/index.php/Plugin:FileCount
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filecount` class:
+
+* [`ensure`](#ensure)
+* [`directories`](#directories)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="directories"></a>`directories`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginfilter"></a>`collectd::plugin::filter`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filter` class:
+
+* [`ensure`](#ensure)
+* [`precachechain`](#precachechain)
+* [`postcachechain`](#postcachechain)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="precachechain"></a>`precachechain`
+
+Data type: `Any`
+
+
+
+Default value: `'PreChain'`
+
+##### <a name="postcachechain"></a>`postcachechain`
+
+Data type: `Any`
+
+
+
+Default value: `'PostChain'`
+
+### <a name="collectdpluginfscache"></a>`collectd::plugin::fscache`
+
+https://collectd.org/wiki/index.php/Plugin:FSCache
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::fscache` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdplugingenericjmx"></a>`collectd::plugin::genericjmx`
+
+https://collectd.org/wiki/index.php/Plugin:GenericJMX
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::genericjmx` class:
+
+* [`ensure`](#ensure)
+* [`jvmarg`](#jvmarg)
+* [`manage_package`](#manage_package)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="jvmarg"></a>`jvmarg`
+
+Data type: `Any`
+
+
+
+Default value: `[]`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginhddtemp"></a>`collectd::plugin::hddtemp`
+
+https://collectd.org/wiki/index.php/Plugin:HDDTemp
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::hddtemp` class:
+
+* [`host`](#host)
+* [`port`](#port)
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="host"></a>`host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'127.0.0.1'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `7634`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginhugepages"></a>`collectd::plugin::hugepages`
+
+== Class: collectd::plugin::hugepages
+
+Class to manage hugepages write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_hugepages
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*interval*]
+ Interval setting for the plugin
+ Defaults to undef
+
+[*report_per_node_hp*]
+ If enabled, information will be collected from the hugepage counters in
+ "/sys/devices/system/node/*/hugepages". This is used to check the per-node
+ hugepage statistics on a NUMA system.
+ Defaults to true
+
+[*report_root_hp*]
+ If enabled, information will be collected from the hugepage counters in
+ "/sys/kernel/mm/hugepages". This can be used on both NUMA and non-NUMA
+ systems to check the overall hugepage statistics.
+ Defaults to true
+
+[*values_pages*]
+ Whether to report hugepages metrics in number of pages
+ Defaults to true
+
+[*values_bytes*]
+ Whether to report hugepages metrics in bytes
+ Defaults to false
+
+[*values_percentage*]
+ Whether to report hugepages metrics in percentage
+ Defaults to false
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::hugepages` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`report_per_node_hp`](#report_per_node_hp)
+* [`report_root_hp`](#report_root_hp)
+* [`values_pages`](#values_pages)
+* [`values_bytes`](#values_bytes)
+* [`values_percentage`](#values_percentage)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="report_per_node_hp"></a>`report_per_node_hp`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="report_root_hp"></a>`report_root_hp`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="values_pages"></a>`values_pages`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="values_bytes"></a>`values_bytes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="values_percentage"></a>`values_percentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginintel_pmu"></a>`collectd::plugin::intel_pmu`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_intel_pmu
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::intel_pmu` class:
+
+* [`ensure`](#ensure)
+* [`report_hardware_cache_events`](#report_hardware_cache_events)
+* [`report_kernel_pmu_events`](#report_kernel_pmu_events)
+* [`report_software_events`](#report_software_events)
+* [`event_list`](#event_list)
+* [`hardware_events`](#hardware_events)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="report_hardware_cache_events"></a>`report_hardware_cache_events`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="report_kernel_pmu_events"></a>`report_kernel_pmu_events`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="report_software_events"></a>`report_software_events`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="event_list"></a>`event_list`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="hardware_events"></a>`hardware_events`
+
+Data type: `Optional[Array[String]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginintel_rdt"></a>`collectd::plugin::intel_rdt`
+
+== Class: collectd::plugin::intel_rdt
+
+Class to manage intel_rdt write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_intel_rdt
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*interval*]
+ Interval setting for the plugin
+ Defaults to undef
+
+[*cores*]
+ All events are reported on a per core basis. Monitoring of the events can be
+ configured for group of cores (aggregated statistics). This field defines
+ groups of cores on which to monitor supported events. The field is
+ represented as list of strings with core group values. Each string
+ represents a list of cores in a group. Allowed formats are: 0,1,2,3
+ 0-10,20-18 1,3,5-8,10,0x10-12
+ If an empty string is provided as value for this field default cores
+ configuration is applied - a separate group is created for each core.
+ Defaults to ""
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::intel_rdt` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`cores`](#cores)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cores"></a>`cores`
+
+Data type: `Array[String[1]]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdplugininterface"></a>`collectd::plugin::interface`
+
+https://collectd.org/wiki/index.php/Plugin:Interface
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::interface` class:
+
+* [`ensure`](#ensure)
+* [`interfaces`](#interfaces)
+* [`ignoreselected`](#ignoreselected)
+* [`reportinactive`](#reportinactive)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interfaces"></a>`interfaces`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportinactive"></a>`reportinactive`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginipc"></a>`collectd::plugin::ipc`
+
+== Class: collectd::plugin::ipc
+
+Class to manage ipc write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_ipc
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ipc` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginipmi"></a>`collectd::plugin::ipmi`
+
+https://collectd.org/wiki/index.php/Plugin:IPMI
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ipmi` class:
+
+* [`ensure`](#ensure)
+* [`ensure_package`](#ensure_package)
+* [`ignore_selected`](#ignore_selected)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`notify_sensor_add`](#notify_sensor_add)
+* [`notify_sensor_remove`](#notify_sensor_remove)
+* [`notify_sensor_not_present`](#notify_sensor_not_present)
+* [`sensors`](#sensors)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ensure_package"></a>`ensure_package`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignore_selected"></a>`ignore_selected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="notify_sensor_add"></a>`notify_sensor_add`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="notify_sensor_remove"></a>`notify_sensor_remove`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="notify_sensor_not_present"></a>`notify_sensor_not_present`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="sensors"></a>`sensors`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginiptables"></a>`collectd::plugin::iptables`
+
+https://collectd.org/wiki/index.php/Plugin:IPTables
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::iptables` class:
+
+* [`ensure`](#ensure)
+* [`ensure_package`](#ensure_package)
+* [`manage_package`](#manage_package)
+* [`chains`](#chains)
+* [`chains6`](#chains6)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ensure_package"></a>`ensure_package`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="chains"></a>`chains`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="chains6"></a>`chains6`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginirq"></a>`collectd::plugin::irq`
+
+https://collectd.org/wiki/index.php/Plugin:IRQ
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::irq` class:
+
+* [`ensure`](#ensure)
+* [`irqs`](#irqs)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="irqs"></a>`irqs`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginiscdhcp"></a>`collectd::plugin::iscdhcp`
+
+Class: collectd::plugin::iscdhcp
+
+* **See also**
+  * https://pypi.python.org/pypi/collectd-iscdhcp
+    * Configures iscdhcp metrics collection. Optionally installs the required plugin packages
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::iscdhcp` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`package_provider`](#package_provider)
+* [`provider_proxy`](#provider_proxy)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+Optional[String] Passed to package and collectd::plugin resources (both). Default: present
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+Optional[Boolean] Toggles installation of plugin. Default: undef
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `String[1]`
+
+Optional[String] Name of plugin package to install. Default: collectd-iscdhcp
+
+Default value: `'collectd-iscdhcp'`
+
+##### <a name="package_provider"></a>`package_provider`
+
+Data type: `Optional[String[1]]`
+
+Optional[String] Passed to package resource. Default: pip
+
+Default value: ``undef``
+
+##### <a name="provider_proxy"></a>`provider_proxy`
+
+Data type: `Optional[String[1]]`
+
+Optional[String] Proxy for provider. Default: undef
+
+Default value: ``undef``
+
+### <a name="collectdpluginjava"></a>`collectd::plugin::java`
+
+https://collectd.org/wiki/index.php/Plugin:Java
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::java` class:
+
+* [`ensure`](#ensure)
+* [`jvmarg`](#jvmarg)
+* [`loadplugin`](#loadplugin)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`java_home`](#java_home)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="jvmarg"></a>`jvmarg`
+
+Data type: `Any`
+
+
+
+Default value: `[]`
+
+##### <a name="loadplugin"></a>`loadplugin`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="java_home"></a>`java_home`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginload"></a>`collectd::plugin::load`
+
+https://collectd.org/wiki/index.php/Plugin:Load
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::load` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`report_relative`](#report_relative)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="report_relative"></a>`report_relative`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginlogfile"></a>`collectd::plugin::logfile`
+
+https://collectd.org/wiki/index.php/Plugin:LogFile
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::logfile` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`log_level`](#log_level)
+* [`log_file`](#log_file)
+* [`log_timestamp`](#log_timestamp)
+* [`print_severity`](#print_severity)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="log_level"></a>`log_level`
+
+Data type: `Any`
+
+
+
+Default value: `'info'`
+
+##### <a name="log_file"></a>`log_file`
+
+Data type: `Any`
+
+
+
+Default value: `'/var/log/collectd.log'`
+
+##### <a name="log_timestamp"></a>`log_timestamp`
+
+Data type: `Any`
+
+
+
+Default value: ``true``
+
+##### <a name="print_severity"></a>`print_severity`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginlogparser"></a>`collectd::plugin::logparser`
+
+https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::logparser` class:
+
+* [`ensure`](#ensure)
+* [`logfile`](#logfile)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="logfile"></a>`logfile`
+
+Data type: `Array[Hash[String[1],Collectd::LOGPARSER::Logfile]]`
+
+
+
+Default value: `[{
+      '/var/log/syslog' => {
+        'firstfullread' => false,
+        'message' => [
+          'pcie_errors' => {
+            'defaulttype' => 'pcie_error',
+            'defaultseverity' => 'warning',
+            'match' => [{
+                'aer error' => {
+                  'regex' => 'AER:.*error received',
+                  'submatchidx' => -1,
+                },
+                'incident time' => {
+                  'regex' => '(... .. ..:..:..) .* pcieport.*AER',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'root port' => {
+                  'regex' => 'pcieport (.*): AER:',
+                  'submatchidx' => 1,
+                  'ismandatory' => true,
+                },
+                'device' => {
+                  'plugininstance' => true,
+                  'regex' => ' ([0-9a-fA-F:\\.]*): PCIe Bus Error',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'severity_mandatory' => {
+                  'regex' => 'severity=',
+                  'submatchidx' => -1,
+                },
+                'nonfatal' => {
+                  'regex' => 'severity=.*\\([nN]on-[fF]atal',
+                  'typeinstance' => 'non_fatal',
+                  'ismandatory' => false,
+                },
+                'fatal' => {
+                  'regex' => 'severity=.*\\([fF]atal',
+                  'severity' => 'failure',
+                  'typeinstance' => 'fatal',
+                  'ismandatory' => false,
+                },
+                'corrected' => {
+                  'regex' => 'severity=Corrected',
+                  'typeinstance' => 'correctable',
+                  'ismandatory' => false,
+                },
+                'error type' => {
+                  'regex' => 'type=(.*),',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'id' => {
+                  'regex' => ', id=(.*)',
+                  'submatchidx' => 1,
+                },
+            }],
+          },
+        ],
+      }
+  }]`
+
+### <a name="collectdpluginlvm"></a>`collectd::plugin::lvm`
+
+https://collectd.org/wiki/index.php/Plugin:LVM
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::lvm` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginmcelog"></a>`collectd::plugin::mcelog`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::mcelog` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`package_install_options`](#package_install_options)
+* [`mceloglogfile`](#mceloglogfile)
+* [`memory`](#memory)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_install_options"></a>`package_install_options`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: `$collectd::package_install_options`
+
+##### <a name="mceloglogfile"></a>`mceloglogfile`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="memory"></a>`memory`
+
+Data type: `Collectd::MCELOG::Memory`
+
+
+
+Default value: `{
+    'mcelogclientsocket' => '/var/run/mcelog-client',
+    'persistentnotification' => false,
+  }`
+
+### <a name="collectdpluginmemcached"></a>`collectd::plugin::memcached`
+
+https://collectd.org/wiki/index.php/Plugin:memcached
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::memcached` class:
+
+* [`ensure`](#ensure)
+* [`instances`](#instances)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="instances"></a>`instances`
+
+Data type: `Hash`
+
+
+
+Default value: `{
+    'default' => {
+      'host'    => 'localhost',
+      'address' => '127.0.0.1',
+      'port'    => 11211,
+    },
+  }`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginmemory"></a>`collectd::plugin::memory`
+
+https://collectd.org/wiki/index.php/Plugin:Memory
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::memory` class:
+
+* [`ensure`](#ensure)
+* [`valuesabsolute`](#valuesabsolute)
+* [`valuespercentage`](#valuespercentage)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="valuesabsolute"></a>`valuesabsolute`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuespercentage"></a>`valuespercentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginmongodb"></a>`collectd::plugin::mongodb`
+
+Class: collectd::plugin::mongodb
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::mongodb` class:
+
+* [`db_user`](#db_user)
+* [`db_pass`](#db_pass)
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`db_host`](#db_host)
+* [`db_port`](#db_port)
+* [`configured_dbs`](#configured_dbs)
+* [`collectd_dir`](#collectd_dir)
+
+##### <a name="db_user"></a>`db_user`
+
+Data type: `String`
+
+
+
+##### <a name="db_pass"></a>`db_pass`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['absent','present']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Variant[String,Float]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="db_host"></a>`db_host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'127.0.0.1'`
+
+##### <a name="db_port"></a>`db_port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="configured_dbs"></a>`configured_dbs`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collectd_dir"></a>`collectd_dir`
+
+Data type: `Any`
+
+
+
+Default value: `'/usr/lib/collectd'`
+
+### <a name="collectdpluginmysql"></a>`collectd::plugin::mysql`
+
+MySQL plugin
+https://collectd.org/wiki/index.php/Plugin:MySQL
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::mysql` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnetlink"></a>`collectd::plugin::netlink`
+
+https://collectd.org/wiki/index.php/Plugin:Netlink
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::netlink` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interfaces`](#interfaces)
+* [`verboseinterfaces`](#verboseinterfaces)
+* [`qdiscs`](#qdiscs)
+* [`classes`](#classes)
+* [`filters`](#filters)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interfaces"></a>`interfaces`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="verboseinterfaces"></a>`verboseinterfaces`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="qdiscs"></a>`qdiscs`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="classes"></a>`classes`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="filters"></a>`filters`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnetwork"></a>`collectd::plugin::network`
+
+https://collectd.org/wiki/index.php/Plugin:Network
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::network` class:
+
+* [`ensure`](#ensure)
+* [`timetolive`](#timetolive)
+* [`maxpacketsize`](#maxpacketsize)
+* [`forward`](#forward)
+* [`interval`](#interval)
+* [`reportstats`](#reportstats)
+* [`listeners`](#listeners)
+* [`servers`](#servers)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="timetolive"></a>`timetolive`
+
+Data type: `Optional[Pattern[/[0-9]+/]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="maxpacketsize"></a>`maxpacketsize`
+
+Data type: `Optional[Pattern[/[0-9]+/]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="forward"></a>`forward`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="reportstats"></a>`reportstats`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="listeners"></a>`listeners`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="servers"></a>`servers`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginnfs"></a>`collectd::plugin::nfs`
+
+https://collectd.org/wiki/index.php/Plugin:NFS
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::nfs` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnginx"></a>`collectd::plugin::nginx`
+
+https://collectd.org/wiki/index.php/Plugin:nginx
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::nginx` class:
+
+* [`url`](#url)
+* [`manage_package`](#manage_package)
+* [`ensure`](#ensure)
+* [`user`](#user)
+* [`password`](#password)
+* [`verifypeer`](#verifypeer)
+* [`verifyhost`](#verifyhost)
+* [`cacert`](#cacert)
+* [`interval`](#interval)
+
+##### <a name="url"></a>`url`
+
+Data type: `Any`
+
+
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="user"></a>`user`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifypeer"></a>`verifypeer`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifyhost"></a>`verifyhost`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="cacert"></a>`cacert`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginntpd"></a>`collectd::plugin::ntpd`
+
+https://collectd.org/wiki/index.php/Plugin:NTPd
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ntpd` class:
+
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`port`](#port)
+* [`reverselookups`](#reverselookups)
+* [`includeunitid`](#includeunitid)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `123`
+
+##### <a name="reverselookups"></a>`reverselookups`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="includeunitid"></a>`includeunitid`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnuma"></a>`collectd::plugin::numa`
+
+== Class: collectd::plugin::numa
+
+Class to manage numa write plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_numa
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::numa` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginnut"></a>`collectd::plugin::nut`
+
+https://collectd.org/wiki/index.php/Plugin:Nut
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::nut` class:
+
+* [`ensure`](#ensure)
+* [`upss`](#upss)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="upss"></a>`upss`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginopenldap"></a>`collectd::plugin::openldap`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_openldap
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::openldap` class:
+
+* [`ensure`](#ensure)
+* [`instances`](#instances)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="instances"></a>`instances`
+
+Data type: `Hash`
+
+
+
+Default value: `{ 'localhost' => { 'url' => 'ldap://localhost/' } }`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginopenvpn"></a>`collectd::plugin::openvpn`
+
+https://collectd.org/wiki/index.php/Plugin:OpenVPN
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::openvpn` class:
+
+* [`ensure`](#ensure)
+* [`statusfile`](#statusfile)
+* [`improvednamingschema`](#improvednamingschema)
+* [`collectcompression`](#collectcompression)
+* [`collectindividualusers`](#collectindividualusers)
+* [`collectusercount`](#collectusercount)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="statusfile"></a>`statusfile`
+
+Data type: `Variant[Array[Stdlib::Absolutepath], Stdlib::Absolutepath]`
+
+
+
+Default value: `'/etc/openvpn/openvpn-status.log'`
+
+##### <a name="improvednamingschema"></a>`improvednamingschema`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="collectcompression"></a>`collectcompression`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="collectindividualusers"></a>`collectindividualusers`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="collectusercount"></a>`collectusercount`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginoracle"></a>`collectd::plugin::oracle`
+
+Oracle plugin
+https://collectd.org/wiki/index.php/Plugin:Oracle
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::oracle` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginovs_events"></a>`collectd::plugin::ovs_events`
+
+== Class: collectd::plugin::ovs_events
+
+Class to manage ovs_events plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_ovs_events
+
+=== Parameters
+
+[* address *]
+ The address of the OVS DB server JSON-RPC interface used by the plugin.
+
+[*dispatch*]
+ Dispatch the OVS DB interface link status value with configured plugin
+ interval.
+
+[*ensure*]
+ ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[* interfaces *]
+ List of interface names to be monitored by this plugin. If this option
+ is not specified or is empty then all OVS connected interfaces
+ on all bridges are monitored.
+
+[*manage_package*]
+ If enabled, manages separate package for plugin
+ Defaults to true
+
+[*send_notification*]
+ If set to true, OVS link notifications (interface status and
+ OVS DB connection terminate) are sent to collectd.
+
+[*package_name*]
+ If manage_package is true, this gives the name of the package to manage.
+ Defaults to 'collectd-ovs_stats'
+
+[*port*]
+ TCP-port to connect to.
+
+[*socket*]
+ The UNIX domain socket path of OVS DB server JSON-RPC interface used
+ by the plugin
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ovs_events` class:
+
+* [`address`](#address)
+* [`dispatch`](#dispatch)
+* [`ensure`](#ensure)
+* [`interfaces`](#interfaces)
+* [`manage_package`](#manage_package)
+* [`send_notification`](#send_notification)
+* [`package_name`](#package_name)
+* [`port`](#port)
+* [`socket`](#socket)
+
+##### <a name="address"></a>`address`
+
+Data type: `Optional[Stdlib::Host]`
+
+
+
+Default value: ``undef``
+
+##### <a name="dispatch"></a>`dispatch`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interfaces"></a>`interfaces`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="send_notification"></a>`send_notification`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `String[1]`
+
+
+
+Default value: `'collectd-ovs-events'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="socket"></a>`socket`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginovs_stats"></a>`collectd::plugin::ovs_stats`
+
+== Class: collectd::plugin::ovs_stats
+
+Class to manage ovs_stats plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_ovs_stats
+
+=== Parameters
+
+[* address *]
+ The address of the OVS DB server JSON-RPC interface used by the plugin.
+
+[* bridges *]
+ List of OVS bridge names to be monitored by this plugin. If this option
+ is omitted or is empty then all OVS bridges will be monitored
+
+[*ensure*]
+ ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*manage_package*]
+ If enabled, manages separate package for plugin
+ Defaults to true
+
+[*package_name*]
+ If manage_package is true, this gives the name of the package to manage.
+ Defaults to 'collectd-ovs_stats'
+
+[*port*]
+ TCP-port to connect to.
+
+[*socket*]
+ The UNIX domain socket path of OVS DB server JSON-RPC interface used
+ by the plugin
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ovs_stats` class:
+
+* [`address`](#address)
+* [`bridges`](#bridges)
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`port`](#port)
+* [`socket`](#socket)
+
+##### <a name="address"></a>`address`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="bridges"></a>`bridges`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `String`
+
+
+
+Default value: `'collectd-ovs-stats'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="socket"></a>`socket`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpcie_errors"></a>`collectd::plugin::pcie_errors`
+
+Class to manage pcie_errors plugin for collectd
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::pcie_errors` class:
+
+* [`ensure`](#ensure)
+* [`source`](#source)
+* [`access_dir`](#access_dir)
+* [`report_masked`](#report_masked)
+* [`persistent_notifications`](#persistent_notifications)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+Ensure param for collectd::plugin type.
+
+Default value: `'present'`
+
+##### <a name="source"></a>`source`
+
+Data type: `Enum['sysfs', 'proc']`
+
+Use sysfs or proc to read data from /sysfs or /proc.
+
+Default value: `'sysfs'`
+
+##### <a name="access_dir"></a>`access_dir`
+
+Data type: `Optional[String]`
+
+Directory used to access device config space.
+
+Default value: ``undef``
+
+##### <a name="report_masked"></a>`report_masked`
+
+Data type: `Boolean`
+
+If true plugin will notify about errors that are set to masked in Error Mask register.
+
+Default value: ``false``
+
+##### <a name="persistent_notifications"></a>`persistent_notifications`
+
+Data type: `Boolean`
+
+If false plugin will dispatch notification only on set/clear of error.
+
+Default value: ``false``
+
+### <a name="collectdpluginperl"></a>`collectd::plugin::perl`
+
+See http://collectd.org/documentation/manpages/collectd-perl.5.shtml
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::perl` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+* [`order`](#order)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="order"></a>`order`
+
+Data type: `Any`
+
+
+
+Default value: `20`
+
+### <a name="collectdpluginping"></a>`collectd::plugin::ping`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_ping
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::ping` class:
+
+* [`hosts`](#hosts)
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`interval`](#interval)
+* [`timeout`](#timeout)
+* [`ttl`](#ttl)
+* [`source_address`](#source_address)
+* [`device`](#device)
+* [`max_missed`](#max_missed)
+* [`size`](#size)
+
+##### <a name="hosts"></a>`hosts`
+
+Data type: `Array`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="timeout"></a>`timeout`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="ttl"></a>`ttl`
+
+Data type: `Optional[Integer[0,255]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="source_address"></a>`source_address`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="device"></a>`device`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="max_missed"></a>`max_missed`
+
+Data type: `Optional[Integer[-1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="size"></a>`size`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpostgresql"></a>`collectd::plugin::postgresql`
+
+https://collectd.org/wiki/index.php/Plugin:PostgreSQL
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::postgresql` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`databases`](#databases)
+* [`interval`](#interval)
+* [`queries`](#queries)
+* [`writers`](#writers)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="databases"></a>`databases`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="queries"></a>`queries`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="writers"></a>`writers`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginpowerdns"></a>`collectd::plugin::powerdns`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_powerdns
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::powerdns` class:
+
+* [`ensure`](#ensure)
+* [`order`](#order)
+* [`interval`](#interval)
+* [`servers`](#servers)
+* [`recursors`](#recursors)
+* [`local_socket`](#local_socket)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="order"></a>`order`
+
+Data type: `Integer`
+
+
+
+Default value: `10`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="servers"></a>`servers`
+
+Data type: `Hash[String, Hash]`
+
+
+
+Default value: `{}`
+
+##### <a name="recursors"></a>`recursors`
+
+Data type: `Hash[String, Hash]`
+
+
+
+Default value: `{}`
+
+##### <a name="local_socket"></a>`local_socket`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginprocesses"></a>`collectd::plugin::processes`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_processes
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::processes` class:
+
+* [`ensure`](#ensure)
+* [`order`](#order)
+* [`interval`](#interval)
+* [`processes`](#processes)
+* [`process_matches`](#process_matches)
+* [`collect_context_switch`](#collect_context_switch)
+* [`collect_file_descriptor`](#collect_file_descriptor)
+* [`collect_memory_maps`](#collect_memory_maps)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="order"></a>`order`
+
+Data type: `Integer`
+
+
+
+Default value: `10`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="processes"></a>`processes`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: ``undef``
+
+##### <a name="process_matches"></a>`process_matches`
+
+Data type: `Optional[Array]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_context_switch"></a>`collect_context_switch`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_file_descriptor"></a>`collect_file_descriptor`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_memory_maps"></a>`collect_memory_maps`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginprocevent"></a>`collectd::plugin::procevent`
+
+== Class: collectd::plugin::procevent
+
+Class to manage procevent plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_procevent
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*manage_package*]
+ Set to true if Puppet should manage plugin package installation.
+ Defaults to $collectd::manage_package
+
+[*process*]
+ Enumerate a process name to monitor.  All processes that match this exact
+ name will be monitored for EXECs and EXITs.
+ Defaults to undef
+
+[*process_regex*]
+ Enumerate a process pattern to monitor.  All processes that match this
+ regular expression will be monitored for EXECs and EXITs.
+ Defaults to undef
+
+[*buffer_length*]
+ Maximum number of rsyslog events that can be stored in plugin's ring buffer.
+ Once an event has been read, its location becomes available for storing
+ a new event.
+ Defaults to undef
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::procevent` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`process`](#process)
+* [`process_regex`](#process_regex)
+* [`buffer_length`](#buffer_length)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="process"></a>`process`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="process_regex"></a>`process_regex`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="buffer_length"></a>`buffer_length`
+
+Data type: `Optional[Integer[1, default]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginprotocols"></a>`collectd::plugin::protocols`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_protocols
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::protocols` class:
+
+* [`ensure`](#ensure)
+* [`ignoreselected`](#ignoreselected)
+* [`values`](#values)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="values"></a>`values`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginpython"></a>`collectd::plugin::python`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_python
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::python` class:
+
+* [`encoding`](#encoding)
+* [`ensure`](#ensure)
+* [`globals`](#globals)
+* [`interactive`](#interactive)
+* [`interval`](#interval)
+* [`logtraces`](#logtraces)
+* [`manage_package`](#manage_package)
+* [`modulepaths`](#modulepaths)
+* [`modules`](#modules)
+* [`order`](#order)
+* [`conf_name`](#conf_name)
+
+##### <a name="encoding"></a>`encoding`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="globals"></a>`globals`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="interactive"></a>`interactive`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="logtraces"></a>`logtraces`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="modulepaths"></a>`modulepaths`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="modules"></a>`modules`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="order"></a>`order`
+
+Data type: `Any`
+
+
+
+Default value: `'10'`
+
+##### <a name="conf_name"></a>`conf_name`
+
+Data type: `Any`
+
+
+
+Default value: `'python-config.conf'`
+
+### <a name="collectdpluginrabbitmq"></a>`collectd::plugin::rabbitmq`
+
+rabbitmq plugin
+https://pypi.python.org/pypi/collectd-rabbitmq
+
+== Class collectd::plugin::rabbitmq
+
+ Configures rabbitmq metrics collection. Optionally installs the plugin
+ Note, it is up to you to support package installation and sources
+
+=== Parameters:
+[*ensure*]
+  String
+  Passed to package and collectd::plugin resources ( both )
+  Default: present
+
+[*interval*]
+  Integer
+  Interval setting for the plugin
+  Default: undef
+
+[*manage_package*]
+  Boolean
+  Toggles installation of plugin. Please reference https://collectd-rabbitmq.readthedocs.org/en/latest/installation.html
+  Default: undef
+
+[*package_provider*]
+  String
+  Passed to package resource
+  Default: pip
+
+[*config*]
+  Hash
+  Contains key/value passed to the python module to configure the plugin
+  Note we have had issues with the Realm value and quoting, seems to be an issue with quoting. Multi-word values need to be wrapped in '"xxxx"'
+  Default: {
+   'Username' => 'guest',
+   'Password' => 'guest_pass',
+   'Scheme'   => 'http',
+   'Port'     => '15672',
+   'Host'     => $facts['fqdn'],
+   'Realm'    => '"RabbitMQ Management"',
+  }
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::rabbitmq` class:
+
+* [`config`](#config)
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+* [`package_provider`](#package_provider)
+* [`provider_proxy`](#provider_proxy)
+* [`custom_types_db`](#custom_types_db)
+
+##### <a name="config"></a>`config`
+
+Data type: `Hash`
+
+
+
+Default value: `{
+    'Username' => 'guest',
+    'Password' => 'guest',
+    'Scheme'   => 'http',
+    'Port'     => '15672',
+    'Host'     => $facts['networking']['fqdn'],
+    'Realm'    => '"RabbitMQ Management"',
+  }`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd-rabbitmq'`
+
+##### <a name="package_provider"></a>`package_provider`
+
+Data type: `Any`
+
+
+
+Default value: `'pip'`
+
+##### <a name="provider_proxy"></a>`provider_proxy`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="custom_types_db"></a>`custom_types_db`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginredis"></a>`collectd::plugin::redis`
+
+https://collectd.org/wiki/index.php/Plugin:Redis
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::redis` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`nodes`](#nodes)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="nodes"></a>`nodes`
+
+Data type: `Hash[String[1], Collectd::Redis::Node]`
+
+
+
+Default value: `{
+    'redis' => {
+      'host'    => 'localhost',
+      'port'    => 6379,
+      'timeout' => 2000,
+      'queries' => {
+        'dbsize' => {
+          'type'  => 'count',
+          'query' => 'DBSIZE',
+        },
+      },
+    },
+  }`
+
+### <a name="collectdpluginrrdcached"></a>`collectd::plugin::rrdcached`
+
+https://collectd.org/wiki/index.php/Rrdcached
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::rrdcached` class:
+
+* [`ensure`](#ensure)
+* [`daemonaddress`](#daemonaddress)
+* [`datadir`](#datadir)
+* [`createfiles`](#createfiles)
+* [`createfilesasync`](#createfilesasync)
+* [`stepsize`](#stepsize)
+* [`heartbeat`](#heartbeat)
+* [`interval`](#interval)
+* [`rrarows`](#rrarows)
+* [`rratimespan`](#rratimespan)
+* [`xff`](#xff)
+* [`collectstatistics`](#collectstatistics)
+* [`manage_package`](#manage_package)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="daemonaddress"></a>`daemonaddress`
+
+Data type: `Any`
+
+
+
+Default value: `'unix:/tmp/rrdcached.sock'`
+
+##### <a name="datadir"></a>`datadir`
+
+Data type: `Any`
+
+
+
+Default value: `'/var/lib/rrdcached/db/collectd'`
+
+##### <a name="createfiles"></a>`createfiles`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="createfilesasync"></a>`createfilesasync`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="stepsize"></a>`stepsize`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="heartbeat"></a>`heartbeat`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="rrarows"></a>`rrarows`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="rratimespan"></a>`rratimespan`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="xff"></a>`xff`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="collectstatistics"></a>`collectstatistics`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginrrdtool"></a>`collectd::plugin::rrdtool`
+
+https://collectd.org/wiki/index.php/Plugin:RRDtool
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::rrdtool` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`datadir`](#datadir)
+* [`createfilesasync`](#createfilesasync)
+* [`interval`](#interval)
+* [`rrarows`](#rrarows)
+* [`rratimespan`](#rratimespan)
+* [`xff`](#xff)
+* [`cacheflush`](#cacheflush)
+* [`cachetimeout`](#cachetimeout)
+* [`writespersecond`](#writespersecond)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="datadir"></a>`datadir`
+
+Data type: `Stdlib::Absolutepath`
+
+
+
+Default value: `'/var/lib/collectd/rrd'`
+
+##### <a name="createfilesasync"></a>`createfilesasync`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="rrarows"></a>`rrarows`
+
+Data type: `Integer`
+
+
+
+Default value: `1200`
+
+##### <a name="rratimespan"></a>`rratimespan`
+
+Data type: `Array[Integer]`
+
+
+
+Default value: `[3600, 86400, 604800, 2678400, 31622400]`
+
+##### <a name="xff"></a>`xff`
+
+Data type: `Float`
+
+
+
+Default value: `0.1`
+
+##### <a name="cacheflush"></a>`cacheflush`
+
+Data type: `Integer`
+
+
+
+Default value: `900`
+
+##### <a name="cachetimeout"></a>`cachetimeout`
+
+Data type: `Integer`
+
+
+
+Default value: `120`
+
+##### <a name="writespersecond"></a>`writespersecond`
+
+Data type: `Integer`
+
+
+
+Default value: `50`
+
+### <a name="collectdpluginsensors"></a>`collectd::plugin::sensors`
+
+https://collectd.org/wiki/index.php/Plugin:Sensors
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::sensors` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`sensorconfigfile`](#sensorconfigfile)
+* [`sensors`](#sensors)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+* [`package_install_options`](#package_install_options)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="sensorconfigfile"></a>`sensorconfigfile`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="sensors"></a>`sensors`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_install_options"></a>`package_install_options`
+
+Data type: `Optional[Array[String]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginsmart"></a>`collectd::plugin::smart`
+
+https://collectd.org/wiki/index.php/Plugin:SMART
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::smart` class:
+
+* [`disks`](#disks)
+* [`ensure`](#ensure)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+* [`manage_package`](#manage_package)
+* [`package_name`](#package_name)
+
+##### <a name="disks"></a>`disks`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_name"></a>`package_name`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd-smart'`
+
+### <a name="collectdpluginsnmp"></a>`collectd::plugin::snmp`
+
+https://collectd.org/wiki/index.php/Plugin:SNMP
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::snmp` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`data`](#data)
+* [`hosts`](#hosts)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="data"></a>`data`
+
+Data type: `Hash[String[1], Collectd::SNMP::Data]`
+
+
+
+Default value: `{}`
+
+##### <a name="hosts"></a>`hosts`
+
+Data type: `Hash[String[1], Collectd::SNMP::Host]`
+
+
+
+Default value: `{}`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginsnmp_agent"></a>`collectd::plugin::snmp_agent`
+
+Class: collectd::plugin::snmp_agent
+
+* **See also**
+  * https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+    * Configues snmp agent plugin.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::snmp_agent` class:
+
+* [`ensure`](#ensure)
+* [`data`](#data)
+* [`table`](#table)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+String Passed to package and collectd::plugin resources (both). Default: present
+
+Default value: `'present'`
+
+##### <a name="data"></a>`data`
+
+Data type: `Hash[String[1],Collectd::SNMP_AGENT::Data]`
+
+Optional[Hash[String[1],Collectd::SNMP_AGENT::Data]] Defines scalar field, must be put outside Table block.
+
+Default value: `{
+    'memAvailReal' => {
+      'oids' => '1.3.6.1.4.1.2021.4.6.0',
+      'plugin' => 'memory',
+      'type' => 'memory',
+      'typeinstance' => 'free',
+    },
+  }`
+
+##### <a name="table"></a>`table`
+
+Data type: `Hash[String[1], Collectd::SNMP_AGENT::Table]`
+
+Hash[String[1], Collectd::SNMP_AGENT::Table] Defines a table consisting of several Data blocks being its columns
+
+Default value: `{
+    'ifTable' => {
+      'indexoid' => 'IF-MIB::ifIndex',
+      'sizeoid' => 'IF-MIB::ifNumber',
+      'data'=> {
+        'ifDescr' => {
+          'plugin'   => 'interface',
+          'oids'     => 'IF-MIB::ifDescr',
+          'indexkey' => {
+            'source' => 'PluginInstance',
+          },
+        },
+        'ifOctets' => {
+          'plugin'   => 'interface',
+          'oids'     => 'IF-MIB::ifInOctets" "IF-MIB::ifOutOctets',
+          'type'     => 'if_octets',
+          'typeinstance' => '',
+        },
+      },
+    },
+  }`
+
+### <a name="collectdpluginstatsd"></a>`collectd::plugin::statsd`
+
+https://collectd.org/wiki/index.php/Plugin:StatsD
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::statsd` class:
+
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`port`](#port)
+* [`deletecounters`](#deletecounters)
+* [`deletetimers`](#deletetimers)
+* [`deletegauges`](#deletegauges)
+* [`deletesets`](#deletesets)
+* [`countersum`](#countersum)
+* [`interval`](#interval)
+* [`timerpercentile`](#timerpercentile)
+* [`timerlower`](#timerlower)
+* [`timerupper`](#timerupper)
+* [`timersum`](#timersum)
+* [`timercount`](#timercount)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[Stdlib::Host]`
+
+
+
+Default value: ``undef``
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="deletecounters"></a>`deletecounters`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="deletetimers"></a>`deletetimers`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="deletegauges"></a>`deletegauges`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="deletesets"></a>`deletesets`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="countersum"></a>`countersum`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="timerpercentile"></a>`timerpercentile`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="timerlower"></a>`timerlower`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="timerupper"></a>`timerupper`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="timersum"></a>`timersum`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="timercount"></a>`timercount`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginswap"></a>`collectd::plugin::swap`
+
+https://collectd.org/wiki/index.php/Plugin:Swap
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::swap` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`reportbydevice`](#reportbydevice)
+* [`reportbytes`](#reportbytes)
+* [`valuesabsolute`](#valuesabsolute)
+* [`valuespercentage`](#valuespercentage)
+* [`reportio`](#reportio)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="reportbydevice"></a>`reportbydevice`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportbytes"></a>`reportbytes`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuesabsolute"></a>`valuesabsolute`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="valuespercentage"></a>`valuespercentage`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="reportio"></a>`reportio`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+### <a name="collectdpluginsysevent"></a>`collectd::plugin::sysevent`
+
+== Class: collectd::plugin::sysevent
+
+Class to manage sysevent plugin for collectd
+
+Documentation:
+  https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_sysevent
+
+=== Parameters
+
+[*ensure*]
+ Ensure param for collectd::plugin type.
+ Defaults to 'ensure'
+
+[*manage_package*]
+ Set to true if Puppet should manage plugin package installation.
+ Defaults to $collectd::manage_package
+
+[*listen_host*]
+ Listen on this IP for incoming rsyslog messages.
+ Defaults to '127.0.0.1'
+
+[*listen_port*]
+ Listen on this port for incoming rsyslog messages.
+ Defaults to 6666
+
+[*regex_filter*]
+ Enumerate a regex filter to apply to all incoming rsyslog messages.  If a
+ message matches this filter, it will be published.
+ Defaults to '.*'
+
+[*buffer_size*]
+ Maximum allowed size for incoming rsyslog messages.  Messages that exceed
+ this number will be truncated to this size.  Default is 4096 bytes.
+ Defaults to undef
+
+[*buffer_length*]
+ Maximum number of rsyslog events that can be stored in plugin's ring buffer.
+ Once an event has been read, its location becomes available for storing
+ a new event.
+ Defaults to undef
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::sysevent` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`listen_host`](#listen_host)
+* [`listen_port`](#listen_port)
+* [`regex_filter`](#regex_filter)
+* [`buffer_size`](#buffer_size)
+* [`buffer_length`](#buffer_length)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="listen_host"></a>`listen_host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'127.0.0.1'`
+
+##### <a name="listen_port"></a>`listen_port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `6666`
+
+##### <a name="regex_filter"></a>`regex_filter`
+
+Data type: `String`
+
+
+
+Default value: `'/.*/'`
+
+##### <a name="buffer_size"></a>`buffer_size`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="buffer_length"></a>`buffer_length`
+
+Data type: `Optional[Integer[1, default]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginsyslog"></a>`collectd::plugin::syslog`
+
+https://collectd.org/wiki/index.php/Plugin:SysLog
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::syslog` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`log_level`](#log_level)
+* [`notify_level`](#notify_level)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Float]`
+
+
+
+Default value: ``undef``
+
+##### <a name="log_level"></a>`log_level`
+
+Data type: `Enum['debug', 'info', 'notice', 'warning', 'err']`
+
+
+
+Default value: `'info'`
+
+##### <a name="notify_level"></a>`notify_level`
+
+Data type: `Optional[Enum['OKAY', 'WARNING', 'FAILURE']]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugintable"></a>`collectd::plugin::table`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::table` class:
+
+* [`tables`](#tables)
+* [`ensure`](#ensure)
+* [`order`](#order)
+
+##### <a name="tables"></a>`tables`
+
+Data type: `Hash[String, Collectd::Table::Table, 1]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="order"></a>`order`
+
+Data type: `Integer`
+
+
+
+Default value: `10`
+
+### <a name="collectdplugintail"></a>`collectd::plugin::tail`
+
+Tail plugin
+https://collectd.org/wiki/index.php/Plugin:Tail
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::tail` class:
+
+* [`interval`](#interval)
+* [`files`](#files)
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="files"></a>`files`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+### <a name="collectdplugintail_csv"></a>`collectd::plugin::tail_csv`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::tail_csv` class:
+
+* [`metrics`](#metrics)
+* [`files`](#files)
+* [`ensure`](#ensure)
+* [`order`](#order)
+
+##### <a name="metrics"></a>`metrics`
+
+Data type: `Hash[String, Collectd::Tail_Csv::Metric, 1]`
+
+
+
+##### <a name="files"></a>`files`
+
+Data type: `Hash[String, Collectd::Tail_Csv::File, 1]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="order"></a>`order`
+
+Data type: `Integer`
+
+
+
+Default value: `10`
+
+### <a name="collectdplugintarget_v5upgrade"></a>`collectd::plugin::target_v5upgrade`
+
+https://collectd.org/wiki/index.php/Target:v5_upgrade
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::target_v5upgrade` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdplugintcpconns"></a>`collectd::plugin::tcpconns`
+
+https://collectd.org/wiki/index.php/Plugin:TCPConns
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::tcpconns` class:
+
+* [`localports`](#localports)
+* [`remoteports`](#remoteports)
+* [`listening`](#listening)
+* [`interval`](#interval)
+* [`allportssummary`](#allportssummary)
+* [`ensure`](#ensure)
+
+##### <a name="localports"></a>`localports`
+
+Data type: `Optional[Array[Stdlib::Port]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="remoteports"></a>`remoteports`
+
+Data type: `Optional[Array[Stdlib::Port]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="listening"></a>`listening`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="allportssummary"></a>`allportssummary`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginthermal"></a>`collectd::plugin::thermal`
+
+https://collectd.org/wiki/index.php/Plugin:thermal
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::thermal` class:
+
+* [`devices`](#devices)
+* [`ensure`](#ensure)
+* [`ignoreselected`](#ignoreselected)
+* [`interval`](#interval)
+
+##### <a name="devices"></a>`devices`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="ignoreselected"></a>`ignoreselected`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginthreshold"></a>`collectd::plugin::threshold`
+
+http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_threshold
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::threshold` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`types`](#types)
+* [`plugins`](#plugins)
+* [`hosts`](#hosts)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="types"></a>`types`
+
+Data type: `Array[Collectd::Threshold::Type]`
+
+
+
+Default value: `[]`
+
+##### <a name="plugins"></a>`plugins`
+
+Data type: `Array[Collectd::Threshold::Plugin]`
+
+
+
+Default value: `[]`
+
+##### <a name="hosts"></a>`hosts`
+
+Data type: `Array[Collectd::Threshold::Host]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginturbostat"></a>`collectd::plugin::turbostat`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_turbostat
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::turbostat` class:
+
+* [`ensure`](#ensure)
+* [`core_c_states`](#core_c_states)
+* [`package_c_states`](#package_c_states)
+* [`system_management_interrupt`](#system_management_interrupt)
+* [`digital_temperature_sensor`](#digital_temperature_sensor)
+* [`tcc_activation_temp`](#tcc_activation_temp)
+* [`running_average_power_limit`](#running_average_power_limit)
+* [`logical_core_names`](#logical_core_names)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="core_c_states"></a>`core_c_states`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="package_c_states"></a>`package_c_states`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="system_management_interrupt"></a>`system_management_interrupt`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="digital_temperature_sensor"></a>`digital_temperature_sensor`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="tcc_activation_temp"></a>`tcc_activation_temp`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="running_average_power_limit"></a>`running_average_power_limit`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="logical_core_names"></a>`logical_core_names`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginunixsock"></a>`collectd::plugin::unixsock`
+
+https://collectd.org/wiki/index.php/Plugin:UnixSock
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::unixsock` class:
+
+* [`socketfile`](#socketfile)
+* [`socketgroup`](#socketgroup)
+* [`socketperms`](#socketperms)
+* [`deletesocket`](#deletesocket)
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="socketfile"></a>`socketfile`
+
+Data type: `Stdlib::Absolutepath`
+
+
+
+Default value: `'/var/run/collectd-unixsock'`
+
+##### <a name="socketgroup"></a>`socketgroup`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd'`
+
+##### <a name="socketperms"></a>`socketperms`
+
+Data type: `Any`
+
+
+
+Default value: `'0770'`
+
+##### <a name="deletesocket"></a>`deletesocket`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginuptime"></a>`collectd::plugin::uptime`
+
+https://collectd.org/wiki/index.php/Plugin:Uptime
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::uptime` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginusers"></a>`collectd::plugin::users`
+
+https://collectd.org/wiki/index.php/Plugin:Users
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::users` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginuuid"></a>`collectd::plugin::uuid`
+
+https://collectd.org/wiki/index.php/Plugin:UUID
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::uuid` class:
+
+* [`uuid_file`](#uuid_file)
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+
+##### <a name="uuid_file"></a>`uuid_file`
+
+Data type: `Any`
+
+
+
+Default value: `'/etc/uuid'`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginvarnish"></a>`collectd::plugin::varnish`
+
+https://collectd.org/wiki/index.php/Plugin:Varnish
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::varnish` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`instances`](#instances)
+* [`interval`](#interval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="instances"></a>`instances`
+
+Data type: `Hash`
+
+
+
+Default value: `{
+    'localhost' => {
+    },
+  }`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginvirt"></a>`collectd::plugin::virt`
+
+https://collectd.org/wiki/index.php/Plugin:virt
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::virt` class:
+
+* [`connection`](#connection)
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`refresh_interval`](#refresh_interval)
+* [`domain`](#domain)
+* [`block_device`](#block_device)
+* [`interface_device`](#interface_device)
+* [`ignore_selected`](#ignore_selected)
+* [`plugin_instance_format`](#plugin_instance_format)
+* [`hostname_format`](#hostname_format)
+* [`interface_format`](#interface_format)
+* [`extra_stats`](#extra_stats)
+* [`interval`](#interval)
+
+##### <a name="connection"></a>`connection`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="refresh_interval"></a>`refresh_interval`
+
+Data type: `Optional[Pattern[/^\d+$/]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="domain"></a>`domain`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="block_device"></a>`block_device`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interface_device"></a>`interface_device`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="ignore_selected"></a>`ignore_selected`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="plugin_instance_format"></a>`plugin_instance_format`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="hostname_format"></a>`hostname_format`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interface_format"></a>`interface_format`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="extra_stats"></a>`extra_stats`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginvmem"></a>`collectd::plugin::vmem`
+
+https://collectd.org/wiki/index.php/Plugin:vmem
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::vmem` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`verbose`](#verbose)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="verbose"></a>`verbose`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginwrite_graphite"></a>`collectd::plugin::write_graphite`
+
+https://collectd.org/wiki/index.php/Graphite
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_graphite` class:
+
+* [`carbons`](#carbons)
+* [`carbon_defaults`](#carbon_defaults)
+* [`ensure`](#ensure)
+* [`globals`](#globals)
+
+##### <a name="carbons"></a>`carbons`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="carbon_defaults"></a>`carbon_defaults`
+
+Data type: `Any`
+
+
+
+Default value: `{}`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="globals"></a>`globals`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginwrite_http"></a>`collectd::plugin::write_http`
+
+Enable write_http plugin
+
+* **See also**
+  * https://collectd.org/wiki/index.php/Plugin:Write_HTTP
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_http` class:
+
+* [`ensure`](#ensure)
+* [`nodes`](#nodes)
+* [`urls`](#urls)
+* [`manage_package`](#manage_package)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="nodes"></a>`nodes`
+
+Data type: `Hash[String, Hash[String, Scalar]]`
+
+
+
+Default value: `{}`
+
+##### <a name="urls"></a>`urls`
+
+Data type: `Hash[String, Hash[String, Scalar]]`
+
+
+
+Default value: `{}`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginwrite_kafka"></a>`collectd::plugin::write_kafka`
+
+The collectd::plugin::write_kafka class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_kafka` class:
+
+* [`ensure`](#ensure)
+* [`kafka_host`](#kafka_host)
+* [`kafka_hosts`](#kafka_hosts)
+* [`kafka_port`](#kafka_port)
+* [`topics`](#topics)
+* [`properties`](#properties)
+* [`meta`](#meta)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="kafka_host"></a>`kafka_host`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="kafka_hosts"></a>`kafka_hosts`
+
+Data type: `Array[String]`
+
+
+
+Default value: `['localhost:9092']`
+
+##### <a name="kafka_port"></a>`kafka_port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `9092`
+
+##### <a name="topics"></a>`topics`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="properties"></a>`properties`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="meta"></a>`meta`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginwrite_log"></a>`collectd::plugin::write_log`
+
+The collectd::plugin::write_log class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_log` class:
+
+* [`format`](#format)
+* [`ensure`](#ensure)
+
+##### <a name="format"></a>`format`
+
+Data type: `String`
+
+
+
+Default value: `'JSON'`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginwrite_network"></a>`collectd::plugin::write_network`
+
+A define to make a generic network output for collectd
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_network` class:
+
+* [`ensure`](#ensure)
+* [`servers`](#servers)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="servers"></a>`servers`
+
+Data type: `Hash`
+
+
+
+Default value: `{ 'localhost'  => { 'serverport' => '25826' } }`
+
+### <a name="collectdpluginwrite_prometheus"></a>`collectd::plugin::write_prometheus`
+
+The collectd::plugin::write_prometheus class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_prometheus` class:
+
+* [`port`](#port)
+* [`ensure`](#ensure)
+
+##### <a name="port"></a>`port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `9103`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginwrite_riemann"></a>`collectd::plugin::write_riemann`
+
+https://collectd.org/wiki/index.php/Plugin:Write_Riemann
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_riemann` class:
+
+* [`nodes`](#nodes)
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`tags`](#tags)
+* [`attributes`](#attributes)
+
+##### <a name="nodes"></a>`nodes`
+
+Data type: `Array[Collectd::Write_riemann::Node]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Boolean`
+
+
+
+Default value: `$collectd::manage_package`
+
+##### <a name="tags"></a>`tags`
+
+Data type: `Array[String[1]]`
+
+
+
+Default value: `[]`
+
+##### <a name="attributes"></a>`attributes`
+
+Data type: `Hash[String[1],String[1]]`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginwrite_sensu"></a>`collectd::plugin::write_sensu`
+
+https://collectd.org/wiki/index.php/Plugin:Write_Sensu
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_sensu` class:
+
+* [`ensure`](#ensure)
+* [`manage_package`](#manage_package)
+* [`sensu_host`](#sensu_host)
+* [`sensu_port`](#sensu_port)
+* [`store_rates`](#store_rates)
+* [`always_append_ds`](#always_append_ds)
+* [`metrics`](#metrics)
+* [`metrics_handler`](#metrics_handler)
+* [`notifications`](#notifications)
+* [`notifs_handler`](#notifs_handler)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="sensu_host"></a>`sensu_host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="sensu_port"></a>`sensu_port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `3030`
+
+##### <a name="store_rates"></a>`store_rates`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="always_append_ds"></a>`always_append_ds`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="metrics"></a>`metrics`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="metrics_handler"></a>`metrics_handler`
+
+Data type: `Any`
+
+
+
+Default value: `'example_metric_handler'`
+
+##### <a name="notifications"></a>`notifications`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="notifs_handler"></a>`notifs_handler`
+
+Data type: `Any`
+
+
+
+Default value: `'example_notification_handler'`
+
+### <a name="collectdpluginwrite_tsdb"></a>`collectd::plugin::write_tsdb`
+
+https://collectd.org/wiki/index.php/Plugin:Write_TSDB
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_tsdb` class:
+
+* [`ensure`](#ensure)
+* [`globals`](#globals)
+* [`host`](#host)
+* [`port`](#port)
+* [`host_tags`](#host_tags)
+* [`store_rates`](#store_rates)
+* [`always_append_ds`](#always_append_ds)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `present`
+
+##### <a name="globals"></a>`globals`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="host"></a>`host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="port"></a>`port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `4242`
+
+##### <a name="host_tags"></a>`host_tags`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="store_rates"></a>`store_rates`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="always_append_ds"></a>`always_append_ds`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginzfs_arc"></a>`collectd::plugin::zfs_arc`
+
+https://collectd.org/wiki/index.php/Plugin:ZFS_ARC
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::zfs_arc` class:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginzookeeper"></a>`collectd::plugin::zookeeper`
+
+The collectd::plugin::zookeeper class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::zookeeper` class:
+
+* [`ensure`](#ensure)
+* [`interval`](#interval)
+* [`zookeeper_host`](#zookeeper_host)
+* [`zookeeper_port`](#zookeeper_port)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="zookeeper_host"></a>`zookeeper_host`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="zookeeper_port"></a>`zookeeper_port`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `2181`
+
+### <a name="collectdrepo"></a>`collectd::repo`
+
+collectd::repo
+Handle package repo configuration
+
+### <a name="collectdrepodebian"></a>`collectd::repo::debian`
+
+The collectd::repo::debian class.
+
+### <a name="collectdreporedhat"></a>`collectd::repo::redhat`
+
+The collectd::repo::redhat class.
+
+### <a name="collectdservice"></a>`collectd::service`
+
+The collectd::service class.
+
+## Defined types
+
+### <a name="collectdplugin"></a>`collectd::plugin`
+
+The collectd::plugin class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin` defined type:
+
+* [`ensure`](#ensure)
+* [`content`](#content)
+* [`order`](#order)
+* [`globals`](#globals)
+* [`interval`](#interval)
+* [`plugin`](#plugin)
+* [`flushinterval`](#flushinterval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="content"></a>`content`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="order"></a>`order`
+
+Data type: `Any`
+
+
+
+Default value: `'10'`
+
+##### <a name="globals"></a>`globals`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="plugin"></a>`plugin`
+
+Data type: `Any`
+
+
+
+Default value: `$name`
+
+##### <a name="flushinterval"></a>`flushinterval`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginaggregationaggregator"></a>`collectd::plugin::aggregation::aggregator`
+
+The collectd::plugin::aggregation::aggregator class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::aggregation::aggregator` defined type:
+
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`plugin`](#plugin)
+* [`plugininstance`](#plugininstance)
+* [`agg_type`](#agg_type)
+* [`typeinstance`](#typeinstance)
+* [`sethost`](#sethost)
+* [`setplugin`](#setplugin)
+* [`setplugininstance`](#setplugininstance)
+* [`settypeinstance`](#settypeinstance)
+* [`groupby`](#groupby)
+* [`calculatesum`](#calculatesum)
+* [`calculatenum`](#calculatenum)
+* [`calculateaverage`](#calculateaverage)
+* [`calculateminimum`](#calculateminimum)
+* [`calculatemaximum`](#calculatemaximum)
+* [`calculatestddev`](#calculatestddev)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="plugin"></a>`plugin`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="plugininstance"></a>`plugininstance`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="agg_type"></a>`agg_type`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="typeinstance"></a>`typeinstance`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sethost"></a>`sethost`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="setplugin"></a>`setplugin`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="setplugininstance"></a>`setplugininstance`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="settypeinstance"></a>`settypeinstance`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="groupby"></a>`groupby`
+
+Data type: `Array[String]`
+
+
+
+Default value: `[]`
+
+##### <a name="calculatesum"></a>`calculatesum`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="calculatenum"></a>`calculatenum`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="calculateaverage"></a>`calculateaverage`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="calculateminimum"></a>`calculateminimum`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="calculatemaximum"></a>`calculatemaximum`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="calculatestddev"></a>`calculatestddev`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginapacheinstance"></a>`collectd::plugin::apache::instance`
+
+https://collectd.org/wiki/index.php/Plugin:Apache
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::apache::instance` defined type:
+
+* [`url`](#url)
+* [`ensure`](#ensure)
+* [`user`](#user)
+* [`password`](#password)
+* [`verifypeer`](#verifypeer)
+* [`verifyhost`](#verifyhost)
+* [`cacert`](#cacert)
+* [`sslciphers`](#sslciphers)
+* [`timeout`](#timeout)
+
+##### <a name="url"></a>`url`
+
+Data type: `Stdlib::Httpurl`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `present`
+
+##### <a name="user"></a>`user`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifypeer"></a>`verifypeer`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifyhost"></a>`verifyhost`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cacert"></a>`cacert`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslciphers"></a>`sslciphers`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="timeout"></a>`timeout`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugincurlpage"></a>`collectd::plugin::curl::page`
+
+The collectd::plugin::curl::page class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::curl::page` defined type:
+
+* [`url`](#url)
+* [`ensure`](#ensure)
+* [`user`](#user)
+* [`password`](#password)
+* [`verifypeer`](#verifypeer)
+* [`verifyhost`](#verifyhost)
+* [`cacert`](#cacert)
+* [`header`](#header)
+* [`measureresponsetime`](#measureresponsetime)
+* [`measureresponsecode`](#measureresponsecode)
+* [`matches`](#matches)
+* [`plugininstance`](#plugininstance)
+
+##### <a name="url"></a>`url`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="user"></a>`user`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifypeer"></a>`verifypeer`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifyhost"></a>`verifyhost`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="cacert"></a>`cacert`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+##### <a name="header"></a>`header`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="measureresponsetime"></a>`measureresponsetime`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="measureresponsecode"></a>`measureresponsecode`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="matches"></a>`matches`
+
+Data type: `Optional[Array[Hash]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="plugininstance"></a>`plugininstance`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+### <a name="collectdplugincurl_json"></a>`collectd::plugin::curl_json`
+
+See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_curl_json
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::curl_json` defined type:
+
+* [`url`](#url)
+* [`instance`](#instance)
+* [`keys`](#keys)
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`interval`](#interval)
+* [`user`](#user)
+* [`password`](#password)
+* [`digest`](#digest)
+* [`verifypeer`](#verifypeer)
+* [`verifyhost`](#verifyhost)
+* [`cacert`](#cacert)
+* [`header`](#header)
+* [`post`](#post)
+* [`timeout`](#timeout)
+* [`order`](#order)
+* [`manage_package`](#manage_package)
+
+##### <a name="url"></a>`url`
+
+Data type: `Any`
+
+
+
+##### <a name="instance"></a>`instance`
+
+Data type: `Any`
+
+
+
+##### <a name="keys"></a>`keys`
+
+Data type: `Hash`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="user"></a>`user`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="digest"></a>`digest`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifypeer"></a>`verifypeer`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="verifyhost"></a>`verifyhost`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="cacert"></a>`cacert`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="header"></a>`header`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="post"></a>`post`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="timeout"></a>`timeout`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="order"></a>`order`
+
+Data type: `Any`
+
+
+
+Default value: `'10'`
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugindbidatabase"></a>`collectd::plugin::dbi::database`
+
+database allows you to create <Database> blocks with the same name of database,
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dbi::database` defined type:
+
+* [`driver`](#driver)
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`databasename`](#databasename)
+* [`driveroption`](#driveroption)
+* [`selectdb`](#selectdb)
+* [`query`](#query)
+* [`db_query_interval`](#db_query_interval)
+
+##### <a name="driver"></a>`driver`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="databasename"></a>`databasename`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="driveroption"></a>`driveroption`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+##### <a name="selectdb"></a>`selectdb`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="query"></a>`query`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="db_query_interval"></a>`db_query_interval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugindbiquery"></a>`collectd::plugin::dbi::query`
+
+The collectd::plugin::dbi::query class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::dbi::query` defined type:
+
+* [`statement`](#statement)
+* [`ensure`](#ensure)
+* [`results`](#results)
+* [`minversion`](#minversion)
+* [`maxversion`](#maxversion)
+
+##### <a name="statement"></a>`statement`
+
+Data type: `String`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `String`
+
+
+
+Default value: `'present'`
+
+##### <a name="results"></a>`results`
+
+Data type: `Array`
+
+
+
+Default value: `[{}]`
+
+##### <a name="minversion"></a>`minversion`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="maxversion"></a>`maxversion`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginexeccmd"></a>`collectd::plugin::exec::cmd`
+
+The collectd::plugin::exec::cmd class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::exec::cmd` defined type:
+
+* [`user`](#user)
+* [`group`](#group)
+* [`exec`](#exec)
+* [`notification_exec`](#notification_exec)
+
+##### <a name="user"></a>`user`
+
+Data type: `String`
+
+
+
+##### <a name="group"></a>`group`
+
+Data type: `String`
+
+
+
+##### <a name="exec"></a>`exec`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="notification_exec"></a>`notification_exec`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginfilecountdirectory"></a>`collectd::plugin::filecount::directory`
+
+https://collectd.org/wiki/index.php/Plugin:FileCount
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filecount::directory` defined type:
+
+* [`path`](#path)
+* [`ensure`](#ensure)
+* [`instance`](#instance)
+* [`pattern`](#pattern)
+* [`mtime`](#mtime)
+* [`size`](#size)
+* [`recursive`](#recursive)
+* [`includehidden`](#includehidden)
+
+##### <a name="path"></a>`path`
+
+Data type: `Stdlib::Absolutepath`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="instance"></a>`instance`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="pattern"></a>`pattern`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="mtime"></a>`mtime`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="size"></a>`size`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="recursive"></a>`recursive`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="includehidden"></a>`includehidden`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginfilterchain"></a>`collectd::plugin::filter::chain`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filter::chain` defined type:
+
+* [`ensure`](#ensure)
+* [`target`](#target)
+* [`target_options`](#target_options)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="target"></a>`target`
+
+Data type: `Optional[Collectd::Filter::Target]`
+
+
+
+Default value: ``undef``
+
+##### <a name="target_options"></a>`target_options`
+
+Data type: `Optional[Hash]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginfiltermatch"></a>`collectd::plugin::filter::match`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filter::match` defined type:
+
+* [`chain`](#chain)
+* [`rule`](#rule)
+* [`plugin`](#plugin)
+* [`options`](#options)
+
+##### <a name="chain"></a>`chain`
+
+Data type: `String`
+
+
+
+##### <a name="rule"></a>`rule`
+
+Data type: `String`
+
+
+
+##### <a name="plugin"></a>`plugin`
+
+Data type: `Collectd::Filter::Match`
+
+
+
+##### <a name="options"></a>`options`
+
+Data type: `Optional[Hash]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginfilterrule"></a>`collectd::plugin::filter::rule`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filter::rule` defined type:
+
+* [`chain`](#chain)
+
+##### <a name="chain"></a>`chain`
+
+Data type: `String`
+
+
+
+### <a name="collectdpluginfiltertarget"></a>`collectd::plugin::filter::target`
+
+https://collectd.org/wiki/index.php/Chains
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::filter::target` defined type:
+
+* [`chain`](#chain)
+* [`plugin`](#plugin)
+* [`options`](#options)
+* [`rule`](#rule)
+
+##### <a name="chain"></a>`chain`
+
+Data type: `String`
+
+
+
+##### <a name="plugin"></a>`plugin`
+
+Data type: `Collectd::Filter::Target`
+
+
+
+##### <a name="options"></a>`options`
+
+Data type: `Optional[Hash]`
+
+
+
+Default value: ``undef``
+
+##### <a name="rule"></a>`rule`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugingenericjmxconnection"></a>`collectd::plugin::genericjmx::connection`
+
+https://collectd.org/wiki/index.php/Plugin:GenericJMX
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::genericjmx::connection` defined type:
+
+* [`collect`](#collect)
+* [`service_url`](#service_url)
+* [`host`](#host)
+* [`user`](#user)
+* [`password`](#password)
+* [`instance_prefix`](#instance_prefix)
+
+##### <a name="collect"></a>`collect`
+
+Data type: `Array`
+
+
+
+##### <a name="service_url"></a>`service_url`
+
+Data type: `String`
+
+
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="user"></a>`user`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="instance_prefix"></a>`instance_prefix`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugingenericjmxmbean"></a>`collectd::plugin::genericjmx::mbean`
+
+https://collectd.org/wiki/index.php/Plugin:GenericJMX
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::genericjmx::mbean` defined type:
+
+* [`object_name`](#object_name)
+* [`values`](#values)
+* [`instance_prefix`](#instance_prefix)
+* [`instance_from`](#instance_from)
+
+##### <a name="object_name"></a>`object_name`
+
+Data type: `String`
+
+
+
+##### <a name="values"></a>`values`
+
+Data type: `Array`
+
+
+
+##### <a name="instance_prefix"></a>`instance_prefix`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="instance_from"></a>`instance_from`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginmysqldatabase"></a>`collectd::plugin::mysql::database`
+
+The collectd::plugin::mysql::database class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::mysql::database` defined type:
+
+* [`ensure`](#ensure)
+* [`database`](#database)
+* [`host`](#host)
+* [`port`](#port)
+* [`masterstats`](#masterstats)
+* [`slavestats`](#slavestats)
+* [`username`](#username)
+* [`password`](#password)
+* [`socket`](#socket)
+* [`innodbstats`](#innodbstats)
+* [`slavenotifications`](#slavenotifications)
+* [`wsrepstats`](#wsrepstats)
+* [`aliasname`](#aliasname)
+* [`connecttimeout`](#connecttimeout)
+* [`sslkey`](#sslkey)
+* [`sslcert`](#sslcert)
+* [`sslca`](#sslca)
+* [`sslcapath`](#sslcapath)
+* [`sslcipher`](#sslcipher)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="database"></a>`database`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[Stdlib::Host]`
+
+
+
+Default value: ``undef``
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="masterstats"></a>`masterstats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="slavestats"></a>`slavestats`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="username"></a>`username`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="socket"></a>`socket`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="innodbstats"></a>`innodbstats`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="slavenotifications"></a>`slavenotifications`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="wsrepstats"></a>`wsrepstats`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="aliasname"></a>`aliasname`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="connecttimeout"></a>`connecttimeout`
+
+Data type: `Optional[Integer]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslkey"></a>`sslkey`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslcert"></a>`sslcert`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslca"></a>`sslca`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslcapath"></a>`sslcapath`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslcipher"></a>`sslcipher`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnetworklistener"></a>`collectd::plugin::network::listener`
+
+The collectd::plugin::network::listener class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::network::listener` defined type:
+
+* [`ensure`](#ensure)
+* [`authfile`](#authfile)
+* [`port`](#port)
+* [`securitylevel`](#securitylevel)
+* [`interface`](#interface)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="authfile"></a>`authfile`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="securitylevel"></a>`securitylevel`
+
+Data type: `Optional[Collectd::Network::SecurityLevel]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interface"></a>`interface`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnetworkserver"></a>`collectd::plugin::network::server`
+
+The collectd::plugin::network::server class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::network::server` defined type:
+
+* [`ensure`](#ensure)
+* [`username`](#username)
+* [`password`](#password)
+* [`port`](#port)
+* [`securitylevel`](#securitylevel)
+* [`interface`](#interface)
+* [`forward`](#forward)
+* [`resolveinterval`](#resolveinterval)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="username"></a>`username`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="securitylevel"></a>`securitylevel`
+
+Data type: `Optional[Collectd::Network::SecurityLevel]`
+
+
+
+Default value: ``undef``
+
+##### <a name="interface"></a>`interface`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="forward"></a>`forward`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="resolveinterval"></a>`resolveinterval`
+
+Data type: `Optional[Integer[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginnutups"></a>`collectd::plugin::nut::ups`
+
+The collectd::plugin::nut::ups class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::nut::ups` defined type:
+
+* [`ensure`](#ensure)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginoracledatabase"></a>`collectd::plugin::oracle::database`
+
+https://collectd.org/wiki/index.php/Plugin:Oracle
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::oracle::database` defined type:
+
+* [`username`](#username)
+* [`password`](#password)
+* [`query`](#query)
+* [`connect_id`](#connect_id)
+* [`database`](#database)
+
+##### <a name="username"></a>`username`
+
+Data type: `String`
+
+
+
+##### <a name="password"></a>`password`
+
+Data type: `String`
+
+
+
+##### <a name="query"></a>`query`
+
+Data type: `Array`
+
+
+
+##### <a name="connect_id"></a>`connect_id`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="database"></a>`database`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+### <a name="collectdpluginoraclequery"></a>`collectd::plugin::oracle::query`
+
+https://collectd.org/wiki/index.php/Plugin:Oracle
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::oracle::query` defined type:
+
+* [`statement`](#statement)
+* [`results`](#results)
+* [`query`](#query)
+
+##### <a name="statement"></a>`statement`
+
+Data type: `String`
+
+
+
+##### <a name="results"></a>`results`
+
+Data type: `Array`
+
+
+
+##### <a name="query"></a>`query`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+### <a name="collectdpluginperlplugin"></a>`collectd::plugin::perl::plugin`
+
+The collectd::plugin::perl::plugin class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::perl::plugin` defined type:
+
+* [`module`](#module)
+* [`manage_package`](#manage_package)
+* [`enable_debugger`](#enable_debugger)
+* [`include_dir`](#include_dir)
+* [`provider`](#provider)
+* [`source`](#source)
+* [`destination`](#destination)
+* [`order`](#order)
+* [`config`](#config)
+
+##### <a name="module"></a>`module`
+
+Data type: `Any`
+
+
+
+##### <a name="manage_package"></a>`manage_package`
+
+Data type: `Any`
+
+
+
+Default value: ``true``
+
+##### <a name="enable_debugger"></a>`enable_debugger`
+
+Data type: `Variant[Boolean, String]`
+
+
+
+Default value: ``false``
+
+##### <a name="include_dir"></a>`include_dir`
+
+Data type: `Variant[Boolean, String, Array]`
+
+
+
+Default value: ``false``
+
+##### <a name="provider"></a>`provider`
+
+Data type: `Any`
+
+
+
+Default value: ``false``
+
+##### <a name="source"></a>`source`
+
+Data type: `Variant[Boolean, String]`
+
+
+
+Default value: ``false``
+
+##### <a name="destination"></a>`destination`
+
+Data type: `Variant[Boolean, String]`
+
+
+
+Default value: ``false``
+
+##### <a name="order"></a>`order`
+
+Data type: `String`
+
+
+
+Default value: `'01'`
+
+##### <a name="config"></a>`config`
+
+Data type: `Hash`
+
+
+
+Default value: `{}`
+
+### <a name="collectdpluginpostgresqldatabase"></a>`collectd::plugin::postgresql::database`
+
+databasename allows you to create <Database> blocks with the same name of database,
+useful if you have multiple instances of different version of pg
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::postgresql::database` defined type:
+
+* [`ensure`](#ensure)
+* [`host`](#host)
+* [`databasename`](#databasename)
+* [`port`](#port)
+* [`user`](#user)
+* [`password`](#password)
+* [`sslmode`](#sslmode)
+* [`query`](#query)
+* [`interval`](#interval)
+* [`instance`](#instance)
+* [`krbsrvname`](#krbsrvname)
+* [`writer`](#writer)
+* [`service`](#service)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="host"></a>`host`
+
+Data type: `Optional[Stdlib::Host]`
+
+
+
+Default value: ``undef``
+
+##### <a name="databasename"></a>`databasename`
+
+Data type: `Any`
+
+
+
+Default value: `$name`
+
+##### <a name="port"></a>`port`
+
+Data type: `Optional[Stdlib::Port]`
+
+
+
+Default value: ``undef``
+
+##### <a name="user"></a>`user`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="password"></a>`password`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="sslmode"></a>`sslmode`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="query"></a>`query`
+
+Data type: `Any`
+
+
+
+Default value: `[]`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="instance"></a>`instance`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="krbsrvname"></a>`krbsrvname`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="writer"></a>`writer`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="service"></a>`service`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpostgresqlquery"></a>`collectd::plugin::postgresql::query`
+
+The collectd::plugin::postgresql::query class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::postgresql::query` defined type:
+
+* [`ensure`](#ensure)
+* [`statement`](#statement)
+* [`params`](#params)
+* [`results`](#results)
+* [`minversion`](#minversion)
+* [`maxversion`](#maxversion)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="statement"></a>`statement`
+
+Data type: `String`
+
+
+
+Default value: ``undef``
+
+##### <a name="params"></a>`params`
+
+Data type: `Array`
+
+
+
+Default value: `[]`
+
+##### <a name="results"></a>`results`
+
+Data type: `Array`
+
+
+
+Default value: `[{}]`
+
+##### <a name="minversion"></a>`minversion`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="maxversion"></a>`maxversion`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpostgresqlwriter"></a>`collectd::plugin::postgresql::writer`
+
+The collectd::plugin::postgresql::writer class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::postgresql::writer` defined type:
+
+* [`ensure`](#ensure)
+* [`statement`](#statement)
+* [`storerates`](#storerates)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="statement"></a>`statement`
+
+Data type: `String`
+
+
+
+Default value: ``undef``
+
+##### <a name="storerates"></a>`storerates`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpowerdnsrecursor"></a>`collectd::plugin::powerdns::recursor`
+
+The collectd::plugin::powerdns::recursor class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::powerdns::recursor` defined type:
+
+* [`ensure`](#ensure)
+* [`socket`](#socket)
+* [`collect`](#collect)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="socket"></a>`socket`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect"></a>`collect`
+
+Data type: `Array[String[1]]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginpowerdnsserver"></a>`collectd::plugin::powerdns::server`
+
+The collectd::plugin::powerdns::server class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::powerdns::server` defined type:
+
+* [`ensure`](#ensure)
+* [`socket`](#socket)
+* [`collect`](#collect)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="socket"></a>`socket`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect"></a>`collect`
+
+Data type: `Array[String[1]]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdpluginprocessesprocess"></a>`collectd::plugin::processes::process`
+
+The collectd::plugin::processes::process class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::processes::process` defined type:
+
+* [`process`](#process)
+* [`ensure`](#ensure)
+* [`collect_context_switch`](#collect_context_switch)
+* [`collect_file_descriptor`](#collect_file_descriptor)
+* [`collect_memory_maps`](#collect_memory_maps)
+
+##### <a name="process"></a>`process`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="collect_context_switch"></a>`collect_context_switch`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_file_descriptor"></a>`collect_file_descriptor`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_memory_maps"></a>`collect_memory_maps`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginprocessesprocessmatch"></a>`collectd::plugin::processes::processmatch`
+
+The collectd::plugin::processes::processmatch class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::processes::processmatch` defined type:
+
+* [`regex`](#regex)
+* [`ensure`](#ensure)
+* [`matchname`](#matchname)
+* [`collect_context_switch`](#collect_context_switch)
+* [`collect_file_descriptor`](#collect_file_descriptor)
+* [`collect_memory_maps`](#collect_memory_maps)
+
+##### <a name="regex"></a>`regex`
+
+Data type: `Any`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="matchname"></a>`matchname`
+
+Data type: `Any`
+
+
+
+Default value: `$name`
+
+##### <a name="collect_context_switch"></a>`collect_context_switch`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_file_descriptor"></a>`collect_file_descriptor`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+##### <a name="collect_memory_maps"></a>`collect_memory_maps`
+
+Data type: `Optional[Boolean]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginpythonmodule"></a>`collectd::plugin::python::module`
+
+Single module definition
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::python::module` defined type:
+
+* [`config`](#config)
+* [`ensure`](#ensure)
+* [`module`](#module)
+* [`module_import`](#module_import)
+* [`modulepath`](#modulepath)
+* [`script_source`](#script_source)
+
+##### <a name="config"></a>`config`
+
+Data type: `Array[Hash[String,Variant[String,Boolean,Numeric,Array[Variant[Boolean,String,Numeric]]]]]`
+
+
+
+Default value: `[]`
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present','absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="module"></a>`module`
+
+Data type: `String`
+
+
+
+Default value: `$title`
+
+##### <a name="module_import"></a>`module_import`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+##### <a name="modulepath"></a>`modulepath`
+
+Data type: `Optional[Stdlib::Absolutepath]`
+
+
+
+Default value: ``undef``
+
+##### <a name="script_source"></a>`script_source`
+
+Data type: `Optional[String]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdpluginsnmpdata"></a>`collectd::plugin::snmp::data`
+
+https://collectd.org/wiki/index.php/Plugin:SNMP
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::snmp::data` defined type:
+
+* [`instance`](#instance)
+* [`type`](#type)
+* [`values`](#values)
+* [`ensure`](#ensure)
+* [`instance_prefix`](#instance_prefix)
+* [`scale`](#scale)
+* [`shift`](#shift)
+* [`table`](#table)
+* [`ignore`](#ignore)
+* [`invert_match`](#invert_match)
+
+##### <a name="instance"></a>`instance`
+
+Data type: `String`
+
+
+
+##### <a name="type"></a>`type`
+
+Data type: `String[1]`
+
+
+
+##### <a name="values"></a>`values`
+
+Data type: `Variant[String[1], Array[String[1], 1]]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="instance_prefix"></a>`instance_prefix`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="scale"></a>`scale`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="shift"></a>`shift`
+
+Data type: `Optional[Numeric]`
+
+
+
+Default value: ``undef``
+
+##### <a name="table"></a>`table`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="ignore"></a>`ignore`
+
+Data type: `Optional[Variant[String[1], Array[String[1], 1]]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="invert_match"></a>`invert_match`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdpluginsnmphost"></a>`collectd::plugin::snmp::host`
+
+https://collectd.org/wiki/index.php/Plugin:SNMP
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::snmp::host` defined type:
+
+* [`collect`](#collect)
+* [`ensure`](#ensure)
+* [`address`](#address)
+* [`version`](#version)
+* [`interval`](#interval)
+* [`community`](#community)
+* [`username`](#username)
+* [`security_level`](#security_level)
+* [`context`](#context)
+* [`auth_protocol`](#auth_protocol)
+* [`auth_passphrase`](#auth_passphrase)
+* [`privacy_protocol`](#privacy_protocol)
+* [`privacy_passphrase`](#privacy_passphrase)
+
+##### <a name="collect"></a>`collect`
+
+Data type: `Variant[String[1], Array[String[1], 1]]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Enum['present', 'absent']`
+
+
+
+Default value: `'present'`
+
+##### <a name="address"></a>`address`
+
+Data type: `String[1]`
+
+
+
+Default value: `$name`
+
+##### <a name="version"></a>`version`
+
+Data type: `Collectd::SNMP::Version`
+
+
+
+Default value: `'1'`
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Optional[Integer[0]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="community"></a>`community`
+
+Data type: `String[1]`
+
+
+
+Default value: `'public'`
+
+##### <a name="username"></a>`username`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="security_level"></a>`security_level`
+
+Data type: `Optional[Collectd::SNMP::SecurityLevel]`
+
+
+
+Default value: ``undef``
+
+##### <a name="context"></a>`context`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="auth_protocol"></a>`auth_protocol`
+
+Data type: `Optional[Collectd::SNMP::AuthProtocol]`
+
+
+
+Default value: ``undef``
+
+##### <a name="auth_passphrase"></a>`auth_passphrase`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+##### <a name="privacy_protocol"></a>`privacy_protocol`
+
+Data type: `Optional[Collectd::SNMP::PrivacyProtocol]`
+
+
+
+Default value: ``undef``
+
+##### <a name="privacy_passphrase"></a>`privacy_passphrase`
+
+Data type: `Optional[String[1]]`
+
+
+
+Default value: ``undef``
+
+### <a name="collectdplugintailfile"></a>`collectd::plugin::tail::file`
+
+The collectd::plugin::tail::file class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::tail::file` defined type:
+
+* [`filename`](#filename)
+* [`instance`](#instance)
+* [`matches`](#matches)
+* [`ensure`](#ensure)
+
+##### <a name="filename"></a>`filename`
+
+Data type: `Stdlib::Absolutepath`
+
+
+
+##### <a name="instance"></a>`instance`
+
+Data type: `String`
+
+
+
+##### <a name="matches"></a>`matches`
+
+Data type: `Array[Hash]`
+
+
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+### <a name="collectdpluginwrite_graphitecarbon"></a>`collectd::plugin::write_graphite::carbon`
+
+a single graphite backend
+
+#### Parameters
+
+The following parameters are available in the `collectd::plugin::write_graphite::carbon` defined type:
+
+* [`ensure`](#ensure)
+* [`graphitehost`](#graphitehost)
+* [`graphiteport`](#graphiteport)
+* [`storerates`](#storerates)
+* [`graphiteprefix`](#graphiteprefix)
+* [`graphitepostfix`](#graphitepostfix)
+* [`interval`](#interval)
+* [`escapecharacter`](#escapecharacter)
+* [`alwaysappendds`](#alwaysappendds)
+* [`protocol`](#protocol)
+* [`separateinstances`](#separateinstances)
+* [`logsenderrors`](#logsenderrors)
+* [`reconnectinterval`](#reconnectinterval)
+* [`reversehost`](#reversehost)
+
+##### <a name="ensure"></a>`ensure`
+
+Data type: `Any`
+
+
+
+Default value: `'present'`
+
+##### <a name="graphitehost"></a>`graphitehost`
+
+Data type: `Stdlib::Host`
+
+
+
+Default value: `'localhost'`
+
+##### <a name="graphiteport"></a>`graphiteport`
+
+Data type: `Stdlib::Port`
+
+
+
+Default value: `2003`
+
+##### <a name="storerates"></a>`storerates`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="graphiteprefix"></a>`graphiteprefix`
+
+Data type: `Any`
+
+
+
+Default value: `'collectd.'`
+
+##### <a name="graphitepostfix"></a>`graphitepostfix`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="interval"></a>`interval`
+
+Data type: `Any`
+
+
+
+Default value: ``undef``
+
+##### <a name="escapecharacter"></a>`escapecharacter`
+
+Data type: `Any`
+
+
+
+Default value: `'_'`
+
+##### <a name="alwaysappendds"></a>`alwaysappendds`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="protocol"></a>`protocol`
+
+Data type: `Any`
+
+
+
+Default value: `'tcp'`
+
+##### <a name="separateinstances"></a>`separateinstances`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+##### <a name="logsenderrors"></a>`logsenderrors`
+
+Data type: `Boolean`
+
+
+
+Default value: ``true``
+
+##### <a name="reconnectinterval"></a>`reconnectinterval`
+
+Data type: `Integer`
+
+
+
+Default value: `0`
+
+##### <a name="reversehost"></a>`reversehost`
+
+Data type: `Boolean`
+
+
+
+Default value: ``false``
+
+### <a name="collectdtype"></a>`collectd::type`
+
+The collectd::type class.
+
+#### Parameters
+
+The following parameters are available in the `collectd::type` defined type:
+
+* [`target`](#target)
+* [`ds`](#ds)
+* [`ds_type`](#ds_type)
+* [`min`](#min)
+* [`max`](#max)
+* [`ds_name`](#ds_name)
+* [`types`](#types)
+
+##### <a name="target"></a>`target`
+
+Data type: `String`
+
+
+
+##### <a name="ds"></a>`ds`
+
+Data type: `String`
+
+
+
+Default value: `$name`
+
+##### <a name="ds_type"></a>`ds_type`
+
+Data type: `Optional[Enum['ABSOLUTE', 'COUNTER', 'DERIVE', 'GAUGE']]`
+
+
+
+Default value: ``undef``
+
+##### <a name="min"></a>`min`
+
+Data type: `Variant[Numeric, Enum['U']]`
+
+
+
+Default value: `'U'`
+
+##### <a name="max"></a>`max`
+
+Data type: `Variant[Numeric, Enum['U']]`
+
+
+
+Default value: `'U'`
+
+##### <a name="ds_name"></a>`ds_name`
+
+Data type: `String`
+
+
+
+Default value: `'value'`
+
+##### <a name="types"></a>`types`
+
+Data type: `Array[Struct[{
+        min     => Variant[Numeric, Enum['U']],
+        max     => Variant[Numeric, Enum['U']],
+        ds_type => Enum['ABSOLUTE', 'COUNTER', 'DERIVE', 'GAUGE'],
+        ds_name => String,
+  }]]`
+
+
+
+Default value: `[]`
+
+### <a name="collectdtypesdb"></a>`collectd::typesdb`
+
+This define initialize a collectd typesdb file
+
+#### Parameters
+
+The following parameters are available in the `collectd::typesdb` defined type:
+
+* [`path`](#path)
+* [`group`](#group)
+* [`mode`](#mode)
+* [`owner`](#owner)
+* [`include`](#include)
+
+##### <a name="path"></a>`path`
+
+Data type: `String`
+
+File path
+
+Default value: `$title`
+
+##### <a name="group"></a>`group`
+
+Data type: `String`
+
+File
+
+Default value: `$collectd::config_group`
+
+##### <a name="mode"></a>`mode`
+
+Data type: `String`
+
+File mode
+
+Default value: `$collectd::config_mode`
+
+##### <a name="owner"></a>`owner`
+
+Data type: `String`
+
+File owner
+
+Default value: `$collectd::config_owner`
+
+##### <a name="include"></a>`include`
+
+Data type: `Boolean`
+
+Include the file in the typesdb config (require collectd::purge_config at true)
+
+Default value: ``false``
+
+## Functions
+
+### <a name="collectdindent"></a>`collectd::indent`
+
+Type: Puppet Language
+
+The collectd::indent function.
+
+#### `collectd::indent(String $arg)`
+
+The collectd::indent function.
+
+Returns: `String`
+
+##### `arg`
+
+Data type: `String`
+
+
+
+### <a name="collectd_convert_processes"></a>`collectd_convert_processes`
+
+Type: Ruby 3.x API
+
+Converts the array from the old style to define process or processmatch in the
+processes plugin into a create_resources compatible hash which
+can be used with the new style define.
+
+Example:
+  [ { 'name' => 'foo', 'regex' => '.*' } , { 'name' => 'bar', 'regex' => '[0-9]+' },  "alone" ]
+will be converted to
+  { 'foo' => { 'regex' => '.*' } , 'bar' => { 'regex' => '[0-9]+' }, 'alone' => {} }
+
+#### `collectd_convert_processes()`
+
+Converts the array from the old style to define process or processmatch in the
+processes plugin into a create_resources compatible hash which
+can be used with the new style define.
+
+Example:
+  [ { 'name' => 'foo', 'regex' => '.*' } , { 'name' => 'bar', 'regex' => '[0-9]+' },  "alone" ]
+will be converted to
+  { 'foo' => { 'regex' => '.*' } , 'bar' => { 'regex' => '[0-9]+' }, 'alone' => {} }
+
+Returns: `Any`
+
+## Data types
+
+### <a name="collectdamqpformat"></a>`Collectd::Amqp::Format`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_amqp
+
+Alias of
+
+```puppet
+Enum['Command', 'JSON', 'Graphite']
+```
+
+### <a name="collectdbindview"></a>`Collectd::Bind::View`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_bind
+
+Alias of
+
+```puppet
+Struct[{
+  name          => String,
+  qtypes        => Optional[Boolean],
+  resolverstats => Optional[Boolean],
+  cacherrsets   => Optional[Boolean],
+  zones         => Optional[Array[String]],
+}]
+```
+
+### <a name="collectdfilterbuiltintarget"></a>`Collectd::Filter::Builtintarget`
+
+https://collectd.org/wiki/index.php/Chains#Built-in_targets
+
+Alias of
+
+```puppet
+Enum['jump', 'stop', 'return', 'write']
+```
+
+### <a name="collectdfiltermatch"></a>`Collectd::Filter::Match`
+
+https://collectd.org/wiki/index.php/Table_of_Matches
+
+Alias of
+
+```puppet
+Enum['empty_counter', 'hashed', 'regex', 'timediff', 'value']
+```
+
+### <a name="collectdfilterplugintarget"></a>`Collectd::Filter::Plugintarget`
+
+https://collectd.org/wiki/index.php/Table_of_Targets
+
+Alias of
+
+```puppet
+Enum['notification', 'replace', 'scale', 'set']
+```
+
+### <a name="collectdfiltertarget"></a>`Collectd::Filter::Target`
+
+https://collectd.org/wiki/index.php/Chains
+
+Alias of
+
+```puppet
+Variant[Collectd::Filter::Builtintarget, Collectd::Filter::Plugintarget]
+```
+
+### <a name="collectdlogparserlogfile"></a>`Collectd::LOGPARSER::Logfile`
+
+https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+
+Alias of
+
+```puppet
+Struct[{
+  'firstfullread' => Boolean,
+  'message' => Array[Hash[String[1],Collectd::LOGPARSER::Message]]
+}]
+```
+
+### <a name="collectdlogparsermatch"></a>`Collectd::LOGPARSER::Match`
+
+https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+
+Alias of
+
+```puppet
+Struct[{
+  'regex' => String,
+  Optional['submatchidx'] => Integer,
+  Optional['excluderegex'] => String,
+  Optional['ismandatory'] => Variant[Boolean, String],
+  Optional['severity'] => String,
+  Optional['plugininstance'] => Variant[Boolean, String],
+  Optional['type'] => Variant[Boolean, String],
+  Optional['typeinstance'] => Variant[Boolean, String],
+}]
+```
+
+### <a name="collectdlogparsermessage"></a>`Collectd::LOGPARSER::Message`
+
+https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+
+Alias of
+
+```puppet
+Struct[{
+  Optional['defaultplugininstance'] => String,
+  Optional['defaulttype'] => String,
+  Optional['defaulttypeinstance'] => String,
+  Optional['defaultseverity'] => String,
+  Optional['match'] => Array[Hash[String[1],Collectd::LOGPARSER::Match]]
+}]
+```
+
+### <a name="collectdmcelogmemory"></a>`Collectd::MCELOG::Memory`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+
+Alias of
+
+```puppet
+Struct[{
+  NotUndef['mcelogclientsocket'] => String[1],
+  NotUndef['persistentnotification'] => Boolean,
+}]
+```
+
+### <a name="collectdmanifestsinit"></a>`Collectd::Manifests::Init`
+
+The Collectd::Manifests::Init data type.
+
+Alias of
+
+```puppet
+Pattern[/(^5.4|^5.5|^5.6|^5.7|^5.8|^master)/]
+```
+
+### <a name="collectdnetworksecuritylevel"></a>`Collectd::Network::SecurityLevel`
+
+The Collectd::Network::SecurityLevel data type.
+
+Alias of
+
+```puppet
+Enum['Encrypt', 'Sign', 'None']
+```
+
+### <a name="collectdredisnode"></a>`Collectd::Redis::Node`
+
+The Collectd::Redis::Node data type.
+
+Alias of
+
+```puppet
+Struct[{Optional['host'] => String[1], Optional['port'] => Variant[Stdlib::Port, String[1]], Optional['password'] => String[1], Optional['timeout'] => Integer[0], Optional['queries'] => Hash[String[1], Hash[String[1], String[1]]]}]
+```
+
+### <a name="collectdsnmpauthprotocol"></a>`Collectd::SNMP::AuthProtocol`
+
+The Collectd::SNMP::AuthProtocol data type.
+
+Alias of
+
+```puppet
+Enum['MD5', 'SHA']
+```
+
+### <a name="collectdsnmpdata"></a>`Collectd::SNMP::Data`
+
+The Collectd::SNMP::Data data type.
+
+Alias of
+
+```puppet
+Struct[{Optional['instance'] => String, NotUndef['type'] => String[1], NotUndef['values'] => Variant[String[1], Array[String[1], 1]], Optional['instance_prefix'] => String[1], Optional['scale'] => Numeric, Optional['shift'] => Numeric, Optional['table'] => Boolean, Optional['ignore'] => Variant[String[1], Array[String[1], 1]], Optional['invert_match'] => Boolean}]
+```
+
+### <a name="collectdsnmphost"></a>`Collectd::SNMP::Host`
+
+The Collectd::SNMP::Host data type.
+
+Alias of
+
+```puppet
+Variant[Collectd::SNMP::Host::V2, Collectd::SNMP::Host::V3]
+```
+
+### <a name="collectdsnmphostv2"></a>`Collectd::SNMP::Host::V2`
+
+The Collectd::SNMP::Host::V2 data type.
+
+Alias of
+
+```puppet
+Struct[{NotUndef['address'] => String[1], NotUndef['version'] => Collectd::SNMP::Version::V2, NotUndef['community'] => String[1], NotUndef['collect'] => Variant[String[1], Array[String[1], 1]], Optional['interval'] => Integer[0]}]
+```
+
+### <a name="collectdsnmphostv3"></a>`Collectd::SNMP::Host::V3`
+
+The Collectd::SNMP::Host::V3 data type.
+
+Alias of
+
+```puppet
+Struct[{NotUndef['address'] => String[1], NotUndef['version'] => Collectd::SNMP::Version::V3, NotUndef['username'] => String[1], Optional['context'] => String[1], NotUndef['security_level'] => Collectd::SNMP::SecurityLevel, Optional['auth_protocol'] => Collectd::SNMP::AuthProtocol, Optional['auth_passphrase'] => String[1], Optional['privacy_protocol'] => Collectd::SNMP::PrivacyProtocol, Optional['privacy_passphrase'] => String[1], NotUndef['collect'] => Variant[String[1], Array[String[1], 1]], Optional['interval'] => Integer[0]}]
+```
+
+### <a name="collectdsnmpprivacyprotocol"></a>`Collectd::SNMP::PrivacyProtocol`
+
+The Collectd::SNMP::PrivacyProtocol data type.
+
+Alias of
+
+```puppet
+Enum['AES', 'DES']
+```
+
+### <a name="collectdsnmpsecuritylevel"></a>`Collectd::SNMP::SecurityLevel`
+
+The Collectd::SNMP::SecurityLevel data type.
+
+Alias of
+
+```puppet
+Enum['authPriv', 'authNoPriv', 'noAuthNoPriv']
+```
+
+### <a name="collectdsnmpversion"></a>`Collectd::SNMP::Version`
+
+The Collectd::SNMP::Version data type.
+
+Alias of
+
+```puppet
+Variant[Collectd::SNMP::Version::V2, Collectd::SNMP::Version::V3]
+```
+
+### <a name="collectdsnmpversionv2"></a>`Collectd::SNMP::Version::V2`
+
+The Collectd::SNMP::Version::V2 data type.
+
+Alias of
+
+```puppet
+Variant[Integer[1, 2], Enum['1', '2']]
+```
+
+### <a name="collectdsnmpversionv3"></a>`Collectd::SNMP::Version::V3`
+
+The Collectd::SNMP::Version::V3 data type.
+
+Alias of
+
+```puppet
+Variant[Integer[3, 3], Enum['3']]
+```
+
+### <a name="collectdsnmp_agentdata"></a>`Collectd::SNMP_AGENT::Data`
+
+https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+
+Alias of
+
+```puppet
+Struct[{
+  'plugin' => String,
+  'oids' => String,
+  Optional['type'] => String,
+  Optional['typeinstance'] => String,
+  Optional['scale'] => String,
+  Optional['shift'] => String,
+  Optional['indexkey'] => Collectd::SNMP_AGENT::IndexKey,
+  Optional['plugininstance'] => String,
+}]
+```
+
+### <a name="collectdsnmp_agentindexkey"></a>`Collectd::SNMP_AGENT::IndexKey`
+
+https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+
+Alias of
+
+```puppet
+Struct[=>]
+```
+
+### <a name="collectdsnmp_agenttable"></a>`Collectd::SNMP_AGENT::Table`
+
+https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+
+Alias of
+
+```puppet
+Struct[{
+  Optional['indexoid'] => String,
+  Optional['sizeoid'] => String,
+  Optional['data'] => Hash[String[1], Collectd::SNMP_AGENT::Data]
+}]
+```
+
+### <a name="collectdtableresult"></a>`Collectd::Table::Result`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_table
+
+Alias of
+
+```puppet
+Struct[{
+  'type'            => String,
+  'values_from'     => Array[Integer, 1],
+  'instance_prefix' => Optional[String],
+  'instances_from'  => Optional[Array[Integer, 1]]
+}]
+```
+
+### <a name="collectdtabletable"></a>`Collectd::Table::Table`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_table
+
+Alias of
+
+```puppet
+Struct[{
+  'plugin'    => Optional[String],
+  'separator' => Optional[String],
+  'instance'  => Optional[String],
+  'results'   => Array[Collectd::Table::Result, 1]
+}]
+```
+
+### <a name="collectdtail_csvfile"></a>`Collectd::Tail_Csv::File`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+
+Alias of
+
+```puppet
+Struct[{
+  'collect'   => Array[String, 1],
+  'plugin'    => Optional[String[1]],
+  'instance'  => Optional[String[1]],
+  'interval'  => Optional[Numeric],
+  'time_from' => Optional[Integer[0]],
+}]
+```
+
+### <a name="collectdtail_csvmetric"></a>`Collectd::Tail_Csv::Metric`
+
+https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail_csv
+
+Alias of
+
+```puppet
+Struct[{
+  'type'       => String[1],
+  'value_from' => Integer[0],
+  'instance'   => Optional[String[1]],
+}]
+```
+
+### <a name="collectdthresholdhost"></a>`Collectd::Threshold::Host`
+
+The Collectd::Threshold::Host data type.
+
+Alias of
+
+```puppet
+Struct[{
+  name    => String[1],
+  plugins => Optional[Array[Collectd::Threshold::Plugin]],
+  types   => Optional[Array[Collectd::Threshold::Type]],
+}]
+```
+
+### <a name="collectdthresholdplugin"></a>`Collectd::Threshold::Plugin`
+
+The Collectd::Threshold::Plugin data type.
+
+Alias of
+
+```puppet
+Struct[{
+  name     => String[1],
+  instance => Optional[String[1]],
+  types    => Optional[Array[Collectd::Threshold::Type]],
+}]
+```
+
+### <a name="collectdthresholdtype"></a>`Collectd::Threshold::Type`
+
+The Collectd::Threshold::Type data type.
+
+Alias of
+
+```puppet
+Struct[{
+  name        => String[1],
+  instance    => Optional[String[1]],
+  failure_max => Optional[Numeric],
+  warning_max => Optional[Numeric],
+  failure_min => Optional[Numeric],
+  warning_min => Optional[Numeric],
+  data_source => Optional[String[1]],
+  invert      => Optional[Boolean],
+  persist     => Optional[Boolean],
+  persist_ok  => Optional[Boolean],
+  percentage  => Optional[Boolean],
+  hits        => Optional[Integer],
+  hysteresis  => Optional[Integer],
+  interesting => Optional[Boolean],
+}]
+```
+
+### <a name="collectdwrite_riemannnode"></a>`Collectd::Write_riemann::Node`
+
+The Collectd::Write_riemann::Node data type.
+
+Alias of
+
+```puppet
+Struct[{
+  name                 => String[1],
+  host                 => Optional[String[1]],
+  port                 => Optional[Integer],
+  protocol             => Optional[Enum['TCP', 'TLS', 'UDP']],
+  tls_cert_file        => Optional[String[1]],
+  tls_ca_file          => Optional[String[1]],
+  tls_key_file         => Optional[String[1]],
+  batch                => Optional[Boolean],
+  batch_max_size       => Optional[Integer],
+  batch_flush_timeout  => Optional[Integer],
+  store_rates          => Optional[Boolean],
+  always_append_ds     => Optional[Boolean],
+  ttl_factor           => Optional[Float],
+  notifications        => Optional[Boolean],
+  check_thresholds     => Optional[Boolean],
+  event_service_prefix => Optional[String[1]],
+}]
+```
+
+## Tasks
+
+### <a name="getval"></a>`getval`
+
+Get a particular metric for a host
+
+**Supports noop?** false
+
+#### Parameters
+
+##### `metric`
+
+Data type: `String[1]`
+
+Name of metric, e.g. load/load-relative
+
+### <a name="listval"></a>`listval`
+
+Lists all available collectd metrics
+
+**Supports noop?** false
+
diff --git a/Rakefile b/Rakefile
index 09701d0..f92f051 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,52 +1,30 @@
-require 'puppetlabs_spec_helper/rake_tasks'
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 
-# load optional tasks for releases
-# only available if gem group releases is installed
+# Attempt to load voxpupuli-test (which pulls in puppetlabs_spec_helper),
+# otherwise attempt to load it directly.
 begin
-  require 'voxpupuli/release/rake_tasks'
+  require 'voxpupuli/test/rake'
 rescue LoadError
+  begin
+    require 'puppetlabs_spec_helper/rake_tasks'
+  rescue LoadError
+  end
 end
 
-PuppetLint.configuration.log_format = '%{path}:%{line}:%{check}:%{KIND}:%{message}'
-PuppetLint.configuration.absolute_classname_reverse = true
-
-exclude_paths = %w(
-  pkg/**/*
-  vendor/**/*
-  .vendor/**/*
-  spec/**/*
-)
-PuppetLint.configuration.ignore_paths = exclude_paths
-PuppetSyntax.exclude_paths = exclude_paths
-
-desc 'Auto-correct puppet-lint offenses'
-task 'lint:auto_correct' do
-  Rake::Task[:lint_fix].invoke
-end
-
-desc 'Run acceptance tests'
-RSpec::Core::RakeTask.new(:acceptance) do |t|
-  t.pattern = 'spec/acceptance'
+# load optional tasks for acceptance
+# only available if gem group releases is installed
+begin
+  require 'voxpupuli/acceptance/rake'
+rescue LoadError
 end
 
-desc 'Run tests'
-task test: [:release_checks]
-
-namespace :check do
-  desc 'Check for trailing whitespace'
-  task :trailing_whitespace do
-    Dir.glob('**/*.md', File::FNM_DOTMATCH).sort.each do |filename|
-      next if filename =~ %r{^((modules|acceptance|\.?vendor|spec/fixtures|pkg)/|REFERENCE.md)}
-      File.foreach(filename).each_with_index do |line, index|
-        if line =~ %r{\s\n$}
-          puts "#{filename} has trailing whitespace on line #{index + 1}"
-          exit 1
-        end
-      end
-    end
-  end
+# load optional tasks for releases
+# only available if gem group releases is installed
+begin
+  require 'voxpupuli/release/rake_tasks'
+rescue LoadError
 end
-Rake::Task[:release_checks].enhance ['check:trailing_whitespace']
 
 desc "Run main 'test' task and report merged results to coveralls"
 task test_with_coveralls: [:test] do
@@ -67,16 +45,28 @@ end
 
 begin
   require 'github_changelog_generator/task'
+  require 'puppet_blacksmith'
   GitHubChangelogGenerator::RakeTask.new :changelog do |config|
-    version = (Blacksmith::Modulefile.new).version
-    config.future_release = "v#{version}" if version =~ /^\d+\.\d+.\d+$/
+    metadata = Blacksmith::Modulefile.new
+    config.future_release = "v#{metadata.version}" if metadata.version =~ /^\d+\.\d+.\d+$/
     config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module."
     config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog}
     config.user = 'voxpupuli'
-    metadata_json = File.join(File.dirname(__FILE__), 'metadata.json')
-    metadata = JSON.load(File.read(metadata_json))
-    config.project = metadata['name']
+    config.project = metadata.metadata['name']
   end
+
+  # Workaround for https://github.com/github-changelog-generator/github-changelog-generator/issues/715
+  require 'rbconfig'
+  if RbConfig::CONFIG['host_os'] =~ /linux/
+    task :changelog do
+      puts 'Fixing line endings...'
+      changelog_file = File.join(__dir__, 'CHANGELOG.md')
+      changelog_txt = File.read(changelog_file)
+      new_contents = changelog_txt.gsub(%r{\r\n}, "\n")
+      File.open(changelog_file, "w") {|file| file.puts new_contents }
+    end
+  end
+
 rescue LoadError
 end
 # vim: syntax=ruby
diff --git a/debian/changelog b/debian/changelog
index 0be2783..71acfd5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+puppet-module-voxpupuli-collectd (14.0.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 22 Apr 2023 06:52:43 -0000
+
 puppet-module-voxpupuli-collectd (11.0.0-4) unstable; urgency=medium
 
   * Clean-up update-alternatives handling.
diff --git a/examples/plugins/ceph.pp b/examples/plugins/ceph.pp
index cc30b53..6b2aa03 100644
--- a/examples/plugins/ceph.pp
+++ b/examples/plugins/ceph.pp
@@ -1,7 +1,5 @@
 include collectd
 
 class { 'collectd::plugin::ceph':
-  osds          => [ 'osd.0', 'osd.1', 'osd.2'],
+  osds          => ['osd.0', 'osd.1', 'osd.2'],
 }
-
-
diff --git a/examples/plugins/filecount.pp b/examples/plugins/filecount.pp
index 993f426..9b75b13 100644
--- a/examples/plugins/filecount.pp
+++ b/examples/plugins/filecount.pp
@@ -7,11 +7,11 @@ class { 'collectd::plugin::filecount':
   },
 }
 
-collectd::plugin::filecount::directory {'foodir':
+collectd::plugin::filecount::directory { 'foodir':
   path => '/path/to/dir',
 }
 
-collectd::plugin::filecount::directory {'aborted-uploads':
+collectd::plugin::filecount::directory { 'aborted-uploads':
   path          => '/var/spool/foo/upload',
   pattern       => '.part.*',
   mtime         => '5m',
diff --git a/examples/plugins/memcached.pp b/examples/plugins/memcached.pp
index 36ab9b0..ed7ae7d 100644
--- a/examples/plugins/memcached.pp
+++ b/examples/plugins/memcached.pp
@@ -1,11 +1,11 @@
 include collectd
 
 class { 'collectd::plugin::memcached':
-    instances => {
-        'default' => {
-            'host'    => 'localhost',
-            'address' => '127.0.0.1',
-            'port'    => '11211',
+  instances => {
+    'default' => {
+      'host'    => 'localhost',
+      'address' => '127.0.0.1',
+      'port'    => '11211',
     },
   },
 }
diff --git a/examples/plugins/perl.pp b/examples/plugins/perl.pp
index 45235fa..b5eb2e4 100644
--- a/examples/plugins/perl.pp
+++ b/examples/plugins/perl.pp
@@ -17,14 +17,14 @@ collectd::plugin::perl::plugin { 'foo':
   order       => 99,
   config      => {
     'foo' => 'bar',
-    'key' => [ 'val1', 'val2' ],
+    'key' => ['val1', 'val2'],
   },
 }
 
 collectd::plugin::perl::plugin { 'bar':
   module          => 'B',
   enable_debugger => 'DProf',
-  include_dir     => ['/tmp', '/tmp/lib' ],
+  include_dir     => ['/tmp', '/tmp/lib'],
 }
 
 #collectd::plugin::perl {
@@ -44,10 +44,10 @@ collectd::plugin::perl::plugin {
       'foo'  => 'bar',
       'more' => {
         'complex' => 'structure',
-        'no'      => [ 'a', 'b' ],
+        'no'      => ['a', 'b'],
         'yes'     => {
           'last' => 'level',
-          'and'  => [ 'array' , 'thing' ],
+          'and'  => ['array' , 'thing'],
         },
       },
     },
diff --git a/examples/plugins/processes.pp b/examples/plugins/processes.pp
index e333e4d..df26ae9 100644
--- a/examples/plugins/processes.pp
+++ b/examples/plugins/processes.pp
@@ -1,9 +1,9 @@
 include collectd
 
 class { 'collectd::plugin::processes':
-  processes       => [ 'process1', 'process2' ],
+  processes       => ['process1', 'process2'],
   process_matches => [
-    { name  => 'process-all',
-      regex => 'process[0-9]' },
+    { name => 'process-all',
+    regex  => 'process[0-9]' },
   ],
 }
diff --git a/examples/plugins/snmp.pp b/examples/plugins/snmp.pp
index c8d81e0..8676dbc 100644
--- a/examples/plugins/snmp.pp
+++ b/examples/plugins/snmp.pp
@@ -1,7 +1,7 @@
 include collectd
 
-class {'collectd::plugin::snmp':
-  data  =>  {
+class { 'collectd::plugin::snmp':
+  data  => {
     amavis_incoming_messages => {
       'type'     => 'counter',
       'table'    => false,
@@ -19,4 +19,3 @@ class {'collectd::plugin::snmp':
     },
   },
 }
-
diff --git a/examples/purge_config.pp b/examples/purge_config.pp
index 858dcc4..fd69196 100644
--- a/examples/purge_config.pp
+++ b/examples/purge_config.pp
@@ -4,7 +4,6 @@ class { 'collectd':
   purge_config => true,
 }
 
-
 collectd::plugin { 'battery': }
 collectd::plugin { 'cpu': }
 collectd::plugin { 'df': }
@@ -18,4 +17,3 @@ collectd::plugin { 'memory': }
 collectd::plugin { 'processes': }
 collectd::plugin { 'swap': }
 collectd::plugin { 'users': }
-
diff --git a/lib/facter/collectd_version.rb b/lib/facter/collectd_version.rb
index 0be02fd..26a6f68 100644
--- a/lib/facter/collectd_version.rb
+++ b/lib/facter/collectd_version.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Fact: collectd_version
 #
 # Purpose: Retrieve collectd version if installed
@@ -10,7 +12,7 @@ Facter.add(:collectd_version) do
   setcode do
     if Facter::Util::Resolution.which('collectd')
       collectd_help = Facter::Util::Resolution.exec('collectd -h')
-      %r{^collectd ([\w\.]+), http://collectd\.org/}.match(collectd_help)[1]
+      %r{^collectd ([\w.]+), http://collectd\.org/}.match(collectd_help)[1]
     end
   end
 end
diff --git a/lib/facter/python_dir.rb b/lib/facter/python_dir.rb
index 7c2b000..332d93e 100644
--- a/lib/facter/python_dir.rb
+++ b/lib/facter/python_dir.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Fact: python_dir
 #
 # Purpose: Retrieve python package dir used by pip install
@@ -10,6 +12,14 @@ Facter.add(:python_dir) do
       else
         Facter::Util::Resolution.exec('python -c "import site; print(site.getsitepackages()[0])"')
       end
+    elsif Facter::Util::Resolution.which('python3')
+      if Facter.value(:osfamily) == 'RedHat'
+        Facter::Util::Resolution.exec('python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"')
+      else
+        Facter::Util::Resolution.exec('python3 -c "import site; print(site.getsitepackages()[0])"')
+      end
+    elsif File.exist?('/usr/libexec/platform-python')
+      Facter::Util::Resolution.exec('/usr/libexec/platform-python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"')
     else
       ''
     end
diff --git a/lib/puppet/parser/functions/collectd_convert_processes.rb b/lib/puppet/parser/functions/collectd_convert_processes.rb
index 83a9408..b9fb554 100644
--- a/lib/puppet/parser/functions/collectd_convert_processes.rb
+++ b/lib/puppet/parser/functions/collectd_convert_processes.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 Puppet::Parser::Functions.newfunction(:collectd_convert_processes, type: :rvalue, arity: 1, doc: <<-ENDDOC
     Converts the array from the old style to define process or processmatch in the
     processes plugin into a create_resources compatible hash which
@@ -7,27 +9,24 @@ Puppet::Parser::Functions.newfunction(:collectd_convert_processes, type: :rvalue
       [ { 'name' => 'foo', 'regex' => '.*' } , { 'name' => 'bar', 'regex' => '[0-9]+' },  "alone" ]
     will be converted to
       { 'foo' => { 'regex' => '.*' } , 'bar' => { 'regex' => '[0-9]+' }, 'alone' => {} }
-    ENDDOC
-                                     ) do |args|
-  if args.size != 1
-    raise(Puppet::ParseError, 'convert_process_array(): Needs exactly one argument')
-  end
+ENDDOC
+) do |args|
+  raise(Puppet::ParseError, 'convert_process_array(): Needs exactly one argument') if args.size != 1
 
   if args[0].is_a?(Hash)
     return args[0] # Keep normal hiera hash as-is
   end
 
   parray = args[0]
-  unless parray.is_a?(Array)
-    raise(Puppet::ParseError, 'convert_process_array(): Needs an array as argument')
-  end
+  raise(Puppet::ParseError, 'convert_process_array(): Needs an array as argument') unless parray.is_a?(Array)
 
   phash = {}
 
   parray.each do |p|
-    if p.is_a?(String)
+    case p
+    when String
       phash[p] = {}
-    elsif p.is_a?(Hash)
+    when Hash
       name = p.delete('name')
       phash[name] = p
     else
diff --git a/manifests/config.pp b/manifests/config.pp
index fe06e83..8b8d7b2 100644
--- a/manifests/config.pp
+++ b/manifests/config.pp
@@ -1,6 +1,5 @@
 # private
 class collectd::config inherits collectd {
-
   assert_private()
 
   $_conf_content = $collectd::purge_config ? {
@@ -41,6 +40,18 @@ class collectd::config inherits collectd {
     recurse => $collectd::recurse,
   }
 
-  File['collectd.d'] -> Concat <| tag == 'collectd' |>
+  if $_conf_content {
+    concat { 'collectd_typesdb':
+      ensure => present,
+      mode   => $collectd::config_mode,
+      owner  => $collectd::config_group,
+      path   => "${collectd::collectd_dir}/typesdb.conf",
+    }
 
+    concat::fragment { 'collectd_typesdb_header':
+      order   => '10',
+      content => template('collectd/typesdb.conf.erb'),
+      target  => 'collectd_typesdb',
+    }
+  }
 }
diff --git a/manifests/init.pp b/manifests/init.pp
index 0bab5ac..988fb4a 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,4 +1,10 @@
+# @summary installs and configures collectd
+# @example Install collectd utilities
+#  class{'collectd':
+#    utils => true,
+#  }
 #
+# @param utils Install collectd utilities package containing collectdctl, collectd-nagios
 class collectd (
   Boolean $autoloadplugin                              = $collectd::params::autoloadplugin,
   String $collectd_hostname                            = $collectd::params::collectd_hostname,
@@ -36,8 +42,8 @@ class collectd (
   Optional[Integer] $write_queue_limit_high            = $collectd::params::write_queue_limit_high,
   Optional[Integer] $write_queue_limit_low             = $collectd::params::write_queue_limit_low,
   Integer[1] $write_threads                            = $collectd::params::write_threads,
+  Boolean    $utils                                    = $collectd::params::utils,
 ) inherits collectd::params {
-
   $collectd_version_real = pick_default($facts['collectd_version'], $minimum_version)
 
   contain collectd::repo
@@ -45,8 +51,8 @@ class collectd (
   contain collectd::config
   contain collectd::service
 
-  Class['::collectd::repo']
-  ~> Class['::collectd::install']
+  Class['collectd::repo']
+  ~> Class['collectd::install']
   -> Class['collectd::config']
   ~> Class['collectd::service']
 }
diff --git a/manifests/install.pp b/manifests/install.pp
index ed3522f..a198bb9 100644
--- a/manifests/install.pp
+++ b/manifests/install.pp
@@ -1,6 +1,6 @@
-#
+# @summary installs collectd
+# @api private
 class collectd::install {
-
   assert_private()
 
   if $collectd::manage_package {
@@ -10,4 +10,10 @@ class collectd::install {
       install_options => $collectd::package_install_options,
     }
   }
+
+  if $collectd::utils and  ( $facts['os']['family'] == 'Debian' or ( $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'],'8') >= 0 )) {
+    package { 'collectd-utils':
+      ensure => $collectd::package_ensure,
+    }
+  }
 }
diff --git a/manifests/params.pp b/manifests/params.pp
index cd93919..8aa1155 100644
--- a/manifests/params.pp
+++ b/manifests/params.pp
@@ -1,9 +1,8 @@
 #
 class collectd::params {
-
   $autoloadplugin            = false
   $fqdnlookup                = true
-  $collectd_hostname         = $facts['hostname']
+  $collectd_hostname         = $facts['networking']['hostname']
   $conf_content              = undef
   $config_mode               = '0640'
   $config_owner              = 'root'
@@ -16,7 +15,7 @@ class collectd::params {
   $read_threads              = 5
   $write_threads             = 5
   $timeout                   = 2
-  $typesdb                   = [ '/usr/share/collectd/types.db' ]
+  $typesdb                   = ['/usr/share/collectd/types.db']
   $write_queue_limit_high    = undef
   $write_queue_limit_low     = undef
   $package_ensure            = 'present'
@@ -29,6 +28,7 @@ class collectd::params {
   $plugin_conf_dir_mode      = '0750'
   $ci_package_repo           = undef
   $package_keyserver         = 'keyserver.ubuntu.com'
+  $utils                     = false
 
   case $facts['kernel'] {
     'OpenBSD': { $has_wordexp = false }
@@ -37,7 +37,7 @@ class collectd::params {
 
   case $facts['os']['family'] {
     'Debian': {
-      $package_name       = [ 'collectd', 'collectd-core' ]
+      $package_name       = ['collectd', 'collectd-core']
       $package_provider   = 'apt'
       $collectd_dir       = '/etc/collectd'
       $plugin_conf_dir    = "${collectd_dir}/conf.d"
@@ -46,7 +46,10 @@ class collectd::params {
       $config_group       = 'root'
       $java_dir           = '/usr/share/collectd/java'
       $default_python_dir = '/usr/local/lib/python2.7/dist-packages'
-      $manage_repo        = $facts['os']['release']['full'] != '18.04'
+      $manage_repo        = $facts['os']['name'] ? {
+        'Ubuntu' => versioncmp($facts['os']['release']['full'], '18.04') < 0,
+        default  => versioncmp($facts['os']['release']['full'], '11') < 0 ,
+      }
       $package_configs    = {}
     }
     'Solaris': {
@@ -71,7 +74,10 @@ class collectd::params {
       $config_file        = '/etc/collectd.conf'
       $config_group       = 'root'
       $java_dir           = '/usr/share/collectd/java'
-      $default_python_dir = '/usr/lib/python2.7/site-packages'
+      $default_python_dir = $facts['os']['release']['major'] ? {
+        '7'     => '/usr/lib/python2.7/site-packages',
+        default => '/usr/lib/python3.6/site-packages',
+      }
       $manage_repo        = true
       $package_configs    = {
         ovs_events => 'ovs-events.conf',
diff --git a/manifests/plugin.pp b/manifests/plugin.pp
index ed13875..3d28b67 100644
--- a/manifests/plugin.pp
+++ b/manifests/plugin.pp
@@ -8,7 +8,6 @@ define collectd::plugin (
   $plugin   = $name,
   Optional[Integer] $flushinterval = undef,
 ) {
-
   include collectd
 
   $conf_dir = $collectd::plugin_conf_dir
diff --git a/manifests/plugin/aggregation.pp b/manifests/plugin/aggregation.pp
index 9347142..d525191 100644
--- a/manifests/plugin/aggregation.pp
+++ b/manifests/plugin/aggregation.pp
@@ -4,7 +4,6 @@ class collectd::plugin::aggregation (
   Optional[Integer[1]] $interval    = undef,
   Hash $aggregators                 = {},
 ) {
-
   include collectd
 
   collectd::plugin { 'aggregation':
diff --git a/manifests/plugin/aggregation/aggregator.pp b/manifests/plugin/aggregation/aggregator.pp
index 87a8590..6f7196b 100644
--- a/manifests/plugin/aggregation/aggregator.pp
+++ b/manifests/plugin/aggregation/aggregator.pp
@@ -18,7 +18,6 @@ define collectd::plugin::aggregation::aggregator (
   Optional[Boolean] $calculatemaximum     = undef,
   Optional[Boolean] $calculatestddev      = undef,
 ) {
-
   include collectd
   include collectd::plugin::aggregation
 
diff --git a/manifests/plugin/amqp.pp b/manifests/plugin/amqp.pp
index 85a169e..855a7f1 100644
--- a/manifests/plugin/amqp.pp
+++ b/manifests/plugin/amqp.pp
@@ -18,7 +18,6 @@ class collectd::plugin::amqp (
   Boolean $graphiteseparateinstances = false,
   Boolean $graphitealwaysappendds    = false,
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/amqp1.pp b/manifests/plugin/amqp1.pp
index f2e4c70..ac76144 100644
--- a/manifests/plugin/amqp1.pp
+++ b/manifests/plugin/amqp1.pp
@@ -27,7 +27,7 @@
 #  Service name or port number on which the AMQP 1.0 intermediary accepts
 #  connections. This argument must be a string, even if the numeric form
 #  is used.
-#  Defaults to '5672'
+#  Defaults to 5672
 #
 # [*user*]
 #  User part of credentials used to authenticate to the AMQP 1.0 intermediary.
@@ -47,6 +47,10 @@
 #  before attempting to reconnect.
 #  Defaults to 1
 #
+# [*send_queue_limit*]
+#  Limits the SentQueue to a defined value, helps to keep memory usage low
+#  when the write target does not respond.
+#
 # [*interval*]
 #  Interval setting for the plugin
 #  Defaults to undef
@@ -100,19 +104,19 @@
 #      preserved, i.e. passed through.
 #
 class collectd::plugin::amqp1 (
-  Enum['present', 'absent'] $ensure  = 'present',
-  Boolean $manage_package            = $collectd::manage_package,
-  String $transport                  = 'metrics',
-  Stdlib::Host $host                 = 'localhost',
-  String $port                       = '5672',
-  String $user                       = 'guest',
-  String $password                   = 'guest',
-  String $address                    = 'collectd',
-  Hash $instances                    = {},
-  Optional[Integer] $retry_delay     = undef,
-  Optional[Integer] $interval        = undef,
+  Enum['present', 'absent'] $ensure      = 'present',
+  Boolean $manage_package                = $collectd::manage_package,
+  String $transport                      = 'metrics',
+  Stdlib::Host $host                     = 'localhost',
+  Stdlib::Port $port                     = 5672,
+  String $user                           = 'guest',
+  String $password                       = 'guest',
+  String $address                        = 'collectd',
+  Hash $instances                        = {},
+  Optional[Integer] $retry_delay         = undef,
+  Optional[Integer[0]] $send_queue_limit = undef,
+  Optional[Integer] $interval            = undef,
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/apache.pp b/manifests/plugin/apache.pp
index 6843501..3cf9b4f 100644
--- a/manifests/plugin/apache.pp
+++ b/manifests/plugin/apache.pp
@@ -6,7 +6,6 @@ class collectd::plugin::apache (
   Optional[Integer[1]] $interval           = undef,
   Optional[Array] $package_install_options = $collectd::package_install_options,
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/battery.pp b/manifests/plugin/battery.pp
index 49b3320..8f1779a 100644
--- a/manifests/plugin/battery.pp
+++ b/manifests/plugin/battery.pp
@@ -40,7 +40,6 @@ class collectd::plugin::battery (
   Boolean $report_degraded            = false,
   Boolean $query_state_fs             = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'battery':
diff --git a/manifests/plugin/bind.pp b/manifests/plugin/bind.pp
index a69888b..cfe6072 100644
--- a/manifests/plugin/bind.pp
+++ b/manifests/plugin/bind.pp
@@ -13,7 +13,6 @@ class collectd::plugin::bind (
   Array[Collectd::Bind::View] $views = [],
   Optional[Integer[1]] $interval     = undef,
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/ceph.pp b/manifests/plugin/ceph.pp
index c63c9ea..734dcfa 100644
--- a/manifests/plugin/ceph.pp
+++ b/manifests/plugin/ceph.pp
@@ -41,7 +41,6 @@ class collectd::plugin::ceph (
   Boolean $manage_package            = $collectd::manage_package,
   String $package_name               = 'collectd-ceph'
 ) {
-
   include collectd
 
   if $manage_package {
diff --git a/manifests/plugin/cgroups.pp b/manifests/plugin/cgroups.pp
index 3c0f7c9..ca9091b 100644
--- a/manifests/plugin/cgroups.pp
+++ b/manifests/plugin/cgroups.pp
@@ -5,7 +5,6 @@ class collectd::plugin::cgroups (
   Boolean $ignore_selected          = false,
   Optional[Integer[1]] $interval    = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'cgroups':
diff --git a/manifests/plugin/chain.pp b/manifests/plugin/chain.pp
index 0c4d9ad..b4253cd 100644
--- a/manifests/plugin/chain.pp
+++ b/manifests/plugin/chain.pp
@@ -5,7 +5,6 @@ class collectd::plugin::chain (
   Collectd::Filter::Target $defaulttarget = 'write',
   Array $rules                            = []
 ) {
-
   include collectd
 
   $conf_dir = $collectd::plugin_conf_dir
diff --git a/manifests/plugin/connectivity.pp b/manifests/plugin/connectivity.pp
index d30724b..5568748 100644
--- a/manifests/plugin/connectivity.pp
+++ b/manifests/plugin/connectivity.pp
@@ -24,7 +24,6 @@ class collectd::plugin::connectivity (
   Boolean $manage_package           = $collectd::manage_package,
   Array[String[1]] $interfaces      = [],
 ) {
-
   include collectd
 
   if $manage_package and $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/conntrack.pp b/manifests/plugin/conntrack.pp
index f870f89..cdf1545 100644
--- a/manifests/plugin/conntrack.pp
+++ b/manifests/plugin/conntrack.pp
@@ -2,7 +2,6 @@
 class collectd::plugin::conntrack (
   Enum['present', 'absent'] $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'conntrack':
diff --git a/manifests/plugin/contextswitch.pp b/manifests/plugin/contextswitch.pp
index 07e1be5..d023d7f 100644
--- a/manifests/plugin/contextswitch.pp
+++ b/manifests/plugin/contextswitch.pp
@@ -3,7 +3,6 @@ class collectd::plugin::contextswitch (
   Enum['present', 'absent'] $ensure   = 'present',
   Optional[Integer[1]] $interval      = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'contextswitch':
diff --git a/manifests/plugin/cpu.pp b/manifests/plugin/cpu.pp
index d019953..bb9a1d1 100644
--- a/manifests/plugin/cpu.pp
+++ b/manifests/plugin/cpu.pp
@@ -9,7 +9,6 @@ class collectd::plugin::cpu (
   Boolean $subtractgueststate       = true,
   Optional[Integer[1]] $interval    = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'cpu':
diff --git a/manifests/plugin/cpufreq.pp b/manifests/plugin/cpufreq.pp
index 1951ab3..fce68b4 100644
--- a/manifests/plugin/cpufreq.pp
+++ b/manifests/plugin/cpufreq.pp
@@ -2,7 +2,6 @@
 class collectd::plugin::cpufreq (
   Enum['present', 'absent'] $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'cpufreq':
diff --git a/manifests/plugin/csv.pp b/manifests/plugin/csv.pp
index 8b3b7b7..ce9b2dd 100644
--- a/manifests/plugin/csv.pp
+++ b/manifests/plugin/csv.pp
@@ -5,7 +5,6 @@ class collectd::plugin::csv (
   $interval   = undef,
   $storerates = false
 ) {
-
   include collectd
 
   collectd::plugin { 'csv':
diff --git a/manifests/plugin/cuda.pp b/manifests/plugin/cuda.pp
index 6d7ad9a..59694db 100644
--- a/manifests/plugin/cuda.pp
+++ b/manifests/plugin/cuda.pp
@@ -11,30 +11,47 @@
 # @param package_provider Optional[String] Passed to package resource. Default: pip
 # @param provider_proxy Optional[String] Proxy for provider. Default: undef
 class collectd::plugin::cuda (
-  Optional[String] $ensure           = 'present',
-  Optional[Boolean] $manage_package   = undef,
-  Optional[String] $package_name     = 'collectd-cuda',
-  Optional[String] $package_provider = 'pip',
-  Optional[String] $provider_proxy   = undef,
+  Enum['present', 'absent'] $ensure     = 'present',
+  Optional[Boolean] $manage_package     = undef,
+  String[1] $package_name               = 'collectd-cuda',
+  Optional[String[1]] $package_provider = undef,
+  Optional[String[1]] $provider_proxy   = undef,
 ) {
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
+  if ($facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8') or ($facts['os']['name'] == 'Ubuntu' and $facts['os']['release']['major'] == '20.04') {
+    $_python_pip_package = 'python3-pip'
+    if $package_provider =~ Undef {
+      $_package_provider = 'pip3'
+    }
+    else {
+      $_package_provider = $package_provider
+    }
+  } else {
+    $_python_pip_package = 'python-pip'
+    if $package_provider =~ Undef {
+      $_package_provider = 'pip'
+    }
+    else {
+      $_package_provider = $package_provider
+    }
+  }
 
   if ($_manage_package) {
-    if (!defined(Package['python-pip'])) {
-      package { 'python-pip': ensure => 'present', }
+    if (!defined(Package[$_python_pip_package])) {
+      package { $_python_pip_package: ensure => 'present', }
 
       Package[$package_name] {
-        require => Package['python-pip'],
+        require => Package[$_python_pip_package],
       }
 
       if $facts['os']['family'] == 'RedHat' {
         # Epel is installed in install.pp if manage_repo is true
         # python-pip doesn't exist in base for RedHat. Need epel installed first
-        if (defined(Class['::epel'])) {
-          Package['python-pip'] {
-            require => Class['::epel'],
+        if (defined(Class['epel'])) {
+          Package[$_python_pip_package] {
+            require => Class['epel'],
           }
         }
       }
@@ -42,14 +59,14 @@ class collectd::plugin::cuda (
   }
 
   if ($_manage_package) and ($provider_proxy) {
-    $install_options = [{'--proxy' => $provider_proxy}]
+    $install_options = [{ '--proxy' => $provider_proxy }]
   } else {
     $install_options = undef
   }
 
   package { $package_name:
     ensure          => $ensure,
-    provider        => $package_provider,
+    provider        => $_package_provider,
     install_options => $install_options,
   }
 
diff --git a/manifests/plugin/curl.pp b/manifests/plugin/curl.pp
index 91c48cd..236082b 100644
--- a/manifests/plugin/curl.pp
+++ b/manifests/plugin/curl.pp
@@ -3,9 +3,8 @@ class collectd::plugin::curl (
   $ensure         = 'present',
   $manage_package = undef,
   $interval       = undef,
-  $pages          = { },
+  $pages          = {},
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/curl/page.pp b/manifests/plugin/curl/page.pp
index 9d91b3f..758607c 100644
--- a/manifests/plugin/curl/page.pp
+++ b/manifests/plugin/curl/page.pp
@@ -13,7 +13,6 @@ define collectd::plugin::curl::page (
   Optional[Array[Hash]] $matches         = undef,
   String $plugininstance                 = $name, # You can have multiple <Page> with the same name.
 ) {
-
   include collectd
   include collectd::plugin::curl
 
diff --git a/manifests/plugin/curl_json.pp b/manifests/plugin/curl_json.pp
index a418214..d1895b5 100644
--- a/manifests/plugin/curl_json.pp
+++ b/manifests/plugin/curl_json.pp
@@ -18,18 +18,13 @@ define collectd::plugin::curl_json (
   $order          = '10',
   $manage_package = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
 
   if $_manage_package {
     if $facts['os']['family'] == 'Debian' {
-      $libyajl_package = $facts['os']['distro']['codename'] ? {
-        'precise' => 'libyajl1',
-        default   => 'libyajl2'
-      }
-      ensure_packages($libyajl_package)
+      ensure_packages('libyajl2')
     }
 
     if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/dbi.pp b/manifests/plugin/dbi.pp
index 668e183..8bb68e1 100644
--- a/manifests/plugin/dbi.pp
+++ b/manifests/plugin/dbi.pp
@@ -1,13 +1,12 @@
 # https://collectd.org/wiki/index.php/Plugin:DBI
 class collectd::plugin::dbi (
   $ensure         = 'present',
-  $databases      = { },
-  $queries        = { },
+  $databases      = {},
+  $queries        = {},
   $packages       = undef,
   $interval       = undef,
   $manage_package = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/dbi/database.pp b/manifests/plugin/dbi/database.pp
index b4120b6..88c8f28 100644
--- a/manifests/plugin/dbi/database.pp
+++ b/manifests/plugin/dbi/database.pp
@@ -2,18 +2,18 @@
 #
 define collectd::plugin::dbi::database (
   String $driver,
-  String $ensure             = 'present',
-  Optional[String] $host     = undef,
-  String $databasename       = $name,
-  Hash $driveroption         = {},
-  Optional[String] $selectdb = undef,
-  Array $query               = [],
+  String $ensure                          = 'present',
+  Optional[String] $host                  = undef,
+  String $databasename                    = $name,
+  Hash $driveroption                      = {},
+  Optional[String] $selectdb              = undef,
+  Array $query                            = [],
+  Optional[Integer[1]] $db_query_interval = undef,
 ) {
-
   include collectd
   include collectd::plugin::dbi
 
-  concat::fragment{ "collectd_plugin_dbi_conf_db_${title}":
+  concat::fragment { "collectd_plugin_dbi_conf_db_${title}":
     order   => '50',
     target  => "${collectd::plugin_conf_dir}/dbi-config.conf",
     content => template('collectd/plugin/dbi/database.conf.erb'),
diff --git a/manifests/plugin/dbi/query.pp b/manifests/plugin/dbi/query.pp
index b0fe71c..f465a6c 100644
--- a/manifests/plugin/dbi/query.pp
+++ b/manifests/plugin/dbi/query.pp
@@ -9,7 +9,7 @@ define collectd::plugin::dbi::query (
   include collectd
   include collectd::plugin::dbi
 
-  concat::fragment{ "collectd_plugin_dbi_conf_query_${title}":
+  concat::fragment { "collectd_plugin_dbi_conf_query_${title}":
     order   => '30',
     target  => "${collectd::plugin_conf_dir}/dbi-config.conf",
     content => template('collectd/plugin/dbi/query.conf.erb'),
diff --git a/manifests/plugin/dcpmm.pp b/manifests/plugin/dcpmm.pp
new file mode 100644
index 0000000..04b15f6
--- /dev/null
+++ b/manifests/plugin/dcpmm.pp
@@ -0,0 +1,34 @@
+# Class to manage dcpmm plugin for collectd.
+#
+# The dcpmm plugin will collect Intel(R) Optane(TM) DC Persistent Memory related performance statistics.
+# Plugin requires root privileges to perform the statistics collection.
+#
+# @param ensure Ensure param for collectd::plugin type.
+# @param interval Sets interval (in seconds) in which the values will be collected.
+# @param collect_health Collects health information. collect_health and collect_perf_metrics cannot be true at the same time.
+# @param collect_perf_metrics Collects memory performance metrics. collect_health and collect_perf_metrics cannot be true at the same time.
+# @param enable_dispatch_all This parameter helps to seamlessly enable simultaneous health and memory perf metrics collection in future. Unused at the moment and must always be false.
+#
+class collectd::plugin::dcpmm (
+  Enum['present', 'absent'] $ensure               = 'present',
+  Float                     $interval             = 10.0,
+  Boolean                   $collect_health       = false,
+  Boolean                   $collect_perf_metrics = true,
+  Boolean                   $enable_dispatch_all  = false,
+
+) {
+  include collectd
+
+  if $collect_health and $collect_perf_metrics {
+    fail('collect_health and collect_perf_metrics cannot be true at the same time.')
+  }
+
+  if $enable_dispatch_all {
+    fail('enable_dispatch_all is unused at the moment and must always be false.')
+  }
+
+  collectd::plugin { 'dcpmm':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/dcpmm.conf.epp'),
+  }
+}
diff --git a/manifests/plugin/df.pp b/manifests/plugin/df.pp
index 84f85d2..6d72417 100644
--- a/manifests/plugin/df.pp
+++ b/manifests/plugin/df.pp
@@ -12,7 +12,6 @@ class collectd::plugin::df (
   Boolean $valuesabsolute   = true,
   Boolean $valuespercentage = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'df':
diff --git a/manifests/plugin/disk.pp b/manifests/plugin/disk.pp
index 9fadec6..94336c6 100644
--- a/manifests/plugin/disk.pp
+++ b/manifests/plugin/disk.pp
@@ -9,16 +9,16 @@ class collectd::plugin::disk (
   $udevnameattr           = undef,
   Optional[Array[String]] $package_install_options = undef
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
     if $manage_package != undef {
       $_manage_package = $manage_package
     } else {
-      if versioncmp($collectd::collectd_version_real, '5.5') >= 0 {
+      if versioncmp($collectd::collectd_version_real, '5.5') >= 0
+      and versioncmp($facts['os']['release']['major'],'8') >= 0 {
         $_manage_package = true
-    } else {
+      } else {
         $_manage_package = false
       }
     }
diff --git a/manifests/plugin/dns.pp b/manifests/plugin/dns.pp
index f58a940..a9668c3 100644
--- a/manifests/plugin/dns.pp
+++ b/manifests/plugin/dns.pp
@@ -1,15 +1,14 @@
 # Class: collectd::plugin::dns
 #
 class collectd::plugin::dns (
-  Enum['present','absent'] $ensure                   = 'present',
-  Optional[Stdlib::Compat::Ip_address] $ignoresource = undef,
-  String $interface                                  = 'any',
-  Optional[String] $interval                         = undef,
-  $manage_package                                    = undef,
-  $package_name                                      = 'collectd-dns',
-  Variant[String,Boolean] $selectnumericquerytypes   = true,
+  Enum['present','absent'] $ensure                 = 'present',
+  Optional[Stdlib::IP::Address] $ignoresource      = undef,
+  String $interface                                = 'any',
+  Optional[String] $interval                       = undef,
+  $manage_package                                  = undef,
+  $package_name                                    = 'collectd-dns',
+  Variant[String,Boolean] $selectnumericquerytypes = true,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/dpdk_telemetry.pp b/manifests/plugin/dpdk_telemetry.pp
new file mode 100644
index 0000000..cf606f2
--- /dev/null
+++ b/manifests/plugin/dpdk_telemetry.pp
@@ -0,0 +1,27 @@
+# Class to manage dpdk_telemetry plugin for collectd.
+#
+# The dpdk_telemetry plugin collects DPDK ethernet device metrics via
+# dpdk_telemetry library.
+#
+# Plugin retrieves metrics from a DPDK packet forwarding application
+# by sending the JSON formatted message via a UNIX domain socket.
+# DPDK telemetry component will respond with a JSON formatted reply
+# delivering the requested metrics. Plugin parses the JSON data
+# and publishes the metric values to collectd for further use.
+#
+# @param ensure Ensure param for collectd::plugin type.
+# @param client_socket_path UNIX domain client socket to receive messages from DPDK telemetry library.
+# @param dpdk_socket_path UNIX domain DPDK telemetry socket to be connected to send messages.
+#
+class collectd::plugin::dpdk_telemetry (
+  Enum['present', 'absent'] $ensure             = 'present',
+  Stdlib::Absolutepath      $client_socket_path = '/var/run/.client',
+  Stdlib::Absolutepath      $dpdk_socket_path   = '/var/run/dpdk/rte/telemetry',
+) {
+  include collectd
+
+  collectd::plugin { 'dpdk_telemetry':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/dpdk_telemetry.conf.epp'),
+  }
+}
diff --git a/manifests/plugin/entropy.pp b/manifests/plugin/entropy.pp
index 0c80224..0c0b2ee 100644
--- a/manifests/plugin/entropy.pp
+++ b/manifests/plugin/entropy.pp
@@ -3,7 +3,6 @@ class collectd::plugin::entropy (
   $ensure   = 'present',
   $interval = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'entropy':
diff --git a/manifests/plugin/ethstat.pp b/manifests/plugin/ethstat.pp
index a5e7ff4..f02941a 100644
--- a/manifests/plugin/ethstat.pp
+++ b/manifests/plugin/ethstat.pp
@@ -6,7 +6,6 @@ class collectd::plugin::ethstat (
   $mappedonly       = false,
   $interval         = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'ethstat':
diff --git a/manifests/plugin/exec.pp b/manifests/plugin/exec.pp
index 6ffe10b..c63f109 100644
--- a/manifests/plugin/exec.pp
+++ b/manifests/plugin/exec.pp
@@ -6,7 +6,6 @@ class collectd::plugin::exec (
   $ensure                 = 'present',
   Boolean $globals        = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'exec':
@@ -18,7 +17,7 @@ class collectd::plugin::exec (
   # should be loaded after global plugin configuration
   $exec_conf = "${collectd::plugin_conf_dir}/exec-config.conf"
 
-  concat{ $exec_conf:
+  concat { $exec_conf:
     ensure         => $ensure,
     mode           => $collectd::config_mode,
     owner          => $collectd::config_owner,
@@ -27,13 +26,13 @@ class collectd::plugin::exec (
     ensure_newline => true,
   }
 
-  concat::fragment{ 'collectd_plugin_exec_conf_header':
+  concat::fragment { 'collectd_plugin_exec_conf_header':
     order   => '00',
     content => '<Plugin exec>',
     target  => $exec_conf,
   }
 
-  concat::fragment{ 'collectd_plugin_exec_conf_footer':
+  concat::fragment { 'collectd_plugin_exec_conf_footer':
     order   => '99',
     content => '</Plugin>',
     target  => $exec_conf,
diff --git a/manifests/plugin/exec/cmd.pp b/manifests/plugin/exec/cmd.pp
index 34e77b1..3bf93cb 100644
--- a/manifests/plugin/exec/cmd.pp
+++ b/manifests/plugin/exec/cmd.pp
@@ -4,11 +4,10 @@ define collectd::plugin::exec::cmd (
   Array $exec              = [],
   Array $notification_exec = [],
 ) {
-
   include collectd
   include collectd::plugin::exec
 
-  concat::fragment{ "collectd_plugin_exec_conf_${title}":
+  concat::fragment { "collectd_plugin_exec_conf_${title}":
     order   => '50', # somewhere between header and footer
     target  => $collectd::plugin::exec::exec_conf,
     content => template('collectd/plugin/exec/cmd.conf.erb'),
diff --git a/manifests/plugin/fhcount.pp b/manifests/plugin/fhcount.pp
index f396c99..6f1177f 100644
--- a/manifests/plugin/fhcount.pp
+++ b/manifests/plugin/fhcount.pp
@@ -5,7 +5,6 @@ class collectd::plugin::fhcount (
   Boolean $valuespercentage = false,
   $interval                 = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'fhcount':
diff --git a/manifests/plugin/filecount.pp b/manifests/plugin/filecount.pp
index ede5dd0..28d065a 100644
--- a/manifests/plugin/filecount.pp
+++ b/manifests/plugin/filecount.pp
@@ -4,14 +4,13 @@ class collectd::plugin::filecount (
   Hash $directories = {},
   $interval         = undef,
 ) {
-
   include collectd
 
   # We support two formats for directories:
   #  - new: hash for create_resources collectd::plugin::filecount::directory
   #  - old: backward compatibility, simple instance => path hash
   $values = values($directories)
-  if size($values) > 0 and is_hash($values[0]) {
+  if size($values) > 0 and $values[0] =~ Hash {
     $content = undef
     $directories.each |String $resource, Hash $attributes| {
       collectd::plugin::filecount::directory { $resource:
diff --git a/manifests/plugin/filecount/directory.pp b/manifests/plugin/filecount/directory.pp
index 7418d67..3eba6da 100644
--- a/manifests/plugin/filecount/directory.pp
+++ b/manifests/plugin/filecount/directory.pp
@@ -9,7 +9,6 @@ define collectd::plugin::filecount::directory (
   Optional[Boolean] $recursive      = undef,
   Optional[Boolean] $includehidden  = undef,
 ) {
-
   include collectd
   include collectd::plugin::filecount
 
diff --git a/manifests/plugin/filter.pp b/manifests/plugin/filter.pp
index 152387f..218d6e1 100644
--- a/manifests/plugin/filter.pp
+++ b/manifests/plugin/filter.pp
@@ -21,8 +21,7 @@ class collectd::plugin::filter (
 
   unless $ensure == 'present' {
     #kick all filter specifc plugins
-    ensure_resource('collectd::plugin', prefix($plugin_matches,'match_'), { 'ensure' => 'absent', 'order' => '02'} )
-    ensure_resource('collectd::plugin', prefix($plugin_targets,'target_'), { 'ensure' => 'absent', 'order' => '02'} )
+    ensure_resource('collectd::plugin', prefix($plugin_matches,'match_'), { 'ensure' => 'absent', 'order' => '02' })
+    ensure_resource('collectd::plugin', prefix($plugin_targets,'target_'), { 'ensure' => 'absent', 'order' => '02' })
   }
-
 }
diff --git a/manifests/plugin/filter/chain.pp b/manifests/plugin/filter/chain.pp
index 3bba55d..ac22b7f 100644
--- a/manifests/plugin/filter/chain.pp
+++ b/manifests/plugin/filter/chain.pp
@@ -4,13 +4,12 @@ define collectd::plugin::filter::chain (
   Optional[Collectd::Filter::Target] $target = undef,
   Optional[Hash] $target_options             = undef,
 ) {
-
   include collectd
   include collectd::plugin::filter
 
   $conf_file = "${collectd::plugin_conf_dir}/filter-chain-${title}.conf"
 
-  concat{ $conf_file:
+  concat { $conf_file:
     ensure         => $ensure,
     mode           => $collectd::config_mode,
     owner          => $collectd::config_owner,
@@ -20,13 +19,13 @@ define collectd::plugin::filter::chain (
   }
 
   if $ensure == 'present' {
-    concat::fragment{ "${conf_file}_${title}_head":
+    concat::fragment { "${conf_file}_${title}_head":
       order   => '00',
       content => "<Chain \"${title}\">",
       target  => $conf_file,
     }
 
-    concat::fragment{ "${conf_file}_${title}_footer":
+    concat::fragment { "${conf_file}_${title}_footer":
       order   => '99',
       content => '</Chain>',
       target  => $conf_file,
@@ -34,7 +33,7 @@ define collectd::plugin::filter::chain (
 
     #add simple target if provided at the end
     if $target {
-      collectd::plugin::filter::target{ "z_chain-${title}-target":
+      collectd::plugin::filter::target { "z_chain-${title}-target":
         chain   => $title,
         plugin  => $target,
         rule    => undef,
diff --git a/manifests/plugin/filter/match.pp b/manifests/plugin/filter/match.pp
index 517aa0b..6848203 100644
--- a/manifests/plugin/filter/match.pp
+++ b/manifests/plugin/filter/match.pp
@@ -5,16 +5,15 @@ define collectd::plugin::filter::match (
   Collectd::Filter::Match $plugin,
   Optional[Hash] $options = undef,
 ) {
-
   include collectd
   include collectd::plugin::filter
 
-  ensure_resource('collectd::plugin', "match_${plugin}", { 'order' => '02'} )
+  ensure_resource('collectd::plugin', "match_${plugin}", { 'order' => '02' })
 
   $fragment_order = "10_${rule}_1_${title}"
   $conf_file = "${collectd::plugin_conf_dir}/filter-chain-${chain}.conf"
 
-  concat::fragment{ "${conf_file}_${fragment_order}":
+  concat::fragment { "${conf_file}_${fragment_order}":
     order   => $fragment_order,
     content => template('collectd/plugin/filter/match.erb'),
     target  => $conf_file,
diff --git a/manifests/plugin/filter/rule.pp b/manifests/plugin/filter/rule.pp
index b4a3c8c..65d9050 100644
--- a/manifests/plugin/filter/rule.pp
+++ b/manifests/plugin/filter/rule.pp
@@ -2,20 +2,19 @@
 define collectd::plugin::filter::rule (
   String $chain,
 ) {
-
   include collectd
   include collectd::plugin::filter
 
   $fragment_order = "10_${title}"
   $conf_file = "${collectd::plugin_conf_dir}/filter-chain-${chain}.conf"
 
-  concat::fragment{ "${conf_file}_${fragment_order}_0":
+  concat::fragment { "${conf_file}_${fragment_order}_0":
     order   => "${fragment_order}_0",
     content => "  <Rule \"${title}\">",
     target  => $conf_file,
   }
 
-  concat::fragment{ "${conf_file}_${fragment_order}_99":
+  concat::fragment { "${conf_file}_${fragment_order}_99":
     order   => "${fragment_order}_99",
     content => '  </Rule>',
     target  => $conf_file,
diff --git a/manifests/plugin/filter/target.pp b/manifests/plugin/filter/target.pp
index 3757a22..068d3ac 100644
--- a/manifests/plugin/filter/target.pp
+++ b/manifests/plugin/filter/target.pp
@@ -5,14 +5,13 @@ define collectd::plugin::filter::target (
   Optional[Hash] $options = undef,
   Optional[String] $rule  = undef,
 ) {
-
   include collectd
   include collectd::plugin::filter
 
   # Load plugins
   if $plugin in $collectd::plugin::filter::plugin_targets {
     $order = 30
-    ensure_resource('collectd::plugin', "target_${plugin}", { 'order' => '02'} )
+    ensure_resource('collectd::plugin', "target_${plugin}", { 'order' => '02' })
   } else {
     # Built in plugins
     $order = 50
@@ -28,7 +27,7 @@ define collectd::plugin::filter::target (
 
   $conf_file = "${collectd::plugin_conf_dir}/filter-chain-${chain}.conf"
 
-  concat::fragment{ "${conf_file}_${fragment_order}":
+  concat::fragment { "${conf_file}_${fragment_order}":
     order   => $fragment_order,
     content => template('collectd/plugin/filter/target.erb'),
     target  => $conf_file,
diff --git a/manifests/plugin/fscache.pp b/manifests/plugin/fscache.pp
index 56621ad..81627e1 100644
--- a/manifests/plugin/fscache.pp
+++ b/manifests/plugin/fscache.pp
@@ -2,7 +2,6 @@
 class collectd::plugin::fscache (
   $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'fscache':
diff --git a/manifests/plugin/genericjmx.pp b/manifests/plugin/genericjmx.pp
index f7ecbf6..7025705 100644
--- a/manifests/plugin/genericjmx.pp
+++ b/manifests/plugin/genericjmx.pp
@@ -4,7 +4,6 @@ class collectd::plugin::genericjmx (
   $jvmarg         = [],
   $manage_package = undef,
 ) {
-
   include collectd
   include collectd::plugin::java
 
diff --git a/manifests/plugin/genericjmx/connection.pp b/manifests/plugin/genericjmx/connection.pp
index 666a039..958f0b1 100644
--- a/manifests/plugin/genericjmx/connection.pp
+++ b/manifests/plugin/genericjmx/connection.pp
@@ -7,7 +7,6 @@ define collectd::plugin::genericjmx::connection (
   Optional[String] $password        = undef,
   Optional[String] $instance_prefix = undef,
 ) {
-
   include collectd
   include collectd::plugin::genericjmx
 
diff --git a/manifests/plugin/genericjmx/mbean.pp b/manifests/plugin/genericjmx/mbean.pp
index 8e18ac7..e3ea9f3 100644
--- a/manifests/plugin/genericjmx/mbean.pp
+++ b/manifests/plugin/genericjmx/mbean.pp
@@ -5,7 +5,6 @@ define collectd::plugin::genericjmx::mbean (
   Optional[String] $instance_prefix = undef,
   Array $instance_from              = [],
 ) {
-
   include collectd
   include collectd::plugin::genericjmx
 
diff --git a/manifests/plugin/hddtemp.pp b/manifests/plugin/hddtemp.pp
index 5d16925..6d5e1e9 100644
--- a/manifests/plugin/hddtemp.pp
+++ b/manifests/plugin/hddtemp.pp
@@ -1,11 +1,10 @@
 # https://collectd.org/wiki/index.php/Plugin:HDDTemp
 class collectd::plugin::hddtemp (
-  $host         = '127.0.0.1',
-  Integer $port = 7634,
+  Stdlib::Host $host = '127.0.0.1',
+  Stdlib::Port $port = 7634,
   $ensure       = 'present',
   $interval     = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'hddtemp':
diff --git a/manifests/plugin/hugepages.pp b/manifests/plugin/hugepages.pp
index 41341c1..1c78981 100644
--- a/manifests/plugin/hugepages.pp
+++ b/manifests/plugin/hugepages.pp
@@ -48,7 +48,6 @@ class collectd::plugin::hugepages (
   Boolean $values_bytes               = false,
   Boolean $values_percentage          = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'hugepages':
diff --git a/manifests/plugin/intel_pmu.pp b/manifests/plugin/intel_pmu.pp
index e1f6ea6..1a78f3a 100644
--- a/manifests/plugin/intel_pmu.pp
+++ b/manifests/plugin/intel_pmu.pp
@@ -1,13 +1,12 @@
 # https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_intel_pmu
 class collectd::plugin::intel_pmu (
   Enum['present', 'absent'] $ensure                       = 'present',
-  Optional[Boolean]         $report_hardware_cache_events = false,
-  Optional[Boolean]         $report_kernel_pmu_events     = false,
-  Optional[Boolean]         $report_software_events       = false,
+  Boolean                   $report_hardware_cache_events = false,
+  Boolean                   $report_kernel_pmu_events     = false,
+  Boolean                   $report_software_events       = false,
   Optional[String]          $event_list                   = undef,
   Optional[Array[String]]   $hardware_events              = undef,
 ) {
-
   include collectd
 
   if $hardware_events and $event_list == undef {
diff --git a/manifests/plugin/intel_rdt.pp b/manifests/plugin/intel_rdt.pp
index 925523d..956e044 100644
--- a/manifests/plugin/intel_rdt.pp
+++ b/manifests/plugin/intel_rdt.pp
@@ -31,7 +31,6 @@ class collectd::plugin::intel_rdt (
   Optional[Integer] $interval         = undef,
   Array[String[1]] $cores             = [],
 ) {
-
   include collectd
 
   collectd::plugin { 'intel_rdt':
diff --git a/manifests/plugin/interface.pp b/manifests/plugin/interface.pp
index 6190a62..f4f8031 100644
--- a/manifests/plugin/interface.pp
+++ b/manifests/plugin/interface.pp
@@ -6,7 +6,6 @@ class collectd::plugin::interface (
   Boolean $reportinactive = true,
   $interval               = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'interface':
diff --git a/manifests/plugin/ipc.pp b/manifests/plugin/ipc.pp
index ba5206e..e8fb8f9 100644
--- a/manifests/plugin/ipc.pp
+++ b/manifests/plugin/ipc.pp
@@ -14,7 +14,6 @@
 class collectd::plugin::ipc (
   Enum['present', 'absent'] $ensure   = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'ipc':
diff --git a/manifests/plugin/ipmi.pp b/manifests/plugin/ipmi.pp
index 285fabc..b4313ad 100644
--- a/manifests/plugin/ipmi.pp
+++ b/manifests/plugin/ipmi.pp
@@ -10,7 +10,6 @@ class collectd::plugin::ipmi (
   Boolean $notify_sensor_not_present = false,
   Array $sensors                     = [],
 ) {
-
   include collectd
 
   $manage_package_real = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/iptables.pp b/manifests/plugin/iptables.pp
index d0112bf..29d7a3e 100644
--- a/manifests/plugin/iptables.pp
+++ b/manifests/plugin/iptables.pp
@@ -7,7 +7,6 @@ class collectd::plugin::iptables (
   Hash $chains6   = {},
   $interval       = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/irq.pp b/manifests/plugin/irq.pp
index 4cd0678..ac0a9e9 100644
--- a/manifests/plugin/irq.pp
+++ b/manifests/plugin/irq.pp
@@ -5,7 +5,6 @@ class collectd::plugin::irq (
   Boolean $ignoreselected = false,
   $interval               = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'irq':
diff --git a/manifests/plugin/iscdhcp.pp b/manifests/plugin/iscdhcp.pp
index 78eafbb..635c7fd 100644
--- a/manifests/plugin/iscdhcp.pp
+++ b/manifests/plugin/iscdhcp.pp
@@ -10,30 +10,48 @@
 # @param package_provider Optional[String] Passed to package resource. Default: pip
 # @param provider_proxy Optional[String] Proxy for provider. Default: undef
 class collectd::plugin::iscdhcp (
-  Optional[String] $ensure           = 'present',
-  Optional[Boolean] $manage_package   = undef,
-  Optional[String] $package_name     = 'collectd-iscdhcp',
-  Optional[String] $package_provider = 'pip',
-  Optional[String] $provider_proxy   = undef,
+  Enum['present', 'absent'] $ensure     = 'present',
+  Optional[Boolean] $manage_package     = undef,
+  String[1] $package_name               = 'collectd-iscdhcp',
+  Optional[String[1]] $package_provider = undef,
+  Optional[String[1]] $provider_proxy   = undef,
 ) {
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
 
+  if ($facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8') or ($facts['os']['name'] == 'Ubuntu' and $facts['os']['release']['major'] == '20.04') {
+    $_python_pip_package = 'python3-pip'
+    if $package_provider =~ Undef {
+      $_package_provider = 'pip3'
+    }
+    else {
+      $_package_provider = $package_provider
+    }
+  } else {
+    $_python_pip_package = 'python-pip'
+    if $package_provider =~ Undef {
+      $_package_provider = 'pip'
+    }
+    else {
+      $_package_provider = $package_provider
+    }
+  }
+
   if ($_manage_package) {
-    if (!defined(Package['python-pip'])) {
-      package { 'python-pip': ensure => 'present', }
+    if (!defined(Package[$_python_pip_package])) {
+      package { $_python_pip_package: ensure => 'present', }
 
       Package[$package_name] {
-        require => Package['python-pip'],
+        require => Package[$_python_pip_package],
       }
 
       if $facts['os']['family'] == 'RedHat' {
         # Epel is installed in install.pp if manage_repo is true
         # python-pip doesn't exist in base for RedHat. Need epel installed first
-        if (defined(Class['::epel'])) {
-          Package['python-pip'] {
-            require => Class['::epel'],
+        if (defined(Class['epel'])) {
+          Package[$_python_pip_package] {
+            require => Class['epel'],
           }
         }
       }
@@ -41,14 +59,14 @@ class collectd::plugin::iscdhcp (
   }
 
   if ($_manage_package) and ($provider_proxy) {
-    $install_options = [{'--proxy' => $provider_proxy}]
+    $install_options = [{ '--proxy' => $provider_proxy }]
   } else {
     $install_options = undef
   }
 
   package { $package_name:
     ensure          => $ensure,
-    provider        => $package_provider,
+    provider        => $_package_provider,
     install_options => $install_options,
   }
 
diff --git a/manifests/plugin/java.pp b/manifests/plugin/java.pp
index 159a77e..bae9ee4 100644
--- a/manifests/plugin/java.pp
+++ b/manifests/plugin/java.pp
@@ -7,7 +7,6 @@ class collectd::plugin::java (
   $manage_package                           = undef,
   Optional[Stdlib::Absolutepath] $java_home = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
@@ -19,13 +18,24 @@ class collectd::plugin::java (
       }
     }
     if $java_home {
-      file { '/usr/lib64/libjvm.so':
-        ensure => 'link',
-        target => "${java_home}/jre/lib/amd64/server/libjvm.so",
+      exec { 'Link libjvm.so on OpenJDK':
+        command => "/usr/bin/ln -s ${java_home}/jre/lib/server/libjvm.so /usr/lib64/libjvm.so",
+        creates => '/usr/lib64/libjvm.so',
+        onlyif  => "/usr/bin/test -e ${java_home}/jre/lib/server/libjvm.so",
+        notify  => Exec['/sbin/ldconfig'],
+      }
+
+      exec { 'Link libjvm.so on Oracle':
+        command => "/usr/bin/ln -s ${java_home}/jre/lib/amd64/server/libjvm.so /usr/lib64/libjvm.so",
+        creates => '/usr/lib64/libjvm.so',
+        onlyif  => "/usr/bin/test -e ${java_home}/jre/lib/amd64/server/libjvm.so",
+        notify  => Exec['/sbin/ldconfig'],
       }
+
       # Reload SO files so libjvm.so can be found
-      -> exec { '/sbin/ldconfig':
-        unless => '/sbin/ldconfig -p |grep libjvm.so >/dev/null 2>&1',
+      exec { '/sbin/ldconfig':
+        unless  => '/sbin/ldconfig -p |grep libjvm.so >/dev/null 2>&1',
+        require => [Exec['Link libjvm.so on OpenJDK'], Exec['Link libjvm.so on Oracle']],
       }
     }
   }
diff --git a/manifests/plugin/load.pp b/manifests/plugin/load.pp
index baaece9..ab5112e 100644
--- a/manifests/plugin/load.pp
+++ b/manifests/plugin/load.pp
@@ -4,7 +4,6 @@ class collectd::plugin::load (
   $interval = undef,
   $report_relative = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'load':
diff --git a/manifests/plugin/logfile.pp b/manifests/plugin/logfile.pp
index 23c64fc..b050349 100644
--- a/manifests/plugin/logfile.pp
+++ b/manifests/plugin/logfile.pp
@@ -7,7 +7,6 @@ class collectd::plugin::logfile (
   $log_timestamp  = true,
   $print_severity = false
 ) {
-
   include collectd
 
   collectd::plugin { 'logfile':
diff --git a/manifests/plugin/logparser.pp b/manifests/plugin/logparser.pp
new file mode 100644
index 0000000..4b7551d
--- /dev/null
+++ b/manifests/plugin/logparser.pp
@@ -0,0 +1,76 @@
+#https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+class collectd::plugin::logparser (
+  $ensure         = 'present',
+  Array[Hash[String[1],Collectd::LOGPARSER::Logfile]] $logfile = [{
+      '/var/log/syslog' => {
+        'firstfullread' => false,
+        'message' => [
+          'pcie_errors' => {
+            'defaulttype' => 'pcie_error',
+            'defaultseverity' => 'warning',
+            'match' => [{
+                'aer error' => {
+                  'regex' => 'AER:.*error received',
+                  'submatchidx' => -1,
+                },
+                'incident time' => {
+                  'regex' => '(... .. ..:..:..) .* pcieport.*AER',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'root port' => {
+                  'regex' => 'pcieport (.*): AER:',
+                  'submatchidx' => 1,
+                  'ismandatory' => true,
+                },
+                'device' => {
+                  'plugininstance' => true,
+                  'regex' => ' ([0-9a-fA-F:\\.]*): PCIe Bus Error',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'severity_mandatory' => {
+                  'regex' => 'severity=',
+                  'submatchidx' => -1,
+                },
+                'nonfatal' => {
+                  'regex' => 'severity=.*\\([nN]on-[fF]atal',
+                  'typeinstance' => 'non_fatal',
+                  'ismandatory' => false,
+                },
+                'fatal' => {
+                  'regex' => 'severity=.*\\([fF]atal',
+                  'severity' => 'failure',
+                  'typeinstance' => 'fatal',
+                  'ismandatory' => false,
+                },
+                'corrected' => {
+                  'regex' => 'severity=Corrected',
+                  'typeinstance' => 'correctable',
+                  'ismandatory' => false,
+                },
+                'error type' => {
+                  'regex' => 'type=(.*),',
+                  'submatchidx' => 1,
+                  'ismandatory' => false,
+                },
+                'id' => {
+                  'regex' => ', id=(.*)',
+                  'submatchidx' => 1,
+                },
+            }],
+          },
+        ],
+      }
+  }]
+) {
+  include collectd
+
+  collectd::plugin { 'logparser':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/logparser.conf.epp', {
+        'logfile' => $logfile,
+    }),
+    order   => '06',
+  }
+}
diff --git a/manifests/plugin/lvm.pp b/manifests/plugin/lvm.pp
index 249a91b..b4cdc54 100644
--- a/manifests/plugin/lvm.pp
+++ b/manifests/plugin/lvm.pp
@@ -4,7 +4,6 @@ class collectd::plugin::lvm (
   $manage_package   = undef,
   $interval         = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/mcelog.pp b/manifests/plugin/mcelog.pp
new file mode 100644
index 0000000..6eaf1fd
--- /dev/null
+++ b/manifests/plugin/mcelog.pp
@@ -0,0 +1,39 @@
+# https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+class collectd::plugin::mcelog (
+  Enum['present', 'absent'] $ensure = 'present',
+  Optional[Boolean] $manage_package = undef,
+  Optional[Array] $package_install_options = $collectd::package_install_options,
+  # Log file option and memory option are mutualy exclusive.
+  Optional[String] $mceloglogfile = undef,
+  Collectd::MCELOG::Memory $memory = {
+    'mcelogclientsocket' => '/var/run/mcelog-client',
+    'persistentnotification' => false,
+  }
+) {
+  include collectd
+
+  $_manage_package = pick($manage_package, $collectd::manage_package)
+
+  if $ensure == 'present' {
+    $package_ensure = $collectd::package_ensure
+  } elsif $ensure == 'absent' {
+    $package_ensure = 'absent'
+  }
+
+  if $facts['os']['family'] == 'RedHat' {
+    if $_manage_package {
+      package { 'collectd-mcelog':
+        ensure          => $package_ensure,
+        install_options => $package_install_options,
+      }
+    }
+  }
+
+  collectd::plugin { 'mcelog':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/mcelog.conf.epp', {
+        'mceloglogfile' => $mceloglogfile,
+        'memory'        => $memory
+    }),
+  }
+}
diff --git a/manifests/plugin/memcached.pp b/manifests/plugin/memcached.pp
index 53d6905..358a39d 100644
--- a/manifests/plugin/memcached.pp
+++ b/manifests/plugin/memcached.pp
@@ -3,14 +3,13 @@ class collectd::plugin::memcached (
   $ensure         = 'present',
   Hash $instances = {
     'default' => {
-        'host'    => 'localhost',
-        'address' => '127.0.0.1',
-        'port'    => 11211,
+      'host'    => 'localhost',
+      'address' => '127.0.0.1',
+      'port'    => 11211,
     },
   },
   $interval       = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'memcached':
diff --git a/manifests/plugin/memory.pp b/manifests/plugin/memory.pp
index 64baaf4..a8c2686 100644
--- a/manifests/plugin/memory.pp
+++ b/manifests/plugin/memory.pp
@@ -5,7 +5,6 @@ class collectd::plugin::memory (
   Boolean $valuespercentage = false,
   $interval                 = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'memory':
diff --git a/manifests/plugin/mongodb.pp b/manifests/plugin/mongodb.pp
index 7b80571..f4ef889 100644
--- a/manifests/plugin/mongodb.pp
+++ b/manifests/plugin/mongodb.pp
@@ -5,16 +5,15 @@ class collectd::plugin::mongodb (
   String $db_pass,
   Enum['absent','present'] $ensure          = 'present',
   Optional[Variant[String,Float]] $interval = undef,
-  Stdlib::Compat::Ip_address $db_host       = '127.0.0.1',
-  Optional[String] $db_port                 = undef,
+  Stdlib::Host $db_host                     = '127.0.0.1',
+  Optional[Stdlib::Port] $db_port           = undef,
   Optional[Array] $configured_dbs           = undef,
   $collectd_dir                             = '/usr/lib/collectd',
 ) {
-
   include collectd
 
   if $configured_dbs {
-    assert_type(String, $db_port)
+    assert_type(Stdlib::Port, $db_port)
   }
 
   collectd::plugin { 'mongodb':
diff --git a/manifests/plugin/mysql.pp b/manifests/plugin/mysql.pp
index 98e048b..a38fb72 100644
--- a/manifests/plugin/mysql.pp
+++ b/manifests/plugin/mysql.pp
@@ -5,7 +5,6 @@ class collectd::plugin::mysql (
   $manage_package   = undef,
   $interval         = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/mysql/database.pp b/manifests/plugin/mysql/database.pp
index 6783aca..daa3de2 100644
--- a/manifests/plugin/mysql/database.pp
+++ b/manifests/plugin/mysql/database.pp
@@ -2,12 +2,12 @@
 define collectd::plugin::mysql::database (
   Enum['present', 'absent'] $ensure    = 'present',
   String $database                     = $name,
-  String $host                         = 'UNSET',
-  String $username                     = 'UNSET',
-  String $password                     = 'UNSET',
-  String $port                         = '3306',
+  Optional[Stdlib::Host] $host         = undef,
+  Optional[Stdlib::Port] $port         = undef,
   Boolean $masterstats                 = false,
   Boolean $slavestats                  = false,
+  Optional[String[1]] $username        = undef,
+  Optional[String[1]] $password        = undef,
   Optional[String] $socket             = undef,
   Optional[Boolean] $innodbstats       = undef,
   # FIXME(sileht): Should be boolean
@@ -21,7 +21,6 @@ define collectd::plugin::mysql::database (
   Optional[String] $sslcapath          = undef,
   Optional[String] $sslcipher          = undef,
 ) {
-
   include collectd
   include collectd::plugin::mysql
 
diff --git a/manifests/plugin/netlink.pp b/manifests/plugin/netlink.pp
index 13e0a44..cae7034 100644
--- a/manifests/plugin/netlink.pp
+++ b/manifests/plugin/netlink.pp
@@ -10,7 +10,6 @@ class collectd::plugin::netlink (
   Boolean $ignoreselected  = false,
   $interval                = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/network.pp b/manifests/plugin/network.pp
index d81f27c..3ed6fd8 100644
--- a/manifests/plugin/network.pp
+++ b/manifests/plugin/network.pp
@@ -9,7 +9,6 @@ class collectd::plugin::network (
   Hash $listeners                            = {},
   Hash $servers                              = {},
 ) {
-
   include collectd
 
   $listeners_defaults = {
diff --git a/manifests/plugin/network/listener.pp b/manifests/plugin/network/listener.pp
index 59a9957..4a2c70f 100644
--- a/manifests/plugin/network/listener.pp
+++ b/manifests/plugin/network/listener.pp
@@ -2,11 +2,10 @@
 define collectd::plugin::network::listener (
   Enum['present', 'absent'] $ensure                         = 'present',
   Optional[Stdlib::Absolutepath] $authfile                  = undef,
-  Optional[Integer] $port                                   = undef,
+  Optional[Stdlib::Port] $port                              = undef,
   Optional[Collectd::Network::SecurityLevel] $securitylevel = undef,
   Optional[String] $interface                               = undef,
 ) {
-
   include collectd
   include collectd::plugin::network
 
diff --git a/manifests/plugin/network/server.pp b/manifests/plugin/network/server.pp
index 1bf23cb..8587f63 100644
--- a/manifests/plugin/network/server.pp
+++ b/manifests/plugin/network/server.pp
@@ -3,13 +3,12 @@ define collectd::plugin::network::server (
   Enum['present', 'absent'] $ensure                         = 'present',
   Optional[String] $username                                = undef,
   Optional[String] $password                                = undef,
-  Optional[Integer] $port                                   = undef,
+  Optional[Stdlib::Port] $port                              = undef,
   Optional[Collectd::Network::SecurityLevel] $securitylevel = undef,
   Optional[String] $interface                               = undef,
   Optional[Boolean] $forward                                = undef,
   Optional[Integer[1]] $resolveinterval                     = undef,
 ) {
-
   include collectd
   include collectd::plugin::network
 
diff --git a/manifests/plugin/nfs.pp b/manifests/plugin/nfs.pp
index c51c395..cab6959 100644
--- a/manifests/plugin/nfs.pp
+++ b/manifests/plugin/nfs.pp
@@ -3,7 +3,6 @@ class collectd::plugin::nfs (
   $ensure   = 'present',
   $interval = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'nfs':
diff --git a/manifests/plugin/nginx.pp b/manifests/plugin/nginx.pp
index 02f86b7..25aa058 100644
--- a/manifests/plugin/nginx.pp
+++ b/manifests/plugin/nginx.pp
@@ -10,7 +10,6 @@ class collectd::plugin::nginx (
   $cacert           = undef,
   $interval         = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/ntpd.pp b/manifests/plugin/ntpd.pp
index 3442765..c726093 100644
--- a/manifests/plugin/ntpd.pp
+++ b/manifests/plugin/ntpd.pp
@@ -1,13 +1,12 @@
 # https://collectd.org/wiki/index.php/Plugin:NTPd
 class collectd::plugin::ntpd (
   $ensure           = 'present',
-  $host             = 'localhost',
-  $port             = 123,
+  Stdlib::Host $host = 'localhost',
+  Stdlib::Port $port = 123,
   $reverselookups   = false,
   $includeunitid    = false,
   $interval         = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'ntpd':
diff --git a/manifests/plugin/numa.pp b/manifests/plugin/numa.pp
index def59e5..45e60e7 100644
--- a/manifests/plugin/numa.pp
+++ b/manifests/plugin/numa.pp
@@ -14,7 +14,6 @@
 class collectd::plugin::numa (
   Enum['present', 'absent'] $ensure   = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'numa':
diff --git a/manifests/plugin/nut.pp b/manifests/plugin/nut.pp
index 078164a..7cda199 100644
--- a/manifests/plugin/nut.pp
+++ b/manifests/plugin/nut.pp
@@ -1,18 +1,16 @@
 # https://collectd.org/wiki/index.php/Plugin:Nut
 class collectd::plugin::nut (
   $ensure        = 'present',
-  $upss       = { },
+  $upss       = {},
 ) {
-
   include collectd
 
-
   collectd::plugin { 'nut':
     ensure   => $ensure,
   }
   $upss.each |String $ups| {
-      collectd::plugin::nut::ups { $upss:
-        ensure => $ensure,
-      }
+    collectd::plugin::nut::ups { $upss:
+      ensure => $ensure,
+    }
   }
 }
diff --git a/manifests/plugin/nut/ups.pp b/manifests/plugin/nut/ups.pp
index b9d3910..28729b8 100644
--- a/manifests/plugin/nut/ups.pp
+++ b/manifests/plugin/nut/ups.pp
@@ -2,7 +2,6 @@
 define collectd::plugin::nut::ups (
   $ensure          = 'present',
 ) {
-
   include collectd
   include collectd::plugin::nut
 
diff --git a/manifests/plugin/openldap.pp b/manifests/plugin/openldap.pp
index 57c8abb..110ab9f 100644
--- a/manifests/plugin/openldap.pp
+++ b/manifests/plugin/openldap.pp
@@ -4,7 +4,6 @@ class collectd::plugin::openldap (
   Hash $instances = { 'localhost' => { 'url' => 'ldap://localhost/' } },
   $interval       = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'openldap':
diff --git a/manifests/plugin/openvpn.pp b/manifests/plugin/openvpn.pp
index 79c8155..14114d7 100644
--- a/manifests/plugin/openvpn.pp
+++ b/manifests/plugin/openvpn.pp
@@ -8,11 +8,10 @@ class collectd::plugin::openvpn (
   Boolean $collectusercount                                              = false,
   $interval                                                              = undef,
 ) {
-
   include collectd
 
-  if is_string($statusfile) {
-    $statusfiles = [ $statusfile ]
+  if $statusfile =~ String {
+    $statusfiles = [$statusfile]
   } else {
     $statusfiles = $statusfile
   }
diff --git a/manifests/plugin/oracle.pp b/manifests/plugin/oracle.pp
index 9ce3e6a..e5d5e69 100644
--- a/manifests/plugin/oracle.pp
+++ b/manifests/plugin/oracle.pp
@@ -5,7 +5,6 @@ class collectd::plugin::oracle (
   Boolean $manage_package           = false,
   Optional[Integer[1]] $interval    = undef,
 ) {
-
   include collectd
 
   $conf_dir = $collectd::plugin_conf_dir
diff --git a/manifests/plugin/oracle/database.pp b/manifests/plugin/oracle/database.pp
index 4863cfb..c45eb04 100644
--- a/manifests/plugin/oracle/database.pp
+++ b/manifests/plugin/oracle/database.pp
@@ -6,7 +6,6 @@ define collectd::plugin::oracle::database (
   String $connect_id = $name,
   String $database   = $name,
 ) {
-
   include collectd
   include collectd::plugin::oracle
 
diff --git a/manifests/plugin/oracle/query.pp b/manifests/plugin/oracle/query.pp
index b88626c..011d255 100644
--- a/manifests/plugin/oracle/query.pp
+++ b/manifests/plugin/oracle/query.pp
@@ -4,7 +4,6 @@ define collectd::plugin::oracle::query (
   Array $results,
   String $query = $name,
 ) {
-
   include collectd
   include collectd::plugin::oracle
 
diff --git a/manifests/plugin/ovs_events.pp b/manifests/plugin/ovs_events.pp
index 0db4184..45f070c 100644
--- a/manifests/plugin/ovs_events.pp
+++ b/manifests/plugin/ovs_events.pp
@@ -36,7 +36,7 @@
 #  Defaults to 'collectd-ovs_stats'
 #
 # [*port*]
-#  TCP-port to connect to. Either a service name or a port number may be given.
+#  TCP-port to connect to.
 #
 # [*socket*]
 #  The UNIX domain socket path of OVS DB server JSON-RPC interface used
@@ -45,15 +45,14 @@
 class collectd::plugin::ovs_events (
   Optional[Stdlib::Host] $address      = undef,
   Optional[Boolean] $dispatch          = undef,
-  String $ensure                       = 'present',
-  Optional[Array] $interfaces          = [],
+  Enum['present', 'absent']  $ensure   = 'present',
+  Array $interfaces                    = [],
   Boolean $manage_package              = true,
   Optional[Boolean] $send_notification = undef,
-  String $package_name                 = 'collectd-ovs-events',
-  Optional[Integer] $port              = undef,
-  Optional[String] $socket             = undef,
+  String[1] $package_name              = 'collectd-ovs-events',
+  Optional[Stdlib::Port] $port         = undef,
+  Optional[String[1]] $socket          = undef,
 ) {
-
   include collectd
 
   if $manage_package {
diff --git a/manifests/plugin/ovs_stats.pp b/manifests/plugin/ovs_stats.pp
index e249425..96d0f7a 100644
--- a/manifests/plugin/ovs_stats.pp
+++ b/manifests/plugin/ovs_stats.pp
@@ -27,7 +27,7 @@
 #  Defaults to 'collectd-ovs_stats'
 #
 # [*port*]
-#  TCP-port to connect to. Either a service name or a port number may be given.
+#  TCP-port to connect to.
 #
 # [*socket*]
 #  The UNIX domain socket path of OVS DB server JSON-RPC interface used
@@ -39,10 +39,9 @@ class collectd::plugin::ovs_stats (
   String $ensure            = 'present',
   Boolean $manage_package   = true,
   String $package_name      = 'collectd-ovs-stats',
-  Optional[Integer] $port   = undef,
+  Optional[Stdlib::Port] $port = undef,
   Optional[String] $socket  = undef,
 ) {
-
   include collectd
 
   if $manage_package {
diff --git a/manifests/plugin/pcie_errors.pp b/manifests/plugin/pcie_errors.pp
new file mode 100644
index 0000000..b6afb8e
--- /dev/null
+++ b/manifests/plugin/pcie_errors.pp
@@ -0,0 +1,22 @@
+# Class to manage pcie_errors plugin for collectd
+#
+# @param ensure Ensure param for collectd::plugin type.
+# @param source Use sysfs or proc to read data from /sysfs or /proc.
+# @param access_dir Directory used to access device config space.
+# @param report_masked If true plugin will notify about errors that are set to masked in Error Mask register.
+# @param persistent_notifications If false plugin will dispatch notification only on set/clear of error.
+#
+class collectd::plugin::pcie_errors (
+  Enum['present', 'absent'] $ensure                   = 'present',
+  Enum['sysfs', 'proc']     $source                   = 'sysfs',
+  Optional[String]          $access_dir               = undef,
+  Boolean                   $report_masked            = false,
+  Boolean                   $persistent_notifications = false,
+) {
+  include collectd
+
+  collectd::plugin { 'pcie_errors':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/pcie_errors.conf.epp'),
+  }
+}
diff --git a/manifests/plugin/perl.pp b/manifests/plugin/perl.pp
index 2b49d74..88b4cbf 100644
--- a/manifests/plugin/perl.pp
+++ b/manifests/plugin/perl.pp
@@ -5,7 +5,6 @@ class collectd::plugin::perl (
   $interval         = undef,
   $order            = 20
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
@@ -35,4 +34,3 @@ class collectd::plugin::perl (
     group  => $collectd::config_group,
   }
 }
-
diff --git a/manifests/plugin/perl/plugin.pp b/manifests/plugin/perl/plugin.pp
index 7e6f135..170fec5 100644
--- a/manifests/plugin/perl/plugin.pp
+++ b/manifests/plugin/perl/plugin.pp
@@ -10,7 +10,6 @@ define collectd::plugin::perl::plugin (
   String $order                                = '01',
   Hash $config                                 = {},
 ) {
-
   include collectd
 
   if ! defined(Class['Collectd::Plugin::Perl']) {
@@ -18,9 +17,9 @@ define collectd::plugin::perl::plugin (
   }
 
   if $include_dir {
-    if is_string($include_dir) {
-      $include_dirs = [ $include_dir ]
-    } elsif is_array($include_dir) {
+    if $include_dir =~ String {
+      $include_dirs = [$include_dir]
+    } elsif $include_dir =~ Array {
       $include_dirs = $include_dir
     } else {
       fail("include_dir must be either array or string: ${include_dir}")
@@ -71,8 +70,7 @@ define collectd::plugin::perl::plugin (
       }
     }
     default: {
-      fail("Unsupported provider: ${provider}. Use 'package', 'cpan',
-      'file' or false.")
+      fail("Unsupported provider: ${provider}. Use 'package', 'cpan', 'file' or false.")
     }
   }
 }
diff --git a/manifests/plugin/ping.pp b/manifests/plugin/ping.pp
index d38a778..3ec5b1d 100644
--- a/manifests/plugin/ping.pp
+++ b/manifests/plugin/ping.pp
@@ -11,7 +11,6 @@ class collectd::plugin::ping (
   Optional[Integer[-1]] $max_missed = undef,
   Optional[Integer[0]] $size        = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/postgresql.pp b/manifests/plugin/postgresql.pp
index 864d433..b293b77 100644
--- a/manifests/plugin/postgresql.pp
+++ b/manifests/plugin/postgresql.pp
@@ -2,12 +2,11 @@
 class collectd::plugin::postgresql (
   $ensure         = 'present',
   $manage_package = undef,
-  $databases      = { },
+  $databases      = {},
   $interval       = undef,
-  $queries        = { },
-  $writers        = { },
+  $queries        = {},
+  $writers        = {},
 ) {
-
   include collectd
 
   $_manage_package    = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/postgresql/database.pp b/manifests/plugin/postgresql/database.pp
index 020a64f..4b3cad0 100644
--- a/manifests/plugin/postgresql/database.pp
+++ b/manifests/plugin/postgresql/database.pp
@@ -2,9 +2,9 @@
 # useful if you have multiple instances of different version of pg
 define collectd::plugin::postgresql::database (
   $ensure       = 'present',
-  $host         = undef,
+  Optional[Stdlib::Host] $host = undef,
   $databasename = $name,
-  $port         = undef,
+  Optional[Stdlib::Port] $port = undef,
   $user         = undef,
   $password     = undef,
   $sslmode      = undef,
@@ -15,11 +15,10 @@ define collectd::plugin::postgresql::database (
   $writer       = undef,
   $service      = undef,
 ) {
-
   include collectd
   include collectd::plugin::postgresql
 
-  concat::fragment{ "collectd_plugin_postgresql_conf_db_${title}":
+  concat::fragment { "collectd_plugin_postgresql_conf_db_${title}":
     order   => '50',
     target  => "${collectd::plugin_conf_dir}/postgresql-config.conf",
     content => template('collectd/plugin/postgresql/database.conf.erb'),
diff --git a/manifests/plugin/postgresql/query.pp b/manifests/plugin/postgresql/query.pp
index b058961..ec35c07 100644
--- a/manifests/plugin/postgresql/query.pp
+++ b/manifests/plugin/postgresql/query.pp
@@ -7,11 +7,10 @@ define collectd::plugin::postgresql::query (
   $minversion       = undef,
   $maxversion       = undef,
 ) {
-
   include collectd
   include collectd::plugin::postgresql
 
-  concat::fragment{ "collectd_plugin_postgresql_conf_query_${title}":
+  concat::fragment { "collectd_plugin_postgresql_conf_query_${title}":
     order   => '30',
     target  => "${collectd::plugin_conf_dir}/postgresql-config.conf",
     content => template('collectd/plugin/postgresql/query.conf.erb'),
diff --git a/manifests/plugin/postgresql/writer.pp b/manifests/plugin/postgresql/writer.pp
index df9c5b2..52c7366 100644
--- a/manifests/plugin/postgresql/writer.pp
+++ b/manifests/plugin/postgresql/writer.pp
@@ -4,11 +4,10 @@ define collectd::plugin::postgresql::writer (
   String $statement = undef,
   $storerates       = undef,
 ) {
-
   include collectd
   include collectd::plugin::postgresql
 
-  concat::fragment{ "collectd_plugin_postgresql_conf_writer_${title}":
+  concat::fragment { "collectd_plugin_postgresql_conf_writer_${title}":
     order   => '40',
     target  => "${collectd::plugin_conf_dir}/postgresql-config.conf",
     content => template('collectd/plugin/postgresql/writer.conf.erb'),
diff --git a/manifests/plugin/powerdns.pp b/manifests/plugin/powerdns.pp
index c1629d8..ab06451 100644
--- a/manifests/plugin/powerdns.pp
+++ b/manifests/plugin/powerdns.pp
@@ -3,11 +3,10 @@ class collectd::plugin::powerdns (
   Enum['present', 'absent'] $ensure       = 'present',
   Integer $order                          = 10,
   Optional[Numeric] $interval             = undef,
-  Optional[Hash[String, Hash]] $servers   = {},
-  Optional[Hash[String, Hash]] $recursors = {},
-  Optional[String] $local_socket          = undef,
+  Hash[String, Hash] $servers             = {},
+  Hash[String, Hash] $recursors           = {},
+  Optional[String[1]] $local_socket       = undef,
 ) {
-
   include collectd
 
   $servers_defaults   = { 'ensure' => $ensure }
diff --git a/manifests/plugin/powerdns/recursor.pp b/manifests/plugin/powerdns/recursor.pp
index 85ff06c..ea878b7 100644
--- a/manifests/plugin/powerdns/recursor.pp
+++ b/manifests/plugin/powerdns/recursor.pp
@@ -3,16 +3,15 @@ define collectd::plugin::powerdns::recursor (
   Optional[String[1]] $socket       = undef,
   Array[String[1]] $collect         = [],
 ) {
-
   include collectd::plugin::powerdns
   include collectd
 
-  concat::fragment{ "collectd_plugin_powerdns_conf_recursor_${name}":
+  concat::fragment { "collectd_plugin_powerdns_conf_recursor_${name}":
     order   => '51',
     content => epp('collectd/plugin/powerdns/recursor.conf.epp', {
-      'name'    => $name,
-      'socket'  => $socket,
-      'collect' => $collect,
+        'name'    => $name,
+        'socket'  => $socket,
+        'collect' => $collect,
     }),
     target  => "${collectd::plugin_conf_dir}/powerdns-config.conf",
   }
diff --git a/manifests/plugin/powerdns/server.pp b/manifests/plugin/powerdns/server.pp
index 79d87da..6b2ae63 100644
--- a/manifests/plugin/powerdns/server.pp
+++ b/manifests/plugin/powerdns/server.pp
@@ -3,16 +3,15 @@ define collectd::plugin::powerdns::server (
   Optional[String[1]] $socket       = undef,
   Array[String[1]] $collect         = [],
 ) {
-
   include collectd::plugin::powerdns
   include collectd
 
-  concat::fragment{ "collectd_plugin_powerdns_conf_server_${name}":
+  concat::fragment { "collectd_plugin_powerdns_conf_server_${name}":
     order   => '50',
     content => epp('collectd/plugin/powerdns/server.conf.epp', {
-      'name'    => $name,
-      'socket'  => $socket,
-      'collect' => $collect,
+        'name'    => $name,
+        'socket'  => $socket,
+        'collect' => $collect,
     }),
     target  => "${collectd::plugin_conf_dir}/powerdns-config.conf",
   }
diff --git a/manifests/plugin/processes.pp b/manifests/plugin/processes.pp
index 23ff9df..6fa31e3 100644
--- a/manifests/plugin/processes.pp
+++ b/manifests/plugin/processes.pp
@@ -9,7 +9,6 @@ class collectd::plugin::processes (
   Optional[Boolean] $collect_file_descriptor = undef,
   Optional[Boolean] $collect_memory_maps     = undef,
 ) {
-
   include collectd
 
   $processes_defaults       = { 'ensure' => $ensure }
@@ -21,7 +20,7 @@ class collectd::plugin::processes (
     interval => $interval,
   }
 
-  concat { "${collectd::plugin_conf_dir}/processes-config.conf":
+  concat { "${collectd::plugin_conf_dir}/processes_config.conf":
     ensure         => $ensure,
     mode           => $collectd::config_mode,
     owner          => $collectd::config_owner,
@@ -32,13 +31,13 @@ class collectd::plugin::processes (
   concat::fragment { 'collectd_plugin_processes_conf_header':
     order   => '00',
     content => epp('collectd/plugin/processes-header.conf.epp'),
-    target  => "${collectd::plugin_conf_dir}/processes-config.conf",
+    target  => "${collectd::plugin_conf_dir}/processes_config.conf",
   }
 
   concat::fragment { 'collectd_plugin_processes_conf_footer':
     order   => '99',
     content => '</Plugin>',
-    target  => "${collectd::plugin_conf_dir}/processes-config.conf",
+    target  => "${collectd::plugin_conf_dir}/processes_config.conf",
   }
 
   if $processes {
diff --git a/manifests/plugin/processes/process.pp b/manifests/plugin/processes/process.pp
index 02c8d73..e1f8c32 100644
--- a/manifests/plugin/processes/process.pp
+++ b/manifests/plugin/processes/process.pp
@@ -5,19 +5,17 @@ define collectd::plugin::processes::process (
   Optional[Boolean] $collect_file_descriptor = undef,
   Optional[Boolean] $collect_memory_maps     = undef,
 ) {
-
   include collectd::plugin::processes
   include collectd
 
-  concat::fragment{ "collectd_plugin_processes_conf_process_${process}":
+  concat::fragment { "collectd_plugin_processes_conf_process_${process}":
     order   => '50',
     content => epp('collectd/plugin/processes/process.conf.epp', {
-      'process'                 => $process,
-      'collect_context_switch'  => $collect_context_switch,
-      'collect_file_descriptor' => $collect_file_descriptor,
-      'collect_memory_maps'     => $collect_memory_maps,
+        'process'                 => $process,
+        'collect_context_switch'  => $collect_context_switch,
+        'collect_file_descriptor' => $collect_file_descriptor,
+        'collect_memory_maps'     => $collect_memory_maps,
     }),
-    target  => "${collectd::plugin_conf_dir}/processes-config.conf",
+    target  => "${collectd::plugin_conf_dir}/processes_config.conf",
   }
-
 }
diff --git a/manifests/plugin/processes/processmatch.pp b/manifests/plugin/processes/processmatch.pp
index f0b07a5..9e222fc 100644
--- a/manifests/plugin/processes/processmatch.pp
+++ b/manifests/plugin/processes/processmatch.pp
@@ -6,19 +6,18 @@ define collectd::plugin::processes::processmatch (
   Optional[Boolean] $collect_file_descriptor = undef,
   Optional[Boolean] $collect_memory_maps     = undef,
 ) {
-
   include collectd::plugin::processes
   include collectd
 
-  concat::fragment{ "collectd_plugin_processes_conf_processmatch_${matchname}":
+  concat::fragment { "collectd_plugin_processes_conf_processmatch_${matchname}":
     order   => '51',
     content => epp('collectd/plugin/processes/processmatch.conf.epp', {
-      'matchname'               => $matchname,
-      'regex'                   => $regex,
-      'collect_context_switch'  => $collect_context_switch,
-      'collect_file_descriptor' => $collect_file_descriptor,
-      'collect_memory_maps'     => $collect_memory_maps,
+        'matchname'               => $matchname,
+        'regex'                   => $regex,
+        'collect_context_switch'  => $collect_context_switch,
+        'collect_file_descriptor' => $collect_file_descriptor,
+        'collect_memory_maps'     => $collect_memory_maps,
     }),
-    target  => "${collectd::plugin_conf_dir}/processes-config.conf",
+    target  => "${collectd::plugin_conf_dir}/processes_config.conf",
   }
 }
diff --git a/manifests/plugin/procevent.pp b/manifests/plugin/procevent.pp
index 9b8ded0..0c6e0f8 100644
--- a/manifests/plugin/procevent.pp
+++ b/manifests/plugin/procevent.pp
@@ -20,7 +20,7 @@
 #  name will be monitored for EXECs and EXITs.
 #  Defaults to undef
 #
-# [*regex_process*]
+# [*process_regex*]
 #  Enumerate a process pattern to monitor.  All processes that match this
 #  regular expression will be monitored for EXECs and EXITs.
 #  Defaults to undef
@@ -35,10 +35,9 @@ class collectd::plugin::procevent (
   Enum['present', 'absent'] $ensure            = 'present',
   Boolean $manage_package                      = $collectd::manage_package,
   Optional[String[1]] $process                 = undef,
-  Optional[String[1]] $regex_process           = undef,
+  Optional[String[1]] $process_regex           = undef,
   Optional[Integer[1, default]] $buffer_length = undef,
 ) {
-
   include collectd
 
   if $manage_package and $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/protocols.pp b/manifests/plugin/protocols.pp
index cd9ecf7..50b3e96 100644
--- a/manifests/plugin/protocols.pp
+++ b/manifests/plugin/protocols.pp
@@ -1,10 +1,9 @@
 # See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_protocols
 class collectd::plugin::protocols (
-  $ensure                 = 'present',
-  Boolean $ignoreselected = false,
-  Array $values           = []
+  $ensure = 'present',
+  Optional[Boolean] $ignoreselected = undef,
+  Array $values = []
 ) {
-
   include collectd
 
   collectd::plugin { 'protocols':
diff --git a/manifests/plugin/python.pp b/manifests/plugin/python.pp
index 4487dd5..fb505c8 100644
--- a/manifests/plugin/python.pp
+++ b/manifests/plugin/python.pp
@@ -15,7 +15,6 @@ class collectd::plugin::python (
   $order               = '10',
   $conf_name           = 'python-config.conf',
 ) {
-
   include collectd
 
   $module_dirs = empty($modulepaths) ? {
@@ -32,11 +31,17 @@ class collectd::plugin::python (
     $ensure_real = 'absent'
   }
 
-  if $facts['os']['name'] == 'Fedora' or $facts['os']['name'] == 'Amazon' {
+  if $facts['os']['name'] == 'Amazon' or
+  ($facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'],'8') >= 0) {
     if $_manage_package {
       package { 'collectd-python':
         ensure => $ensure_real,
       }
+      if (defined(Class['epel'])) {
+        Package['collectd-python'] {
+          require => Class['epel'],
+        }
+      }
     }
   }
 
diff --git a/manifests/plugin/python/module.pp b/manifests/plugin/python/module.pp
index 8e17b8b..44408a1 100644
--- a/manifests/plugin/python/module.pp
+++ b/manifests/plugin/python/module.pp
@@ -7,7 +7,6 @@ define collectd::plugin::python::module (
   Optional[Stdlib::Absolutepath] $modulepath = undef,
   Optional[String] $script_source = undef,
 ) {
-
   include collectd
   include collectd::plugin::python
 
@@ -48,7 +47,7 @@ define collectd::plugin::python::module (
   )
 
   # Possibly many per instance of a module configuration.
-  concat::fragment{ "collectd_plugin_python_conf_${title}_config":
+  concat::fragment { "collectd_plugin_python_conf_${title}_config":
     order   => "50_${module}_50",
     target  => $collectd::plugin::python::python_conf,
     content => epp('collectd/plugin/python/module.conf_config.epp',
diff --git a/manifests/plugin/rabbitmq.pp b/manifests/plugin/rabbitmq.pp
index cdff4d2..4dfb056 100644
--- a/manifests/plugin/rabbitmq.pp
+++ b/manifests/plugin/rabbitmq.pp
@@ -47,7 +47,7 @@ class collectd::plugin::rabbitmq (
     'Password' => 'guest',
     'Scheme'   => 'http',
     'Port'     => '15672',
-    'Host'     => $facts['fqdn'],
+    'Host'     => $facts['networking']['fqdn'],
     'Realm'    => '"RabbitMQ Management"',
   },
   # lint:endignore
@@ -61,6 +61,12 @@ class collectd::plugin::rabbitmq (
 ) {
   include collectd
 
+  if $facts['os']['family'] == 'Debian' and versioncmp($facts['os']['release']['major'], '11') >= 0 or
+  $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'], '8') >= 0 or
+  $facts['os']['name'] == 'Ubuntu' and versioncmp($facts['os']['release']['major'], '20.04') >= 0 {
+    fail('https://pypi.org/project/collectd-rabbitmq/ does not support Python 3')
+  }
+
   case $facts['os']['family'] {
     'RedHat': {
       $_custom_types_db = '/usr/share/collectd-rabbitmq/types.db.custom'
@@ -84,9 +90,9 @@ class collectd::plugin::rabbitmq (
       if $facts['os']['family'] == 'RedHat' {
         # Epel is installed in install.pp if manage_repo is true
         # python-pip doesn't exist in base for RedHat. Need epel installed first
-        if (defined(Class['::epel'])) {
+        if (defined(Class['epel'])) {
           Package['python-pip'] {
-            require => Class['::epel'],
+            require => Class['epel'],
           }
         }
       }
@@ -94,7 +100,7 @@ class collectd::plugin::rabbitmq (
   }
 
   if ($_manage_package) and ($provider_proxy) {
-    $install_options = [{'--proxy' => $provider_proxy}]
+    $install_options = [{ '--proxy' => $provider_proxy }]
   } else {
     $install_options = undef
   }
diff --git a/manifests/plugin/redis.pp b/manifests/plugin/redis.pp
index 381250c..94e1d2e 100644
--- a/manifests/plugin/redis.pp
+++ b/manifests/plugin/redis.pp
@@ -17,7 +17,6 @@ class collectd::plugin::redis (
     },
   },
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/rrdcached.pp b/manifests/plugin/rrdcached.pp
index efad6f6..f973dbb 100644
--- a/manifests/plugin/rrdcached.pp
+++ b/manifests/plugin/rrdcached.pp
@@ -14,7 +14,6 @@ class collectd::plugin::rrdcached (
   $collectstatistics        = undef,
   $manage_package           = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/rrdtool.pp b/manifests/plugin/rrdtool.pp
index fb9014e..2e7d641 100644
--- a/manifests/plugin/rrdtool.pp
+++ b/manifests/plugin/rrdtool.pp
@@ -5,14 +5,13 @@ class collectd::plugin::rrdtool (
   Stdlib::Absolutepath $datadir      = '/var/lib/collectd/rrd',
   Boolean $createfilesasync          = false,
   $interval                          = undef,
-  Optional[Integer] $rrarows         = 1200,
+  Integer $rrarows                   = 1200,
   Array[Integer] $rratimespan        = [3600, 86400, 604800, 2678400, 31622400],
-  Optional[Float] $xff               = 0.1,
-  Optional[Integer] $cacheflush      = 900,
-  Optional[Integer] $cachetimeout    = 120,
-  Optional[Integer] $writespersecond = 50
+  Float $xff                         = 0.1,
+  Integer $cacheflush                = 900,
+  Integer $cachetimeout              = 120,
+  Integer $writespersecond           = 50
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/sensors.pp b/manifests/plugin/sensors.pp
index 9b28ed1..b00a5f0 100644
--- a/manifests/plugin/sensors.pp
+++ b/manifests/plugin/sensors.pp
@@ -8,7 +8,6 @@ class collectd::plugin::sensors (
   $interval         = undef,
   Optional[Array[String]] $package_install_options = undef
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/smart.pp b/manifests/plugin/smart.pp
index aa42215..99441e6 100644
--- a/manifests/plugin/smart.pp
+++ b/manifests/plugin/smart.pp
@@ -7,7 +7,6 @@ class collectd::plugin::smart (
   $manage_package         = undef,
   $package_name           = 'collectd-smart',
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
@@ -16,7 +15,7 @@ class collectd::plugin::smart (
     } else {
       if versioncmp($collectd::collectd_version_real, '5.5') >= 0 {
         $_manage_package = true
-    } else {
+      } else {
         $_manage_package = false
       }
     }
diff --git a/manifests/plugin/snmp.pp b/manifests/plugin/snmp.pp
index 4b5e249..f479eec 100644
--- a/manifests/plugin/snmp.pp
+++ b/manifests/plugin/snmp.pp
@@ -6,7 +6,6 @@ class collectd::plugin::snmp (
   Hash[String[1], Collectd::SNMP::Host] $hosts          = {},
   Optional[Integer[0]]                  $interval       = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/snmp/data.pp b/manifests/plugin/snmp/data.pp
index 0f7d07e..c940e75 100644
--- a/manifests/plugin/snmp/data.pp
+++ b/manifests/plugin/snmp/data.pp
@@ -11,7 +11,6 @@ define collectd::plugin::snmp::data (
   Optional[Variant[String[1], Array[String[1], 1]]] $ignore          = undef,
   Boolean                                           $invert_match    = false,
 ) {
-
   include collectd
   include collectd::plugin::snmp
 
diff --git a/manifests/plugin/snmp/host.pp b/manifests/plugin/snmp/host.pp
index 576afa7..4f48943 100644
--- a/manifests/plugin/snmp/host.pp
+++ b/manifests/plugin/snmp/host.pp
@@ -6,7 +6,7 @@ define collectd::plugin::snmp::host (
   Collectd::SNMP::Version                   $version            = '1',
   Optional[Integer[0]]                      $interval           = undef,
   # SNMPv1/2c
-  Optional[String[1]]                       $community          = 'public',
+  String[1]                                 $community          = 'public',
   # SNMPv3
   Optional[String[1]]                       $username           = undef,
   Optional[Collectd::SNMP::SecurityLevel]   $security_level     = undef,
@@ -16,7 +16,6 @@ define collectd::plugin::snmp::host (
   Optional[Collectd::SNMP::PrivacyProtocol] $privacy_protocol   = undef,
   Optional[String[1]]                       $privacy_passphrase = undef,
 ) {
-
   include collectd
   include collectd::plugin::snmp
 
diff --git a/manifests/plugin/snmp_agent.pp b/manifests/plugin/snmp_agent.pp
new file mode 100644
index 0000000..78df105
--- /dev/null
+++ b/manifests/plugin/snmp_agent.pp
@@ -0,0 +1,51 @@
+# Class: collectd::plugin::snmp_agent
+#
+# @see https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+#
+#  Configues snmp agent plugin.
+#
+# @param ensure String Passed to package and collectd::plugin resources (both). Default: present
+# @param data Optional[Hash[String[1],Collectd::SNMP_AGENT::Data]] Defines scalar field, must be put outside Table block.
+# @param table Hash[String[1], Collectd::SNMP_AGENT::Table] Defines a table consisting of several Data blocks being its columns
+class collectd::plugin::snmp_agent (
+  Enum['present', 'absent'] $ensure = 'present',
+  Hash[String[1],Collectd::SNMP_AGENT::Data] $data = {
+    'memAvailReal' => {
+      'oids' => '1.3.6.1.4.1.2021.4.6.0',
+      'plugin' => 'memory',
+      'type' => 'memory',
+      'typeinstance' => 'free',
+    },
+  },
+  Hash[String[1], Collectd::SNMP_AGENT::Table] $table = {
+    'ifTable' => {
+      'indexoid' => 'IF-MIB::ifIndex',
+      'sizeoid' => 'IF-MIB::ifNumber',
+      'data'=> {
+        'ifDescr' => {
+          'plugin'   => 'interface',
+          'oids'     => 'IF-MIB::ifDescr',
+          'indexkey' => {
+            'source' => 'PluginInstance',
+          },
+        },
+        'ifOctets' => {
+          'plugin'   => 'interface',
+          'oids'     => 'IF-MIB::ifInOctets" "IF-MIB::ifOutOctets',
+          'type'     => 'if_octets',
+          'typeinstance' => '',
+        },
+      },
+    },
+  }
+) {
+  include collectd
+
+  collectd::plugin { 'snmp_agent':
+    ensure  => $ensure,
+    content => epp('collectd/plugin/snmp_agent.conf.epp', {
+        'data'  => $data,
+        'table' => $table
+    }),
+  }
+}
diff --git a/manifests/plugin/statsd.pp b/manifests/plugin/statsd.pp
index cd0ef9e..080ee21 100644
--- a/manifests/plugin/statsd.pp
+++ b/manifests/plugin/statsd.pp
@@ -1,8 +1,8 @@
 # https://collectd.org/wiki/index.php/Plugin:StatsD
 class collectd::plugin::statsd (
   $ensure                = 'present',
-  $host                  = undef,
-  $port                  = undef,
+  Optional[Stdlib::Host] $host = undef,
+  Optional[Stdlib::Port] $port = undef,
   $deletecounters        = undef,
   $deletetimers          = undef,
   $deletegauges          = undef,
@@ -15,7 +15,6 @@ class collectd::plugin::statsd (
   $timersum              = undef,
   $timercount            = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'statsd':
diff --git a/manifests/plugin/swap.pp b/manifests/plugin/swap.pp
index f9a6173..513c8f6 100644
--- a/manifests/plugin/swap.pp
+++ b/manifests/plugin/swap.pp
@@ -8,7 +8,6 @@ class collectd::plugin::swap (
   Boolean $valuespercentage = false,
   Boolean $reportio         = true,
 ) {
-
   include collectd
 
   collectd::plugin { 'swap':
diff --git a/manifests/plugin/sysevent.pp b/manifests/plugin/sysevent.pp
index 363a29a..8c3303b 100644
--- a/manifests/plugin/sysevent.pp
+++ b/manifests/plugin/sysevent.pp
@@ -48,7 +48,6 @@ class collectd::plugin::sysevent (
   Optional[Integer[0]] $buffer_size            = undef,
   Optional[Integer[1, default]] $buffer_length = undef,
 ) {
-
   include collectd
 
   if $manage_package and $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/syslog.pp b/manifests/plugin/syslog.pp
index 45e5906..6f4816a 100644
--- a/manifests/plugin/syslog.pp
+++ b/manifests/plugin/syslog.pp
@@ -5,7 +5,6 @@ class collectd::plugin::syslog (
   Enum['debug', 'info', 'notice', 'warning', 'err'] $log_level = 'info',
   Optional[Enum['OKAY', 'WARNING', 'FAILURE']] $notify_level   = undef
 ) {
-
   include collectd
 
   collectd::plugin { 'syslog':
diff --git a/manifests/plugin/tail.pp b/manifests/plugin/tail.pp
index 70ae77e..99c17a7 100644
--- a/manifests/plugin/tail.pp
+++ b/manifests/plugin/tail.pp
@@ -2,9 +2,8 @@
 # https://collectd.org/wiki/index.php/Plugin:Tail
 class collectd::plugin::tail (
   $interval             = undef,
-  Optional[Hash] $files = {},
+  Hash $files           = {},
 ) {
-
   collectd::plugin { 'tail':
     interval => $interval,
   }
diff --git a/manifests/plugin/tail/file.pp b/manifests/plugin/tail/file.pp
index 5bebc6b..4b78f13 100644
--- a/manifests/plugin/tail/file.pp
+++ b/manifests/plugin/tail/file.pp
@@ -5,7 +5,6 @@ define collectd::plugin::tail::file (
   Array[Hash] $matches,
   $ensure = 'present',
 ) {
-
   include collectd
   include collectd::plugin::tail
 
diff --git a/manifests/plugin/target_v5upgrade.pp b/manifests/plugin/target_v5upgrade.pp
index f468c23..f11138b 100644
--- a/manifests/plugin/target_v5upgrade.pp
+++ b/manifests/plugin/target_v5upgrade.pp
@@ -2,7 +2,6 @@
 class collectd::plugin::target_v5upgrade (
   $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'target_v5upgrade':
diff --git a/manifests/plugin/tcpconns.pp b/manifests/plugin/tcpconns.pp
index e156e9c..198e49d 100644
--- a/manifests/plugin/tcpconns.pp
+++ b/manifests/plugin/tcpconns.pp
@@ -1,13 +1,12 @@
 # https://collectd.org/wiki/index.php/Plugin:TCPConns
 class collectd::plugin::tcpconns (
-  Optional[Array] $localports        = undef,
-  Optional[Array] $remoteports       = undef,
+  Optional[Array[Stdlib::Port]] $localports  = undef,
+  Optional[Array[Stdlib::Port]] $remoteports = undef,
   $listening                         = undef,
   $interval                          = undef,
   Optional[Boolean] $allportssummary = undef,
   $ensure                            = 'present'
 ) {
-
   include collectd
 
   collectd::plugin { 'tcpconns':
diff --git a/manifests/plugin/thermal.pp b/manifests/plugin/thermal.pp
index aa60fc1..560db60 100644
--- a/manifests/plugin/thermal.pp
+++ b/manifests/plugin/thermal.pp
@@ -5,7 +5,6 @@ class collectd::plugin::thermal (
   Boolean $ignoreselected = false,
   $interval               = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'thermal':
diff --git a/manifests/plugin/threshold.pp b/manifests/plugin/threshold.pp
index 4671485..f32dddf 100644
--- a/manifests/plugin/threshold.pp
+++ b/manifests/plugin/threshold.pp
@@ -6,7 +6,6 @@ class collectd::plugin::threshold (
   Array[Collectd::Threshold::Plugin] $plugins  = [],
   Array[Collectd::Threshold::Host]   $hosts    = [],
 ) {
-
   include collectd
 
   collectd::plugin { 'threshold':
diff --git a/manifests/plugin/unixsock.pp b/manifests/plugin/unixsock.pp
index cbbf601..7da00fc 100644
--- a/manifests/plugin/unixsock.pp
+++ b/manifests/plugin/unixsock.pp
@@ -1,13 +1,12 @@
 # https://collectd.org/wiki/index.php/Plugin:UnixSock
 class collectd::plugin::unixsock (
-  Stdlib::Absolutepath $socketfile = '/var/run/collectd-socket',
+  Stdlib::Absolutepath $socketfile = '/var/run/collectd-unixsock',
   $socketgroup                     = 'collectd',
   $socketperms                     = '0770',
   $deletesocket                    = false,
   $ensure                          = 'present',
   $interval                        = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'unixsock':
diff --git a/manifests/plugin/uptime.pp b/manifests/plugin/uptime.pp
index 6fb5a5d..26b24f6 100644
--- a/manifests/plugin/uptime.pp
+++ b/manifests/plugin/uptime.pp
@@ -3,7 +3,6 @@ class collectd::plugin::uptime (
   $ensure   = 'present',
   $interval = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'uptime':
diff --git a/manifests/plugin/users.pp b/manifests/plugin/users.pp
index ddadc7e..ddc5f14 100644
--- a/manifests/plugin/users.pp
+++ b/manifests/plugin/users.pp
@@ -3,7 +3,6 @@ class collectd::plugin::users (
   $ensure   = 'present',
   $interval = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'users':
diff --git a/manifests/plugin/uuid.pp b/manifests/plugin/uuid.pp
index 5613a19..139a3b6 100644
--- a/manifests/plugin/uuid.pp
+++ b/manifests/plugin/uuid.pp
@@ -4,7 +4,6 @@ class collectd::plugin::uuid (
   $ensure    = 'present',
   $interval  = undef,
 ) {
-
   include collectd
 
   collectd::plugin { 'uuid':
diff --git a/manifests/plugin/varnish.pp b/manifests/plugin/varnish.pp
index 456c10d..85783a9 100644
--- a/manifests/plugin/varnish.pp
+++ b/manifests/plugin/varnish.pp
@@ -8,7 +8,6 @@ class collectd::plugin::varnish (
   },
   $interval       = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/virt.pp b/manifests/plugin/virt.pp
index 1ed69d3..8af0b54 100644
--- a/manifests/plugin/virt.pp
+++ b/manifests/plugin/virt.pp
@@ -1,19 +1,19 @@
 # https://collectd.org/wiki/index.php/Plugin:virt
 class collectd::plugin::virt (
   String $connection,
-  $ensure                                      = 'present',
-  $manage_package                              = undef,
-  Optional[Pattern[/^\d+$/]] $refresh_interval = undef,
-  Optional[String] $domain                     = undef,
-  Optional[String] $block_device               = undef,
-  Optional[String]$interface_device            = undef,
-  Optional[Boolean] $ignore_selected           = undef,
-  Optional[String] $hostname_format            = undef,
-  Optional[String] $interface_format           = undef,
-  Optional[String] $extra_stats                = undef,
-  $interval                                    = undef,
+  $ensure                                                                    = 'present',
+  $manage_package                                                            = undef,
+  Optional[Pattern[/^\d+$/]] $refresh_interval                               = undef,
+  Optional[String] $domain                                                   = undef,
+  Optional[String] $block_device                                             = undef,
+  Optional[String] $interface_device                                         = undef,
+  Optional[Boolean] $ignore_selected                                         = undef,
+  Optional[String[1]] $plugin_instance_format                                = undef,
+  Optional[String] $hostname_format                                          = undef,
+  Optional[String] $interface_format                                         = undef,
+  Optional[String] $extra_stats                                              = undef,
+  $interval                                                                  = undef,
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/vmem.pp b/manifests/plugin/vmem.pp
index 1a6582e..89637b9 100644
--- a/manifests/plugin/vmem.pp
+++ b/manifests/plugin/vmem.pp
@@ -4,7 +4,6 @@ class collectd::plugin::vmem (
   $interval = undef,
   $verbose  = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'vmem':
diff --git a/manifests/plugin/write_graphite.pp b/manifests/plugin/write_graphite.pp
index 718b743..5781cb9 100644
--- a/manifests/plugin/write_graphite.pp
+++ b/manifests/plugin/write_graphite.pp
@@ -5,7 +5,6 @@ class collectd::plugin::write_graphite (
   $ensure            = 'present',
   $globals           = false,
 ) {
-
   include collectd
 
   collectd::plugin { 'write_graphite':
diff --git a/manifests/plugin/write_graphite/carbon.pp b/manifests/plugin/write_graphite/carbon.pp
index 03f8d4e..c6979cf 100644
--- a/manifests/plugin/write_graphite/carbon.pp
+++ b/manifests/plugin/write_graphite/carbon.pp
@@ -1,8 +1,8 @@
 # a single graphite backend
 define collectd::plugin::write_graphite::carbon (
   $ensure                    = 'present',
-  $graphitehost              = 'localhost',
-  $graphiteport              = 2003,
+  Stdlib::Host $graphitehost = 'localhost',
+  Stdlib::Port $graphiteport = 2003,
   Boolean $storerates        = true,
   $graphiteprefix            = 'collectd.',
   $graphitepostfix           = undef,
@@ -12,8 +12,9 @@ define collectd::plugin::write_graphite::carbon (
   $protocol                  = 'tcp',
   Boolean $separateinstances = false,
   Boolean $logsenderrors     = true,
+  Integer $reconnectinterval = 0,
+  Boolean $reversehost       = false,
 ) {
-
   include collectd
   include collectd::plugin::write_graphite
 
diff --git a/manifests/plugin/write_http.pp b/manifests/plugin/write_http.pp
index 49a6d4b..3b993b5 100644
--- a/manifests/plugin/write_http.pp
+++ b/manifests/plugin/write_http.pp
@@ -1,16 +1,36 @@
-# https://collectd.org/wiki/index.php/Plugin:Write_HTTP
+# @summary Enable write_http plugin
+#
+# @see  https://collectd.org/wiki/index.php/Plugin:Write_HTTP
+#
+# @parameter Manage a collectd-write_http package? If undef a suitable value per OS will be chosen.
+#
 class collectd::plugin::write_http (
   Enum['present', 'absent']          $ensure = 'present',
   Hash[String, Hash[String, Scalar]] $nodes = {},
-  Hash[String, Hash[String, Scalar]] $urls  = {}
+  Hash[String, Hash[String, Scalar]] $urls  = {},
+  Optional[Boolean]                  $manage_package = undef,
 ) {
-
   include collectd
 
   if !empty($nodes) and !empty($urls) {
     fail('Only one of nodes or urls is supposed to be defined')
   }
 
+  if $manage_package !~ Undef {
+    $_manage_package = $manage_package
+  } else {
+    if $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'],'8') >= 0 {
+      $_manage_package = true
+    } else {
+      $_manage_package = false
+    }
+  }
+  if $_manage_package {
+    package { 'collectd-write_http':
+      ensure => $ensure,
+    }
+  }
+
   $endpoints = merge($nodes, $urls)
   collectd::plugin { 'write_http':
     ensure  => $ensure,
diff --git a/manifests/plugin/write_kafka.pp b/manifests/plugin/write_kafka.pp
index d333476..b9c7171 100644
--- a/manifests/plugin/write_kafka.pp
+++ b/manifests/plugin/write_kafka.pp
@@ -2,14 +2,15 @@ class collectd::plugin::write_kafka (
   $ensure                    = 'present',
   $kafka_host                = undef,
   Array[String] $kafka_hosts = ['localhost:9092'],
-  $kafka_port                = 9092,
+  Stdlib::Port $kafka_port   = 9092,
   Hash $topics               = {},
+  Hash $properties           = {},
+  Hash $meta                 = {},
 ) {
-
   include collectd
 
   if($kafka_host and $kafka_port) {
-    $real_kafka_hosts = [ "${kafka_host}:${kafka_port}" ]
+    $real_kafka_hosts = ["${kafka_host}:${kafka_port}"]
   } else {
     $real_kafka_hosts = $kafka_hosts
   }
diff --git a/manifests/plugin/write_log.pp b/manifests/plugin/write_log.pp
index d088625..63de6e3 100644
--- a/manifests/plugin/write_log.pp
+++ b/manifests/plugin/write_log.pp
@@ -2,7 +2,6 @@ class collectd::plugin::write_log (
   String $format = 'JSON',
   $ensure        = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'write_log':
diff --git a/manifests/plugin/write_network.pp b/manifests/plugin/write_network.pp
index e0b3aec..a74c77f 100644
--- a/manifests/plugin/write_network.pp
+++ b/manifests/plugin/write_network.pp
@@ -1,9 +1,8 @@
 # A define to make a generic network output for collectd
 class collectd::plugin::write_network (
   $ensure       = 'present',
-  Hash $servers = { 'localhost'  =>  { 'serverport' => '25826' } },
+  Hash $servers = { 'localhost'  => { 'serverport' => '25826' } },
 ) {
-
   include collectd
 
   $servernames = keys($servers)
diff --git a/manifests/plugin/write_prometheus.pp b/manifests/plugin/write_prometheus.pp
index f750cf9..07f9afc 100644
--- a/manifests/plugin/write_prometheus.pp
+++ b/manifests/plugin/write_prometheus.pp
@@ -1,8 +1,7 @@
 class collectd::plugin::write_prometheus (
-  String $port = '9103',
-  $ensure      = 'present',
+  Stdlib::Port $port = 9103,
+  $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'write_prometheus':
diff --git a/manifests/plugin/write_riemann.pp b/manifests/plugin/write_riemann.pp
index db6990a..6fb2a41 100644
--- a/manifests/plugin/write_riemann.pp
+++ b/manifests/plugin/write_riemann.pp
@@ -6,7 +6,6 @@ class collectd::plugin::write_riemann (
   Array[String[1]] $tags                = [],
   Hash[String[1],String[1]] $attributes = {},
 ) {
-
   include collectd
 
   if $facts['os']['family'] == 'RedHat' {
diff --git a/manifests/plugin/write_sensu.pp b/manifests/plugin/write_sensu.pp
index 3b0ed51..ba0bd7d 100644
--- a/manifests/plugin/write_sensu.pp
+++ b/manifests/plugin/write_sensu.pp
@@ -2,8 +2,8 @@
 class collectd::plugin::write_sensu (
   $ensure           = 'present',
   $manage_package   = undef,
-  $sensu_host       = 'localhost',
-  $sensu_port       = 3030,
+  Stdlib::Host $sensu_host = 'localhost',
+  Stdlib::Port $sensu_port = 3030,
   Boolean $store_rates      = false,
   Boolean $always_append_ds = false,
   $metrics          = false,
@@ -11,7 +11,6 @@ class collectd::plugin::write_sensu (
   $notifications    = false,
   $notifs_handler   = 'example_notification_handler',
 ) {
-
   include collectd
 
   $_manage_package = pick($manage_package, $collectd::manage_package)
diff --git a/manifests/plugin/write_tsdb.pp b/manifests/plugin/write_tsdb.pp
index 6aa638a..faef1d4 100644
--- a/manifests/plugin/write_tsdb.pp
+++ b/manifests/plugin/write_tsdb.pp
@@ -2,16 +2,15 @@
 class collectd::plugin::write_tsdb (
   $ensure                   = present,
   Boolean $globals          = false,
-  $host                     = 'localhost',
-  $port                     = 4242,
+  Stdlib::Host $host        = 'localhost',
+  Stdlib::Port $port        = 4242,
   Array $host_tags          = [],
   Boolean $store_rates      = false,
   Boolean $always_append_ds = false,
 ) {
-
   include collectd
 
-  collectd::plugin {'write_tsdb':
+  collectd::plugin { 'write_tsdb':
     ensure  => $collectd::plugin::write_tsdb::ensure,
     content => template('collectd/plugin/write_tsdb.conf.erb'),
   }
diff --git a/manifests/plugin/zfs_arc.pp b/manifests/plugin/zfs_arc.pp
index 5a513c7..b98a9cd 100644
--- a/manifests/plugin/zfs_arc.pp
+++ b/manifests/plugin/zfs_arc.pp
@@ -2,7 +2,6 @@
 class collectd::plugin::zfs_arc (
   $ensure = 'present',
 ) {
-
   include collectd
 
   collectd::plugin { 'zfs_arc':
diff --git a/manifests/plugin/zookeeper.pp b/manifests/plugin/zookeeper.pp
index b8c25f0..8c22938 100644
--- a/manifests/plugin/zookeeper.pp
+++ b/manifests/plugin/zookeeper.pp
@@ -1,10 +1,9 @@
 class collectd::plugin::zookeeper (
   Enum['present', 'absent'] $ensure           = 'present',
   Optional[Integer]         $interval         = undef,
-  String                    $zookeeper_host   = 'localhost',
-  String                    $zookeeper_port   = '2181',
+  Stdlib::Host              $zookeeper_host   = 'localhost',
+  Stdlib::Port              $zookeeper_port   = 2181,
 ) {
-
   include collectd
 
   collectd::plugin { 'zookeeper':
diff --git a/manifests/repo.pp b/manifests/repo.pp
index cea0e47..4d750d5 100644
--- a/manifests/repo.pp
+++ b/manifests/repo.pp
@@ -1,16 +1,13 @@
 # collectd::repo
 # Handle package repo configuration
 class collectd::repo {
-
   if $collectd::manage_repo {
     $osfamily_downcase = downcase($facts['os']['family'])
 
     if defined("::collectd::repo::${osfamily_downcase}") {
       require "::collectd::repo::${osfamily_downcase}"
     } else {
-      notify{"You have asked to manage_repo on a system that doesn't have a repo class specified: ${facts['os']['family']}":}
+      notify { "You have asked to manage_repo on a system that doesn't have a repo class specified: ${facts['os']['family']}": }
     }
   }
-
 }
-
diff --git a/manifests/repo/debian.pp b/manifests/repo/debian.pp
index d91a175..671dfe9 100644
--- a/manifests/repo/debian.pp
+++ b/manifests/repo/debian.pp
@@ -1,9 +1,10 @@
 class collectd::repo::debian {
-
   contain apt
+  if $collectd::manage_package {
+    Class['apt::update'] -> Package[$collectd::package_name]
+  }
 
   if $collectd::ci_package_repo {
-
     apt::source { 'collectd-ci':
       location => 'https://pkg.ci.collectd.org/deb/',
       repos    => "collectd-${$collectd::ci_package_repo}",
@@ -27,5 +28,4 @@ class collectd::repo::debian {
       }
     }
   }
-
 }
diff --git a/manifests/repo/redhat.pp b/manifests/repo/redhat.pp
index 1319acb..d2b5a56 100644
--- a/manifests/repo/redhat.pp
+++ b/manifests/repo/redhat.pp
@@ -1,16 +1,12 @@
 class collectd::repo::redhat {
-
   if $collectd::ci_package_repo {
-
     yumrepo { 'collectd-ci':
       ensure  => present,
       enabled => '1',
-      baseurl => "https://pkg.ci.collectd.org/rpm/collectd-${collectd::ci_package_repo}/epel-${facts['os']['release']['major']}-${facts['architecture']}",
+      baseurl => "https://pkg.ci.collectd.org/rpm/collectd-${collectd::ci_package_repo}/epel-${facts['os']['release']['major']}-${facts['os']['architecture']}",
       gpgkey  => 'https://pkg.ci.collectd.org/pubkey.asc',
     }
-
   } else {
     require epel
   }
-
 }
diff --git a/manifests/service.pp b/manifests/service.pp
index bc9d316..a909ef3 100644
--- a/manifests/service.pp
+++ b/manifests/service.pp
@@ -1,6 +1,5 @@
 #
 class collectd::service {
-
   assert_private()
 
   if $collectd::manage_service {
@@ -10,5 +9,4 @@ class collectd::service {
       enable => $collectd::service_enable,
     }
   }
-
 }
diff --git a/manifests/type.pp b/manifests/type.pp
index 891aea1..5ecb65e 100644
--- a/manifests/type.pp
+++ b/manifests/type.pp
@@ -9,18 +9,18 @@ define collectd::type (
   # BC compatible .... ending
 
   Array[Struct[{
-    min     => Variant[Numeric, Enum['U']],
-    max     => Variant[Numeric, Enum['U']],
-    ds_type => Enum['ABSOLUTE', 'COUNTER', 'DERIVE', 'GAUGE'],
-    ds_name => String,
+        min     => Variant[Numeric, Enum['U']],
+        max     => Variant[Numeric, Enum['U']],
+        ds_type => Enum['ABSOLUTE', 'COUNTER', 'DERIVE', 'GAUGE'],
+        ds_name => String,
   }]]                                                         $types = [],
 ) {
   if empty($types) {
     $_types = [{
-      min     => $min,
-      max     => $max,
-      ds_type => $ds_type,
-      ds_name => $ds_name,
+        min     => $min,
+        max     => $max,
+        ds_type => $ds_type,
+        ds_name => $ds_name,
     }]
   } else {
     $_types = $types
diff --git a/manifests/typesdb.pp b/manifests/typesdb.pp
index 3739653..d558e97 100644
--- a/manifests/typesdb.pp
+++ b/manifests/typesdb.pp
@@ -1,10 +1,19 @@
+#
+# @summary This define initialize a collectd typesdb file
+#
+# @param path File path
+# @param group File
+# @param mode File mode
+# @param owner File owner
+# @param include Include the file in the typesdb config (require collectd::purge_config at true)
+#
 define collectd::typesdb (
-  $path  = $title,
-  $group = $collectd::config_group,
-  $mode  = $collectd::config_mode,
-  $owner = $collectd::config_owner,
+  String $path     = $title,
+  String $group    = $collectd::config_group,
+  String $mode     = $collectd::config_mode,
+  String $owner    = $collectd::config_owner,
+  Boolean $include = false,
 ) {
-
   include collectd
 
   concat { $path:
@@ -15,4 +24,12 @@ define collectd::typesdb (
     ensure_newline => true,
     notify         => Service[$collectd::service_name],
   }
+
+  if $include and $collectd::purge_config {
+    concat::fragment { "include_typedb_${path}":
+      order   => '50',
+      target  => 'collectd_typesdb',
+      content => "TypesDB \"${path}\"\n",
+    }
+  }
 }
diff --git a/metadata.json b/metadata.json
index 1342a46..c17baa1 100644
--- a/metadata.json
+++ b/metadata.json
@@ -1,21 +1,57 @@
 {
+  "name": "puppet-collectd",
+  "version": "14.0.0",
+  "source": "https://github.com/voxpupuli/puppet-collectd",
+  "author": "Vox Pupuli",
+  "license": "Apache-2.0",
+  "summary": "Puppet module for Collectd",
+  "project_page": "https://github.com/voxpupuli/puppet-collectd",
+  "issues_url": "https://github.com/voxpupuli/puppet-collectd/issues",
+  "dependencies": [
+    {
+      "name": "puppetlabs-apt",
+      "version_requirement": ">= 2.2.0 < 9.0.0"
+    },
+    {
+      "name": "puppetlabs/concat",
+      "version_requirement": ">= 4.1.0 < 8.0.0"
+    },
+    {
+      "name": "puppetlabs/stdlib",
+      "version_requirement": ">= 4.25.0 < 9.0.0"
+    },
+    {
+      "name": "puppet-epel",
+      "version_requirement": ">= 3.0.0 < 5.0.0"
+    },
+    {
+      "name": "puppetlabs-python_task_helper",
+      "version_requirement": ">= 0.2.0 < 1.0.0"
+    }
+  ],
   "operatingsystem_support": [
     {
       "operatingsystem": "RedHat",
       "operatingsystemrelease": [
-        "7"
+        "7",
+        "8",
+        "9"
       ]
     },
     {
       "operatingsystem": "CentOS",
       "operatingsystemrelease": [
-        "7"
+        "7",
+        "8",
+        "9"
       ]
     },
     {
       "operatingsystem": "OracleLinux",
       "operatingsystemrelease": [
-        "7"
+        "7",
+        "8",
+        "9"
       ]
     },
     {
@@ -27,83 +63,37 @@
     {
       "operatingsystem": "Debian",
       "operatingsystemrelease": [
-        "8"
+        "10",
+        "11"
       ]
     },
     {
       "operatingsystem": "Ubuntu",
       "operatingsystemrelease": [
-        "16.04",
-        "18.04"
-      ]
-    },
-    {
-      "operatingsystem": "Solaris",
-      "operatingsystemrelease": [
-        "11"
+        "18.04",
+        "20.04"
       ]
     },
     {
       "operatingsystem": "FreeBSD",
       "operatingsystemrelease": [
-        "9",
-        "10"
-      ]
-    },
-    {
-      "operatingsystem": "OpenBSD",
-      "operatingsystemrelease": [
-        "5.7",
-        "5.8",
-        "5.9"
+        "12",
+        "13"
       ]
     },
     {
       "operatingsystem": "Gentoo"
-    },
-    {
-      "operatingsystem": "Archlinux"
     }
   ],
   "requirements": [
     {
       "name": "puppet",
-      "version_requirement": ">= 5.5.8 < 7.0.0"
+      "version_requirement": ">= 6.1.0 < 8.0.0"
     }
   ],
-  "name": "puppet-collectd",
-  "version": "11.0.0",
-  "source": "https://github.com/voxpupuli/puppet-collectd",
-  "author": "Vox Pupuli",
-  "license": "Apache-2.0",
-  "summary": "Puppet module for Collectd",
-  "project_page": "https://github.com/voxpupuli/puppet-collectd",
-  "issues_url": "https://github.com/voxpupuli/puppet-collectd/issues",
   "tags": [
     "collectd",
     "statistics",
     "graphite"
-  ],
-  "dependencies": [
-    {
-      "name": "puppetlabs-apt",
-      "version_requirement": ">= 2.2.0 < 8.0.0"
-    },
-    {
-      "name": "puppetlabs/concat",
-      "version_requirement": ">= 4.1.0 < 7.0.0"
-    },
-    {
-      "name": "puppetlabs/stdlib",
-      "version_requirement": ">= 4.25.0 < 7.0.0"
-    },
-    {
-      "name": "stahnma-epel",
-      "version_requirement": ">= 1.2.2 < 2.0.0"
-    },
-    {
-      "name": "puppetlabs-python_task_helper",
-      "version_requirement": ">= 0.2.0 < 1.0.0"
-    }
   ]
 }
diff --git a/spec/acceptance/class_plugin_disk_spec.rb b/spec/acceptance/class_plugin_disk_spec.rb
new file mode 100644
index 0000000..76ef142
--- /dev/null
+++ b/spec/acceptance/class_plugin_disk_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper_acceptance'
+
+describe 'collectd::plugin::disk class' do
+  context 'basic parameters' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils => true,
+      }
+      class{'collectd::plugin::disk': }
+      # Add one write plugin to keep logs quiet
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile  => '/var/run/collectd-sock',
+        socketgroup => 'root',
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      # the reason debian does not report disk metrics on docker images despite the
+      # module being loaded is an exercise for the reader.
+      # For CentOS 7 it works on my laptop but not in travis.
+      # disk plugin is probably very sensitive to environment.
+
+      its(:stdout) { is_expected.to match %r{disk_time} } if fact('os.family') == 'Redhat' && fact('os.release.major') == '8'
+    end
+  end
+end
diff --git a/spec/acceptance/class_plugin_load_spec.rb b/spec/acceptance/class_plugin_load_spec.rb
new file mode 100644
index 0000000..583fb2f
--- /dev/null
+++ b/spec/acceptance/class_plugin_load_spec.rb
@@ -0,0 +1,132 @@
+# frozen_string_literal: true
+
+require 'spec_helper_acceptance'
+
+describe 'collectd::plugin::load class' do
+  context 'basic parameters' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils => true,
+      }
+      class{'collectd::plugin::load': }
+      # Add one write plugin to keep logs quiet
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile  => '/var/run/collectd-sock',
+        socketgroup => 'root',
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      its(:stdout) { is_expected.to match %r{load/load$} }
+      its(:stdout) { is_expected.not_to match %r{load/load-relative$} }
+    end
+  end
+
+  context 'report relative false' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils => true,
+      }
+      class{'collectd::plugin::load':
+        report_relative => false,
+      }
+      # Add one write plugin to keep logs quiet
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile  => '/var/run/collectd-sock',
+        socketgroup => 'root',
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      its(:stdout) { is_expected.to match %r{load/load$} }
+      its(:stdout) { is_expected.not_to match %r{load/load-relative$} }
+    end
+  end
+
+  context 'report relative true' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils => true,
+      }
+      class{'collectd::plugin::load':
+        report_relative => true,
+      }
+      # Add one write plugin to keep logs quiet
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile  => '/var/run/collectd-sock',
+        socketgroup => 'root',
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      # https://github.com/voxpupuli/puppet-collectd/issues/901
+      # following will fail once 5.9.1 is released in EPEL8
+
+      if (fact('osfamily') == 'RedHat' && fact('os.release.major') == '8') ||
+         (fact('osfamily') == 'Debian' && fact('os.release.major') == '8')
+        its(:stdout) { is_expected.not_to match %r{load/load-relative$} }
+        its(:stdout) { is_expected.to match %r{load/load$} }
+      else
+        its(:stdout) { is_expected.to match %r{load/load-relative$} }
+        its(:stdout) { is_expected.not_to match %r{load/load$} }
+      end
+    end
+  end
+end
diff --git a/spec/acceptance/class_plugin_python_spec.rb b/spec/acceptance/class_plugin_python_spec.rb
deleted file mode 100644
index 5d48644..0000000
--- a/spec/acceptance/class_plugin_python_spec.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-require 'spec_helper_acceptance'
-
-describe 'collectd::plugin::python class' do
-  context 'basic parameters' do
-    # Using puppet_apply as a helper
-    it 'works idempotently with no errors' do
-      pp = <<-EOS
-      class{'collectd::plugin::python':
-      }
-      EOS
-      # Run 3 times since the collectd_version
-      # fact is impossible until collectd is
-      # installed. This acceptance test happens
-      # to be first.
-      apply_manifest(pp, catch_failures: true)
-      apply_manifest(pp, catch_failures: true)
-      apply_manifest(pp, catch_changes: true)
-    end
-
-    describe service('collectd') do
-      it { is_expected.to be_running }
-    end
-  end
-
-  context 'trivial module' do
-    it 'works idempotently with no errors' do
-      pp = <<-EOS
-      if $facts['os']['family'] == 'Debian' {
-        # for collectdctl command
-        package{'collectd-utils':
-	  ensure => present,
-        }
-      }
-      package{'python-pip':
-        ensure => present,
-      }
-      package{['collectd-connect-time']:
-	ensure   => 'present',
-        provider => 'pip',
-	require  => Package['python-pip'],
-	before   => Service['collectd'],
-      }
-      class{'collectd::plugin::python':
-	logtraces   => true,
-	interactive => false,
-        modules     => {
-           'collectd_connect_time' => {
-	     config => [{'target' => 'google.de'}],
-	   },
-	},
-      }
-      class{'collectd::plugin::unixsock':
-        socketfile => '/var/run/collectd-sock',
-      }
-      EOS
-
-      # Run it twice and test for idempotency
-      apply_manifest(pp, catch_failures: true)
-      apply_manifest(pp, catch_changes: true)
-      shell('sleep 10')
-    end
-    describe service('collectd') do
-      it { is_expected.to be_running }
-    end
-    # Check metric is really there.
-    describe command('collectdctl -s /var/run/collectd-sock listval') do
-      its(:exit_status) { is_expected.to eq 0 }
-      its(:stdout) { is_expected.to match %r{google.de} }
-    end
-  end
-
-  context 'two instances using same python module' do
-    it 'works idempotently with no errors' do
-      pp = <<-EOS
-      if $facts['os']['family'] == 'Debian' {
-        # for collectdctl command
-        package{['collectd-utils','python-dbus']:
-	  ensure => present,
-        }
-      }
-      package{['git','python-pip']:
-        ensure => present,
-	before => Package['collectd-systemd'],
-      }
-      package{'collectd-systemd':
-	ensure   => 'present',
-        provider => 'pip',
-	source   => 'git+https://github.com/mbachry/collectd-systemd.git',
-	before   => Service['collectd'],
-      }
-      class{'collectd':
-        typesdb => ['/usr/share/collectd/types.db'],
-      }
-      class{'collectd::plugin::python':
-	logtraces   => true,
-	interactive => false,
-        modules     => {
-           'instanceA' => {
-	     module => 'collectd_systemd',
-	     config => [{'Service' => 'collectd'}],
-	   },
-           'instanceB' => {
-	     module => 'collectd_systemd',
-	     config => [{'Service' => 'sshd'}],
-	   },
-	},
-      }
-      class{'collectd::plugin::unixsock':
-        socketfile => '/var/run/collectd-sock',
-      }
-      EOS
-
-      # Run it twice and test for idempotency
-      apply_manifest(pp, catch_failures: true)
-      apply_manifest(pp, catch_changes: true)
-      shell('sleep 10')
-    end
-    describe service('collectd') do
-      it { is_expected.to be_running }
-    end
-    # Check metric is really there.
-    describe command('collectdctl -s /var/run/collectd-sock listval') do
-      its(:exit_status) { is_expected.to eq 0 }
-      its(:stdout) { is_expected.to match %r{systemd-sshd} }
-    end
-    describe command('collectdctl -s /var/run/collectd-sock listval') do
-      its(:exit_status) { is_expected.to eq 0 }
-      its(:stdout) { is_expected.to match %r{systemd-collectd} }
-    end
-  end
-end
diff --git a/spec/acceptance/class_plugin_write_http_spec.rb b/spec/acceptance/class_plugin_write_http_spec.rb
new file mode 100644
index 0000000..722d467
--- /dev/null
+++ b/spec/acceptance/class_plugin_write_http_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require 'spec_helper_acceptance'
+
+describe 'collectd::plugin::write_http class' do
+  context 'basic parameters' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':}
+      class { 'collectd::plugin::write_http':
+        nodes => {
+          'collect1' => { 'url' => 'collect1.example.org', 'format' => 'JSON' },
+          'collect2' => { 'url' => 'collect2.example.org'},
+        }
+      }
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+  end
+end
diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb
index e4482dd..0dd7f1e 100644
--- a/spec/acceptance/class_spec.rb
+++ b/spec/acceptance/class_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper_acceptance'
 
 describe 'collectd class' do
@@ -6,6 +8,8 @@ describe 'collectd class' do
     it 'works idempotently with no errors' do
       pp = <<-EOS
       class { 'collectd': }
+      # Enable one write plugin to make logs quieter
+      class { 'collectd::plugin::csv':}
       EOS
 
       # Run it twice and test for idempotency
@@ -29,7 +33,7 @@ describe 'collectd class' do
 
       class { '::collectd::plugin::memory': }
 
-      class { '::collectd::plugin::rabbitmq': }
+      class { 'collectd::plugin::csv':}
       EOS
 
       # Run it twice and test for idempotency
@@ -37,20 +41,6 @@ describe 'collectd class' do
       apply_manifest(pp, catch_changes: true)
     end
 
-    if fact('osfamily') == 'Debian'
-      describe file('/etc/collectd/conf.d/10-rabbitmq.conf') do
-        it { is_expected.to be_file }
-        it { is_expected.to contain 'TypesDB "/usr/local/share/collectd-rabbitmq/types.db.custom"' }
-      end
-    end
-
-    if fact('osfamily') == 'RedHat'
-      describe file('/etc/collectd.d/10-rabbitmq.conf') do
-        it { is_expected.to be_file }
-        it { is_expected.to contain 'TypesDB "/usr/share/collectd-rabbitmq/types.db.custom"' }
-      end
-    end
-
     describe service('collectd') do
       it { is_expected.to be_running }
     end
diff --git a/spec/acceptance/curl_json_spec.rb b/spec/acceptance/curl_json_spec.rb
index 247f1f3..0d94dfc 100644
--- a/spec/acceptance/curl_json_spec.rb
+++ b/spec/acceptance/curl_json_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper_acceptance'
 
 describe 'curl_json defined type' do
@@ -17,6 +19,9 @@ describe 'curl_json defined type' do
             },
           }
       }
+      # Adding one write plugin removes a lot
+      # of confusing/misleading warnings in collectd logs
+      class { 'collectd::plugin::csv':}
       EOS
 
       # Run it twice and test for idempotency
diff --git a/spec/acceptance/define_plugin_processes_process_spec.rb b/spec/acceptance/define_plugin_processes_process_spec.rb
new file mode 100644
index 0000000..104df8d
--- /dev/null
+++ b/spec/acceptance/define_plugin_processes_process_spec.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+require 'spec_helper_acceptance'
+
+describe 'collectd::plugin::processes::process' do
+  context 'basic parameters' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils        => true,
+        purge        => true,
+        recurse      => true,
+        purge_config => true,
+      }
+
+      collectd::plugin::processes::process{'bar':
+        collect_file_descriptor => true,
+      }
+
+      # Configure one write plugin to keep logs quiet
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile  => '/var/run/collectd-sock',
+        socketgroup => 'root',
+        deletesocket => true,
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      its(:stdout) { is_expected.to match %r{processes-bar/ps_count} }
+    end
+  end
+end
diff --git a/spec/acceptance/define_plugin_processes_processmatch_spec.rb b/spec/acceptance/define_plugin_processes_processmatch_spec.rb
new file mode 100644
index 0000000..78b3e2a
--- /dev/null
+++ b/spec/acceptance/define_plugin_processes_processmatch_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper_acceptance'
+
+describe 'collectd::plugin::processes::processmatchs' do
+  context 'basic parameters' do
+    # Using puppet_apply as a helper
+    it 'works idempotently with no errors' do
+      pp = <<-EOS
+      class{'collectd':
+        utils        => true,
+        purge        => true,
+        recurse      => true,
+        purge_config => true,
+
+      }
+
+      # Configure one write plugin to keep logs quiet
+      collectd::plugin::processes::processmatch{'foo':
+        collect_file_descriptor => true,
+        regex                   => 'foo .*$',
+      }
+
+      class{'collectd::plugin::csv':}
+      # Create a socket to query
+      class{'collectd::plugin::unixsock':
+        socketfile   => '/var/run/collectd-sock',
+        socketgroup  => 'root',
+        deletesocket => true,
+      }
+
+      EOS
+      # Run 3 times since the collectd_version
+      # fact is impossible until collectd is
+      # installed.
+      apply_manifest(pp, catch_failures: false)
+      apply_manifest(pp, catch_failures: true)
+      apply_manifest(pp, catch_changes: true)
+      # Wait to get some data
+      shell('sleep 10')
+    end
+
+    describe service('collectd') do
+      it { is_expected.to be_running }
+    end
+
+    describe command('collectdctl -s /var/run/collectd-sock listval') do
+      its(:exit_status) { is_expected.to eq 0 }
+      its(:stdout) { is_expected.to match %r{processes-foo/ps_count} }
+    end
+  end
+end
diff --git a/spec/acceptance/nodesets/archlinux-2-x64.yml b/spec/acceptance/nodesets/archlinux-2-x64.yml
deleted file mode 100644
index 89b6300..0000000
--- a/spec/acceptance/nodesets/archlinux-2-x64.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-HOSTS:
-  archlinux-2-x64:
-    roles:
-      - master
-    platform: archlinux-2-x64
-    box: archlinux/archlinux
-    hypervisor: vagrant
-CONFIG:
-  type: foss
diff --git a/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml b/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml
deleted file mode 100644
index 19dd43e..0000000
--- a/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml
+++ /dev/null
@@ -1,31 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-# Amazon Linux is not a RHEL clone.
-#
-HOSTS:
-  amazonlinux-2016091-x64:
-    roles:
-      - master
-    platform: centos-6-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: amazonlinux-2016091-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/image_templates.yaml b/spec/acceptance/nodesets/ec2/image_templates.yaml
deleted file mode 100644
index e50593e..0000000
--- a/spec/acceptance/nodesets/ec2/image_templates.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# see also: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-# Hint: image IDs (ami-*) for the same image are different per location.
-#
-AMI:
-  # Amazon Linux AMI 2016.09.1 (HVM), SSD Volume Type
-  amazonlinux-2016091-eu-central-1:
-    :image:
-      :aio: ami-af0fc0c0
-    :region: eu-central-1
-  # Red Hat Enterprise Linux 7.3 (HVM), SSD Volume Type
-  rhel-73-eu-central-1:
-    :image:
-      :aio: ami-e4c63e8b
-    :region: eu-central-1
-  # SUSE Linux Enterprise Server 12 SP2 (HVM), SSD Volume Type
-  sles-12sp2-eu-central-1:
-    :image:
-      :aio: ami-c425e4ab
-    :region: eu-central-1
-  # Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
-  ubuntu-1604-eu-central-1:
-    :image:
-      :aio: ami-fe408091
-    :region: eu-central-1
-  # Microsoft Windows Server 2016 Base
-  windows-2016-base-eu-central-1:
-    :image:
-      :aio: ami-88ec20e7
-    :region: eu-central-1
diff --git a/spec/acceptance/nodesets/ec2/rhel-73-x64.yml b/spec/acceptance/nodesets/ec2/rhel-73-x64.yml
deleted file mode 100644
index 7fac823..0000000
--- a/spec/acceptance/nodesets/ec2/rhel-73-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  rhel-73-x64:
-    roles:
-      - master
-    platform: el-7-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: rhel-73-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml b/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml
deleted file mode 100644
index 8542154..0000000
--- a/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  sles-12sp2-x64:
-    roles:
-      - master
-    platform: sles-12-x86_64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: sles-12sp2-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml b/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml
deleted file mode 100644
index 9cf59d5..0000000
--- a/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  ubuntu-1604-x64:
-    roles:
-      - master
-    platform: ubuntu-16.04-amd64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: ubuntu-1604-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ubuntu
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml b/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml
deleted file mode 100644
index 0932e29..0000000
--- a/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-#
-# Additional ~/.fog config file with AWS EC2 credentials
-# required.
-#
-# see: https://github.com/puppetlabs/beaker/blob/master/docs/how_to/hypervisors/ec2.md
-#
-HOSTS:
-  windows-2016-base-x64:
-    roles:
-      - master
-    platform: windows-2016-64
-    hypervisor: ec2
-    # refers to image_tempaltes.yaml AMI[vmname] entry:
-    vmname: windows-2016-base-eu-central-1
-    # refers to image_tempaltes.yaml entry inside AMI[vmname][:image]:
-    snapshot: aio
-    # t2.micro is free tier eligible (https://aws.amazon.com/en/free/):
-    amisize: t2.micro
-    # required so that beaker sanitizes sshd_config and root authorized_keys:
-    user: ec2-user
-CONFIG:
-  type: aio
-  :ec2_yaml: spec/acceptance/nodesets/ec2/image_templates.yaml
-...
-# vim: syntax=yaml
diff --git a/spec/classes/collectd_init_spec.rb b/spec/classes/collectd_init_spec.rb
index aa36921..f71a318 100644
--- a/spec/classes/collectd_init_spec.rb
+++ b/spec/classes/collectd_init_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd', type: :class do
   on_supported_os.each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -16,15 +18,15 @@ describe 'collectd', type: :class do
         it { is_expected.to contain_file_line('include_conf_d_dot_conf').with_ensure('present') }
         it { is_expected.to contain_package(options[:package]).with_ensure('present') }
         it { is_expected.to contain_package(options[:package]).with_install_options(nil) }
+
         it do
           is_expected.to contain_service('collectd').with(
             ensure: 'running',
             name: options[:service]
           )
         end
-        if facts[:osfamily] == 'RedHat'
-          it { is_expected.to contain_class('epel') }
-        end
+
+        it { is_expected.to contain_class('epel') } if facts[:osfamily] == 'RedHat'
       end
 
       context 'with collectd::install::package_install_options' do
@@ -37,6 +39,23 @@ describe 'collectd', type: :class do
         end
       end
 
+      context 'when utils false' do
+        let(:params) { { utils: false } }
+
+        it { is_expected.not_to contain_package('collectd-utils') }
+      end
+
+      context 'when utils true' do
+        let(:params) { { utils: true } }
+
+        case "#{facts[:os]['family']}-#{facts[:os]['release']['major']}"
+        when %r{^Debian-.+}, 'RedHat-8', 'RedHat-9'
+          it { is_expected.to contain_package('collectd-utils') }
+        else
+          it { is_expected.not_to contain_package('collectd-utils') }
+        end
+      end
+
       context 'when purge_config is enabled' do
         let(:params) { { purge_config: true } }
 
@@ -51,6 +70,8 @@ describe 'collectd', type: :class do
         it { is_expected.to contain_file('collectd.conf').without_content(%r{^CollectInternalStats}) }
         it { is_expected.not_to contain_file_line('include_conf_d') }
         it { is_expected.to contain_file('collectd.conf').with_content(%r{^# Generated by Puppet$}) }
+        it { is_expected.to contain_concat('collectd_typesdb') }
+        it { is_expected.to contain_concat__fragment('collectd_typesdb_header') }
 
         context 'with fqdnlookup => false' do
           let(:params) do
@@ -71,7 +92,7 @@ describe 'collectd', type: :class do
             }
           end
 
-          it { is_expected.to contain_file('collectd.conf').with_content(%r{^TypesDB "/path/to/types.db"}) }
+          it { is_expected.to contain_concat__fragment('collectd_typesdb_header').with_content(%r{^TypesDB "/path/to/types.db"}) }
         end
 
         context 'with write_queue_limit_low => 100' do
@@ -160,11 +181,13 @@ describe 'collectd', type: :class do
             it { is_expected.to contain_file('collectd.conf').with_content(%r{^CollectInternalStats true}) }
           end
         end
+
         context 'when custom package_name is set' do
           let(:params) { { package_name: 'collectd-core' } }
 
           it { is_expected.to contain_package('collectd-core').with_ensure('present') }
         end
+
         context 'when manage_package is false' do
           let(:params) { { manage_package: false } }
 
@@ -187,9 +210,29 @@ describe 'collectd', type: :class do
           context 'and ci_package_repo empty' do
             let(:params) { { manage_repo: true } }
 
-            if facts[:osfamily] == 'RedHat'
-              it { is_expected.to contain_class('epel') }
+            it { is_expected.to contain_class('epel') } if facts[:osfamily] == 'RedHat'
+          end
+
+          context 'and manage_package is true' do
+            let(:params) do
+              {
+                manage_repo: true,
+                manage_package: true
+              }
             end
+
+            it { is_expected.to contain_package(options[:package]).that_requires('Class[Apt::Update]') } if facts[:osfamily] == 'Debian'
+          end
+
+          context 'and manage_package is false' do
+            let(:params) do
+              {
+                manage_repo: true,
+                manage_package: false
+              }
+            end
+
+            it { is_expected.not_to contain_class('Class[Apt::Update]').that_comes_before('Package[collectd]') } if facts[:osfamily] == 'Debian'
           end
 
           context 'and ci_package_repo set to a version' do
@@ -201,9 +244,7 @@ describe 'collectd', type: :class do
                 }
               end
 
-              if facts[:osfamily] == 'RedHat'
-                it { is_expected.to contain_yumrepo('collectd-ci').with_gpgkey('https://pkg.ci.collectd.org/pubkey.asc').with_baseurl("https://pkg.ci.collectd.org/rpm/collectd-5.6/epel-#{facts[:operatingsystemmajrelease]}-x86_64") }
-              end
+              it { is_expected.to contain_yumrepo('collectd-ci').with_gpgkey('https://pkg.ci.collectd.org/pubkey.asc').with_baseurl("https://pkg.ci.collectd.org/rpm/collectd-5.6/epel-#{facts[:operatingsystemmajrelease]}-x86_64") } if facts[:osfamily] == 'RedHat'
               if facts[:osfamily] == 'Debian'
                 it do
                   is_expected.to contain_apt__source('collectd-ci').
@@ -216,6 +257,7 @@ describe 'collectd', type: :class do
                 end
               end
             end
+
             context 'and package_keyserver is set' do
               let(:params) do
                 {
@@ -225,9 +267,7 @@ describe 'collectd', type: :class do
                 }
               end
 
-              if facts[:osfamily] == 'RedHat'
-                it { is_expected.to contain_yumrepo('collectd-ci').with_gpgkey('https://pkg.ci.collectd.org/pubkey.asc').with_baseurl("https://pkg.ci.collectd.org/rpm/collectd-5.6/epel-#{facts[:operatingsystemmajrelease]}-x86_64") }
-              end
+              it { is_expected.to contain_yumrepo('collectd-ci').with_gpgkey('https://pkg.ci.collectd.org/pubkey.asc').with_baseurl("https://pkg.ci.collectd.org/rpm/collectd-5.6/epel-#{facts[:operatingsystemmajrelease]}-x86_64") } if facts[:osfamily] == 'RedHat'
               if facts[:osfamily] == 'Debian'
                 it do
                   is_expected.to contain_apt__source('collectd-ci').
@@ -266,6 +306,7 @@ describe 'collectd', type: :class do
 
           it { is_expected.to contain_file('collectd.conf').with_content(%r{Hello World}) }
         end
+
         context 'on non supported operating systems' do
           let(:facts) { { os: { family: 'foo' } } }
 
diff --git a/spec/classes/collectd_plugin_amqp1_spec.rb b/spec/classes/collectd_plugin_amqp1_spec.rb
index 3e350c4..b04348d 100644
--- a/spec/classes/collectd_plugin_amqp1_spec.rb
+++ b/spec/classes/collectd_plugin_amqp1_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::amqp1', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,12 +23,14 @@ describe 'collectd::plugin::amqp1', type: :class do
         it { is_expected.to contain_collectd__plugin('amqp1') }
         it { is_expected.to contain_file('old_amqp1.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_amqp1.load').with_ensure('absent') }
+
         it 'Will create 10-amqp1.conf' do
           is_expected.to contain_file('amqp1.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-amqp1.conf"
           )
         end
+
         it { is_expected.to contain_file('amqp1.load').with(content: %r{<Transport "metrics">}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Host "localhost"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Port "5672"}) }
@@ -40,11 +44,12 @@ describe 'collectd::plugin::amqp1', type: :class do
           { ensure: 'present',
             transport: 'transport',
             host: 'host',
-            port: 'port',
+            port: 666,
             user: 'user',
             password: 'password',
             address: 'address',
             retry_delay: 30,
+            send_queue_limit: 40,
             instances: {
               instance: {
                 format: 'JSON',
@@ -63,11 +68,12 @@ describe 'collectd::plugin::amqp1', type: :class do
 
         it { is_expected.to contain_file('amqp1.load').with(content: %r{<Transport "transport">}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Host "host"}) }
-        it { is_expected.to contain_file('amqp1.load').with(content: %r{Port "port"}) }
+        it { is_expected.to contain_file('amqp1.load').with(content: %r{Port "666"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{User "user"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Password "password"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Address "address"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{RetryDelay 30}) }
+        it { is_expected.to contain_file('amqp1.load').with(content: %r{SendQueueLimit 40}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{<Instance "instance">}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{Format "JSON"}) }
         it { is_expected.to contain_file('amqp1.load').with(content: %r{PreSettle true}) }
diff --git a/spec/classes/collectd_plugin_amqp_spec.rb b/spec/classes/collectd_plugin_amqp_spec.rb
index 0e925bb..7e9e955 100644
--- a/spec/classes/collectd_plugin_amqp_spec.rb
+++ b/spec/classes/collectd_plugin_amqp_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::amqp', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -20,12 +22,14 @@ describe 'collectd::plugin::amqp', type: :class do
         it { is_expected.to contain_collectd__plugin('amqp') }
         it { is_expected.to contain_file('old_amqp.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_amqp.load').with_ensure('absent') }
+
         it 'Will create 10-amqp.conf' do
           is_expected.to contain_file('amqp.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-amqp.conf"
           )
         end
+
         it { is_expected.to contain_file('amqp.load').with(content: %r{<Publish "graphite">}) }
         it { is_expected.to contain_file('amqp.load').with(content: %r{Host "localhost"}) }
         it { is_expected.to contain_file('amqp.load').with(content: %r{Port "5672"}) }
@@ -40,6 +44,7 @@ describe 'collectd::plugin::amqp', type: :class do
         it { is_expected.to contain_file('amqp.load').with(content: %r{GraphiteEscapeChar "_"}) }
         it { is_expected.to contain_file('amqp.load').with(content: %r{</Publish>}) }
       end
+
       context 'overriding default parameters' do
         let(:params) do
           { amqphost: 'myhost',
@@ -70,6 +75,7 @@ describe 'collectd::plugin::amqp', type: :class do
         it { is_expected.to contain_file('amqp.load').with(content: %r{GraphitePrefix "prefix"}) }
         it { is_expected.to contain_file('amqp.load').with(content: %r{GraphiteEscapeChar "\|"}) }
         it { is_expected.to contain_file('amqp.load').with(content: %r{</Publish>}) }
+
         context 'with collectd 5.5+' do
           let :facts do
             facts.merge(collectd_version: '5.6.0')
diff --git a/spec/classes/collectd_plugin_apache_instance_spec.rb b/spec/classes/collectd_plugin_apache_instance_spec.rb
index 11a300c..5b59399 100644
--- a/spec/classes/collectd_plugin_apache_instance_spec.rb
+++ b/spec/classes/collectd_plugin_apache_instance_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::apache::instance', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -27,20 +29,20 @@ describe 'collectd::plugin::apache::instance', type: :define do
         end
 
         it 'creates an apache instance' do
-          content_instance_file = <<EOS
-<Plugin "apache">
-  <Instance "site2">
-    URL "https://another.example.com"
-    User "nobody"
-    Password "secrets"
-    VerifyPeer false
-    VerifyHost true
-    CACert "/etc/foobar/ca.crt"
-    SSLCiphers "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
-    Timeout 120
-  </Instance>
-</Plugin>
-EOS
+          content_instance_file = <<~EOS
+            <Plugin "apache">
+              <Instance "site2">
+                URL "https://another.example.com"
+                User "nobody"
+                Password "secrets"
+                VerifyPeer false
+                VerifyHost true
+                CACert "/etc/foobar/ca.crt"
+                SSLCiphers "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
+                Timeout 120
+              </Instance>
+            </Plugin>
+          EOS
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
           is_expected.to contain_class('collectd::plugin::apache')
diff --git a/spec/classes/collectd_plugin_apache_spec.rb b/spec/classes/collectd_plugin_apache_spec.rb
index a56be09..8643556 100644
--- a/spec/classes/collectd_plugin_apache_spec.rb
+++ b/spec/classes/collectd_plugin_apache_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::apache', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -14,19 +16,19 @@ describe 'collectd::plugin::apache', type: :class do
       options = os_specific_options(facts)
       context 'default' do
         it 'defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin apache>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin apache>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "apache">
-  <Instance "localhost">
-    URL "http://localhost/mod_status?auto"
-  </Instance>
-</Plugin>
+            <Plugin "apache">
+              <Instance "localhost">
+                URL "http://localhost/mod_status?auto"
+              </Instance>
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('apache.load').with(
@@ -64,34 +66,34 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin apache>
-  Globals false
-</LoadPlugin>
-
-<Plugin "apache">
-  <Instance "site1">
-    URL "https://example.com"
-    User "nobody"
-    Password "hidden"
-    VerifyPeer true
-    VerifyHost false
-    CACert "/etc/barfoo/ca.crt"
-  </Instance>
-  <Instance "site2">
-    URL "https://another.example.com"
-    User "nobody"
-    Password "secrets"
-    VerifyPeer false
-    VerifyHost true
-    CACert "/etc/foobar/ca.crt"
-    SSLCiphers "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
-    Timeout 120
-  </Instance>
-</Plugin>
-
-EOS
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin apache>
+              Globals false
+            </LoadPlugin>
+
+            <Plugin "apache">
+              <Instance "site1">
+                URL "https://example.com"
+                User "nobody"
+                Password "hidden"
+                VerifyPeer true
+                VerifyHost false
+                CACert "/etc/barfoo/ca.crt"
+              </Instance>
+              <Instance "site2">
+                URL "https://another.example.com"
+                User "nobody"
+                Password "secrets"
+                VerifyPeer false
+                VerifyHost true
+                CACert "/etc/foobar/ca.crt"
+                SSLCiphers "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
+                Timeout 120
+              </Instance>
+            </Plugin>
+
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('apache.load').with(
diff --git a/spec/classes/collectd_plugin_battery_spec.rb b/spec/classes/collectd_plugin_battery_spec.rb
index dc08a22..566ac66 100644
--- a/spec/classes/collectd_plugin_battery_spec.rb
+++ b/spec/classes/collectd_plugin_battery_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::battery', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -10,19 +12,19 @@ describe 'collectd::plugin::battery', type: :class do
       options = os_specific_options(facts)
       context 'default' do
         it 'defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin battery>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin battery>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "battery">
-  ValuesPercentage false
-  ReportDegraded false
-  QueryStateFS false
-</Plugin>
+            <Plugin "battery">
+              ValuesPercentage false
+              ReportDegraded false
+              QueryStateFS false
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('battery.load').with(
@@ -43,19 +45,19 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin battery>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin battery>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "battery">
-  ValuesPercentage true
-  ReportDegraded true
-  QueryStateFS true
-</Plugin>
+            <Plugin "battery">
+              ValuesPercentage true
+              ReportDegraded true
+              QueryStateFS true
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
diff --git a/spec/classes/collectd_plugin_bind_spec.rb b/spec/classes/collectd_plugin_bind_spec.rb
index 501acd4..2aa442f 100644
--- a/spec/classes/collectd_plugin_bind_spec.rb
+++ b/spec/classes/collectd_plugin_bind_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::bind', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -28,12 +30,14 @@ describe 'collectd::plugin::bind', type: :class do
         it { is_expected.to contain_collectd__plugin('bind') }
         it { is_expected.to contain_file('old_bind.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_bind.load').with_ensure('absent') }
+
         it 'Will create 10-bind.conf' do
           is_expected.to contain_file('bind.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-bind.conf"
           )
         end
+
         it { is_expected.to contain_file('bind.load').with(content: %r{<Plugin bind>}) }
         it { is_expected.to contain_file('bind.load').with(content: %r{URL "http://localhost:8053/"}) }
         it { is_expected.to contain_file('bind.load').with(content: %r{ParseTime false}) }
diff --git a/spec/classes/collectd_plugin_ceph_spec.rb b/spec/classes/collectd_plugin_ceph_spec.rb
index 29eaaa7..a58857a 100644
--- a/spec/classes/collectd_plugin_ceph_spec.rb
+++ b/spec/classes/collectd_plugin_ceph_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ceph', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -18,29 +20,29 @@ describe 'collectd::plugin::ceph', type: :class do
           { daemons: ['ceph-osd.0', 'ceph-osd.1', 'ceph-osd.2', 'test-osd.0', 'ceph-mon.mon01'] }
         end
 
-        content = <<EOS
-<Plugin ceph>
-  LongRunAvgLatency false
-  ConvertSpecialMetricTypes true
+        content = <<~EOS
+          <Plugin ceph>
+            LongRunAvgLatency false
+            ConvertSpecialMetricTypes true
 
-  <Daemon "ceph-osd.0">
-    SocketPath "/var/run/ceph/ceph-osd.0.asok"
-  </Daemon>
-  <Daemon "ceph-osd.1">
-    SocketPath "/var/run/ceph/ceph-osd.1.asok"
-  </Daemon>
-  <Daemon "ceph-osd.2">
-    SocketPath "/var/run/ceph/ceph-osd.2.asok"
-  </Daemon>
-  <Daemon "test-osd.0">
-    SocketPath "/var/run/ceph/test-osd.0.asok"
-  </Daemon>
-  <Daemon "ceph-mon.mon01">
-    SocketPath "/var/run/ceph/ceph-mon.mon01.asok"
-  </Daemon>
+            <Daemon "ceph-osd.0">
+              SocketPath "/var/run/ceph/ceph-osd.0.asok"
+            </Daemon>
+            <Daemon "ceph-osd.1">
+              SocketPath "/var/run/ceph/ceph-osd.1.asok"
+            </Daemon>
+            <Daemon "ceph-osd.2">
+              SocketPath "/var/run/ceph/ceph-osd.2.asok"
+            </Daemon>
+            <Daemon "test-osd.0">
+              SocketPath "/var/run/ceph/test-osd.0.asok"
+            </Daemon>
+            <Daemon "ceph-mon.mon01">
+              SocketPath "/var/run/ceph/ceph-mon.mon01.asok"
+            </Daemon>
 
-</Plugin>
-EOS
+          </Plugin>
+        EOS
         it "Will create #{options[:plugin_conf_dir]}/10-ceph.conf" do
           is_expected.to contain_collectd__plugin('ceph').with_content(content)
         end
diff --git a/spec/classes/collectd_plugin_cgroups_spec.rb b/spec/classes/collectd_plugin_cgroups_spec.rb
index b762e68..41930f0 100644
--- a/spec/classes/collectd_plugin_cgroups_spec.rb
+++ b/spec/classes/collectd_plugin_cgroups_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::cgroups', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_connectivity_spec.rb b/spec/classes/collectd_plugin_connectivity_spec.rb
index 1dcfb3a..ef9a1e9 100644
--- a/spec/classes/collectd_plugin_connectivity_spec.rb
+++ b/spec/classes/collectd_plugin_connectivity_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::connectivity', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,12 +23,14 @@ describe 'collectd::plugin::connectivity', type: :class do
         it { is_expected.to contain_collectd__plugin('connectivity') }
         it { is_expected.to contain_file('old_connectivity.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_connectivity.load').with_ensure('absent') }
+
         it 'Will create 10-connectivity.conf' do
           is_expected.to contain_file('connectivity.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-connectivity.conf"
           )
         end
+
         it { is_expected.to contain_file('connectivity.load').with(content: %r{<Plugin connectivity>}) }
       end
 
diff --git a/spec/classes/collectd_plugin_cpu_spec.rb b/spec/classes/collectd_plugin_cpu_spec.rb
index 1362d35..6aacde1 100644
--- a/spec/classes/collectd_plugin_cpu_spec.rb
+++ b/spec/classes/collectd_plugin_cpu_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::cpu', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -37,6 +39,7 @@ describe 'collectd::plugin::cpu', type: :class do
           it "Will not include ReportGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{ReportGuestState})
           end
+
           it "Will not include SubtractGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{SubtractGuestState})
           end
@@ -69,6 +72,7 @@ describe 'collectd::plugin::cpu', type: :class do
           it "Will not include ReportGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{ReportGuestState})
           end
+
           it "Will not include SubtractGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{SubtractGuestState})
           end
@@ -91,6 +95,7 @@ describe 'collectd::plugin::cpu', type: :class do
           it "Will not include ReportGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{ReportGuestState})
           end
+
           it "Will not include SubtractGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.not_to contain_file('cpu.load').with_content(%r{SubtractGuestState})
           end
@@ -110,6 +115,7 @@ describe 'collectd::plugin::cpu', type: :class do
           it "Will include ReportGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.to contain_file('cpu.load').with_content(%r{ReportGuestState true})
           end
+
           it "Will include SubtractGuestState in #{options[:plugin_conf_dir]}d/10-cpu.conf" do
             is_expected.to contain_file('cpu.load').with_content(%r{SubtractGuestState false})
           end
diff --git a/spec/classes/collectd_plugin_cuda_spec.rb b/spec/classes/collectd_plugin_cuda_spec.rb
index c772783..452ddc6 100644
--- a/spec/classes/collectd_plugin_cuda_spec.rb
+++ b/spec/classes/collectd_plugin_cuda_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::cuda', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -48,13 +50,13 @@ describe 'collectd::plugin::cuda', type: :class do
                         'provider' => provider
                       )
                     end
-                  end # packagename
-                end # ensure set
-              end # provider
-            end # present absent
-          end # context set
-        end # 'true', true
-      end # describe with manage_package
+                  end
+                end
+              end
+            end
+          end
+        end
+      end
     end
   end
 end
diff --git a/spec/classes/collectd_plugin_curl_spec.rb b/spec/classes/collectd_plugin_curl_spec.rb
index d106eef..e0f33bc 100644
--- a/spec/classes/collectd_plugin_curl_spec.rb
+++ b/spec/classes/collectd_plugin_curl_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::curl', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_dbi_spec.rb b/spec/classes/collectd_plugin_dbi_spec.rb
index 6a7f8ba..35fe72a 100644
--- a/spec/classes/collectd_plugin_dbi_spec.rb
+++ b/spec/classes/collectd_plugin_dbi_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::dbi', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -16,9 +18,9 @@ describe 'collectd::plugin::dbi', type: :class do
             content: %r{LoadPlugin dbi}
           )
         end
+
         it "Will create #{options[:plugin_conf_dir]}/dbi-config.conf" do
-          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/dbi-config.conf").
-            that_requires('File[collectd.d]')
+          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/dbi-config.conf")
           is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_header').with(content: %r{<Plugin dbi>})
         end
       end
@@ -28,15 +30,15 @@ describe 'collectd::plugin::dbi', type: :class do
           {
             databases: {
               'mydatabase' => {
-                'host'         => 'localhost',
-                'driver'       => 'mysql',
+                'host' => 'localhost',
+                'driver' => 'mysql',
                 'driveroption' => {
-                  'host'     => 'db.example.com',
+                  'host' => 'db.example.com',
                   'username' => 'dbuser',
                   'password' => 'dbpasswd'
                 },
                 'selectdb' => 'db',
-                'query'    => %w[disk_io log_delay]
+                'query' => %w[disk_io log_delay]
               }
             },
             queries: {
@@ -54,17 +56,65 @@ describe 'collectd::plugin::dbi', type: :class do
         end
 
         it "Will create #{options[:plugin_conf_dir]}/dbi-config.conf" do
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Driver \"mysql\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Host \"localhost\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Query \"disk_io\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption \"host\" \"db\.example\.com\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption \"username\" \"dbuser\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption \"password\" \"dbpasswd\"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Driver "mysql"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Host "localhost"\n})
+          is_expected.not_to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Interval})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Query "disk_io"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "host" "db\.example\.com"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "username" "dbuser"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "password" "dbpasswd"\n})
+
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{Statement "SELECT \* FROM log_delay_repli;"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{<Result>\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{InstancesFrom "inet_server_port" "inet_server_host"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{ValuesFrom "log_delay"\n})
+        end
+      end
+
+      context ':ensure => present and create a db with a query and certain interval' do
+        let(:params) do
+          {
+            databases: {
+              'mydatabase' => {
+                'host'              => 'localhost',
+                'driver'            => 'mysql',
+                'db_query_interval' => 60,
+                'driveroption'      => {
+                  'host'     => 'db.example.com',
+                  'username' => 'dbuser',
+                  'password' => 'dbpasswd'
+                },
+                'selectdb'          => 'db',
+                'query'             => %w[disk_io log_delay]
+              }
+            },
+            queries: {
+              'log_delay' => {
+                'statement' => 'SELECT * FROM log_delay_repli;',
+                'results'   => [{
+                  'type'           => 'gauge',
+                  'instanceprefix' => 'log_delay',
+                  'instancesfrom'  => %w[inet_server_port inet_server_host],
+                  'valuesfrom'     => 'log_delay'
+                }]
+              }
+            }
+          }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/dbi-config.conf with Interval" do
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Driver "mysql"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Host "localhost"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Interval 60\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{Query "disk_io"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "host" "db\.example\.com"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "username" "dbuser"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_db_mydatabase').with(content: %r{DriverOption "password" "dbpasswd"\n})
 
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{Statement \"SELECT \* FROM log_delay_repli;\"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{Statement "SELECT \* FROM log_delay_repli;"\n})
           is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{<Result>\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{InstancesFrom \"inet_server_port\" \"inet_server_host\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{ValuesFrom \"log_delay\"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{InstancesFrom "inet_server_port" "inet_server_host"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_dbi_conf_query_log_delay').with(content: %r{ValuesFrom "log_delay"\n})
         end
       end
     end
diff --git a/spec/classes/collectd_plugin_dcpmm_spec.rb b/spec/classes/collectd_plugin_dcpmm_spec.rb
new file mode 100644
index 0000000..ad3c613
--- /dev/null
+++ b/spec/classes/collectd_plugin_dcpmm_spec.rb
@@ -0,0 +1,122 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::dcpmm', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      options = os_specific_options(facts)
+
+      context ':ensure => present, default params' do
+        content = <<~EOS
+          # Generated by Puppet
+          <LoadPlugin dcpmm>
+            Globals false
+          </LoadPlugin>
+
+          <Plugin dcpmm>
+            Interval 10.0
+            CollectHealth false
+            CollectPerfMetrics true
+            EnableDispatchAll false
+          </Plugin>
+
+        EOS
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dcpmm.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dcpmm.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dcpmm.conf",
+            content: content
+          )
+        end
+      end
+
+      context ':ensure => absent' do
+        let :params do
+          { ensure: 'absent' }
+        end
+
+        it "Will not create #{options[:plugin_conf_dir]}/10-dcpmm.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dcpmm.load').with(
+            ensure: 'absent',
+            path: "#{options[:plugin_conf_dir]}/10-dcpmm.conf"
+          )
+        end
+      end
+
+      context ':ensure => present and :interval => 3.14' do
+        let :params do
+          { interval: 3.14 }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dcpmm.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dcpmm.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dcpmm.conf",
+            content: %r{Interval 3.14}m
+          )
+        end
+      end
+
+      context ':ensure => present, :collect_health => true and :collect_perf_metrics => false' do
+        let :params do
+          { collect_health: true,
+            collect_perf_metrics: false }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dcpmm.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dcpmm.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dcpmm.conf",
+            content: %r{CollectHealth true}m
+          )
+        end
+      end
+
+      context ':ensure => present and :collect_perf_metrics => false' do
+        let :params do
+          { collect_perf_metrics: false }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dcpmm.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dcpmm.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dcpmm.conf",
+            content: %r{CollectPerfMetrics false}m
+          )
+        end
+      end
+
+      context ':ensure => present, :collect_health => false and :collect_perf_metrics => true' do
+        let :params do
+          { collect_health: true,
+            collect_perf_metrics: true }
+        end
+
+        it 'Will raise error' do
+          is_expected.to compile.and_raise_error(%r{collect_health and collect_perf_metrics cannot be true at the same time.})
+        end
+      end
+
+      context ':ensure => present and :enable_dispatch_all => true' do
+        let :params do
+          { enable_dispatch_all: true }
+        end
+
+        it 'Will raise error' do
+          is_expected.to compile.and_raise_error(%r{enable_dispatch_all is unused at the moment and must always be false.})
+        end
+      end
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_df_spec.rb b/spec/classes/collectd_plugin_df_spec.rb
index 142c49d..db6afe0 100644
--- a/spec/classes/collectd_plugin_df_spec.rb
+++ b/spec/classes/collectd_plugin_df_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::df', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -34,7 +36,7 @@ describe 'collectd::plugin::df', type: :class do
           is_expected.to contain_file('df.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-df.conf",
-            content: %r{  Device \"proc\"\n  Device \"sysfs\"\n}
+            content: %r{  Device "proc"\n  Device "sysfs"\n}
           )
         end
       end
diff --git a/spec/classes/collectd_plugin_disk_spec.rb b/spec/classes/collectd_plugin_disk_spec.rb
index 071abd8..73b3870 100644
--- a/spec/classes/collectd_plugin_disk_spec.rb
+++ b/spec/classes/collectd_plugin_disk_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::disk', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -108,9 +110,9 @@ describe 'collectd::plugin::disk', type: :class do
         end
       end
 
-      case facts[:os]['family']
-      when 'RedHat'
-        context ':manage_package => undef  with collectd 5.5 and up' do
+      case [facts[:os]['family'], facts[:os]['release']['major']]
+      when %w[RedHat 8]
+        context ':manage_package => undef with collectd 5.5 and up' do
           let :facts do
             facts.merge(collectd_version: '5.5')
           end
@@ -122,6 +124,7 @@ describe 'collectd::plugin::disk', type: :class do
             )
           end
         end
+
         context ':manage_package => true' do
           let :params do
             {
@@ -136,6 +139,7 @@ describe 'collectd::plugin::disk', type: :class do
             )
           end
         end
+
         context ':install_options install package with install options' do
           let :params do
             {
diff --git a/spec/classes/collectd_plugin_dns_spec.rb b/spec/classes/collectd_plugin_dns_spec.rb
index c5986ca..2329192 100644
--- a/spec/classes/collectd_plugin_dns_spec.rb
+++ b/spec/classes/collectd_plugin_dns_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::dns', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb b/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb
new file mode 100644
index 0000000..1726822
--- /dev/null
+++ b/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::dpdk_telemetry', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      options = os_specific_options(facts)
+
+      context ':ensure => present, default params' do
+        content = <<~EOS
+          # Generated by Puppet
+          <LoadPlugin dpdk_telemetry>
+            Globals false
+          </LoadPlugin>
+
+          <Plugin dpdk_telemetry>
+            ClientSocketPath "/var/run/.client"
+            DpdkSocketPath "/var/run/dpdk/rte/telemetry"
+          </Plugin>
+
+        EOS
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dpdk_telemetry.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf",
+            content: content
+          )
+        end
+      end
+
+      context ':ensure => absent' do
+        let :params do
+          { ensure: 'absent' }
+        end
+
+        it "Will not create #{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dpdk_telemetry.load').with(
+            ensure: 'absent',
+            path: "#{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf"
+          )
+        end
+      end
+
+      context ':ensure => present and :client_socket_path => /test/path/.client' do
+        let :params do
+          { client_socket_path: '/test/path/.client' }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dpdk_telemetry.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf",
+            content: %r{ClientSocketPath "/test/path/.client"}m
+          )
+        end
+      end
+
+      context ':ensure => present and :dpdk_socket_path => /test/path/telemetry' do
+        let :params do
+          { dpdk_socket_path: '/test/path/telemetry' }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('dpdk_telemetry.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-dpdk_telemetry.conf",
+            content: %r{DpdkSocketPath "/test/path/telemetry"}m
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_ethstat.rb b/spec/classes/collectd_plugin_ethstat.rb
index 04e19aa..5588f70 100644
--- a/spec/classes/collectd_plugin_ethstat.rb
+++ b/spec/classes/collectd_plugin_ethstat.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ethstat', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -23,6 +25,7 @@ describe 'collectd::plugin::ethstat', type: :class do
             path: "#{options[:plugin_conf_dir]}/10-ethstat.conf"
           )
         end
+
         it { is_expected.to contain_file('ethstat.load').with_content(%r{^<Plugin ethstat>$}) }
         it { is_expected.to contain_file('ethstat.load').with_content(%r{^  Interface "eth0"$}) }
         it { is_expected.to contain_file('ethstat.load').with_content(%r{^  Interface "eth1"$}) }
diff --git a/spec/classes/collectd_plugin_exec_spec.rb b/spec/classes/collectd_plugin_exec_spec.rb
index 4b130bd..31ee7e6 100644
--- a/spec/classes/collectd_plugin_exec_spec.rb
+++ b/spec/classes/collectd_plugin_exec_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::exec', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -29,8 +31,7 @@ describe 'collectd::plugin::exec', type: :class do
         end
 
         it "Will create #{options[:plugin_conf_dir]}/exec-config" do
-          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/exec-config.conf").
-            that_requires('File[collectd.d]')
+          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/exec-config.conf")
           is_expected.to contain_concat__fragment('collectd_plugin_exec_conf_footer').with(
             content: %r{</Plugin>},
             target: "#{options[:plugin_conf_dir]}/exec-config.conf",
diff --git a/spec/classes/collectd_plugin_fhcount_spec.rb b/spec/classes/collectd_plugin_fhcount_spec.rb
index 4846a81..d6e6369 100644
--- a/spec/classes/collectd_plugin_fhcount_spec.rb
+++ b/spec/classes/collectd_plugin_fhcount_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::fhcount', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_filecount_spec.rb b/spec/classes/collectd_plugin_filecount_spec.rb
index 85aa341..59245b5 100644
--- a/spec/classes/collectd_plugin_filecount_spec.rb
+++ b/spec/classes/collectd_plugin_filecount_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filecount', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_filter_spec.rb b/spec/classes/collectd_plugin_filter_spec.rb
index 2444d1f..51c9134 100644
--- a/spec/classes/collectd_plugin_filter_spec.rb
+++ b/spec/classes/collectd_plugin_filter_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filter', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -13,7 +15,7 @@ describe 'collectd::plugin::filter', type: :class do
           is_expected.to contain_file("#{options[:plugin_conf_dir]}/01-filter.conf").with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/01-filter.conf",
-            content: %r{PreCacheChain \"PreChain\"\nPostCacheChain \"PostChain\"}
+            content: %r{PreCacheChain "PreChain"\nPostCacheChain "PostChain"}
           )
         end
       end
@@ -31,7 +33,7 @@ describe 'collectd::plugin::filter', type: :class do
           is_expected.to contain_file("#{options[:plugin_conf_dir]}/01-filter.conf").with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/01-filter.conf",
-            content: %r{PreCacheChain \"MyPreChain\"\nPostCacheChain \"MyPostChain\"}
+            content: %r{PreCacheChain "MyPreChain"\nPostCacheChain "MyPostChain"}
           )
         end
       end
diff --git a/spec/classes/collectd_plugin_fscache_spec.rb b/spec/classes/collectd_plugin_fscache_spec.rb
index c6caf62..377180f 100644
--- a/spec/classes/collectd_plugin_fscache_spec.rb
+++ b/spec/classes/collectd_plugin_fscache_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::fscache', type: :class do
diff --git a/spec/classes/collectd_plugin_genericjmx_spec.rb b/spec/classes/collectd_plugin_genericjmx_spec.rb
index 4daa47f..d243856 100644
--- a/spec/classes/collectd_plugin_genericjmx_spec.rb
+++ b/spec/classes/collectd_plugin_genericjmx_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::genericjmx', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
@@ -23,7 +25,6 @@ describe 'collectd::plugin::genericjmx', type: :class do
         end
 
         it { is_expected.to contain_concat(config_filename).that_notifies('Service[collectd]') }
-        it { is_expected.to contain_concat(config_filename).that_requires('File[collectd.d]') }
 
         it do
           is_expected.to contain_concat__fragment('collectd_plugin_genericjmx_conf_header').
@@ -55,6 +56,7 @@ describe 'collectd::plugin::genericjmx', type: :class do
         it 'has one jvmarg parameter' do
           is_expected.to contain_concat__fragment('collectd_plugin_genericjmx_conf_header').with_content(%r{JVMArg "bat"})
         end
+
         it 'has ONLY one jvmarg parameter other than classpath' do
           is_expected.to contain_concat__fragment('collectd_plugin_genericjmx_conf_header').without_content(%r{(.*JVMArg.*){3,}}m)
         end
diff --git a/spec/classes/collectd_plugin_hddtemp_spec.rb b/spec/classes/collectd_plugin_hddtemp_spec.rb
index 6d4d6a2..e8c29a1 100644
--- a/spec/classes/collectd_plugin_hddtemp_spec.rb
+++ b/spec/classes/collectd_plugin_hddtemp_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::hddtemp', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -19,6 +21,7 @@ describe 'collectd::plugin::hddtemp', type: :class do
         it { is_expected.to contain_collectd__plugin('hddtemp') }
         it { is_expected.to contain_file('old_hddtemp.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_hddtemp.load').with_ensure('absent') }
+
         it 'Will create 10-hddtemp.conf' do
           is_expected.to contain_file('hddtemp.load').with(
             ensure: 'present',
diff --git a/spec/classes/collectd_plugin_hugepages_spec.rb b/spec/classes/collectd_plugin_hugepages_spec.rb
index cd7f267..58e549f 100644
--- a/spec/classes/collectd_plugin_hugepages_spec.rb
+++ b/spec/classes/collectd_plugin_hugepages_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::hugepages', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -10,21 +12,21 @@ describe 'collectd::plugin::hugepages', type: :class do
       options = os_specific_options(facts)
       context 'default' do
         it 'defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin hugepages>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin hugepages>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "hugepages">
-  ReportPerNodeHP true
-  ReportRootHP true
-  ValuesPages true
-  ValuesBytes false
-  ValuesPercentage false
-</Plugin>
+            <Plugin "hugepages">
+              ReportPerNodeHP true
+              ReportRootHP true
+              ValuesPages true
+              ValuesBytes false
+              ValuesPercentage false
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('hugepages.load').with(
@@ -47,21 +49,21 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin hugepages>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin hugepages>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "hugepages">
-  ReportPerNodeHP false
-  ReportRootHP false
-  ValuesPages false
-  ValuesBytes true
-  ValuesPercentage true
-</Plugin>
+            <Plugin "hugepages">
+              ReportPerNodeHP false
+              ReportRootHP false
+              ValuesPages false
+              ValuesBytes true
+              ValuesPercentage true
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
diff --git a/spec/classes/collectd_plugin_intel_pmu_spec.rb b/spec/classes/collectd_plugin_intel_pmu_spec.rb
index 8d0c92b..620287c 100644
--- a/spec/classes/collectd_plugin_intel_pmu_spec.rb
+++ b/spec/classes/collectd_plugin_intel_pmu_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::intel_pmu', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_intel_rdt_spec.rb b/spec/classes/collectd_plugin_intel_rdt_spec.rb
index 2c3921b..85fd0eb 100644
--- a/spec/classes/collectd_plugin_intel_rdt_spec.rb
+++ b/spec/classes/collectd_plugin_intel_rdt_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::intel_rdt', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -10,17 +12,17 @@ describe 'collectd::plugin::intel_rdt', type: :class do
       options = os_specific_options(facts)
       context 'default' do
         it 'defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin intel_rdt>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin intel_rdt>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "intel_rdt">
-  Cores ""
-</Plugin>
+            <Plugin "intel_rdt">
+              Cores ""
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('intel_rdt.load').with(
@@ -39,17 +41,17 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin intel_rdt>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin intel_rdt>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "intel_rdt">
-  Cores "0-2" "3,4,6" "8-10,15"
-</Plugin>
+            <Plugin "intel_rdt">
+              Cores "0-2" "3,4,6" "8-10,15"
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
diff --git a/spec/classes/collectd_plugin_interface_spec.rb b/spec/classes/collectd_plugin_interface_spec.rb
index 1f9de97..5e32718 100644
--- a/spec/classes/collectd_plugin_interface_spec.rb
+++ b/spec/classes/collectd_plugin_interface_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::interface', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_ipmi.rb b/spec/classes/collectd_plugin_ipmi.rb
index 2efcdd3..9a6dd11 100644
--- a/spec/classes/collectd_plugin_ipmi.rb
+++ b/spec/classes/collectd_plugin_ipmi.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ipmi', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
diff --git a/spec/classes/collectd_plugin_iptables_spec.rb b/spec/classes/collectd_plugin_iptables_spec.rb
index fc7e038..8ca16bb 100644
--- a/spec/classes/collectd_plugin_iptables_spec.rb
+++ b/spec/classes/collectd_plugin_iptables_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::iptables', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_irq_spec.rb b/spec/classes/collectd_plugin_irq_spec.rb
index ce31b68..4ccfdfb 100644
--- a/spec/classes/collectd_plugin_irq_spec.rb
+++ b/spec/classes/collectd_plugin_irq_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::irq', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -18,7 +20,7 @@ describe 'collectd::plugin::irq', type: :class do
           is_expected.to contain_file('irq.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-irq.conf",
-            content: %r{Irq  \"90\"\n.+Irq  \"91\"\n.+Irq  \"92\"}m
+            content: %r{Irq  "90"\n.+Irq  "91"\n.+Irq  "92"}m
           )
         end
       end
diff --git a/spec/classes/collectd_plugin_iscdhcp_spec.rb b/spec/classes/collectd_plugin_iscdhcp_spec.rb
index c772783..452ddc6 100644
--- a/spec/classes/collectd_plugin_iscdhcp_spec.rb
+++ b/spec/classes/collectd_plugin_iscdhcp_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::cuda', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -48,13 +50,13 @@ describe 'collectd::plugin::cuda', type: :class do
                         'provider' => provider
                       )
                     end
-                  end # packagename
-                end # ensure set
-              end # provider
-            end # present absent
-          end # context set
-        end # 'true', true
-      end # describe with manage_package
+                  end
+                end
+              end
+            end
+          end
+        end
+      end
     end
   end
 end
diff --git a/spec/classes/collectd_plugin_java_spec.rb b/spec/classes/collectd_plugin_java_spec.rb
index 3570a37..ac2701b 100644
--- a/spec/classes/collectd_plugin_java_spec.rb
+++ b/spec/classes/collectd_plugin_java_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::java', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -93,6 +95,7 @@ describe 'collectd::plugin::java', type: :class do
         it 'will not have a <Plugin java> stanza' do
           is_expected.to contain_collectd__plugin('java').without_content(%r{<Plugin java>})
         end
+
         it 'will not have any jvmarg parameters' do
           is_expected.to contain_collectd__plugin('java').without_content(%r{JVMArg})
         end
@@ -119,7 +122,8 @@ describe 'collectd::plugin::java', type: :class do
       when 'RedHat'
         context 'java_home option is empty' do
           it 'will not contain libjvm' do
-            is_expected.not_to contain_file('/usr/lib64/libjvm.so')
+            is_expected.not_to contain_exec('Link libjvm.so on OpenJDK').with_onlyif('/usr/bin/test -e /bla/jre/lib/server/libjvm.so')
+            is_expected.not_to contain_exec('Link libjvm.so on Oracle').with_onlyif('/usr/bin/test -e /bla/jre/lib/amd64/server/libjvm.so')
             is_expected.not_to contain_exec('/sbin/ldconfig')
           end
         end
@@ -132,7 +136,8 @@ describe 'collectd::plugin::java', type: :class do
           end
 
           it 'will contain libjvm' do
-            is_expected.to contain_file('/usr/lib64/libjvm.so')
+            is_expected.to contain_exec('Link libjvm.so on OpenJDK').with_onlyif('/usr/bin/test -e /bla/jre/lib/server/libjvm.so')
+            is_expected.to contain_exec('Link libjvm.so on Oracle').with_onlyif('/usr/bin/test -e /bla/jre/lib/amd64/server/libjvm.so')
             is_expected.to contain_exec('/sbin/ldconfig')
           end
         end
diff --git a/spec/classes/collectd_plugin_load_spec.rb b/spec/classes/collectd_plugin_load_spec.rb
index bfcfeda..21abad9 100644
--- a/spec/classes/collectd_plugin_load_spec.rb
+++ b/spec/classes/collectd_plugin_load_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::load', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_logfile_spec.rb b/spec/classes/collectd_plugin_logfile_spec.rb
index 0842b27..92f068a 100644
--- a/spec/classes/collectd_plugin_logfile_spec.rb
+++ b/spec/classes/collectd_plugin_logfile_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::logfile', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_logparser_spec.rb b/spec/classes/collectd_plugin_logparser_spec.rb
new file mode 100644
index 0000000..2d066b1
--- /dev/null
+++ b/spec/classes/collectd_plugin_logparser_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::logparser', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      it { is_expected.to compile.with_all_deps }
+
+      options = os_specific_options(facts)
+      context ':ensure => present, default params' do
+        it "Will create #{options[:plugin_conf_dir]}/06-logparser.conf" do
+          is_expected.to contain_file('logparser.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/06-logparser.conf"
+          )
+        end
+      end
+
+      context ':ensure => log parser created with default values' do
+        default_fixture = File.read(fixtures('plugins/logparser.conf.default'))
+        it "Will create #{options[:plugin_conf_dir]}/06-logparser.conf" do
+          is_expected.to contain_file('logparser.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/06-logparser.conf",
+            content: default_fixture
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_mcelog_spec.rb b/spec/classes/collectd_plugin_mcelog_spec.rb
new file mode 100644
index 0000000..8cc47ab
--- /dev/null
+++ b/spec/classes/collectd_plugin_mcelog_spec.rb
@@ -0,0 +1,79 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::mcelog', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      let :pre_condition do
+        'include collectd'
+      end
+
+      it { is_expected.to compile.with_all_deps }
+
+      options = os_specific_options(facts)
+      context ':ensure => present, default params' do
+        it "Will create #{options[:plugin_conf_dir]}/10-mcelog.conf" do
+          is_expected.to contain_file('mcelog.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-mcelog.conf"
+          )
+        end
+
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{<Memory>}) }
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{McelogClientSocket "/var/run/mcelog-client"}) }
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{PersistentNotification false}) }
+      end
+
+      case facts[:os]['family']
+      when 'RedHat'
+        context 'on osfamily => RedHat' do
+          it { is_expected.to contain_package('collectd-mcelog').with(ensure: 'present') }
+        end
+      end
+
+      context ':ensure => :mceloglogfile => true' do
+        let :params do
+          {
+            mceloglogfile: '/var/log/mcelog'
+          }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-mcelog.conf" do
+          is_expected.to contain_file('mcelog.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-mcelog.conf"
+          )
+        end
+
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{McelogLogfile "/var/log/mcelog"}) }
+      end
+
+      context ':ensure => :memory => true' do
+        let :params do
+          {
+            memory: {
+              'mcelogclientsocket' => '/var/run/mcelog-client',
+              'persistentnotification' => true
+            }
+          }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-mcelog.conf" do
+          is_expected.to contain_file('mcelog.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-mcelog.conf"
+          )
+        end
+
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{<Memory>}) }
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{McelogClientSocket "/var/run/mcelog-client"}) }
+        it { is_expected.to contain_file('mcelog.load').with(content: %r{PersistentNotification true}) }
+      end
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_memcached_spec.rb b/spec/classes/collectd_plugin_memcached_spec.rb
index 6c07df5..6fec926 100644
--- a/spec/classes/collectd_plugin_memcached_spec.rb
+++ b/spec/classes/collectd_plugin_memcached_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::memcached', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_memory_spec.rb b/spec/classes/collectd_plugin_memory_spec.rb
index d1e990a..596aaa6 100644
--- a/spec/classes/collectd_plugin_memory_spec.rb
+++ b/spec/classes/collectd_plugin_memory_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::memory', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_mongodb_spec.rb b/spec/classes/collectd_plugin_mongodb_spec.rb
index 7c83229..8c79518 100644
--- a/spec/classes/collectd_plugin_mongodb_spec.rb
+++ b/spec/classes/collectd_plugin_mongodb_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::mongodb', type: :class do
@@ -13,7 +15,7 @@ describe 'collectd::plugin::mongodb', type: :class do
   end
 
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -100,7 +102,7 @@ describe 'collectd::plugin::mongodb', type: :class do
         context 'set to a valid value with db_port defined and a single db' do
           let :params do
             default_params.merge(configured_dbs: [25],
-                                 db_port: '8080')
+                                 db_port: 8080)
           end
 
           dbport_single_fixture = File.read(fixtures('plugins/mongodb.conf.configured_dbs_single'))
@@ -110,7 +112,7 @@ describe 'collectd::plugin::mongodb', type: :class do
         context 'set to a valid value with db_port defined and multiple DBs' do
           let :params do
             default_params.merge(configured_dbs: [25, 26],
-                                 db_port: '8080')
+                                 db_port: 8080)
           end
 
           dbport_multi_fixture = File.read(fixtures('plugins/mongodb.conf.configured_dbs_multiple'))
diff --git a/spec/classes/collectd_plugin_mysql_database_spec.rb b/spec/classes/collectd_plugin_mysql_database_spec.rb
index a32e703..011aa53 100644
--- a/spec/classes/collectd_plugin_mysql_database_spec.rb
+++ b/spec/classes/collectd_plugin_mysql_database_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::mysql::database', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,7 +23,7 @@ describe 'collectd::plugin::mysql::database', type: :define do
           {
             'aliasname' => 'fancyname',
             'host' => 'database.serv.er',
-            'port' => '8010',
+            'port' => 8010,
             'username' => 'db_user',
             'password' => 'secret',
             'sslkey' => '/path/to/key.pem',
@@ -40,31 +42,70 @@ describe 'collectd::plugin::mysql::database', type: :define do
         end
 
         it 'creates an mysql database' do
-          content_database_file = <<EOS
-# Generated by Puppet
-
-<Plugin mysql>
-  <Database "dbname">
-    Host "database.serv.er"
-    User "db_user"
-    Password "secret"
-    Port "8010"
-    MasterStats true
-    SlaveStats true
-    Socket "/path/to/socket"
-    Alias "fancyname"
-    ConnectTimeout 10
-    InnodbStats true
-    WsrepStats true
-    SlaveNotifications true
-    SSLKey "/path/to/key.pem"
-    SSLCert "/path/to/cert.pem"
-    SSLCA "/path/to/ca.pem"
-    SSLCAPath "/path/to/cas/"
-    SSLCipher "DHE-RSA-AES256-SHA"
-  </Database>
-</Plugin>
-EOS
+          content_database_file = <<~EOS
+            # Generated by Puppet
+
+            <Plugin mysql>
+              <Database "dbname">
+                Host "database.serv.er"
+                User "db_user"
+                Password "secret"
+                Port "8010"
+                MasterStats true
+                SlaveStats true
+                Socket "/path/to/socket"
+                Alias "fancyname"
+                ConnectTimeout 10
+                InnodbStats true
+                WsrepStats true
+                SlaveNotifications true
+                SSLKey "/path/to/key.pem"
+                SSLCert "/path/to/cert.pem"
+                SSLCA "/path/to/ca.pem"
+                SSLCAPath "/path/to/cas/"
+                SSLCipher "DHE-RSA-AES256-SHA"
+              </Database>
+            </Plugin>
+          EOS
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_class('collectd')
+          is_expected.to contain_class('collectd::plugin::mysql')
+          is_expected.to contain_file('dbname.conf').with(
+            content: content_database_file,
+            path: "#{options[:plugin_conf_dir]}/mysql-dbname.conf"
+          )
+        end
+      end
+
+      context 'specify host and port' do
+        let :title do
+          'dbname'
+        end
+
+        let :facts do
+          facts.merge(collectd_version: '5.6')
+        end
+
+        let :params do
+          {
+            'host' => 'localhost',
+            'port' => 3306,
+          }
+        end
+
+        it 'creates an mysql database' do
+          content_database_file = <<~EOS
+            # Generated by Puppet
+
+            <Plugin mysql>
+              <Database "dbname">
+                Host "localhost"
+                Port "3306"
+                MasterStats false
+                SlaveStats false
+              </Database>
+            </Plugin>
+          EOS
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
           is_expected.to contain_class('collectd::plugin::mysql')
@@ -85,20 +126,16 @@ EOS
         end
 
         it 'creates an mysql database' do
-          content_database_file = <<EOS
-# Generated by Puppet
-
-<Plugin mysql>
-  <Database "dbname">
-    Host "UNSET"
-    User "UNSET"
-    Password "UNSET"
-    Port "3306"
-    MasterStats false
-    SlaveStats false
-  </Database>
-</Plugin>
-EOS
+          content_database_file = <<~EOS
+            # Generated by Puppet
+
+            <Plugin mysql>
+              <Database "dbname">
+                MasterStats false
+                SlaveStats false
+              </Database>
+            </Plugin>
+          EOS
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
           is_expected.to contain_class('collectd::plugin::mysql')
diff --git a/spec/classes/collectd_plugin_netlink_spec.rb b/spec/classes/collectd_plugin_netlink_spec.rb
index 70a5847..cf53fff 100644
--- a/spec/classes/collectd_plugin_netlink_spec.rb
+++ b/spec/classes/collectd_plugin_netlink_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::netlink', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -27,6 +29,7 @@ describe 'collectd::plugin::netlink', type: :class do
             path: "#{options[:plugin_conf_dir]}/10-netlink.conf"
           )
         end
+
         it { is_expected.to contain_file('netlink.load').with_content(%r{^<Plugin netlink>$}) }
         it { is_expected.to contain_file('netlink.load').with_content(%r{^  Interface "eth0"$}) }
         it { is_expected.to contain_file('netlink.load').with_content(%r{^  Interface "eth1"$}) }
@@ -36,9 +39,8 @@ describe 'collectd::plugin::netlink', type: :class do
         it { is_expected.to contain_file('netlink.load').with_content(%r{^  Class "ppp0" "htb-1:10"$}) }
         it { is_expected.to contain_file('netlink.load').with_content(%r{^  Filter "ppp0" "u32-1:0"$}) }
         it { is_expected.to contain_file('netlink.load').with_content(%r{^  IgnoreSelected false$}) }
-        if facts[:os]['family'] == 'RedHat'
-          it { is_expected.to contain_package('collectd-netlink').with(ensure: 'present') }
-        end
+
+        it { is_expected.to contain_package('collectd-netlink').with(ensure: 'present') } if facts[:os]['family'] == 'RedHat'
       end
 
       context ':ensure => absent' do
@@ -52,6 +54,7 @@ describe 'collectd::plugin::netlink', type: :class do
             path: "#{options[:plugin_conf_dir]}/10-netlink.conf"
           )
         end
+
         if facts[:os]['family'] == 'RedHat'
           it do
             is_expected.to contain_package('collectd-netlink').with(
diff --git a/spec/classes/collectd_plugin_network_spec.rb b/spec/classes/collectd_plugin_network_spec.rb
index b845887..92702d7 100644
--- a/spec/classes/collectd_plugin_network_spec.rb
+++ b/spec/classes/collectd_plugin_network_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::network', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_numa_spec.rb b/spec/classes/collectd_plugin_numa_spec.rb
index c6a5668..d29f0fd 100644
--- a/spec/classes/collectd_plugin_numa_spec.rb
+++ b/spec/classes/collectd_plugin_numa_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::numa', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -10,14 +12,14 @@ describe 'collectd::plugin::numa', type: :class do
       options = os_specific_options(facts)
       context 'default' do
         it 'defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin numa>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin numa>
+              Globals false
+            </LoadPlugin>
 
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_file('numa.load').with(
diff --git a/spec/classes/collectd_plugin_nut_spec.rb b/spec/classes/collectd_plugin_nut_spec.rb
index 5cb775a..d0acb46 100644
--- a/spec/classes/collectd_plugin_nut_spec.rb
+++ b/spec/classes/collectd_plugin_nut_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::nut', type: :class do
@@ -6,7 +8,7 @@ describe 'collectd::plugin::nut', type: :class do
   end
 
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_openldap_spec.rb b/spec/classes/collectd_plugin_openldap_spec.rb
index 6248971..7247685 100644
--- a/spec/classes/collectd_plugin_openldap_spec.rb
+++ b/spec/classes/collectd_plugin_openldap_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::openldap', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -14,13 +16,13 @@ describe 'collectd::plugin::openldap', type: :class do
 
       context ':ensure => present, default params' do
         it "Will create #{options[:plugin_conf_dir]}/10-openldap.conf" do
-          content = <<EOS
-<Plugin "openldap">
-  <Instance "localhost">
-    URL "ldap://localhost/"
-  </Instance>
-</Plugin>
-EOS
+          content = <<~EOS
+            <Plugin "openldap">
+              <Instance "localhost">
+                URL "ldap://localhost/"
+              </Instance>
+            </Plugin>
+          EOS
           is_expected.to contain_collectd__plugin('openldap').with_content(content)
         end
       end
@@ -34,7 +36,7 @@ EOS
               },
               'ldap2' => {
                 'url' => 'ldap://ldap2.example.com',
-                'binddn'   => 'cn=Monitor',
+                'binddn' => 'cn=Monitor',
                 'password' => 'password'
               }
             }
@@ -42,18 +44,18 @@ EOS
         end
 
         it "Will create #{options[:plugin_conf_dir]}/10-openldap.conf with two :instances params" do
-          content = <<EOS
-<Plugin "openldap">
-  <Instance "ldap1">
-    URL "ldap://ldap1.example.com"
-  </Instance>
-  <Instance "ldap2">
-    URL "ldap://ldap2.example.com"
-    BindDN "cn=Monitor"
-    Password "password"
-  </Instance>
-</Plugin>
-EOS
+          content = <<~EOS
+            <Plugin "openldap">
+              <Instance "ldap1">
+                URL "ldap://ldap1.example.com"
+              </Instance>
+              <Instance "ldap2">
+                URL "ldap://ldap2.example.com"
+                BindDN "cn=Monitor"
+                Password "password"
+              </Instance>
+            </Plugin>
+          EOS
           is_expected.to contain_collectd__plugin('openldap').with_content(content)
         end
       end
diff --git a/spec/classes/collectd_plugin_openvpn_spec.rb b/spec/classes/collectd_plugin_openvpn_spec.rb
index c4c8d9f..c9c656a 100644
--- a/spec/classes/collectd_plugin_openvpn_spec.rb
+++ b/spec/classes/collectd_plugin_openvpn_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::openvpn', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_oracle_spec.rb b/spec/classes/collectd_plugin_oracle_spec.rb
index 1d5206f..224d128 100644
--- a/spec/classes/collectd_plugin_oracle_spec.rb
+++ b/spec/classes/collectd_plugin_oracle_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::oracle', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
diff --git a/spec/classes/collectd_plugin_ovs_events_spec.rb b/spec/classes/collectd_plugin_ovs_events_spec.rb
index 56e9bfa..f1bc1c7 100644
--- a/spec/classes/collectd_plugin_ovs_events_spec.rb
+++ b/spec/classes/collectd_plugin_ovs_events_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ovs_events', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_ovs_stats_spec.rb b/spec/classes/collectd_plugin_ovs_stats_spec.rb
index cf2c8bb..0d5ef0b 100644
--- a/spec/classes/collectd_plugin_ovs_stats_spec.rb
+++ b/spec/classes/collectd_plugin_ovs_stats_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ovs_stats', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -26,7 +28,7 @@ describe 'collectd::plugin::ovs_stats', type: :class do
 
         it 'will create config which will contain port configuration' do
           is_expected.to contain_file('ovs_stats.load').with(
-            content: %r{Port 666}
+            content: %r{Port "666"}
           )
         end
 
diff --git a/spec/classes/collectd_plugin_pcie_errors_spec.rb b/spec/classes/collectd_plugin_pcie_errors_spec.rb
new file mode 100644
index 0000000..f0234a6
--- /dev/null
+++ b/spec/classes/collectd_plugin_pcie_errors_spec.rb
@@ -0,0 +1,100 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::pcie_errors', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      options = os_specific_options(facts)
+
+      context ':ensure => present, default params' do
+        content = <<~EOS
+          # Generated by Puppet
+          <LoadPlugin pcie_errors>
+            Globals false
+          </LoadPlugin>
+
+          <Plugin pcie_errors>
+            Source "sysfs"
+            ReportMasked false
+          #  PersistentNotifications false
+          </Plugin>
+
+        EOS
+
+        it "Will create #{options[:plugin_conf_dir]}/10-pcie_errors.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('pcie_errors.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-pcie_errors.conf",
+            content: content
+          )
+        end
+      end
+
+      context ':ensure => present and :source => proc' do
+        let :params do
+          { source: 'proc' }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-pcie_errors.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('pcie_errors.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-pcie_errors.conf",
+            content: %r{Source "proc"}m
+          )
+        end
+      end
+
+      context ':ensure => present and :access_dir => /sys/bus/pci' do
+        let :params do
+          { access_dir: '/sys/bus/pci' }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-pcie_errors.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('pcie_errors.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-pcie_errors.conf",
+            content: %r{AccessDir "/sys/bus/pci"}m
+          )
+        end
+      end
+
+      context ':ensure => present and :report_masked => true' do
+        let :params do
+          { report_masked: true }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-pcie_errors.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('pcie_errors.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-pcie_errors.conf",
+            content: %r{ReportMasked true}m
+          )
+        end
+      end
+
+      context ':ensure => present and :persistent_notifications => true' do
+        let :params do
+          { persistent_notifications: true }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/10-pcie_errors.conf" do
+          is_expected.to compile.with_all_deps
+          is_expected.to contain_file('pcie_errors.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-pcie_errors.conf",
+            content: %r{PersistentNotifications true}m
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_ping_spec.rb b/spec/classes/collectd_plugin_ping_spec.rb
index e38e527..fda722a 100644
--- a/spec/classes/collectd_plugin_ping_spec.rb
+++ b/spec/classes/collectd_plugin_ping_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::ping', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -43,25 +45,25 @@ describe 'collectd::plugin::ping', type: :class do
           }
         end
 
-        content = <<EOS
-# Generated by Puppet
-<LoadPlugin ping>
-  Globals false
-  Interval 1.23
-</LoadPlugin>
-
-<Plugin ping>
-  Host "google.com"
-  Interval "1.23"
-  Timeout "0.5"
-  TTL "5"
-  SourceAddress "123.123.123.123"
-  Device "eth0"
-  MaxMissed "12"
-  Size "5"
-</Plugin>
-
-EOS
+        content = <<~EOS
+          # Generated by Puppet
+          <LoadPlugin ping>
+            Globals false
+            Interval 1.23
+          </LoadPlugin>
+
+          <Plugin ping>
+            Host "google.com"
+            Interval "1.23"
+            Timeout "0.5"
+            TTL "5"
+            SourceAddress "123.123.123.123"
+            Device "eth0"
+            MaxMissed "12"
+            Size "5"
+          </Plugin>
+
+        EOS
 
         it "Will create #{options[:plugin_conf_dir]}/10-ping.conf" do
           is_expected.to contain_file('ping.load').with(
diff --git a/spec/classes/collectd_plugin_postgresql_spec.rb b/spec/classes/collectd_plugin_postgresql_spec.rb
index 86e815f..7f09a5f 100644
--- a/spec/classes/collectd_plugin_postgresql_spec.rb
+++ b/spec/classes/collectd_plugin_postgresql_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::postgresql', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -20,11 +22,13 @@ describe 'collectd::plugin::postgresql', type: :class do
             content: %r{LoadPlugin postgresql}
           )
         end
+
         it "Will create #{options[:plugin_conf_dir]}/postgresql-config.conf" do
-          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/postgresql-config.conf").that_requires('File[collectd.d]')
+          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/postgresql-config.conf")
           is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_header').with(content: %r{<Plugin postgresql>})
         end
       end
+
       context ':ensure => present and create a db with a custom query' do
         let(:params) do
           {
@@ -49,6 +53,31 @@ describe 'collectd::plugin::postgresql', type: :class do
                   'valuesfrom'     => 'log_delay'
                 }]
               }
+            }
+          }
+        end
+
+        it "Will create #{options[:plugin_conf_dir]}/postgresql-config.conf" do
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Host "localhost"})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Query "disk_io"})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Interval 60})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{Statement "SELECT \* FROM log_delay_repli;"\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{<Result>\n})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{Param "database"})
+        end
+      end
+
+      context ':ensure => present and create a db with a custom writer' do
+        let(:params) do
+          {
+            databases: {
+              'postgres' => {
+                'host'     => 'localhost',
+                'user'     => 'postgres',
+                'password' => 'postgres',
+                'interval' => 10,
+                'writer'   => 'sqlstore'
+              },
             },
             writers: {
               'sqlstore' => {
@@ -60,12 +89,8 @@ describe 'collectd::plugin::postgresql', type: :class do
         end
 
         it "Will create #{options[:plugin_conf_dir]}/postgresql-config.conf" do
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Host \"localhost\"})
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Query \"disk_io\"})
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Interval 60})
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{Statement \"SELECT \* FROM log_delay_repli;\"\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{<Result>\n})
-          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_query_log_delay').with(content: %r{Param \"database\"})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{Writer "sqlstore"})
+          is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres').with(content: %r{CommitInterval 10})
           is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_writer_sqlstore').with(content: %r{<Writer sqlstore>\n})
         end
       end
@@ -79,7 +104,7 @@ describe 'collectd::plugin::postgresql', type: :class do
                 'host'     => 'localhost',
                 'user'     => 'postgres',
                 'password' => 'postgres',
-                'port'     => '5432',
+                'port'     => 5432,
                 'sslmode'  => 'disable',
                 'query'    => %w[disk_io log_delay]
               },
@@ -88,7 +113,7 @@ describe 'collectd::plugin::postgresql', type: :class do
                 'host'     => 'localhost',
                 'user'     => 'postgres',
                 'password' => 'postgres',
-                'port'     => '5433',
+                'port'     => 5433,
                 'sslmode'  => 'disable',
                 'query'    => %w[disk_io log_delay]
 
@@ -99,10 +124,10 @@ describe 'collectd::plugin::postgresql', type: :class do
 
         it "'Will create #{options[:plugin_conf_dir]}/postgresql-config.conf" do
           is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres_port_5432').with(
-            content: %r{Instance \"postgres\"}
+            content: %r{Instance "postgres"}
           )
           is_expected.to contain_concat__fragment('collectd_plugin_postgresql_conf_db_postgres_port_5433').with(
-            content: %r{Instance \"postgres\"}
+            content: %r{Instance "postgres"}
           )
         end
       end
diff --git a/spec/classes/collectd_plugin_powerdns_spec.rb b/spec/classes/collectd_plugin_powerdns_spec.rb
index e8c578c..01e9098 100644
--- a/spec/classes/collectd_plugin_powerdns_spec.rb
+++ b/spec/classes/collectd_plugin_powerdns_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::powerdns', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -19,7 +21,7 @@ describe 'collectd::plugin::powerdns', type: :class do
           end
 
           it "Will create #{options[:plugin_conf_dir]}/powerdns-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/powerdns-config.conf").that_requires('File[collectd.d]')
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/powerdns-config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_powerdns_conf_header').with(
               content: "<Plugin \"powerdns\">\n",
               target: "#{options[:plugin_conf_dir]}/powerdns-config.conf",
@@ -35,6 +37,7 @@ describe 'collectd::plugin::powerdns', type: :class do
             )
           end
         end
+
         context ':ensure => present and overrided parameters' do
           let :params do
             {
@@ -57,7 +60,7 @@ describe 'collectd::plugin::powerdns', type: :class do
           end
 
           it "Will create #{options[:plugin_conf_dir]}/powerdns-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/powerdns-config.conf").that_requires('File[collectd.d]')
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/powerdns-config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_powerdns_conf_header').with(
               content: "<Plugin \"powerdns\">
   LocalSocket \"/var/run/whatever\"
diff --git a/spec/classes/collectd_plugin_processes_spec.rb b/spec/classes/collectd_plugin_processes_spec.rb
index f16e38e..9d60da3 100644
--- a/spec/classes/collectd_plugin_processes_spec.rb
+++ b/spec/classes/collectd_plugin_processes_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::processes', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -18,23 +20,24 @@ describe 'collectd::plugin::processes', type: :class do
             )
           end
 
-          it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes-config.conf").that_requires('File[collectd.d]')
+          it "Will create #{options[:plugin_conf_dir]}/processes_config.conf" do
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes_config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_header').with(
               content: "<Plugin processes>\n",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '00'
             )
           end
 
-          it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
+          it "Will create #{options[:plugin_conf_dir]}/processes_config.conf" do
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_footer').with(
               content: %r{</Plugin>},
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '99'
             )
           end
         end
+
         context ':ensure => present and overrided parameters' do
           let :params do
             {
@@ -66,15 +69,15 @@ describe 'collectd::plugin::processes', type: :class do
             }
           end
 
-          it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes-config.conf").that_requires('File[collectd.d]')
+          it "Will create #{options[:plugin_conf_dir]}/processes_config.conf" do
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes_config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_header').with(
               content: "<Plugin processes>
   CollectContextSwitch true
   CollectFileDescriptor false
   CollectMemoryMaps true
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '00'
             )
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_httpd').with(
@@ -84,14 +87,14 @@ describe 'collectd::plugin::processes', type: :class do
     CollectMemoryMaps false
   </Process>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '50'
             )
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_mysql').with(
               content: "  <Process \"mysql\">
   </Process>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '50'
             )
 
@@ -102,14 +105,14 @@ describe 'collectd::plugin::processes', type: :class do
     CollectMemoryMaps false
   </ProcessMatch>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '51'
             )
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_processmatch_dove').with(
               content: "  <ProcessMatch \"dove\" \"dove.*\">
   </ProcessMatch>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '51'
             )
           end
@@ -122,19 +125,19 @@ describe 'collectd::plugin::processes', type: :class do
             }
           end
 
-          it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
+          it "Will create #{options[:plugin_conf_dir]}/processes_config.conf" do
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_process1').with(
               content: "  <Process \"process1\">
   </Process>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '50'
             )
             is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_process2').with(
               content: "  <Process \"process2\">
   </Process>
 ",
-              target: "#{options[:plugin_conf_dir]}/processes-config.conf",
+              target: "#{options[:plugin_conf_dir]}/processes_config.conf",
               order: '50'
             )
           end
@@ -145,6 +148,11 @@ describe 'collectd::plugin::processes', type: :class do
           context 'on osfamily => RedHat' do
             it 'Will delete packaging config file' do
               is_expected.to contain_file('package_processes.load').with_ensure('absent')
+              is_expected.to contain_file('package_processes.load').with_path('/etc/collectd.d/processes-config.conf')
+            end
+
+            it 'Will not clash with package file' do
+              is_expected.not_to contain_concat('/etc/collectd.d/processes-config.conf')
             end
           end
         end
diff --git a/spec/classes/collectd_plugin_procevent_spec.rb b/spec/classes/collectd_plugin_procevent_spec.rb
index d9e3af6..662b1d2 100644
--- a/spec/classes/collectd_plugin_procevent_spec.rb
+++ b/spec/classes/collectd_plugin_procevent_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::procevent', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,12 +23,14 @@ describe 'collectd::plugin::procevent', type: :class do
         it { is_expected.to contain_collectd__plugin('procevent') }
         it { is_expected.to contain_file('old_procevent.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_procevent.load').with_ensure('absent') }
+
         it 'Will create 10-procevent.conf' do
           is_expected.to contain_file('procevent.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-procevent.conf"
           )
         end
+
         it { is_expected.to contain_file('procevent.load').with(content: %r{<Plugin procevent>}) }
       end
 
@@ -34,12 +38,12 @@ describe 'collectd::plugin::procevent', type: :class do
         let(:params) do
           { ensure: 'present',
             process: 'foo',
-            regex_process: '/bar/',
+            process_regex: '/bar/',
             buffer_length: 10 }
         end
 
         it { is_expected.to contain_file('procevent.load').with(content: %r{Process "foo"}) }
-        it { is_expected.to contain_file('procevent.load').with(content: %r{RegexProcess "/bar/"}) }
+        it { is_expected.to contain_file('procevent.load').with(content: %r{ProcessRegex "/bar/"}) }
         it { is_expected.to contain_file('procevent.load').with(content: %r{BufferLength 10}) }
       end
 
diff --git a/spec/classes/collectd_plugin_protocols_spec.rb b/spec/classes/collectd_plugin_protocols_spec.rb
index 0e5d2ef..21f70e4 100644
--- a/spec/classes/collectd_plugin_protocols_spec.rb
+++ b/spec/classes/collectd_plugin_protocols_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::protocols', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -32,6 +34,30 @@ describe 'collectd::plugin::protocols', type: :class do
         end
       end
 
+      describe 'ignoreselected' do
+        context ':ignoreselected => false' do
+          let :params do
+            {
+              values: %w[protocol1 protocol2],
+              ignoreselected: false
+            }
+          end
+
+          it { is_expected.to contain_file('protocols.load').with_content(%r{<Plugin "protocols">\n\s*Value "protocol1"\n\s*Value "protocol2"\n\s*IgnoreSelected false\n</Plugin>}) }
+        end
+
+        context ':ignoreselected => true' do
+          let :params do
+            {
+              values: %w[protocol1 protocol2],
+              ignoreselected: true
+            }
+          end
+
+          it { is_expected.to contain_file('protocols.load').with_content(%r{<Plugin "protocols">\n\s*Value "protocol1"\n\s*Value "protocol2"\n\s*IgnoreSelected true\n</Plugin>}) }
+        end
+      end
+
       context ':ensure => absent' do
         let :params do
           { ensure: 'absent' }
diff --git a/spec/classes/collectd_plugin_python_spec.rb b/spec/classes/collectd_plugin_python_spec.rb
index 083a669..67910c5 100644
--- a/spec/classes/collectd_plugin_python_spec.rb
+++ b/spec/classes/collectd_plugin_python_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::python', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -24,8 +26,7 @@ describe 'collectd::plugin::python', type: :class do
           end
 
           it "Will create #{options[:plugin_conf_dir]}/python-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/python-config.conf").
-              that_requires('File[collectd.d]')
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/python-config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_header').with(
               content: %r{<Plugin "python">},
               target: "#{options[:plugin_conf_dir]}/python-config.conf",
@@ -62,6 +63,7 @@ describe 'collectd::plugin::python', type: :class do
             )
             is_expected.to contain_file('/data/')
           end
+
           it 'will set two modulepath in the module conf' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_header').with(
               content: %r{ModulePath "/tmp/"},
@@ -177,12 +179,14 @@ describe 'collectd::plugin::python', type: :class do
               target: "#{options[:plugin_conf_dir]}/python-config.conf"
             )
           end
+
           it 'open instance One of module' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_One_config').with(
               content: %r{<Module "funky">},
               target: "#{options[:plugin_conf_dir]}/python-config.conf"
             )
           end
+
           it 'open instance Two of module' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_Two_config').with(
               content: %r{<Module "funky">},
@@ -190,24 +194,27 @@ describe 'collectd::plugin::python', type: :class do
             )
           end
 
-          it 'configure  instance One of module' do
+          it 'configure instance One of module' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_One_config').with(
               content: %r{Verbose true},
               target: "#{options[:plugin_conf_dir]}/python-config.conf"
             )
           end
-          it 'configure  instance Two of module' do
+
+          it 'configure instance Two of module' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_Two_config').with(
               content: %r{Junk "morehelp"},
               target: "#{options[:plugin_conf_dir]}/python-config.conf"
             )
           end
+
           it 'close funky module instance One' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_One_config').with(
               content: %r{</Module>},
               target: "#{options[:plugin_conf_dir]}/python-config.conf"
             )
           end
+
           it 'close funky module instance Two' do
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_Two_config').with(
               content: %r{</Module>},
@@ -262,8 +269,7 @@ describe 'collectd::plugin::python', type: :class do
           end
 
           it "Will create #{options[:plugin_conf_dir]}/custom-location-config.conf" do
-            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/custom-location-config.conf").
-              that_requires('File[collectd.d]')
+            is_expected.to contain_concat("#{options[:plugin_conf_dir]}/custom-location-config.conf")
             is_expected.to contain_concat__fragment('collectd_plugin_python_conf_header').with(
               content: %r{<Plugin "python">},
               target: "#{options[:plugin_conf_dir]}/custom-location-config.conf",
diff --git a/spec/classes/collectd_plugin_rabbitmq_spec.rb b/spec/classes/collectd_plugin_rabbitmq_spec.rb
index 9ce9726..63546f6 100644
--- a/spec/classes/collectd_plugin_rabbitmq_spec.rb
+++ b/spec/classes/collectd_plugin_rabbitmq_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::rabbitmq', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -23,36 +25,41 @@ describe 'collectd::plugin::rabbitmq', type: :class do
             }
           end
 
-          it 'import collectd_rabbitmq.collectd_plugin in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_header').with_content(%r{Import "collectd_rabbitmq.collectd_plugin"})
-          end
+          case [facts[:os]['family'], facts[:os]['release']['major']]
+          when %w[RedHat 8], %w[Ubuntu 20.04]
+            it { is_expected.to raise_error(%r{does not support Python 3}) }
+          else
+            it 'import collectd_rabbitmq.collectd_plugin in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_header').with_content(%r{Import "collectd_rabbitmq.collectd_plugin"})
+            end
 
-          it 'Load collectd_rabbitmq in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Module "collectd_rabbitmq.collectd_plugin"})
-          end
+            it 'Load collectd_rabbitmq in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Module "collectd_rabbitmq.collectd_plugin"})
+            end
 
-          it 'default to Username guest in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Username "guest"})
-          end
+            it 'default to Username guest in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Username "guest"})
+            end
 
-          it 'default to Password guest in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Password "guest"})
-          end
+            it 'default to Password guest in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Password "guest"})
+            end
 
-          it 'default to Port 15672 in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Port "15672"})
-          end
+            it 'default to Port 15672 in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Port "15672"})
+            end
 
-          it 'default to Scheme http in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Scheme "http"})
-          end
+            it 'default to Scheme http in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Scheme "http"})
+            end
 
-          it 'Host should be set to $::fqdn python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Host "testhost.example.com"})
-          end
+            it 'Host should be set to $::fqdn python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Host "testhost.example.com"})
+            end
 
-          it 'Realm set to "RabbitMQ Management"' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Realm "RabbitMQ Management"})
+            it 'Realm set to "RabbitMQ Management"' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Realm "RabbitMQ Management"})
+            end
           end
         end
 
@@ -61,8 +68,13 @@ describe 'collectd::plugin::rabbitmq', type: :class do
             { custom_types_db: '/var/custom/types.db' }
           end
 
-          it 'override custom TypesDB' do
-            is_expected.to contain_file('rabbitmq.load').with_content(%r{TypesDB "/var/custom/types.db"})
+          case [facts[:os]['family'], facts[:os]['release']['major']]
+          when %w[RedHat 8], %w[Ubuntu 20.04]
+            it { is_expected.to raise_error(%r{does not support Python 3}) }
+          else
+            it 'override custom TypesDB' do
+              is_expected.to contain_file('rabbitmq.load').with_content(%r{TypesDB "/var/custom/types.db"})
+            end
           end
         end
 
@@ -71,8 +83,13 @@ describe 'collectd::plugin::rabbitmq', type: :class do
             { config: { 'Username' => 'foo' } }
           end
 
-          it 'override Username to foo in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Username "foo"})
+          case [facts[:os]['family'], facts[:os]['release']['major']]
+          when %w[RedHat 8], %w[Ubuntu 20.04]
+            it { is_expected.to raise_error(%r{does not support Python 3}) }
+          else
+            it 'override Username to foo in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Username "foo"})
+            end
           end
         end
 
@@ -81,8 +98,13 @@ describe 'collectd::plugin::rabbitmq', type: :class do
             { config: { 'Password' => 'foo' } }
           end
 
-          it 'override Username to foo in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Password "foo"})
+          case [facts[:os]['family'], facts[:os]['release']['major']]
+          when %w[RedHat 8], %w[Ubuntu 20.04]
+            it { is_expected.to raise_error(%r{does not support Python 3}) }
+          else
+            it 'override Username to foo in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Password "foo"})
+            end
           end
         end
 
@@ -91,8 +113,13 @@ describe 'collectd::plugin::rabbitmq', type: :class do
             { config: { 'Scheme' => 'https' } }
           end
 
-          it 'override Username to foo in python-config' do
-            is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Scheme "https"})
+          case [facts[:os]['family'], facts[:os]['release']['major']]
+          when %w[RedHat 8], %w[Ubuntu 20.04]
+            it { is_expected.to raise_error(%r{does not support Python 3}) }
+          else
+            it 'override Username to foo in python-config' do
+              is_expected.to contain_concat_fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with_content(%r{Scheme "https"})
+            end
           end
         end
       end
@@ -102,8 +129,13 @@ describe 'collectd::plugin::rabbitmq', type: :class do
           { ensure: 'absent' }
         end
 
-        it 'Will remove python-config' do
-          is_expected.not_to contain_concat__fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with(ensure: 'present')
+        case [facts[:os]['family'], facts[:os]['release']['major']]
+        when %w[RedHat 8], %w[Ubuntu 20.04]
+          it { is_expected.to raise_error(%r{does not support Python 3}) }
+        else
+          it 'Will remove python-config' do
+            is_expected.not_to contain_concat__fragment('collectd_plugin_python_conf_collectd_rabbitmq.collectd_plugin_config').with(ensure: 'present')
+          end
         end
       end
 
@@ -124,19 +156,24 @@ describe 'collectd::plugin::rabbitmq', type: :class do
                       }
                     end
 
-                    it do
-                      is_expected.to contain_package(packagename).with(
-                        'ensure' => ensure_value,
-                        'provider' => provider
-                      )
+                    case [facts[:os]['family'], facts[:os]['release']['major']]
+                    when %w[RedHat 8], %w[Ubuntu 20.04]
+                      it { is_expected.to raise_error(%r{does not support Python 3}) }
+                    else
+                      it do
+                        is_expected.to contain_package(packagename).with(
+                          'ensure' => ensure_value,
+                          'provider' => provider
+                        )
+                      end
                     end
-                  end # packagename
-                end # ensure set
-              end # provider
-            end # present absent
-          end # context set
-        end # 'true', true
-      end # describe with manage_package
+                  end
+                end
+              end
+            end
+          end
+        end
+      end
     end
   end
 end
diff --git a/spec/classes/collectd_plugin_redis_spec.rb b/spec/classes/collectd_plugin_redis_spec.rb
index 26e5a16..d0a7b09 100644
--- a/spec/classes/collectd_plugin_redis_spec.rb
+++ b/spec/classes/collectd_plugin_redis_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::redis', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_rrdtool_spec.rb b/spec/classes/collectd_plugin_rrdtool_spec.rb
index 9b3fa68..262d218 100644
--- a/spec/classes/collectd_plugin_rrdtool_spec.rb
+++ b/spec/classes/collectd_plugin_rrdtool_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::rrdtool', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_sensors.rb b/spec/classes/collectd_plugin_sensors.rb
index 77f3dd3..9bcfc29 100644
--- a/spec/classes/collectd_plugin_sensors.rb
+++ b/spec/classes/collectd_plugin_sensors.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::sensors', type: :class do
diff --git a/spec/classes/collectd_plugin_smart_spec.rb b/spec/classes/collectd_plugin_smart_spec.rb
index 31db147..088679c 100644
--- a/spec/classes/collectd_plugin_smart_spec.rb
+++ b/spec/classes/collectd_plugin_smart_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::smart', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_snmp_agent_spec.rb b/spec/classes/collectd_plugin_snmp_agent_spec.rb
new file mode 100644
index 0000000..012ba17
--- /dev/null
+++ b/spec/classes/collectd_plugin_snmp_agent_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'collectd::plugin::snmp_agent', type: :class do
+  on_supported_os(baseline_os_hash).each do |os, facts|
+    context "on #{os}" do
+      let :facts do
+        facts
+      end
+
+      it { is_expected.to compile.with_all_deps }
+
+      options = os_specific_options(facts)
+
+      context ':ensure => present and default parameters' do
+        it "Will create #{options[:plugin_conf_dir]}/10-snmp_agent.conf to load the plugin" do
+          is_expected.to contain_file('snmp_agent.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-snmp_agent.conf"
+          )
+        end
+      end
+
+      it { is_expected.to contain_file('snmp_agent.load').with_content(%r{OIDs "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"}) }
+      it { is_expected.to contain_file('snmp_agent.load').with_content(%r{<Data "ifOctets">}) }
+      it { is_expected.to contain_file('snmp_agent.load').with_content(%r{<Table "ifTable">}) }
+      it { is_expected.to contain_file('snmp_agent.load').with_content(%r{<Data "memAvailReal">}) }
+      it { is_expected.to contain_file('snmp_agent.load').with_content(%r{OIDs "1.3.6.1.4.1.2021.4.6.0"}) }
+    end
+  end
+end
diff --git a/spec/classes/collectd_plugin_snmp_spec.rb b/spec/classes/collectd_plugin_snmp_spec.rb
index 2c988a3..d0569dc 100644
--- a/spec/classes/collectd_plugin_snmp_spec.rb
+++ b/spec/classes/collectd_plugin_snmp_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::snmp', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_statsd_spec.rb b/spec/classes/collectd_plugin_statsd_spec.rb
index c1bcba2..693744d 100644
--- a/spec/classes/collectd_plugin_statsd_spec.rb
+++ b/spec/classes/collectd_plugin_statsd_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::statsd', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -28,7 +30,7 @@ describe 'collectd::plugin::statsd', type: :class do
             {
               ensure: 'present',
               host: '192.0.0.1',
-              port: '9876'
+              port: 9876
             }
           end
 
diff --git a/spec/classes/collectd_plugin_swap_spec.rb b/spec/classes/collectd_plugin_swap_spec.rb
index 293ca6d..4b842f6 100644
--- a/spec/classes/collectd_plugin_swap_spec.rb
+++ b/spec/classes/collectd_plugin_swap_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::swap', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_sysevent_spec.rb b/spec/classes/collectd_plugin_sysevent_spec.rb
index 6b862f5..fd3a5e1 100644
--- a/spec/classes/collectd_plugin_sysevent_spec.rb
+++ b/spec/classes/collectd_plugin_sysevent_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::sysevent', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,12 +23,14 @@ describe 'collectd::plugin::sysevent', type: :class do
         it { is_expected.to contain_collectd__plugin('sysevent') }
         it { is_expected.to contain_file('old_sysevent.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_sysevent.load').with_ensure('absent') }
+
         it 'Will create 10-sysevent.conf' do
           is_expected.to contain_file('sysevent.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-sysevent.conf"
           )
         end
+
         it { is_expected.to contain_file('sysevent.load').with(content: %r{Listen "127.0.0.1" "6666"}) }
         it { is_expected.to contain_file('sysevent.load').with(content: %r{RegexFilter "/.*/"}) }
       end
diff --git a/spec/classes/collectd_plugin_syslog_spec.rb b/spec/classes/collectd_plugin_syslog_spec.rb
index d0d7f02..ac5c4a6 100644
--- a/spec/classes/collectd_plugin_syslog_spec.rb
+++ b/spec/classes/collectd_plugin_syslog_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::syslog', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -20,18 +22,18 @@ describe 'collectd::plugin::syslog', type: :class do
           }
         end
 
-        content = <<EOS
-# Generated by Puppet
-<LoadPlugin syslog>
-  Globals false
-</LoadPlugin>
+        content = <<~EOS
+          # Generated by Puppet
+          <LoadPlugin syslog>
+            Globals false
+          </LoadPlugin>
 
-<Plugin syslog>
-  LogLevel debug
-  NotifyLevel FAILURE
-</Plugin>
+          <Plugin syslog>
+            LogLevel debug
+            NotifyLevel FAILURE
+          </Plugin>
 
-EOS
+        EOS
 
         it { is_expected.to compile.with_all_deps }
 
diff --git a/spec/classes/collectd_plugin_table_spec.rb b/spec/classes/collectd_plugin_table_spec.rb
index 2f68617..82d28fa 100644
--- a/spec/classes/collectd_plugin_table_spec.rb
+++ b/spec/classes/collectd_plugin_table_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::table', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -32,32 +34,32 @@ describe 'collectd::plugin::table', type: :class do
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin table>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin table>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "table">
-  <Table "/proc/foo">
-    <Result>
-      Type gauge
-      ValuesFrom 0 1
-    </Result>
-  </Table>
-  <Table "/proc/bar">
-    <Result>
-      Type gauge
-      ValuesFrom 0 1
-    </Result>
-    <Result>
-      Type counter
-      ValuesFrom 2 3
-    </Result>
-  </Table>
-</Plugin>
+            <Plugin "table">
+              <Table "/proc/foo">
+                <Result>
+                  Type gauge
+                  ValuesFrom 0 1
+                </Result>
+              </Table>
+              <Table "/proc/bar">
+                <Result>
+                  Type gauge
+                  ValuesFrom 0 1
+                </Result>
+                <Result>
+                  Type counter
+                  ValuesFrom 2 3
+                </Result>
+              </Table>
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
@@ -88,27 +90,27 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin table>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin table>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "table">
-  <Table "/proc/foo">
-    Plugin "foo"
-    Separator "_"
-    Instance "foo-metric"
-    <Result>
-      Type gauge
-      InstancePrefix "foo-"
-      InstancesFrom 3 4
-      ValuesFrom 0 1
-    </Result>
-  </Table>
-</Plugin>
+            <Plugin "table">
+              <Table "/proc/foo">
+                Plugin "foo"
+                Separator "_"
+                Instance "foo-metric"
+                <Result>
+                  Type gauge
+                  InstancePrefix "foo-"
+                  InstancesFrom 3 4
+                  ValuesFrom 0 1
+                </Result>
+              </Table>
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
diff --git a/spec/classes/collectd_plugin_tail_csv_spec.rb b/spec/classes/collectd_plugin_tail_csv_spec.rb
index 19a98db..131631d 100644
--- a/spec/classes/collectd_plugin_tail_csv_spec.rb
+++ b/spec/classes/collectd_plugin_tail_csv_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::tail_csv', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -26,23 +28,23 @@ describe 'collectd::plugin::tail_csv', type: :class do
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin tail_csv>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin tail_csv>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "tail_csv">
-  <Metric "snort-dropped">
-    Type "percent"
-    ValueFrom 1
-  </Metric>
-  <File "/var/log/snort/snort.stats">
-    Collect "snort-dropped"
-  </File>
-</Plugin>
+            <Plugin "tail_csv">
+              <Metric "snort-dropped">
+                Type "percent"
+                ValueFrom 1
+              </Metric>
+              <File "/var/log/snort/snort.stats">
+                Collect "snort-dropped"
+              </File>
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
@@ -81,34 +83,34 @@ EOS
         end
 
         it 'overrides defaults' do
-          content = <<EOS
-# Generated by Puppet
-<LoadPlugin tail_csv>
-  Globals false
-</LoadPlugin>
+          content = <<~EOS
+            # Generated by Puppet
+            <LoadPlugin tail_csv>
+              Globals false
+            </LoadPlugin>
 
-<Plugin "tail_csv">
-  <Metric "snort-dropped">
-    Type "percent"
-    Instance "dropped"
-    ValueFrom 1
-  </Metric>
-  <Metric "snort-reject">
-    Type "percent"
-    Instance "reject"
-    ValueFrom 2
-  </Metric>
-  <File "/var/log/snort/snort.stats">
-    Plugin "snortstats"
-    Instance "eth0"
-    Collect "snort-dropped"
-    Collect "snort-reject"
-    Interval 600
-    TimeFrom 5
-  </File>
-</Plugin>
+            <Plugin "tail_csv">
+              <Metric "snort-dropped">
+                Type "percent"
+                Instance "dropped"
+                ValueFrom 1
+              </Metric>
+              <Metric "snort-reject">
+                Type "percent"
+                Instance "reject"
+                ValueFrom 2
+              </Metric>
+              <File "/var/log/snort/snort.stats">
+                Plugin "snortstats"
+                Instance "eth0"
+                Collect "snort-dropped"
+                Collect "snort-reject"
+                Interval 600
+                TimeFrom 5
+              </File>
+            </Plugin>
 
-EOS
+          EOS
 
           is_expected.to compile.with_all_deps
           is_expected.to contain_class('collectd')
diff --git a/spec/classes/collectd_plugin_tcpconns_spec.rb b/spec/classes/collectd_plugin_tcpconns_spec.rb
index 709540d..42c4bd2 100644
--- a/spec/classes/collectd_plugin_tcpconns_spec.rb
+++ b/spec/classes/collectd_plugin_tcpconns_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::tcpconns', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -75,7 +77,7 @@ describe 'collectd::plugin::tcpconns', type: :class do
         end
 
         it 'Will raise an error about :allportssummary being a String' do
-          expect { is_expected.to.to raise_error(Puppet::Error, %r{String}) }
+          is_expected.to compile.and_raise_error(%r{String})
         end
       end
 
diff --git a/spec/classes/collectd_plugin_thermal_spec.rb b/spec/classes/collectd_plugin_thermal_spec.rb
index 86c4264..c884fc7 100644
--- a/spec/classes/collectd_plugin_thermal_spec.rb
+++ b/spec/classes/collectd_plugin_thermal_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::thermal', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -17,6 +19,7 @@ describe 'collectd::plugin::thermal', type: :class do
         end
 
         it { is_expected.to contain_collectd__plugin('thermal') }
+
         it 'Will create 10-thermal.conf' do
           is_expected.to contain_file('thermal.load').with(
             ensure: 'present',
diff --git a/spec/classes/collectd_plugin_threshold_spec.rb b/spec/classes/collectd_plugin_threshold_spec.rb
index db5eb56..43d3e07 100644
--- a/spec/classes/collectd_plugin_threshold_spec.rb
+++ b/spec/classes/collectd_plugin_threshold_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::threshold', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -12,9 +14,9 @@ describe 'collectd::plugin::threshold', type: :class do
           'types' => [
             {
               'name'        => 'foo',
-              'warning_min' =>    0.00,
+              'warning_min' => 0.00,
               'warning_max' => 1000.00,
-              'failure_min' =>    0.00,
+              'failure_min' => 0.00,
               'failure_max' => 1200.00,
               'invert'      => false,
               'instance'    => 'bar'
@@ -35,7 +37,7 @@ describe 'collectd::plugin::threshold', type: :class do
           ],
           'hosts' => [
             {
-              'name'  => 'hostname',
+              'name' => 'hostname',
               'types' => [
                 {
                   'name'        => 'cpu',
diff --git a/spec/classes/collectd_plugin_turbostat_spec.rb b/spec/classes/collectd_plugin_turbostat_spec.rb
index affe9ee..a5c8775 100644
--- a/spec/classes/collectd_plugin_turbostat_spec.rb
+++ b/spec/classes/collectd_plugin_turbostat_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::turbostat', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_unixsock_spec.rb b/spec/classes/collectd_plugin_unixsock_spec.rb
index 563b14f..f48c5d9 100644
--- a/spec/classes/collectd_plugin_unixsock_spec.rb
+++ b/spec/classes/collectd_plugin_unixsock_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::unixsock', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -13,7 +15,7 @@ describe 'collectd::plugin::unixsock', type: :class do
           is_expected.to contain_file('unixsock.load').with(
             ensure: 'present',
             path: "#{options[:plugin_conf_dir]}/10-unixsock.conf",
-            content: %r{SocketFile  "/var/run/collectd-socket".+SocketGroup "collectd".+SocketPerms "0770"}m
+            content: %r{SocketFile  "/var/run/collectd-unixsock".+SocketGroup "collectd".+SocketPerms "0770"}m
           )
         end
       end
diff --git a/spec/classes/collectd_plugin_uuid_spec.rb b/spec/classes/collectd_plugin_uuid_spec.rb
index 0dd5963..77424f0 100644
--- a/spec/classes/collectd_plugin_uuid_spec.rb
+++ b/spec/classes/collectd_plugin_uuid_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::uuid', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -16,6 +18,7 @@ describe 'collectd::plugin::uuid', type: :class do
         it { is_expected.to contain_collectd__plugin('uuid') }
         it { is_expected.to contain_file('old_uuid.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_uuid.load').with_ensure('absent') }
+
         it 'Will create 10-uuid.conf' do
           is_expected.to contain_file('uuid.load').with(
             ensure: 'present',
diff --git a/spec/classes/collectd_plugin_varnish_spec.rb b/spec/classes/collectd_plugin_varnish_spec.rb
index f9f8218..f9c0a3b 100644
--- a/spec/classes/collectd_plugin_varnish_spec.rb
+++ b/spec/classes/collectd_plugin_varnish_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::varnish', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -17,27 +19,28 @@ describe 'collectd::plugin::varnish', type: :class do
         end
 
         it 'renders the template with the default values' do
-          content = <<EOS
-<Plugin varnish>
-  <Instance "localhost">
-  </Instance>
-</Plugin>
-EOS
+          content = <<~EOS
+            <Plugin varnish>
+              <Instance "localhost">
+              </Instance>
+            </Plugin>
+          EOS
           is_expected.to contain_collectd__plugin('varnish').with_content(content)
         end
       end
+
       context 'When the version is nil' do
         let :facts do
           facts.merge(collectd_version: nil)
         end
 
         it 'renders the template with the default values' do
-          content = <<EOS
-<Plugin varnish>
-  <Instance "localhost">
-  </Instance>
-</Plugin>
-EOS
+          content = <<~EOS
+            <Plugin varnish>
+              <Instance "localhost">
+              </Instance>
+            </Plugin>
+          EOS
           is_expected.to contain_collectd__plugin('varnish').with_content(content)
         end
       end
@@ -49,15 +52,16 @@ EOS
 
         context 'when there are no params given' do
           it 'renders the template with the default values' do
-            content = <<EOS
-<Plugin varnish>
-  <Instance "localhost">
-  </Instance>
-</Plugin>
-EOS
+            content = <<~EOS
+              <Plugin varnish>
+                <Instance "localhost">
+                </Instance>
+              </Plugin>
+            EOS
             is_expected.to contain_collectd__plugin('varnish').with_content(content)
           end
         end
+
         context 'when there are params given' do
           let :params do
             {
@@ -71,14 +75,14 @@ EOS
           end
 
           it 'renders the template with the values passed in the params' do
-            content = <<EOS
-<Plugin varnish>
-  <Instance "warble">
-    BATMAN true
-    Robin false
-  </Instance>
-</Plugin>
-EOS
+            content = <<~EOS
+              <Plugin varnish>
+                <Instance "warble">
+                  BATMAN true
+                  Robin false
+                </Instance>
+              </Plugin>
+            EOS
             is_expected.to contain_collectd__plugin('varnish').with_content(content)
           end
         end
diff --git a/spec/classes/collectd_plugin_virt_spec.rb b/spec/classes/collectd_plugin_virt_spec.rb
index 2852b64..5a53aae 100644
--- a/spec/classes/collectd_plugin_virt_spec.rb
+++ b/spec/classes/collectd_plugin_virt_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::virt', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -11,6 +13,99 @@ describe 'collectd::plugin::virt', type: :class do
         'include collectd'
       end
 
+      context 'hostname_format in virt.conf' do
+        let :params do
+          {
+            connection: 'qemu:///system',
+            hostname_format: 'name metadata uuid'
+          }
+        end
+
+        context 'with collectd_version < 5.0' do
+          let :facts do
+            facts.merge(collectd_version: '4.10.1')
+          end
+
+          it 'contains appropriate configuration' do
+            is_expected.to contain_file('libvirt.load').
+              with_content(%r{.*HostnameFormat name metadata uuid.*})
+          end
+        end
+
+        context 'with collectd_version >= 5.0' do
+          let :facts do
+            facts.merge(collectd_version: '5.0.0')
+          end
+
+          it 'contains appropriate configuration' do
+            is_expected.to contain_file('libvirt.load').
+              with_content(%r{.*HostnameFormat name metadata uuid.*})
+          end
+        end
+
+        context 'with collectd_version >= 5.5.0' do
+          let :facts do
+            facts.merge(collectd_version: '5.5.0')
+          end
+
+          it 'contains appropriate configuration' do
+            is_expected.to contain_file('virt.load').
+              with_content(%r{.*HostnameFormat name metadata uuid.*})
+          end
+        end
+      end
+
+      context 'plugin_instance_format in virt.conf' do
+        let :params do
+          {
+            connection: 'qemu:///system',
+            plugin_instance_format: 'name metadata uuid'
+          }
+        end
+
+        context 'with collectd_version < 5.0' do
+          let :facts do
+            facts.merge(collectd_version: '4.10.1')
+          end
+
+          it 'is ignored' do
+            is_expected.to contain_file('libvirt.load').
+              without_content(%r{.*PluginInstanceFormat name metadata uuid.*})
+          end
+        end
+
+        context 'with collectd_version >= 5.0' do
+          let :facts do
+            facts.merge(collectd_version: '5.0.0')
+          end
+
+          it 'is included' do
+            is_expected.to contain_file('libvirt.load').
+              without_content(%r{.*PluginInstanceFormat name metadata uuid.*})
+          end
+        end
+
+        context 'with collectd_version >= 5.5.0' do
+          let :facts do
+            facts.merge(collectd_version: '5.5.0')
+          end
+
+          it 'is included' do
+            is_expected.to contain_file('virt.load').
+              with_content(%r{.*PluginInstanceFormat name metadata uuid.*})
+          end
+        end
+
+        case facts[:os]['family']
+        when 'RedHat'
+          context 'on osfamily => RedHat' do
+            it 'Will delete packaging config file' do
+              is_expected.to contain_file('package_virt.load').with_ensure('absent')
+            end
+          end
+        end
+      end
+
       context 'interface_format in virt.conf' do
         let :params do
           {
@@ -26,7 +121,7 @@ describe 'collectd::plugin::virt', type: :class do
 
           it 'is ignored' do
             is_expected.to contain_file('libvirt.load').
-              without_content(%r{.*InterfaceFormat \"address\".*})
+              without_content(%r{.*InterfaceFormat "address".*})
           end
         end
 
@@ -37,7 +132,7 @@ describe 'collectd::plugin::virt', type: :class do
 
           it 'is included' do
             is_expected.to contain_file('libvirt.load').
-              with_content(%r{.*InterfaceFormat \"address\".*})
+              with_content(%r{.*InterfaceFormat "address".*})
           end
         end
 
@@ -48,7 +143,7 @@ describe 'collectd::plugin::virt', type: :class do
 
           it 'is included' do
             is_expected.to contain_file('virt.load').
-              with_content(%r{.*InterfaceFormat \"address\".*})
+              with_content(%r{.*InterfaceFormat "address".*})
           end
         end
 
diff --git a/spec/classes/collectd_plugin_write_graphite_spec.rb b/spec/classes/collectd_plugin_write_graphite_spec.rb
index cd0d2f6..e4df9d8 100644
--- a/spec/classes/collectd_plugin_write_graphite_spec.rb
+++ b/spec/classes/collectd_plugin_write_graphite_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_graphite', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts.merge(collectd_version: '5.0')
       end
@@ -17,7 +19,7 @@ describe 'collectd::plugin::write_graphite', type: :class do
         end
 
         it "Will create #{options[:plugin_conf_dir]}/write_graphite-config.conf" do
-          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/write_graphite-config.conf").that_requires('File[collectd.d]')
+          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/write_graphite-config.conf")
           is_expected.to contain_concat__fragment('collectd_plugin_write_graphite_conf_header').with(
             content: %r{<Plugin write_graphite>},
             target: "#{options[:plugin_conf_dir]}/write_graphite-config.conf",
diff --git a/spec/classes/collectd_plugin_write_http_spec.rb b/spec/classes/collectd_plugin_write_http_spec.rb
index ffad376..cda1d16 100644
--- a/spec/classes/collectd_plugin_write_http_spec.rb
+++ b/spec/classes/collectd_plugin_write_http_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_http', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -22,6 +24,7 @@ describe 'collectd::plugin::write_http', type: :class do
         end
 
         it { is_expected.to contain_collectd__plugin('write_http') }
+
         it 'Will create 10-write_http.conf' do
           is_expected.to contain_file('write_http.load').with(
             ensure: 'present',
@@ -29,6 +32,13 @@ describe 'collectd::plugin::write_http', type: :class do
             content: "#\ Generated by Puppet\n<LoadPlugin write_http>\n  Globals false\n</LoadPlugin>\n\n<Plugin \"write_http\">\n  <URL \"collectd.org.1\">\n\n    Format \"JSON\"\n  </URL>\n\n</Plugin>\n\n"
           )
         end
+
+        case [facts[:os]['family'], facts[:os]['release']['major']]
+        when %w[RedHat 8]
+          it { is_expected.to contain_package('collectd-write_http') }
+        else
+          it { is_expected.not_to contain_package('collectd-write_http') }
+        end
       end
 
       context ':ensure => present and :nodes => { \'collectd\' => { \'url\' => \'collectd.org.1\', \'format\' => \'JSON\'}}' do
@@ -54,6 +64,30 @@ describe 'collectd::plugin::write_http', type: :class do
         end
       end
 
+      context ':ensure => present and :nodes => { \'collectd\' => { \'url\' => \'collectd.org.1\', \'metrics\' => \'true\', \'header\' => \'foobar\'}}' do
+        let :params do
+          {
+            nodes:
+              {
+                'collectd' =>
+                  {
+                    'url' => 'collectd.org.1',
+                    'metrics' => true,
+                    'header' => 'foobar'
+                  }
+              }
+          }
+        end
+
+        it 'Will create 10-write_http.conf' do
+          is_expected.to contain_file('write_http.load').with(
+            ensure: 'present',
+            path: "#{options[:plugin_conf_dir]}/10-write_http.conf",
+            content: "#\ Generated by Puppet\n<LoadPlugin write_http>\n  Globals false\n</LoadPlugin>\n\n<Plugin \"write_http\">\n  <Node \"collectd\">\n    URL \"collectd.org.1\"\n\n    Header \"foobar\"\n    Metrics true\n  </Node>\n\n</Plugin>\n\n"
+          )
+        end
+      end
+
       context ':ensure => absent' do
         let :params do
           { ensure: 'absent' }
diff --git a/spec/classes/collectd_plugin_write_kafka_spec.rb b/spec/classes/collectd_plugin_write_kafka_spec.rb
index 45e702d..ca0c1e9 100644
--- a/spec/classes/collectd_plugin_write_kafka_spec.rb
+++ b/spec/classes/collectd_plugin_write_kafka_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_kafka', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -10,15 +12,17 @@ describe 'collectd::plugin::write_kafka', type: :class do
       options = os_specific_options(facts)
       context ':ensure => present and :kafka_host => \'myhost\'' do
         let :params do
-          { kafka_host: 'myhost', kafka_port: '9092', topics: { 'my-topic' => { 'format' => 'JSON' } } }
+          { kafka_host: 'myhost', kafka_port: 9092, topics: { 'my-topic' => { 'format' => 'JSON' } }, properties: { 'my-property' => 'my-value' }, meta: { 'my-meta' => 'my-value' } }
         end
 
         it "Will create #{options[:plugin_conf_dir]}/10-write_kafka.conf" do
           is_expected.to contain_file('write_kafka.load').with(ensure: 'present')
           is_expected.to contain_file('write_kafka.load').with(path: "#{options[:plugin_conf_dir]}/10-write_kafka.conf")
           is_expected.to contain_file('write_kafka.load').with(content: %r{Property "metadata.broker.list" "myhost:9092"})
+          is_expected.to contain_file('write_kafka.load').with(content: %r{Property "my-property" "my-value"})
           is_expected.to contain_file('write_kafka.load').with(content: %r{Topic "my-topic"})
           is_expected.to contain_file('write_kafka.load').with(content: %r{Format "JSON"})
+          is_expected.to contain_file('write_kafka.load').with(content: %r{Meta "my-meta" "my-value"})
         end
       end
 
diff --git a/spec/classes/collectd_plugin_write_log_spec.rb b/spec/classes/collectd_plugin_write_log_spec.rb
index 6560b59..4525d46 100644
--- a/spec/classes/collectd_plugin_write_log_spec.rb
+++ b/spec/classes/collectd_plugin_write_log_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_log', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -16,6 +18,7 @@ describe 'collectd::plugin::write_log', type: :class do
         it { is_expected.to contain_collectd__plugin('write_log') }
         it { is_expected.to contain_file('old_write_log.load').with_ensure('absent') }
         it { is_expected.to contain_file('older_write_log.load').with_ensure('absent') }
+
         it 'Will create 10-write_log.conf' do
           is_expected.to contain_file('write_log.load').with(
             ensure: 'present',
diff --git a/spec/classes/collectd_plugin_write_prometheus_spec.rb b/spec/classes/collectd_plugin_write_prometheus_spec.rb
index 400709f..ce88d5d 100644
--- a/spec/classes/collectd_plugin_write_prometheus_spec.rb
+++ b/spec/classes/collectd_plugin_write_prometheus_spec.rb
@@ -1,16 +1,18 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_prometheus', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts.merge(collectd_version: '5.7')
       end
 
       options = os_specific_options(facts)
-      context ':ensure => present and :port => "9103"' do
+      context ':ensure => present and :port => 9103' do
         let :params do
-          { port: '9103' }
+          { port: 9103 }
         end
 
         it "Will create #{options[:plugin_conf_dir]}/10-write_prometheus.conf" do
@@ -27,7 +29,7 @@ describe 'collectd::plugin::write_prometheus', type: :class do
           { ensure: 'absent' }
         end
 
-        it 'Will not create ' do
+        it 'Will not create' do
           is_expected.to contain_file('write_prometheus.load').with(
             ensure: 'absent',
             path: "#{options[:plugin_conf_dir]}/10-write_prometheus.conf"
diff --git a/spec/classes/collectd_plugin_write_riemann_spec.rb b/spec/classes/collectd_plugin_write_riemann_spec.rb
index 97d0bfc..3286703 100644
--- a/spec/classes/collectd_plugin_write_riemann_spec.rb
+++ b/spec/classes/collectd_plugin_write_riemann_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_riemann', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -38,7 +40,7 @@ describe 'collectd::plugin::write_riemann', type: :class do
           { nodes: [], ensure: 'absent' }
         end
 
-        it 'Will not create ' do
+        it 'Will not create' do
           is_expected.to contain_file('write_riemann.load').with(
             ensure: 'absent',
             path: "#{options[:plugin_conf_dir]}/10-write_riemann.conf"
diff --git a/spec/classes/collectd_plugin_write_tsdb_spec.rb b/spec/classes/collectd_plugin_write_tsdb_spec.rb
index 6251b95..aa1e68a 100644
--- a/spec/classes/collectd_plugin_write_tsdb_spec.rb
+++ b/spec/classes/collectd_plugin_write_tsdb_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_tsdb', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/classes/collectd_plugin_zfs_arc_spec.rb b/spec/classes/collectd_plugin_zfs_arc_spec.rb
index 12e8bb6..1323643 100644
--- a/spec/classes/collectd_plugin_zfs_arc_spec.rb
+++ b/spec/classes/collectd_plugin_zfs_arc_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::zfs_arc', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts.merge(collectd_version: '4.8')
       end
diff --git a/spec/classes/collectd_plugin_zookeeper_spec.rb b/spec/classes/collectd_plugin_zookeeper_spec.rb
index 078f13a..18124dd 100644
--- a/spec/classes/collectd_plugin_zookeeper_spec.rb
+++ b/spec/classes/collectd_plugin_zookeeper_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::zookeeper', type: :class do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -11,7 +13,7 @@ describe 'collectd::plugin::zookeeper', type: :class do
 
       context ":ensure => present and :zookeeper_host => 'myhost'" do
         let :params do
-          { zookeeper_host: 'myhost', zookeeper_port: '2181' }
+          { zookeeper_host: 'myhost', zookeeper_port: 2181 }
         end
 
         it "Will create #{options[:plugin_conf_dir]}/10-zookeeper.load" do
@@ -27,7 +29,7 @@ describe 'collectd::plugin::zookeeper', type: :class do
           { zookeeper_host: 'myhost', ensure: 'absent' }
         end
 
-        it 'Will not create ' do
+        it 'Will not create' do
           is_expected.to contain_file('zookeeper.load').with(
             ensure: 'absent',
             path: "#{options[:plugin_conf_dir]}/10-zookeeper.conf"
diff --git a/spec/defines/collectd_plugin_apache_instance_spec.rb b/spec/defines/collectd_plugin_apache_instance_spec.rb
index d39ef9f..ecde9d1 100644
--- a/spec/defines/collectd_plugin_apache_instance_spec.rb
+++ b/spec/defines/collectd_plugin_apache_instance_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::apache::instance', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_curl_json_spec.rb b/spec/defines/collectd_plugin_curl_json_spec.rb
index 6c5f30e..4c404b3 100644
--- a/spec/defines/collectd_plugin_curl_json_spec.rb
+++ b/spec/defines/collectd_plugin_curl_json_spec.rb
@@ -1,16 +1,10 @@
-require 'spec_helper'
+# frozen_string_literal: true
 
-# Facter 2 doesn't include the os.distro fact so override the facter version we tell facterdb to use.
-facterdb_facterversion = case Puppet.version
-                         when %r{^4}
-                           '3.6.7'
-                         else
-                           '3.8.0'
-                         end
+require 'spec_helper'
 
 describe 'collectd::plugin::curl_json', type: :define do
-  on_supported_os(facterversion: facterdb_facterversion).each do |os, facts|
-    context "on #{os} " do
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts.merge(collectd_version: '4.8.0')
diff --git a/spec/defines/collectd_plugin_curl_page_spec.rb b/spec/defines/collectd_plugin_curl_page_spec.rb
index 77a4d5b..14e8af2 100644
--- a/spec/defines/collectd_plugin_curl_page_spec.rb
+++ b/spec/defines/collectd_plugin_curl_page_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::curl::page', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_exec_cmd_spec.rb b/spec/defines/collectd_plugin_exec_cmd_spec.rb
index 6625549..9ab2cc5 100644
--- a/spec/defines/collectd_plugin_exec_cmd_spec.rb
+++ b/spec/defines/collectd_plugin_exec_cmd_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::exec::cmd', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_filecount_directory_spec.rb b/spec/defines/collectd_plugin_filecount_directory_spec.rb
index 586b894..6c09fc4 100644
--- a/spec/defines/collectd_plugin_filecount_directory_spec.rb
+++ b/spec/defines/collectd_plugin_filecount_directory_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filecount::directory', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_filter_chain_spec.rb b/spec/defines/collectd_plugin_filter_chain_spec.rb
index 5b64ab9..ae191ea 100644
--- a/spec/defines/collectd_plugin_filter_chain_spec.rb
+++ b/spec/defines/collectd_plugin_filter_chain_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filter::chain', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -12,8 +14,7 @@ describe 'collectd::plugin::filter::chain', type: :define do
         let(:title) { 'MyChain' }
 
         it "Will create #{options[:plugin_conf_dir]}/filter-chain-MyChain.conf" do
-          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/filter-chain-MyChain.conf").with(ensure: 'present').
-            that_requires('File[collectd.d]')
+          is_expected.to contain_concat("#{options[:plugin_conf_dir]}/filter-chain-MyChain.conf").with(ensure: 'present')
           is_expected.to contain_concat__fragment("#{options[:plugin_conf_dir]}/filter-chain-MyChain.conf_MyChain_head").with(
             order: '00',
             content: '<Chain "MyChain">',
@@ -25,6 +26,7 @@ describe 'collectd::plugin::filter::chain', type: :define do
             target: "#{options[:plugin_conf_dir]}/filter-chain-MyChain.conf"
           )
         end
+
         it { is_expected.not_to contain_collectd__plugin__filter__target('z_chain-MyChain-target') }
       end
 
diff --git a/spec/defines/collectd_plugin_filter_match_spec.rb b/spec/defines/collectd_plugin_filter_match_spec.rb
index d348d81..f086c55 100644
--- a/spec/defines/collectd_plugin_filter_match_spec.rb
+++ b/spec/defines/collectd_plugin_filter_match_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filter::match', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
@@ -27,6 +29,7 @@ describe 'collectd::plugin::filter::match', type: :define do
         it 'Will ensure that plugin is loaded' do
           is_expected.to contain_collectd__plugin('match_regex').with(order: '02')
         end
+
         it 'Will add match to rule' do
           is_expected.to contain_concat__fragment(concat_fragment_name).with(
             order: concat_fragment_order,
@@ -46,6 +49,7 @@ describe 'collectd::plugin::filter::match', type: :define do
         it 'Will ensure that plugin is loaded' do
           is_expected.to contain_collectd__plugin('match_empty_counter').with(order: '02')
         end
+
         it 'Will add match to rule' do
           is_expected.to contain_concat__fragment(concat_fragment_name).with(
             order: concat_fragment_order,
diff --git a/spec/defines/collectd_plugin_filter_rule_spec.rb b/spec/defines/collectd_plugin_filter_rule_spec.rb
index fb90343..0bb410c 100644
--- a/spec/defines/collectd_plugin_filter_rule_spec.rb
+++ b/spec/defines/collectd_plugin_filter_rule_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filter::rule', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_filter_target_spec.rb b/spec/defines/collectd_plugin_filter_target_spec.rb
index 348f872..b70fed2 100644
--- a/spec/defines/collectd_plugin_filter_target_spec.rb
+++ b/spec/defines/collectd_plugin_filter_target_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::filter::target', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
@@ -28,12 +30,14 @@ describe 'collectd::plugin::filter::target', type: :define do
         it 'Will ensure that plugin is loaded' do
           is_expected.to contain_collectd__plugin('target_set').with(order: '02')
         end
+
         it 'Will add target to rule' do
           is_expected.to contain_concat__fragment(concat_fragment_name).with(
             order: concat_fragment_order,
             target: concat_fragment_target
           )
         end
+
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with(content: %r{<Target "set">}) }
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with(content: %r{PluginInstance "coretemp"}) }
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with(content: %r{TypeInstance "core3"}) }
@@ -49,12 +53,14 @@ describe 'collectd::plugin::filter::target', type: :define do
         it 'Builtin plugin should not be tried to load' do
           is_expected.not_to contain_collectd__plugin('target_return')
         end
+
         it 'Will add target to chain' do
           is_expected.to contain_concat__fragment(concat_fragment_name).with(
             order: concat_fragment_order,
             target: concat_fragment_target
           )
         end
+
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with(content: %r{Target "return"}) }
       end
     end
diff --git a/spec/defines/collectd_plugin_genericjmx_connection_spec.rb b/spec/defines/collectd_plugin_genericjmx_connection_spec.rb
index 64b25c5..2d69f8e 100644
--- a/spec/defines/collectd_plugin_genericjmx_connection_spec.rb
+++ b/spec/defines/collectd_plugin_genericjmx_connection_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::genericjmx::connection', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
@@ -81,7 +83,7 @@ describe 'collectd::plugin::genericjmx::connection', type: :define do
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with_content(%r{Password "aoeuhtns"}) }
       end
 
-      context 'instance_prefix ' do
+      context 'instance_prefix' do
         let(:params) do
           default_params.merge(
             instance_prefix: 'bat',
diff --git a/spec/defines/collectd_plugin_genericjmx_mbean_spec.rb b/spec/defines/collectd_plugin_genericjmx_mbean_spec.rb
index e155b88..29a16a1 100644
--- a/spec/defines/collectd_plugin_genericjmx_mbean_spec.rb
+++ b/spec/defines/collectd_plugin_genericjmx_mbean_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::genericjmx::mbean', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
@@ -57,6 +59,7 @@ describe 'collectd::plugin::genericjmx::mbean', type: :define do
         it { is_expected.to contain_concat__fragment(concat_fragment_name).with_content(%r{InstanceFrom "bat"}) }
         it { is_expected.to contain_concat__fragment(concat_fragment_name).without_content(%r{(.*InstanceFrom.*){2,}}) }
       end
+
       context 'with default_values_args' do
         let(:default_values_args) do
           {
diff --git a/spec/defines/collectd_plugin_mysql_database_spec.rb b/spec/defines/collectd_plugin_mysql_database_spec.rb
index d487f0e..f6abfdc 100644
--- a/spec/defines/collectd_plugin_mysql_database_spec.rb
+++ b/spec/defines/collectd_plugin_mysql_database_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::mysql::database', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_network_listener_spec.rb b/spec/defines/collectd_plugin_network_listener_spec.rb
index df7a41c..618e04c 100644
--- a/spec/defines/collectd_plugin_network_listener_spec.rb
+++ b/spec/defines/collectd_plugin_network_listener_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::network::listener', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_network_server_spec.rb b/spec/defines/collectd_plugin_network_server_spec.rb
index 1a2fee6..0c330eb 100644
--- a/spec/defines/collectd_plugin_network_server_spec.rb
+++ b/spec/defines/collectd_plugin_network_server_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::network::server', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_oracle_database_spec.rb b/spec/defines/collectd_plugin_oracle_database_spec.rb
index fb6870e..b075e0f 100644
--- a/spec/defines/collectd_plugin_oracle_database_spec.rb
+++ b/spec/defines/collectd_plugin_oracle_database_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::oracle::database', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
diff --git a/spec/defines/collectd_plugin_oracle_query_spec.rb b/spec/defines/collectd_plugin_oracle_query_spec.rb
index a30f17a..e601d31 100644
--- a/spec/defines/collectd_plugin_oracle_query_spec.rb
+++ b/spec/defines/collectd_plugin_oracle_query_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::oracle::query', 'type' => :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       options = os_specific_options(facts)
       let :facts do
         facts
diff --git a/spec/defines/collectd_plugin_python_module_spec.rb b/spec/defines/collectd_plugin_python_module_spec.rb
index c698b1a..94c63f5 100644
--- a/spec/defines/collectd_plugin_python_module_spec.rb
+++ b/spec/defines/collectd_plugin_python_module_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::python::module', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_snmp_data_spec.rb b/spec/defines/collectd_plugin_snmp_data_spec.rb
index 2b795a7..75bcf5d 100644
--- a/spec/defines/collectd_plugin_snmp_data_spec.rb
+++ b/spec/defines/collectd_plugin_snmp_data_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::snmp::data', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_snmp_host_spec.rb b/spec/defines/collectd_plugin_snmp_host_spec.rb
index 6fcfb5b..edfeb78 100644
--- a/spec/defines/collectd_plugin_snmp_host_spec.rb
+++ b/spec/defines/collectd_plugin_snmp_host_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::snmp::host', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_spec.rb b/spec/defines/collectd_plugin_spec.rb
index 480e52b..9ad6fed 100644
--- a/spec/defines/collectd_plugin_spec.rb
+++ b/spec/defines/collectd_plugin_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
diff --git a/spec/defines/collectd_plugin_tail_file_spec.rb b/spec/defines/collectd_plugin_tail_file_spec.rb
index 99ad323..d958061 100644
--- a/spec/defines/collectd_plugin_tail_file_spec.rb
+++ b/spec/defines/collectd_plugin_tail_file_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::tail::file', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -43,6 +45,7 @@ describe 'collectd::plugin::tail::file', type: :define do
               'path'   => "#{options[:plugin_conf_dir]}/tail-exim-log.conf"
             ).that_notifies('Service[collectd]')
           end
+
           it "renders #{options[:plugin_conf_dir]}/tail-exim-log.conf correctly" do
             content = catalogue.resource('file', 'exim-log.conf').send(:parameters)[:content]
             expected_content  = %(# Generated by Puppet\n)
@@ -68,6 +71,7 @@ describe 'collectd::plugin::tail::file', type: :define do
           end
         end
       end
+
       context "with match containing 'excluderegex'" do
         let(:title) { 'test' }
         let :params do
diff --git a/spec/defines/collectd_plugin_write_graphite_spec.rb b/spec/defines/collectd_plugin_write_graphite_spec.rb
index 763bada..8ecf7b4 100644
--- a/spec/defines/collectd_plugin_write_graphite_spec.rb
+++ b/spec/defines/collectd_plugin_write_graphite_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::plugin::write_graphite::carbon', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -21,7 +23,7 @@ describe 'collectd::plugin::write_graphite::carbon', type: :define do
         end
 
         it "does not include protocol in #{options[:plugin_conf_dir]}/write_graphite.conf for collectd < 5.4" do
-          is_expected.not_to contain_concat__fragment('collectd_plugin_write_graphite_conf_localhost_2003').with_content(%r{.*Protocol \"udp\".*})
+          is_expected.not_to contain_concat__fragment('collectd_plugin_write_graphite_conf_localhost_2003').with_content(%r{.*Protocol "udp".*})
         end
       end
 
@@ -37,7 +39,7 @@ describe 'collectd::plugin::write_graphite::carbon', type: :define do
         end
 
         it "includes protocol in #{options[:plugin_conf_dir]}/write_graphite.conf for collectd >= 5.4" do
-          is_expected.to contain_concat__fragment('collectd_plugin_write_graphite_conf_wg_udp_2003').with_content(%r{.*Protocol \"udp\".*})
+          is_expected.to contain_concat__fragment('collectd_plugin_write_graphite_conf_wg_udp_2003').with_content(%r{.*Protocol "udp".*})
         end
 
         it 'uses Node definition' do
diff --git a/spec/defines/collectd_type_spec.rb b/spec/defines/collectd_type_spec.rb
index 7e5ff42..0e209cb 100644
--- a/spec/defines/collectd_type_spec.rb
+++ b/spec/defines/collectd_type_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::type', type: :define do
diff --git a/spec/defines/collectd_typesdb_spec.rb b/spec/defines/collectd_typesdb_spec.rb
index d01dbf2..615d9e2 100644
--- a/spec/defines/collectd_typesdb_spec.rb
+++ b/spec/defines/collectd_typesdb_spec.rb
@@ -1,8 +1,10 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd::typesdb', type: :define do
   on_supported_os(baseline_os_hash).each do |os, facts|
-    context "on #{os} " do
+    context "on #{os}" do
       let :facts do
         facts
       end
@@ -33,6 +35,20 @@ describe 'collectd::typesdb', type: :define do
           ).with_mode('0644')
         end
       end
+
+      context 'with include at true' do
+        let(:pre_condition) { 'class {"collectd": purge_config => true }' }
+        let(:title) { '/etc/collectd/types.db' }
+        let(:params) { { include: true } }
+
+        it do
+          is_expected.to contain_concat__fragment('include_typedb_/etc/collectd/types.db').with(
+            order: '50',
+            target: 'collectd_typesdb',
+            content: "TypesDB \"/etc/collectd/types.db\"\n"
+          )
+        end
+      end
     end
   end
 end
diff --git a/spec/fixtures/plugins/logparser.conf.default b/spec/fixtures/plugins/logparser.conf.default
new file mode 100644
index 0000000..9f1b827
--- /dev/null
+++ b/spec/fixtures/plugins/logparser.conf.default
@@ -0,0 +1,64 @@
+# Generated by Puppet
+<LoadPlugin logparser>
+  Globals false
+</LoadPlugin>
+
+<Plugin logparser>
+  <Logfile "/var/log/syslog">
+    FirstFullRead false
+    <Message "pcie_errors">
+      DefaultType "warning"
+      DefaultTypeInstance "pcie_error"
+      <Match "aer error">
+        Regex "AER:.*error received"
+        SubmatchIdx -1
+      </Match>
+      <Match "corrected">
+        IsMandatory false
+        Regex "severity=Corrected"
+        TypeInstance "correctable"
+      </Match>
+      <Match "device">
+        IsMandatory false
+        PluginInstance true
+        Regex " ([0-9a-fA-F:\.]*): PCIe Bus Error"
+        SubmatchIdx 1
+      </Match>
+      <Match "error type">
+        IsMandatory false
+        Regex "type=(.*),"
+        SubmatchIdx 1
+      </Match>
+      <Match "fatal">
+        IsMandatory false
+        Regex "severity=.*\([fF]atal"
+        Severity "failure"
+        TypeInstance "fatal"
+      </Match>
+      <Match "id">
+        Regex ", id=(.*)"
+        SubmatchIdx 1
+      </Match>
+      <Match "incident time">
+        IsMandatory false
+        Regex "(... .. ..:..:..) .* pcieport.*AER"
+        SubmatchIdx 1
+      </Match>
+      <Match "nonfatal">
+        IsMandatory false
+        Regex "severity=.*\([nN]on-[fF]atal"
+        TypeInstance "non_fatal"
+      </Match>
+      <Match "root port">
+        IsMandatory true
+        Regex "pcieport (.*): AER:"
+        SubmatchIdx 1
+      </Match>
+      <Match "severity_mandatory">
+        Regex "severity="
+        SubmatchIdx -1
+      </Match>
+    </Message>
+  </Logfile>
+</Plugin>
+
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index c887fd7..e2c3cc6 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,43 +1,20 @@
-# This file is managed via modulesync
-# https://github.com/voxpupuli/modulesync
-# https://github.com/voxpupuli/modulesync_config
-RSpec.configure do |c|
-  c.mock_with :mocha
-end
+# frozen_string_literal: true
 
-require 'puppetlabs_spec_helper/module_spec_helper'
-require 'rspec-puppet-facts'
-include RspecPuppetFacts
+# Managed by modulesync - DO NOT EDIT
+# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/
 
-if File.exist?(File.join(__dir__, 'default_module_facts.yml'))
-  facts = YAML.load(File.read(File.join(__dir__, 'default_module_facts.yml')))
-  if facts
-    facts.each do |name, value|
-      add_custom_fact name.to_sym, value
-    end
-  end
-end
+# puppetlabs_spec_helper will set up coverage if the env variable is set.
+# We want to do this if lib exists and it hasn't been explicitly set.
+ENV['COVERAGE'] ||= 'yes' if Dir.exist?(File.expand_path('../lib', __dir__))
 
-if Dir.exist?(File.expand_path('../../lib', __FILE__))
-  require 'coveralls'
-  require 'simplecov'
-  require 'simplecov-console'
-  SimpleCov.formatters = [
-    SimpleCov::Formatter::HTMLFormatter,
-    SimpleCov::Formatter::Console
-  ]
-  SimpleCov.start do
-    track_files 'lib/**/*.rb'
-    add_filter '/spec'
-    add_filter '/vendor'
-    add_filter '/.vendor'
-  end
-end
+require 'voxpupuli/test/spec_helper'
 
-RSpec.configure do |c|
-  # Coverage generation
-  c.after(:suite) do
-    RSpec::Puppet::Coverage.report!
+add_mocked_facts!
+
+if File.exist?(File.join(__dir__, 'default_module_facts.yml'))
+  facts = YAML.safe_load(File.read(File.join(__dir__, 'default_module_facts.yml')))
+  facts&.each do |name, value|
+    add_custom_fact name.to_sym, value
   end
 end
 
diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb
index ff0c960..f3021fa 100644
--- a/spec/spec_helper_acceptance.rb
+++ b/spec/spec_helper_acceptance.rb
@@ -1,22 +1,8 @@
-require 'beaker-rspec'
-require 'beaker-puppet'
-require 'beaker/puppet_install_helper'
-require 'beaker/module_install_helper'
+# frozen_string_literal: true
 
-run_puppet_install_helper unless ENV['BEAKER_provision'] == 'no'
+# This file is completely managed via modulesync
+require 'voxpupuli/acceptance/spec_helper_acceptance'
 
-RSpec.configure do |c|
-  install_module_on(hosts)
-  install_module_dependencies_on(hosts)
+configure_beaker
 
-  # Readable test descriptions
-  c.formatter = :documentation
-
-  # Configure all nodes in nodeset
-  c.before :suite do
-    hosts.each do |host|
-      # python is pre-requisite to the python_path fact.
-      on host, puppet('resource', 'package', 'python', 'ensure=installed')
-    end
-  end
-end
+Dir['./spec/support/acceptance/**/*.rb'].sort.each { |f| require f }
diff --git a/spec/spec_helper_methods.rb b/spec/spec_helper_methods.rb
index b67a2be..b255707 100644
--- a/spec/spec_helper_methods.rb
+++ b/spec/spec_helper_methods.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 def os_specific_options(facts)
   case facts[:os]['family']
   when 'Gentoo'
@@ -15,38 +17,12 @@ def os_specific_options(facts)
   end
 end
 
-def all_supported_os_hash
-  {
-    supported_os: [
-      {
-        'operatingsystem' => 'Debian',
-        'operatingsystemrelease' => ['8']
-      },
-      {
-        'operatingsystem' => 'CentOS',
-        'operatingsystemrelease' => ['7']
-      },
-      {
-        'operatingsystem' => 'Ubuntu',
-        'operatingsystemrelease' => ['16.04', '18.04']
-      },
-      {
-        'operatingsystem' => 'FreeBSD',
-        'operatingsystemrelease' => ['10']
-      },
-      {
-        'operatingsystem' => 'Archlinux'
-      }
-    ]
-  }
-end
-
 def baseline_os_hash
   {
     supported_os: [
       {
         'operatingsystem' => 'CentOS',
-        'operatingsystemrelease' => ['7']
+        'operatingsystemrelease' => %w[7 8]
       }
     ]
   }
diff --git a/spec/unit/collectd_real_version_spec.rb b/spec/unit/collectd_real_version_spec.rb
index 17467b4..0d260f6 100644
--- a/spec/unit/collectd_real_version_spec.rb
+++ b/spec/unit/collectd_real_version_spec.rb
@@ -1,25 +1,28 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'collectd_version', type: :fact do
   before { Facter.clear }
+
   after { Facter.clear }
 
   it 'is 5.1.0 according to output' do
-    Facter::Util::Resolution.stubs(:which).with('collectd').returns('/usr/sbin/collectd')
+    allow(Facter::Util::Resolution).to receive(:which).with('collectd').and_return('/usr/sbin/collectd')
     sample_collectd_help = File.read(fixtures('facts', 'collectd_help'))
-    Facter::Util::Resolution.stubs(:exec).with('collectd -h').returns(sample_collectd_help)
+    allow(Facter::Util::Resolution).to receive(:exec).with('collectd -h').and_return(sample_collectd_help)
     expect(Facter.fact(:collectd_version).value).to eq('5.1.0')
   end
 
   it 'is 5.1.0.git according to output' do
-    Facter::Util::Resolution.stubs(:which).with('collectd').returns('/usr/sbin/collectd')
+    allow(Facter::Util::Resolution).to receive(:which).with('collectd').and_return('/usr/sbin/collectd')
     sample_collectd_help_git = File.read(fixtures('facts', 'collectd_help_git'))
-    Facter::Util::Resolution.stubs(:exec).with('collectd -h').returns(sample_collectd_help_git)
+    allow(Facter::Util::Resolution).to receive(:exec).with('collectd -h').and_return(sample_collectd_help_git)
     expect(Facter.fact(:collectd_version).value).to eq('5.1.0.git')
   end
 
   it 'is not defined if collectd not installed' do
-    Facter::Util::Resolution.stubs(:which).with('collectd').returns(nil)
+    allow(Facter::Util::Resolution).to receive(:which).with('collectd').and_return(nil)
     expect(Facter.fact(:collectd_version).value).to be_nil
   end
 end
diff --git a/spec/unit/python_dir_spec.rb b/spec/unit/python_dir_spec.rb
index a7ebfb0..b73e64b 100644
--- a/spec/unit/python_dir_spec.rb
+++ b/spec/unit/python_dir_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe 'python_dir', type: :fact do
@@ -7,29 +9,47 @@ describe 'python_dir', type: :fact do
     context 'default path' do
       before do
         # This is needed to make this spec work on Fedora, apparently
-        Facter.fact(:osfamily).stubs(:value).returns('AnythingNotRedHat')
-        Facter::Util::Resolution.stubs(:which).with('python').returns(true)
-        Facter::Util::Resolution.stubs(:exec).with('python -c "import site; print(site.getsitepackages()[0])"').returns('/usr/local/lib/python2.7/dist-packages')
+        allow(Facter).to receive(:value).with(:osfamily).and_return('AnythingNotRedHat')
+        allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(true)
+        allow(Facter::Util::Resolution).to receive(:exec).with('python -c "import site; print(site.getsitepackages()[0])"').and_return('/usr/local/lib/python2.7/dist-packages')
       end
+
       it do
-        expect(Facter.value(:python_dir)).to eq('/usr/local/lib/python2.7/dist-packages')
+        expect(Facter.fact(:python_dir).value).to eq('/usr/local/lib/python2.7/dist-packages')
       end
     end
 
     context 'RedHat' do
       before do
-        Facter.fact(:osfamily).stubs(:value).returns('RedHat')
-        Facter::Util::Resolution.stubs(:which).with('python').returns(true)
-        Facter::Util::Resolution.stubs(:exec).with('python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"').returns('/usr/lib/python2.7/site-packages')
+        allow(Facter).to receive(:value).with(:osfamily).and_return('RedHat')
+        allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(true)
+        allow(Facter::Util::Resolution).to receive(:exec).with('python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"').and_return('/usr/lib/python2.7/site-packages')
+      end
+
+      it do
+        expect(Facter.fact(:python_dir).value).to eq('/usr/lib/python2.7/site-packages')
+      end
+    end
+
+    context 'RedHat versioned python' do
+      before do
+        allow(Facter).to receive(:value).with(:osfamily).and_return('RedHat')
+        allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(false)
+        allow(Facter::Util::Resolution).to receive(:which).with('python3').and_return(true)
+        allow(Facter::Util::Resolution).to receive(:exec).with('python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"').and_return('/usr/lib/python3.6/site-packages')
       end
+
       it do
-        expect(Facter.value(:python_dir)).to eq('/usr/lib/python2.7/site-packages')
+        expect(Facter.fact(:python_dir).value).to eq('/usr/lib/python3.6/site-packages')
       end
     end
   end
 
   it 'is empty string if python not installed' do
-    Facter::Util::Resolution.stubs(:which).with('python').returns(nil)
+    allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(nil)
+    allow(Facter::Util::Resolution).to receive(:which).with('python2').and_return(nil)
+    allow(Facter::Util::Resolution).to receive(:which).with('python3').and_return(nil)
+    allow(File).to receive(:exist?).with('/usr/libexec/platform-python').and_return(nil)
     expect(Facter.fact(:python_dir).value).to eq('')
   end
 end
diff --git a/templates/collectd.conf.erb b/templates/collectd.conf.erb
index 56a9db4..784b71e 100644
--- a/templates/collectd.conf.erb
+++ b/templates/collectd.conf.erb
@@ -13,9 +13,7 @@ AutoLoadPlugin false
 <% end -%>
 #BaseDir "/var/lib/collectd"
 #PluginDir "/usr/lib/collectd"
-<% if @typesdb and not @typesdb.empty? -%>
-TypesDB<% @typesdb.each do |path| -%> "<%= path %>"<% end %>
-<% end -%>
+Include "<%= scope['collectd::collectd_dir'] %>/typesdb.conf"
 <% if @write_queue_limit_high -%>
 WriteQueueLimitHigh <%= @write_queue_limit_high %>
 <% end -%>
diff --git a/templates/mysql-database.conf.erb b/templates/mysql-database.conf.erb
index 8d6ead3..41a931e 100644
--- a/templates/mysql-database.conf.erb
+++ b/templates/mysql-database.conf.erb
@@ -2,13 +2,21 @@
 
 <Plugin mysql>
   <Database "<%= @database %>">
+<%- if @host -%>
     Host "<%= @host %>"
+<%- end -%>
+<%- if @username -%>
     User "<%= @username %>"
+<%- end -%>
+<%- if @password -%>
     Password "<%= @password %>"
+<%- end -%>
+<%- if @port -%>
 <% if scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.0']) >= 0 -%>
     Port "<%= @port %>"
 <% else -%>
     Port <%= @port %>
+<%- end -%>
 <%- end -%>
     MasterStats <%= @masterstats %>
     SlaveStats <%= @slavestats %>
diff --git a/templates/plugin/amqp1.conf.epp b/templates/plugin/amqp1.conf.epp
index b7fac2d..fdf4498 100644
--- a/templates/plugin/amqp1.conf.epp
+++ b/templates/plugin/amqp1.conf.epp
@@ -8,6 +8,9 @@
 <% unless $::collectd::plugin::amqp1::retry_delay =~ Undef { -%>
     RetryDelay <%= $::collectd::plugin::amqp1::retry_delay %>
 <% } -%>
+<% unless $::collectd::plugin::amqp1::send_queue_limit =~ Undef { -%>
+    SendQueueLimit <%= $::collectd::plugin::amqp1::send_queue_limit %>
+<% } -%>
 <% $::collectd::plugin::amqp1::instances.keys.sort.each |$name| { -%>
     <Instance "<%= $name %>">
 <% $::collectd::plugin::amqp1::instances[$name].keys.sort.each |$key| { -%>
diff --git a/templates/plugin/dbi/database.conf.erb b/templates/plugin/dbi/database.conf.erb
index 6e7aed5..1fbe052 100644
--- a/templates/plugin/dbi/database.conf.erb
+++ b/templates/plugin/dbi/database.conf.erb
@@ -1,5 +1,8 @@
   <Database "<%= @databasename %>">
     Driver "<%= @driver %>"
+<% if @db_query_interval -%>    
+    Interval <%= @db_query_interval %>
+<% end -%>
 <% @driveroption.each do |key, value| -%>
     DriverOption "<%= key %>" "<%= value %>"
 <% end -%>
diff --git a/templates/plugin/dbi/query.conf.erb b/templates/plugin/dbi/query.conf.erb
index 56421fc..1cacef7 100644
--- a/templates/plugin/dbi/query.conf.erb
+++ b/templates/plugin/dbi/query.conf.erb
@@ -1,4 +1,4 @@
-  <Query <%= @name %>>
+  <Query "<%= @name %>">
     Statement "<%= @statement %>"
 <% if @minversion -%>
     MinVersion <%= @minversion %>
diff --git a/templates/plugin/dcpmm.conf.epp b/templates/plugin/dcpmm.conf.epp
new file mode 100644
index 0000000..af68593
--- /dev/null
+++ b/templates/plugin/dcpmm.conf.epp
@@ -0,0 +1,14 @@
+<Plugin dcpmm>
+<% if $collectd::plugin::dcpmm::interval { -%>
+  Interval <%= $collectd::plugin::dcpmm::interval %>
+<% } -%>
+<% unless $collectd::plugin::dcpmm::collect_health =~ Undef { -%>
+  CollectHealth <%= $collectd::plugin::dcpmm::collect_health %>
+<% } -%>
+<% unless $collectd::plugin::dcpmm::collect_perf_metrics =~ Undef { -%>
+  CollectPerfMetrics <%= $collectd::plugin::dcpmm::collect_perf_metrics %>
+<% } -%>
+<% unless $collectd::plugin::dcpmm::enable_dispatch_all =~ Undef { -%>
+  EnableDispatchAll <%= $collectd::plugin::dcpmm::enable_dispatch_all %>
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/dpdk_telemetry.conf.epp b/templates/plugin/dpdk_telemetry.conf.epp
new file mode 100644
index 0000000..7d9c528
--- /dev/null
+++ b/templates/plugin/dpdk_telemetry.conf.epp
@@ -0,0 +1,8 @@
+<Plugin dpdk_telemetry>
+<% if $collectd::plugin::dpdk_telemetry::client_socket_path { -%>
+  ClientSocketPath "<%= $collectd::plugin::dpdk_telemetry::client_socket_path %>"
+<% } -%>
+<% if $collectd::plugin::dpdk_telemetry::dpdk_socket_path { -%>
+  DpdkSocketPath "<%= $collectd::plugin::dpdk_telemetry::dpdk_socket_path %>"
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/load.conf.erb b/templates/plugin/load.conf.erb
index c4665ea..fa5f5b3 100644
--- a/templates/plugin/load.conf.erb
+++ b/templates/plugin/load.conf.erb
@@ -1,5 +1,10 @@
 <% if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.5']) >= 0) -%>
 <Plugin load>
+<% if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.9.0']) == 0) -%>
+  # ReportRelative is broken with collectd 5.9.0
+  # https://github.com/collectd/collectd/issues/3180
+<% else -%>
   ReportRelative <%= @report_relative %>
+<% end -%>
 </Plugin>
 <% end -%>
diff --git a/templates/plugin/logparser.conf.epp b/templates/plugin/logparser.conf.epp
new file mode 100644
index 0000000..01b04f8
--- /dev/null
+++ b/templates/plugin/logparser.conf.epp
@@ -0,0 +1,86 @@
+<%- | Optional $logfile = undef | -%>
+<Plugin logparser>
+<% $logfile.each |$file| { -%>
+<% $file.keys.sort.each |$key| { -%>
+  <Logfile "<%= $key %>">
+<% $file[$key].keys.sort.each |$value| { -%>
+<% if $value == 'firstfullread' { -%>
+    FirstFullRead <%= $file[$key][$value] %>
+<% } -%>
+<% if $value == 'message' { -%>
+<% $file[$key][$value].each |$message| { -%>
+<% $message.keys.sort.each |$messagekey| { -%>
+    <Message "<%= $messagekey %>">
+<% $message[$messagekey].keys.sort.each |$messagevalue| { -%>
+<% if $messagevalue == 'defaultplugininstance' { -%>
+      DefaultPluginInstance "<%= $message[$messagekey][$messagevalue] %>"
+<% } -%>
+<% if $messagevalue == 'defaultseverity' { -%>
+      DefaultType "<%= $message[$messagekey][$messagevalue] %>"
+<% } -%>
+<% if $messagevalue == 'defaulttype' { -%>
+      DefaultTypeInstance "<%= $message[$messagekey][$messagevalue] %>"
+<% } -%>
+<% if $messagevalue == 'defaulttypeinstance' { -%>
+      DefaultSeverity "<%= $message[$messagekey][$messagevalue] %>"
+<% } -%>
+<% if $messagevalue == 'match' { -%>
+<% $message[$messagekey][$messagevalue].each |$match| { -%>
+<% $match.keys.sort.each |$matchkey| { -%>
+      <Match "<%= $matchkey %>">
+<% $match[$matchkey].keys.sort.each |$matchvalue| { -%>
+<% if $matchvalue == 'regex' { -%>
+        Regex "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% if $matchvalue == 'submatchidx' { -%>
+        SubmatchIdx <%= $match[$matchkey][$matchvalue] %>
+<% } -%>
+<% if $matchvalue == 'excluderegex' { -%>
+        ExcludeRegex "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% if $matchvalue == 'ismandatory' { -%>
+<% if $match[$matchkey][$matchvalue] == true or $match[$matchkey][$matchvalue] == false { -%>
+        IsMandatory <%= $match[$matchkey][$matchvalue] %>
+<% } else { -%>
+        IsMandatory "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% } -%>
+<% if $matchvalue == 'severity' { -%>
+        Severity "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% if $matchvalue == 'plugininstance' { -%>
+<% if $match[$matchkey][$matchvalue] == true or $match[$matchkey][$matchvalue] == false { -%>
+        PluginInstance <%= $match[$matchkey][$matchvalue] %>
+<% } else { -%>
+        PluginInstance "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% } -%>
+<% if $matchvalue == 'type' { -%>
+<% if $match[$matchkey][$matchvalue] == true or $match[$matchkey][$matchvalue] == false { -%>
+        Type <%= $match[$matchkey][$matchvalue] %>
+<% } else { -%>
+        Type "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% } -%>
+<% if $matchvalue == 'typeinstance' { -%>
+<% if $match[$matchkey][$matchvalue] == true or $match[$matchkey][$matchvalue] == false { -%>
+        TypeInstance <%= $match[$matchkey][$matchvalue] %>
+<% } else { -%>
+        TypeInstance "<%= $match[$matchkey][$matchvalue] %>"
+<% } -%>
+<% } -%>
+<% } -%>
+      </Match>
+<% } -%>
+<% } -%>
+<% } -%>
+<% } -%>
+    </Message>
+<% } -%>
+<% } -%>
+<% } -%>
+<% } -%>
+  </Logfile>
+<% } -%>
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/mcelog.conf.epp b/templates/plugin/mcelog.conf.epp
new file mode 100644
index 0000000..4cfa4c7
--- /dev/null
+++ b/templates/plugin/mcelog.conf.epp
@@ -0,0 +1,20 @@
+<%- | Optional[String] $mceloglogfile = undef,
+      Optional $memory   = undef,
+| -%>
+<Plugin mcelog>
+<% if $mceloglogfile { %>
+McelogLogfile "<%= $mceloglogfile %>"
+<% } -%>
+<% if $collectd::plugin::mcelog::memory { %>
+<Memory>
+<% $collectd::plugin::mcelog::memory.keys.sort.each |$key| { -%>
+<% if $key == 'mcelogclientsocket' { -%>
+McelogClientSocket "<%= $collectd::plugin::mcelog::memory[$key] %>"
+<% } -%>
+<% if $key == 'persistentnotification' { -%>
+PersistentNotification <%= $collectd::plugin::mcelog::memory[$key] %>
+<% } -%>
+<% } -%>
+</Memory>
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/ovs_stats.conf.erb b/templates/plugin/ovs_stats.conf.erb
index 399021d..27b4415 100644
--- a/templates/plugin/ovs_stats.conf.erb
+++ b/templates/plugin/ovs_stats.conf.erb
@@ -1,6 +1,6 @@
 <Plugin "ovs_stats">
 <%- if @port %>
-  Port <%= @port %>
+  Port "<%= @port %>"
 <%- end -%>
 <%- if @address %>
   Address "<%= @address %>"
diff --git a/templates/plugin/pcie_errors.conf.epp b/templates/plugin/pcie_errors.conf.epp
new file mode 100644
index 0000000..fa33578
--- /dev/null
+++ b/templates/plugin/pcie_errors.conf.epp
@@ -0,0 +1,14 @@
+<Plugin pcie_errors>
+<% if $collectd::plugin::pcie_errors::source { -%>
+  Source "<%= $collectd::plugin::pcie_errors::source %>"
+<% } -%>
+<% if $collectd::plugin::pcie_errors::access_dir { -%>
+  AccessDir "<%= $collectd::plugin::pcie_errors::access_dir %>"
+<% } -%>
+<% unless $collectd::plugin::pcie_errors::report_masked =~ Undef { -%>
+  ReportMasked <%= $collectd::plugin::pcie_errors::report_masked %>
+<% } -%>
+<% unless $collectd::plugin::pcie_errors::persistent_notifications =~ Undef { -%>
+#  PersistentNotifications <%= $collectd::plugin::pcie_errors::persistent_notifications %>
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/postgresql/database.conf.erb b/templates/plugin/postgresql/database.conf.erb
index 4e15f57..a26af8c 100644
--- a/templates/plugin/postgresql/database.conf.erb
+++ b/templates/plugin/postgresql/database.conf.erb
@@ -12,7 +12,7 @@
     Password "<%= @password %>"
 <% end -%>
 <% if @interval -%>
-    Interval <%= @interval %>
+    <% if @writer -%>Commit<% end -%>Interval <%= @interval %>
 <% end -%>
 <% if @instance -%>
     Instance "<%= @instance %>"
@@ -32,4 +32,4 @@
 <% @query.each do |query| -%>
     Query "<%= query %>"
 <% end -%>
-  </Database>
\ No newline at end of file
+  </Database>
diff --git a/templates/plugin/procevent.conf.epp b/templates/plugin/procevent.conf.epp
index 0b53e62..6fd88e9 100644
--- a/templates/plugin/procevent.conf.epp
+++ b/templates/plugin/procevent.conf.epp
@@ -2,8 +2,8 @@
 <% unless $::collectd::plugin::procevent::process  =~ Undef { -%>
     Process "<%= $::collectd::plugin::procevent::process %>"
 <% } -%>
-<% unless $::collectd::plugin::procevent::regex_process  =~ Undef { -%>
-    RegexProcess "<%= $::collectd::plugin::procevent::regex_process %>"
+<% unless $::collectd::plugin::procevent::process_regex  =~ Undef { -%>
+    ProcessRegex "<%= $::collectd::plugin::procevent::process_regex %>"
 <% } -%>
 <% unless $::collectd::plugin::procevent::buffer_length =~ Undef { -%>
     BufferLength <%= $::collectd::plugin::procevent::buffer_length %>
diff --git a/templates/plugin/protocols.conf.erb b/templates/plugin/protocols.conf.erb
index acdee21..90cad6a 100644
--- a/templates/plugin/protocols.conf.erb
+++ b/templates/plugin/protocols.conf.erb
@@ -1,16 +1,16 @@
 <% if @values -%>
 <Plugin "protocols">
-<% 
+<%
 if @values
-  @values.each do |value| 
+  @values.each do |value|
 -%>
   Value "<%= value %>"
 <%
   end
 end
 -%>
-<% if @ignore_selected != nil -%>
-  IgnoreSelected <%= @ignore_selected %>
+<% unless @ignoreselected == nil -%>
+  IgnoreSelected <%= @ignoreselected %>
 <% end -%>
 </Plugin>
 <% end -%>
diff --git a/templates/plugin/python/module.conf_config.epp b/templates/plugin/python/module.conf_config.epp
index 1190ba1..3d79a60 100644
--- a/templates/plugin/python/module.conf_config.epp
+++ b/templates/plugin/python/module.conf_config.epp
@@ -8,8 +8,8 @@
   <%- $configuration.each |$key,$value| { -%>
     <%- if ($value =~ Numeric or $value =~ Boolean) { -%>
     <%= $key %> <%= $value %>
-    <%- } elsif $value =~ Array { %>
-      <%# Render arrays as key "Value 1" "Value2" 22 false #%>
+    <%- } elsif $value =~ Array { -%>
+      <%#- Render arrays as key "Value 1" "Value2" 22 false -%>
     <%= $key -%> 
       <%- $value.each |$v| { -%>
         <%- if ($v =~ Boolean or $v =~ Numeric) { -%>
diff --git a/templates/plugin/snmp_agent.conf.epp b/templates/plugin/snmp_agent.conf.epp
new file mode 100644
index 0000000..13b1e48
--- /dev/null
+++ b/templates/plugin/snmp_agent.conf.epp
@@ -0,0 +1,108 @@
+<%- | Optional $data = undef,
+      Optional $table = undef,
+ | -%>
+ # THIS FILE IS MANAGED BY PUPPET
+<Plugin snmp_agent>
+<% if $data { -%>
+<% $data.keys.sort.each |$key| { -%>
+<Data "<%= $key %>">
+<% $data[$key].each |$keyvalue, $value| { -%>
+<% if $keyvalue == 'plugin' { -%>
+Plugin "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'oids' { -%>
+OIDs "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'type' { -%>
+Type "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'typeinstance' { -%>
+TypeInstance "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'scale' { -%>
+Scale "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'shift' { -%>
+Shift "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'plugininstance' { -%>
+PluginInstance "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'indexkey' { -%>
+<IndexKey>
+<% $value.keys.sort.each |$indexkey| { -%>
+<% if $indexkey == 'source' { -%>
+Source "<%= $value[$indexkey] %>"
+<% } -%>
+<% if $indexkey == 'regex' { -%>
+Regex "<%= $value[$indexkey] %>"
+<% } -%>
+<% if $indexkey == 'group' { -%>
+Group "<%= $value[$indexkey] %>"
+<% } -%>
+<% } -%>
+</IndexKey>
+<% } -%>
+<% } -%>
+</Data>
+<% } -%>
+<% } -%>
+<% if $table { -%>
+<% $table.keys.sort.each |$key| { -%>
+<Table "<%= $key %>">
+<% $table[$key].each |$keyvalue, $value| { -%>
+<% if $keyvalue == 'indexoid' { -%>
+IndexOID "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'sizeoid' { -%>
+SizeOID "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'data' { -%>
+<% $value.keys.sort.each |$key| { -%>
+<Data "<%= $key %>">
+<% $value[$key].each |$keyvalue, $value| { -%>
+<% if $keyvalue == 'plugin' { -%>
+Plugin "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'oids' { -%>
+OIDs "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'type' { -%>
+Type "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'typeinstance' { -%>
+TypeInstance "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'scale' { -%>
+Scale "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'shift' { -%>
+Shift "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'plugininstance' { -%>
+PluginInstance "<%= $value %>"
+<% } -%>
+<% if $keyvalue == 'indexkey' { -%>
+<IndexKey>
+<% $value.keys.sort.each |$indexkey| { -%>
+<% if $indexkey == 'source' { -%>
+Source "<%= $value[$indexkey] %>"
+<% } -%>
+<% if $indexkey == 'regex' { -%>
+Regex "<%= $value[$indexkey] %>"
+<% } -%>
+<% if $indexkey == 'group' { -%>
+Group "<%= $value[$indexkey] %>"
+<% } -%>
+<% } -%>
+</IndexKey>
+<% } -%>
+<% } -%>
+</Data>
+<% } -%>
+<% } -%>
+<% } -%>
+</Table>
+<% } -%>
+<% } -%>
+</Plugin>
diff --git a/templates/plugin/virt.conf.erb b/templates/plugin/virt.conf.erb
index cf2d78a..526664b 100644
--- a/templates/plugin/virt.conf.erb
+++ b/templates/plugin/virt.conf.erb
@@ -19,8 +19,13 @@
 <% if @ignore_selected != nil -%>
   IgnoreSelected <%= @ignore_selected %>
 <% end -%>
+<%- if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.5']) >= 0) -%>
+<% if @plugin_instance_format != nil -%>
+  PluginInstanceFormat <%= @plugin_instance_format %>
+<% end -%>
+<%- end -%>
 <% if @hostname_format != nil -%>
-  HostnameFormat "<%= @hostname_format %>"
+  HostnameFormat <%= @hostname_format %>
 <% end -%>
 <% if @extra_stats != nil -%>
   ExtraStats "<%= @extra_stats %>"
diff --git a/templates/plugin/write_graphite/carbon.conf.erb b/templates/plugin/write_graphite/carbon.conf.erb
index 6358c95..87fbfa5 100644
--- a/templates/plugin/write_graphite/carbon.conf.erb
+++ b/templates/plugin/write_graphite/carbon.conf.erb
@@ -17,6 +17,12 @@
   LogSendErrors <%= @logsenderrors %>
   Protocol "<%= @protocol %>"
 <%- end -%>
+<%- if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.6']) >= 0) -%>
+  ReconnectInterval <%= @reconnectinterval %>
+<%- end -%>
+<%- if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.9']) >= 0) -%>
+  ReverseHost <%= @reversehost %>
+<%- end -%>
 <%- if scope.lookupvar('collectd::collectd_version_real') and (scope.function_versioncmp([scope.lookupvar('collectd::collectd_version_real'), '5.3']) >= 0) -%>
 </Node>
 <%- else -%>
diff --git a/templates/plugin/write_http.conf.epp b/templates/plugin/write_http.conf.epp
index b811f41..0027661 100644
--- a/templates/plugin/write_http.conf.epp
+++ b/templates/plugin/write_http.conf.epp
@@ -28,6 +28,12 @@
 <% if $values['storerates'] { -%>
     StoreRates <%= $values['storerates'] %>
 <% } -%>
+<% if $values['header'] { -%>
+    Header "<%= $values['header'] %>"
+<% } -%>
+<% if $values['metrics'] { -%>
+    Metrics <%= $values['metrics'] %>
+<% } -%>
 <% if $values['url'] { -%>
   </Node>
 <% } else { -%>
diff --git a/templates/plugin/write_kafka.conf.erb b/templates/plugin/write_kafka.conf.erb
index ec17a20..af28418 100644
--- a/templates/plugin/write_kafka.conf.erb
+++ b/templates/plugin/write_kafka.conf.erb
@@ -1,6 +1,9 @@
 LoadPlugin "write_kafka"
 <Plugin write_kafka>
   Property "metadata.broker.list" "<%= @kafka_broker %>"
+  <% @properties.each do |name,value| -%>
+  Property "<%= name %>" "<%= value %>"
+  <% end -%>
   <% @topics.each do |name,values| -%>
   <Topic "<%= name %>">
     <% if values['format'] -%>
@@ -8,4 +11,7 @@ LoadPlugin "write_kafka"
     <% end -%>
   </Topic>
   <% end -%>
+  <% @meta.each do |name,value| -%>
+  Meta "<%= name %>" "<%= value %>"
+  <% end -%>
 </Plugin>
diff --git a/templates/typesdb.conf.erb b/templates/typesdb.conf.erb
new file mode 100644
index 0000000..ea96238
--- /dev/null
+++ b/templates/typesdb.conf.erb
@@ -0,0 +1,3 @@
+<% if @typesdb and not @typesdb.empty? -%>
+TypesDB<% @typesdb.each do |path| -%> "<%= path %>"<% end %>
+<% end -%>
diff --git a/types/logparser/logfile.pp b/types/logparser/logfile.pp
new file mode 100644
index 0000000..2148f67
--- /dev/null
+++ b/types/logparser/logfile.pp
@@ -0,0 +1,5 @@
+#https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+type Collectd::LOGPARSER::Logfile = Struct[{
+  'firstfullread' => Boolean,
+  'message' => Array[Hash[String[1],Collectd::LOGPARSER::Message]]
+}]
diff --git a/types/logparser/match.pp b/types/logparser/match.pp
new file mode 100644
index 0000000..0428234
--- /dev/null
+++ b/types/logparser/match.pp
@@ -0,0 +1,11 @@
+#https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+type Collectd::LOGPARSER::Match = Struct[{
+  'regex' => String,
+  Optional['submatchidx'] => Integer,
+  Optional['excluderegex'] => String,
+  Optional['ismandatory'] => Variant[Boolean, String],
+  Optional['severity'] => String,
+  Optional['plugininstance'] => Variant[Boolean, String],
+  Optional['type'] => Variant[Boolean, String],
+  Optional['typeinstance'] => Variant[Boolean, String],
+}]
diff --git a/types/logparser/message.pp b/types/logparser/message.pp
new file mode 100644
index 0000000..12efe2e
--- /dev/null
+++ b/types/logparser/message.pp
@@ -0,0 +1,8 @@
+#https://wiki.opnfv.org/display/fastpath/Logparser+plugin+HLD
+type Collectd::LOGPARSER::Message = Struct[{
+  Optional['defaultplugininstance'] => String,
+  Optional['defaulttype'] => String,
+  Optional['defaulttypeinstance'] => String,
+  Optional['defaultseverity'] => String,
+  Optional['match'] => Array[Hash[String[1],Collectd::LOGPARSER::Match]]
+}]
diff --git a/types/mcelog/memory.pp b/types/mcelog/memory.pp
new file mode 100644
index 0000000..360c9a3
--- /dev/null
+++ b/types/mcelog/memory.pp
@@ -0,0 +1,5 @@
+# https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_mcelog
+type Collectd::MCELOG::Memory = Struct[{
+  NotUndef['mcelogclientsocket'] => String[1],
+  NotUndef['persistentnotification'] => Boolean,
+}]
diff --git a/types/redis/node.pp b/types/redis/node.pp
index 0be8c06..2b1968b 100644
--- a/types/redis/node.pp
+++ b/types/redis/node.pp
@@ -1,2 +1,2 @@
 #
-type Collectd::Redis::Node = Struct[{Optional['host'] => String[1], Optional['port'] => Variant[Integer[0, 65535], String[1]], Optional['password'] => String[1], Optional['timeout'] => Integer[0], Optional['queries'] => Hash[String[1], Hash[String[1], String[1]]]}]
+type Collectd::Redis::Node = Struct[{Optional['host'] => String[1], Optional['port'] => Variant[Stdlib::Port, String[1]], Optional['password'] => String[1], Optional['timeout'] => Integer[0], Optional['queries'] => Hash[String[1], Hash[String[1], String[1]]]}]
diff --git a/types/snmp_agent/data.pp b/types/snmp_agent/data.pp
new file mode 100644
index 0000000..0f88859
--- /dev/null
+++ b/types/snmp_agent/data.pp
@@ -0,0 +1,11 @@
+# https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+type Collectd::SNMP_AGENT::Data = Struct[{
+  'plugin' => String,
+  'oids' => String,
+  Optional['type'] => String,
+  Optional['typeinstance'] => String,
+  Optional['scale'] => String,
+  Optional['shift'] => String,
+  Optional['indexkey'] => Collectd::SNMP_AGENT::IndexKey,
+  Optional['plugininstance'] => String,
+}]
diff --git a/types/snmp_agent/indexkey.pp b/types/snmp_agent/indexkey.pp
new file mode 100644
index 0000000..111a3d3
--- /dev/null
+++ b/types/snmp_agent/indexkey.pp
@@ -0,0 +1,6 @@
+# https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+type Collectd::SNMP_AGENT::IndexKey = Struct[
+  'source' => String,
+  Optional['regex'] => String,
+  Optional['group'] => String,
+]
diff --git a/types/snmp_agent/table.pp b/types/snmp_agent/table.pp
new file mode 100644
index 0000000..76b1534
--- /dev/null
+++ b/types/snmp_agent/table.pp
@@ -0,0 +1,6 @@
+# https://wiki.opnfv.org/display/fastpath/SNMP+Agent+HLD
+type Collectd::SNMP_AGENT::Table = Struct[{
+  Optional['indexoid'] => String,
+  Optional['sizeoid'] => String,
+  Optional['data'] => Hash[String[1], Collectd::SNMP_AGENT::Data]
+}]

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/dcpmm.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/dpdk_telemetry.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/logparser.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/mcelog.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/pcie_errors.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/manifests/plugin/snmp_agent.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/class_plugin_disk_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/class_plugin_load_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/class_plugin_write_http_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/define_plugin_processes_process_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/define_plugin_processes_processmatch_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_dcpmm_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_logparser_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_mcelog_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_pcie_errors_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/classes/collectd_plugin_snmp_agent_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/fixtures/plugins/logparser.conf.default
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/dcpmm.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/dpdk_telemetry.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/logparser.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/mcelog.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/pcie_errors.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/plugin/snmp_agent.conf.epp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/templates/typesdb.conf.erb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/logparser/logfile.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/logparser/match.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/logparser/message.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/mcelog/memory.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/snmp_agent/data.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/snmp_agent/indexkey.pp
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/types/snmp_agent/table.pp

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/class_plugin_python_spec.rb
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/archlinux-2-x64.yml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/amazonlinux-2016091.yml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/image_templates.yaml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/rhel-73-x64.yml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/sles-12sp2-x64.yml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/ubuntu-1604-x64.yml
-rw-r--r--  root/root   /usr/share/puppet/modules.available/voxpupuli-collectd/spec/acceptance/nodesets/ec2/windows-2016-base-x64.yml

No differences were encountered in the control files

More details

Full run details