Add changes for collectd libpod stats plugin

Because the libpod stats plugin is written in golang rather than C,
it is not included in the collectd rpm and therefor cannot be
configured by puppet-collectd and are made here instead. A simple
variable for enabling will suffice for now since the plugin does
not currently have any configuration options.

Change-Id: I575b6504e24f9d690e1b88b2a6bec296438ce747
Signed-off-by: pleimer <pfbleimer@gmail.com>
(cherry picked from commit 572740bcca)
This commit is contained in:
Paul Leimer 2020-09-28 15:11:29 -04:00 committed by pleimer
parent 4d5a9c05ae
commit 4309addb67
4 changed files with 140 additions and 1 deletions

View File

@ -214,6 +214,11 @@
# (Optional) Boolean. Set to true if sensubility should be executed by exec plugin.
# Defaults to false.
#
# [*enable_libpodstats*]
# (Optional) Boolean. Set to true if the collectd libpodstats plugin should be
# loaded
# Defaults to false.
#
class tripleo::profile::base::metrics::collectd (
$step = Integer(hiera('step')),
$enable_file_logging = false,
@ -259,10 +264,20 @@ class tripleo::profile::base::metrics::collectd (
$collectd_manage_repo = false,
$python_read_plugins = [],
$enable_sensubility = false,
$enable_libpodstats = false,
) {
if $step >= 3 {
if $enable_libpodstats {
$typesdb = ['/usr/share/collectd/types.db', '/usr/share/collectd/types.db.libpodstats']
include ::tripleo::profile::base::metrics::collectd::libpodstats
} else {
$typesdb = ['/usr/share/collectd/types.db']
}
class {'::collectd':
manage_repo => $collectd_manage_repo
manage_repo => $collectd_manage_repo,
typesdb => $typesdb,
}
class { '::collectd::plugin::python':

View File

@ -0,0 +1,70 @@
# Copyright 2018 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# == Define: tripleo::profile::base::metrics::collectd::sensubility
#
# This is used to create configuration file for collectd-sensubility plugin
#
# === Parameters
#
# [*ensure*]
# (Optional) String. Action to perform with sensubility plugin
# configuration file.
# Defaults to 'present'
#
# [*config_path*]
# (Optional) String. Path to configuration file.
# Defaults to /etc/collectd.d/libpodstats.conf
class tripleo::profile::base::metrics::collectd::libpodstats (
$ensure = 'present',
$config_path = '/etc/collectd.d/libpodstats.conf'
) {
$db = '/usr/share/collectd/types.db.libpodstats'
package { 'collectd-libpod-stats':
ensure => $ensure
}
::collectd::type { 'pod_cpu':
target => $db,
types => [{
ds_type => 'GAUGE',
min => 0,
max => 100.1,
ds_name => 'percent',
},
{
ds_type => 'DERIVE',
min => 0,
max => 'U',
ds_name => 'time',
}
]
}
::collectd::type { 'pod_memory':
target => $db,
ds_type => 'GAUGE',
min => 0,
max => 281474976710656,
ds_name => 'value',
}
file { $config_path:
ensure => $ensure,
mode => '0644',
content => template('tripleo/metrics/libpodstats.conf.epp'),
}
}

View File

@ -1,3 +1,4 @@
#
# Copyright (C) 2017 Red Hat, Inc.
#
@ -26,6 +27,15 @@ checks={\"standalone_check\":{\"command\":\"echo 'foobar'\",\"interval\":5}}
[amqp1]
"
libpodstats_typesdb = '/usr/share/collectd/types.db.libpodstats'
libpodstats_conf = '
LoadPlugin libpodstats
<Plugin "libpodstats">
</Plugin>
'
exec_cmd = <<-EOS
Exec \"collectd:collectd\" \"collectd-sensubility\"
EOS
@ -116,6 +126,46 @@ describe 'tripleo::profile::base::metrics::collectd' do
is_expected.to contain_file('/etc/collectd-sensubility.conf').with_content(sensubility_conf)
end
end
context 'with defaults and enabled libpodstats' do
let(:params) do
{ :step => 3,
:enable_libpodstats => true }
end
it '' do
is_expected.to compile.with_all_deps
is_expected.to contain_package('collectd-libpod-stats').with(:ensure => 'present')
is_expected.to contain_class('collectd').with({
:typesdb => [
'/usr/share/collectd/types.db',
libpodstats_typesdb,
],
})
is_expected.to contain_collectd__type('pod_memory').with({
:target => libpodstats_typesdb,
:ds_type => 'GAUGE',
:min => 0,
:max => 281474976710656,
:ds_name => 'value',
})
is_expected.to contain_collectd__type('pod_cpu').with({
:target => libpodstats_typesdb,
:types => [{
'ds_type' => 'GAUGE',
'min' => 0,
'max' => 100.1,
'ds_name' => 'percent',
},
{
'ds_type' => 'DERIVE',
'min' => 0,
'max' => 'U',
'ds_name' => 'time',
},
],
})
end
end
end
on_supported_os.each do |os, facts|

View File

@ -0,0 +1,4 @@
LoadPlugin libpodstats
<Plugin "libpodstats">
</Plugin>