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