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..712ed3055 100644 --- a/manifests/plugin/processes.pp +++ b/manifests/plugin/processes.pp @@ -10,7 +10,41 @@ collectd::plugin {'processes': ensure => $ensure, - content => template('collectd/plugin/processes.conf.erb'), - 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/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 -%>