From 51ea4a1e22e23c83f16b578cdd2030185ee1e5c6 Mon Sep 17 00:00:00 2001 From: Piotr Rabiega Date: Fri, 7 Feb 2020 13:51:16 +0100 Subject: [PATCH 1/7] Add dpdk_telemetry plugin --- README.md | 10 +++ manifests/plugin/dpdk_telemetry.pp | 28 +++++++ .../collectd_plugin_dpdk_telemetry_spec.rb | 81 +++++++++++++++++++ templates/plugin/dpdk_telemetry.conf.epp | 8 ++ 4 files changed, 127 insertions(+) create mode 100644 manifests/plugin/dpdk_telemetry.pp create mode 100644 spec/classes/collectd_plugin_dpdk_telemetry_spec.rb create mode 100644 templates/plugin/dpdk_telemetry.conf.epp diff --git a/README.md b/README.md index 6b5889db3..4cade6381 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ documentation for each plugin for configurable attributes. * `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) @@ -585,6 +586,15 @@ 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 diff --git a/manifests/plugin/dpdk_telemetry.pp b/manifests/plugin/dpdk_telemetry.pp new file mode 100644 index 000000000..9232b3279 --- /dev/null +++ b/manifests/plugin/dpdk_telemetry.pp @@ -0,0 +1,28 @@ +# 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/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb b/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb new file mode 100644 index 000000000..98ad85ffb --- /dev/null +++ b/spec/classes/collectd_plugin_dpdk_telemetry_spec.rb @@ -0,0 +1,81 @@ +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 = < + Globals false + + + + ClientSocketPath "/var/run/.client" + DpdkSocketPath "/var/run/dpdk/rte/telemetry" + + +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/templates/plugin/dpdk_telemetry.conf.epp b/templates/plugin/dpdk_telemetry.conf.epp new file mode 100644 index 000000000..7d9c52875 --- /dev/null +++ b/templates/plugin/dpdk_telemetry.conf.epp @@ -0,0 +1,8 @@ + +<% 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 %>" +<% } -%> + From 35b7811b41e6e19f1fe64b2da6073e4510127189 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 25 Feb 2020 09:46:41 +0100 Subject: [PATCH 2/7] [blacksmith] Bump version to 11.2.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 3f729f103..891d4a991 100644 --- a/metadata.json +++ b/metadata.json @@ -58,7 +58,7 @@ } ], "name": "puppet-collectd", - "version": "11.2.0", + "version": "11.2.1-rc0", "source": "https://github.com/voxpupuli/puppet-collectd", "author": "Vox Pupuli", "license": "Apache-2.0", From 63f9ea2d5651959b8677742f7cefd879332cdfb2 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Mon, 9 Mar 2020 13:38:26 +0100 Subject: [PATCH 3/7] Require puppet-epel over stahnma-epel stahnma-epel has now migrated to VoxPupuli name space. Also in particular the `puppet-epel` version is requirment to work with CentOS 8. --- .fixtures.yml | 2 +- metadata.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.fixtures.yml b/.fixtures.yml index 825553221..641e0a835 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -3,7 +3,7 @@ fixtures: 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/stahnma/puppet-module-epel.git + epel: https://github.com/voxpupuli/puppet-epel.git yumrepo_core: repo: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git puppet_version: ">= 6.0.0" diff --git a/metadata.json b/metadata.json index 891d4a991..b9d33f843 100644 --- a/metadata.json +++ b/metadata.json @@ -84,8 +84,8 @@ "version_requirement": ">= 4.25.0 < 7.0.0" }, { - "name": "stahnma-epel", - "version_requirement": ">= 1.2.2 < 2.0.0" + "name": "puppet-epel", + "version_requirement": ">= 3.0.0 < 4.0.0" }, { "name": "puppetlabs-python_task_helper", From 672452018abefde44f18de9cb75a3102e0745f61 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Fri, 6 Mar 2020 09:31:23 +0100 Subject: [PATCH 4/7] Add CentOS 8 support The main differences for CentOS 8 are: * There is now a new collectd-utils package containing collectdctl * collectd-python is now a seperate sub package * python is python3. * pip command is now pip3 * The rabbitmq plugin no longer works due to lack of python3 support The python_dir fact will fall back to `/usr/libexec/platform-python` if `python3` does not exist on the path. This is the python that collectd is built against and significantly requires. Note that setting `collectd::ci_package_repo` true will currently result in yum being configured with a non existant repo since https://pkg.ci.collectd.org/rpm/ does not exist for 8. https://github.com/collectd/collectd-ci/issues/35 --- .sync.yml | 1 + .travis.yml | 8 ++ README.md | 2 + lib/facter/python_dir.rb | 2 + manifests/params.pp | 5 +- manifests/plugin/cuda.pp | 31 ++++- manifests/plugin/iscdhcp.pp | 32 ++++- manifests/plugin/python.pp | 8 +- manifests/plugin/rabbitmq.pp | 4 + metadata.json | 9 +- spec/acceptance/class_plugin_python_spec.rb | 87 ++++++++---- spec/acceptance/class_spec.rb | 10 +- spec/acceptance/curl_json_spec.rb | 3 + spec/classes/collectd_plugin_rabbitmq_spec.rb | 125 +++++++++++------- spec/spec_helper_acceptance.rb | 5 - spec/spec_helper_methods.rb | 6 +- 16 files changed, 235 insertions(+), 103 deletions(-) diff --git a/.sync.yml b/.sync.yml index 12215f5ca..ff751c806 100644 --- a/.sync.yml +++ b/.sync.yml @@ -4,6 +4,7 @@ - set: ubuntu1604-64 - set: ubuntu1804-64 - set: centos7-64 + - set: centos8-64 - set: debian8-64 secure: "FAK3Izs5bSZyblGvcFnGWm0exZV5+v9pbwfRDD2oihWxX3U3pArGW+3XcwcJfLQgrUYBsOTmHC8yPjlgTBYeIt/5pvg9X+3jwNgeto6kozpI/nvAq4NtcHhzxRejuPELhFYeXZ3hEw0w+v/ZRo2cNLwI0LLpiWEDvCMZN1CJ2RY=" spec/spec_helper.rb: diff --git a/.travis.yml b/.travis.yml index 391701cc4..a1c8dec16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,6 +46,14 @@ matrix: bundler_args: --without development release env: PUPPET_INSTALL_TYPE=agent 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_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=centos8-64 BEAKER_HYPERVISOR=docker CHECK=beaker + services: docker + - rvm: 2.5.3 + bundler_args: --without development release + env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=centos8-64 BEAKER_HYPERVISOR=docker CHECK=beaker + services: docker - rvm: 2.5.3 bundler_args: --without development release env: PUPPET_INSTALL_TYPE=agent BEAKER_PUPPET_COLLECTION=puppet5 BEAKER_debug=true BEAKER_setfile=debian8-64 BEAKER_HYPERVISOR=docker CHECK=beaker diff --git a/README.md b/README.md index 4cade6381..c78dcafb2 100644 --- a/README.md +++ b/README.md @@ -1622,6 +1622,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 diff --git a/lib/facter/python_dir.rb b/lib/facter/python_dir.rb index c6beaf66b..1101513ac 100644 --- a/lib/facter/python_dir.rb +++ b/lib/facter/python_dir.rb @@ -16,6 +16,8 @@ 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/manifests/params.pp b/manifests/params.pp index a97a83d38..8e3fc53a1 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -71,7 +71,10 @@ $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/cuda.pp b/manifests/plugin/cuda.pp index 6d7ad9a9e..6ffc0e5ee 100644 --- a/manifests/plugin/cuda.pp +++ b/manifests/plugin/cuda.pp @@ -12,28 +12,45 @@ # @param provider_proxy Optional[String] Proxy for provider. Default: undef class collectd::plugin::cuda ( Optional[String] $ensure = 'present', - Optional[Boolean] $manage_package = undef, + Optional[Boolean] $manage_package = undef, Optional[String] $package_name = 'collectd-cuda', - Optional[String] $package_provider = 'pip', + Optional[String] $package_provider = undef, Optional[String] $provider_proxy = undef, ) { include collectd $_manage_package = pick($manage_package, $collectd::manage_package) + if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + $_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'] { + Package[$_python_pip_package] { require => Class['::epel'], } } @@ -49,7 +66,7 @@ package { $package_name: ensure => $ensure, - provider => $package_provider, + provider => $_package_provider, install_options => $install_options, } diff --git a/manifests/plugin/iscdhcp.pp b/manifests/plugin/iscdhcp.pp index 78eafbbb1..626842dde 100644 --- a/manifests/plugin/iscdhcp.pp +++ b/manifests/plugin/iscdhcp.pp @@ -11,28 +11,46 @@ # @param provider_proxy Optional[String] Proxy for provider. Default: undef class collectd::plugin::iscdhcp ( Optional[String] $ensure = 'present', - Optional[Boolean] $manage_package = undef, + Optional[Boolean] $manage_package = undef, Optional[String] $package_name = 'collectd-iscdhcp', - Optional[String] $package_provider = 'pip', + Optional[String] $package_provider = undef, Optional[String] $provider_proxy = undef, ) { include collectd $_manage_package = pick($manage_package, $collectd::manage_package) + if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + $_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'] { + Package[$_python_pip_package] { require => Class['::epel'], } } @@ -48,7 +66,7 @@ package { $package_name: ensure => $ensure, - provider => $package_provider, + provider => $_package_provider, install_options => $install_options, } diff --git a/manifests/plugin/python.pp b/manifests/plugin/python.pp index 4487dd590..9019b02ec 100644 --- a/manifests/plugin/python.pp +++ b/manifests/plugin/python.pp @@ -32,11 +32,17 @@ $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/rabbitmq.pp b/manifests/plugin/rabbitmq.pp index 368176cfc..7e4252872 100644 --- a/manifests/plugin/rabbitmq.pp +++ b/manifests/plugin/rabbitmq.pp @@ -61,6 +61,10 @@ ) { include collectd + if $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'],'8') >= 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' diff --git a/metadata.json b/metadata.json index b9d33f843..02ea1518f 100644 --- a/metadata.json +++ b/metadata.json @@ -3,19 +3,22 @@ { "operatingsystem": "RedHat", "operatingsystemrelease": [ - "7" + "7", + "8" ] }, { "operatingsystem": "CentOS", "operatingsystemrelease": [ - "7" + "7", + "8" ] }, { "operatingsystem": "OracleLinux", "operatingsystemrelease": [ - "7" + "7", + "8" ] }, { diff --git a/spec/acceptance/class_plugin_python_spec.rb b/spec/acceptance/class_plugin_python_spec.rb index 5d486440b..e2b2afb34 100644 --- a/spec/acceptance/class_plugin_python_spec.rb +++ b/spec/acceptance/class_plugin_python_spec.rb @@ -7,6 +7,8 @@ pp = <<-EOS class{'collectd::plugin::python': } + # Enable one write plugin to make logs quieter + class { 'collectd::plugin::csv':} EOS # Run 3 times since the collectd_version # fact is impossible until collectd is @@ -22,39 +24,48 @@ end end - context 'trivial module' do + context 'trivial pip module connect-time' do it 'works idempotently with no errors' do pp = <<-EOS - if $facts['os']['family'] == 'Debian' { + if $facts['os']['family'] == 'Debian' or ( $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' ) { # for collectdctl command package{'collectd-utils': - ensure => present, + ensure => present, } } - package{'python-pip': + if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + $_python_pip_package = 'python3-pip' + $_pip_provider = 'pip3' + } else { + $_python_pip_package = 'python-pip' + $_pip_provider = 'pip' + } + package{$_python_pip_package: ensure => present, } package{['collectd-connect-time']: - ensure => 'present', - provider => 'pip', - require => Package['python-pip'], - before => Service['collectd'], + ensure => 'present', + provider => $_pip_provider, + require => Package[$_python_pip_package], + before => Service['collectd'], } class{'collectd::plugin::python': - logtraces => true, - interactive => false, + logtraces => true, + interactive => false, modules => { 'collectd_connect_time' => { - config => [{'target' => 'google.de'}], - }, - }, + config => [{'target' => 'google.de'}], + }, + }, } class{'collectd::plugin::unixsock': - socketfile => '/var/run/collectd-sock', + socketfile => '/var/run/collectd-sock', + socketgroup => 'root', } EOS - # Run it twice and test for idempotency + # Run it twice or thrice and test for idempotency + apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) shell('sleep 10') @@ -75,39 +86,57 @@ if $facts['os']['family'] == 'Debian' { # for collectdctl command package{['collectd-utils','python-dbus']: - ensure => present, + ensure => present, } } - package{['git','python-pip']: + if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + $_python_pip_package = 'python3-pip' + $_pip_provider = 'pip3' + } else { + $_python_pip_package = 'python-pip' + $_pip_provider = 'pip' + } + + package{['git',$_python_pip_package]: ensure => present, - before => Package['collectd-systemd'], + before => Package['collectd-systemd'], + } + # Dependency on dbus for collectd-systemd installed with pip. + # https://github.com/mbachry/collectd-systemd/issues/11 + if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + package{'python3-dbus': + ensure => present, + } } + package{'collectd-systemd': - ensure => 'present', - provider => 'pip', - source => 'git+https://github.com/mbachry/collectd-systemd.git', - before => Service['collectd'], + ensure => 'present', + provider => $_pip_provider, + 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, + logtraces => true, + interactive => false, modules => { 'instanceA' => { - module => 'collectd_systemd', - config => [{'Service' => 'collectd'}], - }, + module => 'collectd_systemd', + config => [{'Service' => 'collectd'}], + }, 'instanceB' => { module => 'collectd_systemd', config => [{'Service' => 'sshd'}], - }, - }, + }, + }, } class{'collectd::plugin::unixsock': socketfile => '/var/run/collectd-sock', + socketgroup => 'root', } + class { 'collectd::plugin::csv':} EOS # Run it twice and test for idempotency diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index e4482ddba..5e36bf298 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -6,6 +6,8 @@ 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 +31,11 @@ class { '::collectd': } class { '::collectd::plugin::memory': } - class { '::collectd::plugin::rabbitmq': } + # rabbitmq plugin not ported to Python3 + unless $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { + class { '::collectd::plugin::rabbitmq': } + } + class { 'collectd::plugin::csv':} EOS # Run it twice and test for idempotency @@ -44,7 +50,7 @@ class { '::collectd::plugin::rabbitmq': } end end - if fact('osfamily') == 'RedHat' + if fact('osfamily') == 'RedHat' && fact('os.release.major') == '7' 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"' } diff --git a/spec/acceptance/curl_json_spec.rb b/spec/acceptance/curl_json_spec.rb index 247f1f3af..4b20aece0 100644 --- a/spec/acceptance/curl_json_spec.rb +++ b/spec/acceptance/curl_json_spec.rb @@ -17,6 +17,9 @@ }, } } + # 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/classes/collectd_plugin_rabbitmq_spec.rb b/spec/classes/collectd_plugin_rabbitmq_spec.rb index 9ce97265f..69a8f3b79 100644 --- a/spec/classes/collectd_plugin_rabbitmq_spec.rb +++ b/spec/classes/collectd_plugin_rabbitmq_spec.rb @@ -23,36 +23,41 @@ } 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 - - 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 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 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 '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"}) + case [facts[:os]['family'], facts[:os]['release']['major']] + when %w[RedHat 8] + 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 '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 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 '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"}) + end end end @@ -61,8 +66,13 @@ { 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] + 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 +81,13 @@ { 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] + 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 +96,13 @@ { 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] + 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 +111,13 @@ { 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] + 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 +127,13 @@ { 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] + 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,11 +154,16 @@ } 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] + 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 diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index fe6f8a8c0..761062375 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -13,10 +13,5 @@ c.before :suite do install_module install_module_dependencies - - hosts.each do |host| - # python is pre-requisite to the python_path fact. - host.install_package('python') - end end end diff --git a/spec/spec_helper_methods.rb b/spec/spec_helper_methods.rb index ffbb578b9..b078aec87 100644 --- a/spec/spec_helper_methods.rb +++ b/spec/spec_helper_methods.rb @@ -24,11 +24,11 @@ def all_supported_os_hash }, { 'operatingsystem' => 'CentOS', - 'operatingsystemrelease' => ['7'] + 'operatingsystemrelease' => %w[7 8] }, { 'operatingsystem' => 'Ubuntu', - 'operatingsystemrelease' => ['16.04', '18.04'] + 'operatingsystemrelease' => %w[16.04 18.04] }, { 'operatingsystem' => 'FreeBSD', @@ -46,7 +46,7 @@ def baseline_os_hash supported_os: [ { 'operatingsystem' => 'CentOS', - 'operatingsystemrelease' => ['7'] + 'operatingsystemrelease' => %w[7 8] } ] } From d4d70dd2f8190d81af820fd2a89fa323d029d784 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Tue, 10 Mar 2020 09:41:57 +0100 Subject: [PATCH 5/7] New utils parameter to install collectdctl On some operating systems `collectdctl`, `collectd-nagios` is contained in a seperate sub package, typically `collectd-utils` Setting `utils` to `true` will install this sub package if it exists for an operating system. --- manifests/init.pp | 7 +++++++ manifests/install.pp | 11 ++++++++++- manifests/params.pp | 1 + spec/acceptance/class_plugin_python_spec.rb | 13 +++++-------- spec/classes/collectd_init_spec.rb | 17 +++++++++++++++++ 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 0bab5ac94..f22f1964b 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,6 +42,7 @@ 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) diff --git a/manifests/install.pp b/manifests/install.pp index ed3522fd4..8efec4cef 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -1,4 +1,5 @@ -# +# @summary installs collectd +# @api private class collectd::install { assert_private() @@ -10,4 +11,12 @@ 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 8e3fc53a1..0cb76bef8 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -29,6 +29,7 @@ $plugin_conf_dir_mode = '0750' $ci_package_repo = undef $package_keyserver = 'keyserver.ubuntu.com' + $utils = false case $facts['kernel'] { 'OpenBSD': { $has_wordexp = false } diff --git a/spec/acceptance/class_plugin_python_spec.rb b/spec/acceptance/class_plugin_python_spec.rb index e2b2afb34..9fa857d91 100644 --- a/spec/acceptance/class_plugin_python_spec.rb +++ b/spec/acceptance/class_plugin_python_spec.rb @@ -27,12 +27,6 @@ class { 'collectd::plugin::csv':} context 'trivial pip module connect-time' do it 'works idempotently with no errors' do pp = <<-EOS - if $facts['os']['family'] == 'Debian' or ( $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' ) { - # for collectdctl command - package{'collectd-utils': - ensure => present, - } - } if $facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' { $_python_pip_package = 'python3-pip' $_pip_provider = 'pip3' @@ -49,6 +43,9 @@ class { 'collectd::plugin::csv':} require => Package[$_python_pip_package], before => Service['collectd'], } + class{'collectd': + utils => true, + } class{'collectd::plugin::python': logtraces => true, interactive => false, @@ -84,8 +81,7 @@ class { 'collectd::plugin::csv':} it 'works idempotently with no errors' do pp = <<-EOS if $facts['os']['family'] == 'Debian' { - # for collectdctl command - package{['collectd-utils','python-dbus']: + package{'python-dbus': ensure => present, } } @@ -116,6 +112,7 @@ class { 'collectd::plugin::csv':} before => Service['collectd'], } class{'collectd': + utils => true, typesdb => ['/usr/share/collectd/types.db'], } class{'collectd::plugin::python': diff --git a/spec/classes/collectd_init_spec.rb b/spec/classes/collectd_init_spec.rb index 17c067d26..692fb98dc 100644 --- a/spec/classes/collectd_init_spec.rb +++ b/spec/classes/collectd_init_spec.rb @@ -37,6 +37,23 @@ 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' + 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 } } From 3405355d5f3a7a22f5350b7557ee31beb90cdcb7 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Tue, 10 Mar 2020 14:59:04 +0100 Subject: [PATCH 6/7] write_http expected to be own package on CentOS 8 As of CentOS 8 the write_http is in its own subpackage so must be installed on CentOS 8. --- manifests/plugin/disk.pp | 2 +- manifests/plugin/write_http.pp | 25 +++++++++- spec/acceptance/class_plugin_disk_spec.rb | 46 +++++++++++++++++++ .../class_plugin_write_http_spec.rb | 30 ++++++++++++ spec/classes/collectd_plugin_disk_spec.rb | 4 +- .../collectd_plugin_write_http_spec.rb | 6 +++ 6 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 spec/acceptance/class_plugin_disk_spec.rb create mode 100644 spec/acceptance/class_plugin_write_http_spec.rb diff --git a/manifests/plugin/disk.pp b/manifests/plugin/disk.pp index 9fadec6ab..7aae1fec1 100644 --- a/manifests/plugin/disk.pp +++ b/manifests/plugin/disk.pp @@ -12,7 +12,7 @@ include collectd - if $facts['os']['family'] == 'RedHat' { + if $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'],'8') >= 0 { if $manage_package != undef { $_manage_package = $manage_package } else { diff --git a/manifests/plugin/write_http.pp b/manifests/plugin/write_http.pp index 49a6d4bea..2057cfd73 100644 --- a/manifests/plugin/write_http.pp +++ b/manifests/plugin/write_http.pp @@ -1,8 +1,14 @@ -# 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 @@ -11,6 +17,21 @@ 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/spec/acceptance/class_plugin_disk_spec.rb b/spec/acceptance/class_plugin_disk_spec.rb new file mode 100644 index 000000000..60f16ecfc --- /dev/null +++ b/spec/acceptance/class_plugin_disk_spec.rb @@ -0,0 +1,46 @@ +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. + if fact('os.family') == 'Redhat' && fact('os.release.major') == '8' + its(:stdout) { is_expected.to match %r{disk_time} } + end + 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 000000000..85c4ddd91 --- /dev/null +++ b/spec/acceptance/class_plugin_write_http_spec.rb @@ -0,0 +1,30 @@ +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/classes/collectd_plugin_disk_spec.rb b/spec/classes/collectd_plugin_disk_spec.rb index 071abd88a..5e795f843 100644 --- a/spec/classes/collectd_plugin_disk_spec.rb +++ b/spec/classes/collectd_plugin_disk_spec.rb @@ -108,8 +108,8 @@ end end - case facts[:os]['family'] - when 'RedHat' + 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') diff --git a/spec/classes/collectd_plugin_write_http_spec.rb b/spec/classes/collectd_plugin_write_http_spec.rb index ffad3768f..f8686a962 100644 --- a/spec/classes/collectd_plugin_write_http_spec.rb +++ b/spec/classes/collectd_plugin_write_http_spec.rb @@ -29,6 +29,12 @@ content: "#\ Generated by Puppet\n\n Globals false\n\n\n\n \n\n Format \"JSON\"\n \n\n\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 From 9a159ba79aee703081533e210f3d8118cd90b513 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Thu, 19 Mar 2020 17:16:58 +0100 Subject: [PATCH 7/7] Release 11.3.0 * Addition of CentOS 8 support. * New utils parameter --- CHANGELOG.md | 21 ++++++++++++++++++++- metadata.json | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fde6e3067..76a0b19b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,26 @@ 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. -## [v11.2.0](https://github.com/voxpupuli/puppet-collectd/tree/v11.2.0) (2020-02-24) +## [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) diff --git a/metadata.json b/metadata.json index 02ea1518f..33270eb14 100644 --- a/metadata.json +++ b/metadata.json @@ -61,7 +61,7 @@ } ], "name": "puppet-collectd", - "version": "11.2.1-rc0", + "version": "11.3.0", "source": "https://github.com/voxpupuli/puppet-collectd", "author": "Vox Pupuli", "license": "Apache-2.0",