diff --git a/lib/refrepo/gen/puppet/kwollectg5k.rb b/lib/refrepo/gen/puppet/kwollectg5k.rb
index 1eec6bcf572b48d1b7d83cd796201d33a8eddb91..4a97397b47e6fcdd171984320fbc72281e96e343 100644
--- a/lib/refrepo/gen/puppet/kwollectg5k.rb
+++ b/lib/refrepo/gen/puppet/kwollectg5k.rb
@@ -47,6 +47,31 @@ def generate_puppet_kwollectg5k(options)
       File.write(output_file, output)
     }
 
+    # Metrics configuration for PDU
+    ## First, parse all PDU to find nodes that use two PSUs
+    ports_by_node = {}
+    site.fetch('pdus', {}).each { |pdu_uid, pdu|
+      pdu.fetch('metrics', []).each {|metric|
+        next if metric['source']['protocol'] != 'snmp'
+        if metric['source']['id'].include?('%PORT%')
+          pdu['ports'].each {|port_uid, node_uid|
+            if not ports_by_node.has_key?(node_uid)
+              ports_by_node[node_uid] = []
+            end
+            ports_by_node[node_uid] << "#{pdu_uid}-port-#{port_uid}"
+          }
+        end
+      }
+    }
+    ## Then, write PDU metrics config
+    site.fetch('pdus', {}).each { |pdu_uid, pdu|
+
+      output = ERB.new(File.read(File.expand_path('templates/kwollect-pdu.erb', File.dirname(__FILE__))), nil, '-').result(binding)
+      output_file = Pathname("#{options[:output_dir]}//platforms/production/modules/generated/files/grid5000/kwollect/#{site_uid}/#{pdu_uid}.conf")
+      output_file.dirname.mkpath()
+      File.write(output_file, output)
+    }
+
     # Wattmetre mapping configuration
     wattmetre_port_per_node = {}
     site.fetch('pdus', {}).each { |pdu_uid, pdu|
diff --git a/lib/refrepo/gen/puppet/templates/kwollect-node.erb b/lib/refrepo/gen/puppet/templates/kwollect-node.erb
index 4d8f82a808718cb2fa22a1e43770a6f3892a8e30..b7d7363b21dd123a51f01f9f38f72c6f2812878a 100644
--- a/lib/refrepo/gen/puppet/templates/kwollect-node.erb
+++ b/lib/refrepo/gen/puppet/templates/kwollect-node.erb
@@ -5,8 +5,10 @@
 
 <%-
 cluster.fetch('metrics', []).each {|metric|
+  # These are "virtual" metrics available for a node, but collected elsewhere
   next if metric['source']['protocol'] == "wattmetre"
   next if metric['source']['protocol'] == "network_equipment"
+  next if metric['source']['protocol'] == "pdu"
 
   if metric['source']['protocol'] == "ipmisensor"
     auth = ipmi_credentials+"@"
diff --git a/lib/refrepo/gen/puppet/templates/kwollect-pdu.erb b/lib/refrepo/gen/puppet/templates/kwollect-pdu.erb
new file mode 100644
index 0000000000000000000000000000000000000000..2a87b87c7ea8bd4249bd3e221732d007ef58457d
--- /dev/null
+++ b/lib/refrepo/gen/puppet/templates/kwollect-pdu.erb
@@ -0,0 +1,46 @@
+#
+# This file was generated from reference-repository.git
+# Do not edit this file by hand. Your changes will be overwritten.
+#
+
+<%-
+pdu.fetch('metrics', []).each {|metric|
+  next if metric['source']['protocol'] != 'snmp'
+  if metric['source']['id'].include?('%PORT%')
+    pdu['ports'].each {|port_uid, node_uid|
+      # Map metric to node only for single PSU
+      single_port = ports_by_node[node_uid].length == 1
+-%>
+- name: <%= metric['name'] %>
+  device_id: <%= pdu_uid %>-port-<%= port_uid %>
+<%- if single_port -%>
+  device_alias: <%= node_uid %>
+<%- end -%>
+  url: snmp://<%= pdu.fetch('snmp_community', 'public')%>@<%= pdu_uid %>.<%= site_uid %>.grid5000.fr/<%= metric['source']['id'].sub('%PORT%',  "#{port_uid}") %>
+  update_every: <%= metric['period'] > 0 ? metric['period'] : metric['optional_period'] %>
+<%- if metric['period'] == 0 -%>
+  optional: true
+<%- end -%>
+<%- if metric.has_key?('scale_factor') -%>
+  scale_factor: <%= metric['scale_factor'] %>
+<%- end -%>
+
+<%-
+    }
+  else
+-%>
+- name: <%= metric['name'] %>
+  device_id: <%= pdu_uid %>
+  url: snmp://<%= pdu.fetch('snmp_community', 'public')%>@<%= pdu_uid %>.<%= site_uid %>.grid5000.fr/<%= metric['source']['id'] %>
+  update_every: <%= metric['period'] > 0 ? metric['period'] : metric['optional_period'] %>
+<%- if metric['period'] == 0 -%>
+  optional: true
+<%- end -%>
+<%- if metric.has_key?('scale_factor') -%>
+  scale_factor: <%= metric['scale_factor'] %>
+<%- end -%>
+
+<%-
+  end
+}
+-%>