From 572740bcca245abc834b015e28e2d45838b7668f Mon Sep 17 00:00:00 2001 From: pleimer Date: Mon, 28 Sep 2020 15:11:29 -0400 Subject: [PATCH] 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 (cherry picked from commit 1ae59bf3558bc8d19f46b535f31150629ccff09a) --- manifests/profile/base/metrics/collectd.pp | 19 ++++- .../base/metrics/collectd/libpodstats.pp | 70 +++++++++++++++++++ ...pleo_profile_base_metrics_collectd_spec.rb | 50 +++++++++++++ templates/metrics/libpodstats.conf.epp | 4 ++ 4 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 manifests/profile/base/metrics/collectd/libpodstats.pp create mode 100644 templates/metrics/libpodstats.conf.epp diff --git a/manifests/profile/base/metrics/collectd.pp b/manifests/profile/base/metrics/collectd.pp index cae61765c..460ea8166 100644 --- a/manifests/profile/base/metrics/collectd.pp +++ b/manifests/profile/base/metrics/collectd.pp @@ -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 { - class {'::collectd': - manage_repo => $collectd_manage_repo + 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, + typesdb => $typesdb, } class { 'collectd::plugin::python': diff --git a/manifests/profile/base/metrics/collectd/libpodstats.pp b/manifests/profile/base/metrics/collectd/libpodstats.pp new file mode 100644 index 000000000..95a9fc84e --- /dev/null +++ b/manifests/profile/base/metrics/collectd/libpodstats.pp @@ -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'), + } +} diff --git a/spec/classes/tripleo_profile_base_metrics_collectd_spec.rb b/spec/classes/tripleo_profile_base_metrics_collectd_spec.rb index dae3c3bdd..bbc3eaaa9 100644 --- a/spec/classes/tripleo_profile_base_metrics_collectd_spec.rb +++ b/spec/classes/tripleo_profile_base_metrics_collectd_spec.rb @@ -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 + + +' + 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| diff --git a/templates/metrics/libpodstats.conf.epp b/templates/metrics/libpodstats.conf.epp new file mode 100644 index 000000000..6a2a39592 --- /dev/null +++ b/templates/metrics/libpodstats.conf.epp @@ -0,0 +1,4 @@ + +LoadPlugin libpodstats + +