diff --git a/README.md b/README.md
index 008f184aa..06ba0236a 100644
--- a/README.md
+++ b/README.md
@@ -649,6 +649,8 @@ class { 'collectd::plugin::postgresql':
####Class: `collectd::plugin::processes`
+You can either specify processes / process matches at once:
+
```puppet
class { 'collectd::plugin::processes':
processes => ['process1', 'process2'],
@@ -671,6 +673,17 @@ class { 'collectd::plugin::protocols':
}
```
+Or define single processes / process matches:
+```puppet
+collectd::plugin::processes::process { 'collectd' : }
+```
+
+```puppet
+collectd::plugin::processes::processmatch { 'elasticsearch' :
+ regex => '.*java.*org.elasticsearch.bootstrap.Elasticsearch'
+}
+```
+
####Class: `collectd::plugin::python`
* `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 is owned by `root` (and `chmod 0750`). If you don't specify any `modulepaths` a default value for given distribution will be used.
diff --git a/lib/puppet/parser/functions/collectd_convert_processmatch.rb b/lib/puppet/parser/functions/collectd_convert_processmatch.rb
new file mode 100644
index 000000000..76dda7e3b
--- /dev/null
+++ b/lib/puppet/parser/functions/collectd_convert_processmatch.rb
@@ -0,0 +1,32 @@
+module Puppet::Parser::Functions
+
+ newfunction(:collectd_convert_processmatch, :type => :rvalue, :arity => 1, :doc => <<-ENDDOC
+ Converts the array from the old style to define process matches 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]+' } ]
+ will be converted to
+ { 'foo' => { 'regex' => '.*' } , 'bar' => { 'regex' => '[0-9]+' } }
+ ENDDOC
+ ) do |args|
+ if args.size != 1 then
+ raise(Puppet::ParseError, "convert_process_match_array(): Needs exactly one argument")
+ end
+
+ parray = args[0]
+ unless parray.is_a?(Array)
+ raise(Puppet::ParseError, "convert_process_match_array(): Needs an array as argument")
+ end
+
+ phash = Hash.new
+
+ parray.each do |p|
+ phash[p['name']] = { 'regex' => p['regex'] }
+ end
+
+ return phash
+ end
+end
+
diff --git a/manifests/plugin/processes.pp b/manifests/plugin/processes.pp
index 113d6e69a..9241f2bb6 100644
--- a/manifests/plugin/processes.pp
+++ b/manifests/plugin/processes.pp
@@ -1,6 +1,7 @@
# See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_processes
class collectd::plugin::processes (
$ensure = present,
+ $order = 10,
$interval = undef,
$processes = undef,
$process_matches = undef,
@@ -8,9 +9,47 @@
if $processes { validate_array($processes) }
if $process_matches { validate_array($process_matches) }
+ include collectd::params
+
collectd::plugin {'processes':
ensure => $ensure,
- content => template('collectd/plugin/processes.conf.erb'),
+ order => $order,
interval => $interval,
}
+
+ concat{"${collectd::params::plugin_conf_dir}/processes-config.conf":
+ ensure => $ensure,
+ mode => '0640',
+ owner => 'root',
+ group => $collectd::params::root_group,
+ notify => Service['collectd'],
+ ensure_newline => true,
+ }
+ concat::fragment{'collectd_plugin_processes_conf_header':
+ ensure => $ensure,
+ order => '00',
+ content => '',
+ target => "${collectd::params::plugin_conf_dir}/processes-config.conf",
+ }
+ concat::fragment{'collectd_plugin_processes_conf_footer':
+ ensure => $ensure,
+ order => '99',
+ content => '',
+ target => "${collectd::params::plugin_conf_dir}/processes-config.conf",
+ }
+
+
+ if $processes {
+ collectd::plugin::processes::process { $processes : }
+ }
+ if $process_matches {
+ $process_matches_resources = collectd_convert_processmatch($process_matches)
+ $defaults = { 'ensure' => $ensure }
+ create_resources(
+ collectd::plugin::processes::processmatch,
+ $process_matches_resources,
+ $defaults
+ )
+ }
+
}
diff --git a/manifests/plugin/processes/process.pp b/manifests/plugin/processes/process.pp
new file mode 100644
index 000000000..f2cac9035
--- /dev/null
+++ b/manifests/plugin/processes/process.pp
@@ -0,0 +1,16 @@
+define collectd::plugin::processes::process (
+ $process = $name,
+ $ensure = 'present'
+){
+
+ include collectd::plugin::processes
+ include collectd::params
+
+ concat::fragment{"collectd_plugin_processes_conf_process_${process}":
+ ensure => $ensure,
+ order => '50',
+ content => "Process \"${process}\"\n",
+ target => "${collectd::params::plugin_conf_dir}/processes-config.conf"
+ }
+
+}
diff --git a/manifests/plugin/processes/processmatch.pp b/manifests/plugin/processes/processmatch.pp
new file mode 100644
index 000000000..d524091ea
--- /dev/null
+++ b/manifests/plugin/processes/processmatch.pp
@@ -0,0 +1,17 @@
+define collectd::plugin::processes::processmatch (
+ $regex,
+ $ensure = 'present',
+ $matchname = $name
+){
+
+ include collectd::plugin::processes
+ include collectd::params
+
+ concat::fragment{"collectd_plugin_processes_conf_processmatch_${matchname}":
+ ensure => $ensure,
+ order => '51',
+ content => "ProcessMatch \"${matchname}\" \"${regex}\"\n",
+ target => "${collectd::params::plugin_conf_dir}/processes-config.conf"
+ }
+
+}
diff --git a/spec/classes/collectd_plugin_processes_spec.rb b/spec/classes/collectd_plugin_processes_spec.rb
index 74ffff7cf..31fc8ecbf 100644
--- a/spec/classes/collectd_plugin_processes_spec.rb
+++ b/spec/classes/collectd_plugin_processes_spec.rb
@@ -2,49 +2,44 @@
describe 'collectd::plugin::processes', :type => :class do
let :facts do
- {:osfamily => 'RedHat'}
+ {
+ :osfamily => 'Debian',
+ :concat_basedir => tmpfilename('collectd-processes'),
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :collectd_version => '5.0'
+ }
end
- context ':ensure => present, default params' do
- it 'Will create /etc/collectd.d/10-processes.conf' do
- should contain_file('processes.load').with({
- :ensure => 'present',
- :path => '/etc/collectd.d/10-processes.conf',
- :content => //,
- })
- end
- end
+ context ':ensure => present' do
+ context ':ensure => present and default parameters' do
- context ':ensure => present, specific params' do
- let :params do
- { :processes => [ 'process1'],
- :process_matches => [
- { 'name' => 'process-all',
- 'regex' => 'process[0-9]' }
- ],
- }
- end
+ it 'Will create /etc/collectd/conf.d/10-processes.conf to load the plugin' do
+ should contain_file('processes.load').with({
+ :ensure => 'present',
+ :path => '/etc/collectd/conf.d/10-processes.conf',
+ :content => /LoadPlugin processes/,
+ })
+ end
- it 'Will create /etc/collectd.d/10-processes.conf' do
- should contain_file('processes.load').with({
- :ensure => 'present',
- :path => '/etc/collectd.d/10-processes.conf',
- :content => /\n\s*Process "process1"\n\s*ProcessMatch "process-all" "process\[0-9\]"\n<\/Plugin>/,
- })
- end
- end
+ it 'Will create /etc/collectd.d/conf.d/processes-config.conf' do
+ should contain_concat__fragment('collectd_plugin_processes_conf_header').with({
+ :content => //,
+ :target => '/etc/collectd/conf.d/processes-config.conf',
+ :order => '00'
+ })
+ end
- context ':ensure => absent' do
- let :params do
- {:ensure => 'absent'}
+ it 'Will create /etc/collectd.d/conf.d/processes-config.conf' do
+ should contain_concat__fragment('collectd_plugin_processes_conf_footer').with({
+ :content => /<\/Plugin>/,
+ :target => '/etc/collectd/conf.d/processes-config.conf',
+ :order => '99'
+ })
+ end
end
- it 'Will not create /etc/collectd.d/10-processes.conf' do
- should contain_file('processes.load').with({
- :ensure => 'absent',
- :path => '/etc/collectd.d/10-processes.conf',
- })
- end
end
end
diff --git a/templates/plugin/processes.conf.erb b/templates/plugin/processes.conf.erb
deleted file mode 100644
index b25c80470..000000000
--- a/templates/plugin/processes.conf.erb
+++ /dev/null
@@ -1,22 +0,0 @@
-<% if @processes or @process_matches -%>
-
-<%
-if @processes
- @processes.each do |process|
--%>
- Process "<%= process %>"
-<%
- end
-end
--%>
-<%
-if @process_matches
- @process_matches.each do |match|
--%>
- ProcessMatch "<%= match['name'] %>" "<%= match['regex'] %>"
-<%
- end
-end
--%>
-
-<% end -%>