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 -%>