diff --git a/lib/refrepo/gen/puppet/network_monitoring.rb b/lib/refrepo/gen/puppet/network_monitoring.rb
index bbd6ef34dfa611ec536319481d349be4e771238f..a7752461141580c3546c162dd5eb4651119e788c 100644
--- a/lib/refrepo/gen/puppet/network_monitoring.rb
+++ b/lib/refrepo/gen/puppet/network_monitoring.rb
@@ -1,7 +1,13 @@
 # add network_monitoring on supervision.site.grid5000.fr.yaml on hiera
 #
 
+NETWORK_EQUIPMENTS_BLACKLIST = [
+  'swx1nef',
+  'swy1nef',
+]
+
 def generate_puppet_network_monitoring(options)
+
   refapi = load_data_hierarchy
 
   sites = options[:sites]
@@ -14,10 +20,23 @@ def generate_puppet_network_monitoring(options)
 
     snmp_hosts = hiera_yaml['grid5000::munin::snmp::hosts'] || []
     net_hosts = hiera_yaml['grid5000::icinga::network::hosts'] || []
+    admin_hosts = hiera_yaml['grid5000::icinga::network::admin_hosts'] || []
 
     net_eqs.each do |eq_name, eq_v|
+      next if NETWORK_EQUIPMENTS_BLACKLIST.include?(eq_name)
+
       fqdn_eq_name = "#{eq_name}.#{s}.grid5000.fr"
 
+      if %w[admin hpc].include?(eq_v['role'])
+        unless admin_hosts.find { |i| i['name'] == fqdn_eq_name }
+          admin_hosts << {
+            'name' => fqdn_eq_name,
+            'address' => eq_v['ip']
+          }
+        end
+        next
+      end
+
       snmp_hosts << fqdn_eq_name unless
         snmp_hosts.find { |i| i == fqdn_eq_name }
 
@@ -71,6 +90,7 @@ def generate_puppet_network_monitoring(options)
     end
     hiera_yaml['grid5000::munin::snmp::hosts'] = snmp_hosts
     hiera_yaml['grid5000::icinga::network::hosts'] = net_hosts
+    hiera_yaml['grid5000::icinga::network::admin_hosts'] = admin_hosts
     IO.write(hiera_file, YAML.dump(hiera_yaml))
   end
 end