diff --git a/base.yml b/base.yml
index 4c665e830e7e93d2e9b1d6046f8afed96ab4d4b7..0c6f3bfc3b6a388c994ae7ee663b428bbc120fb3 100644
--- a/base.yml
+++ b/base.yml
@@ -1,6 +1,6 @@
 ---
 # Deploy common Crans configuration and tools
-- hosts: all
+- hosts: server
   vars:
     # Debian mirror on adm
     debian_mirror: http://mirror.adm.crans.org/debian
@@ -24,7 +24,7 @@
     - ntp-client
 
 # Plug LDAP on all servers
-- hosts: all
+- hosts: server
   vars:
     # LDAP binding
     ldap_base: 'dc=crans,dc=org'
@@ -62,5 +62,5 @@
   roles: []  # TODO
 
 # Playbook to deploy NFS
-- hosts: crans,!odlyd.adm.crans.org
+- hosts: crans_server,!odlyd.adm.crans.org
   roles: []  # TODO
diff --git a/hosts b/hosts
index 22ea2eec1f77945ffc14db31764eb5d7c85ff0f1..ea6de7a20ed608550e1545b252dc4e3981d1cf1b 100644
--- a/hosts
+++ b/hosts
@@ -63,15 +63,101 @@ prometheus.adm.crans.org
 voyager.adm.crans.org
 boeing.adm.crans.org
 
+[crans_unifi]
+0b-1.borne.crans.org
+0d-1.borne.crans.org
+0g-2.borne.crans.org
+0g-3.borne.crans.org
+0g-4.borne.crans.org
+0h-2.borne.crans.org
+0h-3.borne.crans.org
+0m-2.borne.crans.org
+1g-1.borne.crans.org
+1g-3.borne.crans.org
+1g-4.borne.crans.org
+1g-5.borne.crans.org
+1h-2.borne.crans.org
+1h-3.borne.crans.org
+1i-2.borne.crans.org
+1i-3.borne.crans.org
+1j-2.borne.crans.org
+1j-3.borne.crans.org
+1m-1.borne.crans.org
+1m-2.borne.crans.org
+1m-5.borne.crans.org
+2a-1.borne.crans.org
+2b-3.borne.crans.org
+2c-2.borne.crans.org
+2c-3.borne.crans.org
+2g-1.borne.crans.org
+2g-3.borne.crans.org
+2g-5.borne.crans.org
+2h-2.borne.crans.org
+2h-3.borne.crans.org
+2i-2.borne.crans.org
+2i-3.borne.crans.org
+2j-2.borne.crans.org
+2j-3.borne.crans.org
+2m-2.borne.crans.org
+3a-2.borne.crans.org
+3b-3.borne.crans.org
+3c-2.borne.crans.org
+3c-3.borne.crans.org
+3g-1.borne.crans.org
+3g-5.borne.crans.org
+3h-2.borne.crans.org
+3h-3.borne.crans.org
+3i-2.borne.crans.org
+3i-3.borne.crans.org
+3j-2.borne.crans.org
+3m-2.borne.crans.org
+3m-4.borne.crans.org
+3m-5.borne.crans.org
+4a-1.borne.crans.org
+4a-2.borne.crans.org
+4a-3.borne.crans.org
+4b-1.borne.crans.org
+4c-2.borne.crans.org
+4c-3.borne.crans.org
+4g-1.borne.crans.org
+4g-3.borne.crans.org
+4g-5.borne.crans.org
+4h-2.borne.crans.org
+4h-3.borne.crans.org
+4i-2.borne.crans.org
+4i-3.borne.crans.org
+4j-1.borne.crans.org
+4j-2.borne.crans.org
+4j-3.borne.crans.org
+4m-2.borne.crans.org
+4m-4.borne.crans.org
+5a-1.borne.crans.org
+5b-1.borne.crans.org
+5c-1.borne.crans.org
+5g-1.borne.crans.org
+5g-3.borne.crans.org
+5m-4.borne.crans.org
+5m-5.borne.crans.org
+6a-1.borne.crans.org
+6a-2.borne.crans.org
+6c-1.borne.crans.org
+
 [ovh_physical]
 #soyouz.adm.crans.org
 sputnik.adm.crans.org
 
+# every server at crans
+[crans_server:children]
+crans_physical
+crans_container
+crans_vm
+
 # everything at crans
 [crans:children]
 crans_physical
 crans_container
 crans_vm
+crans_unifi
 
 # everything at ovh
 [ovh:children]
@@ -90,3 +176,8 @@ crans_container
 [vm:children]
 crans_vm
 
+# every server
+[server:children]
+crans_server
+ovh
+
diff --git a/monitoring.yml b/monitoring.yml
index 758457d527a81df60484df1a1b135a0b87af280a..8dfed4ddd59f46912020a720ad926c7ea00fcb53 100644
--- a/monitoring.yml
+++ b/monitoring.yml
@@ -5,17 +5,19 @@
     # Prometheus targets.json
     prometheus_targets:
       - labels: {job: node}
-        targets: "{{ groups['crans'] | map('replace', '.org', '.org:9100') | list | sort }}"
+        targets: "{{ groups['server'] | map('replace', '.org', '.org:9100') | list | sort }}"
       - labels: {job: prometheus}
         targets: ['localhost:9090']
     prometheus_ups_snmp_targets:
       - targets: [pulsar.adm.crans.org]
+    prometheus_unifi_snmp_targets:
+      - targets: "{{ groups['crans_unifi'] | list | sort }}"
   roles:
     - prometheus
     - prometheus-alertmanager
 
 # Monitor all hosts
-- hosts: all
+- hosts: server
   roles:
     - prometheus-node
 
diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml
index 751f12790b0935d9ae3cde0aceb54ee68aa2bf77..7b4e12d5efa5973e7bf8d5b1ebbee9bff0cf0dc7 100644
--- a/roles/prometheus/tasks/main.yml
+++ b/roles/prometheus/tasks/main.yml
@@ -47,6 +47,12 @@
     content: "{{ prometheus_ups_snmp_targets | to_nice_json }}"
     dest: /etc/prometheus/targets_ups_snmp.json
 
+# We don't need to restart Prometheus when updating nodes
+- name: Configure Prometheus Ubiquity Unifi SNMP devices
+  copy:
+    content: "{{ prometheus_unifi_snmp_targets | to_nice_json }}"
+    dest: /etc/prometheus/targets_unifi_snmp.json
+
 - name: Activate prometheus service
   systemd:
     name: prometheus
diff --git a/roles/prometheus/templates/prometheus/prometheus.yml.j2 b/roles/prometheus/templates/prometheus/prometheus.yml.j2
index 2831137f308b0e9821c0d64c51837ba2569f021a..94c134822a321af41cf4d3e78b8ce48956b8b2b4 100644
--- a/roles/prometheus/templates/prometheus/prometheus.yml.j2
+++ b/roles/prometheus/templates/prometheus/prometheus.yml.j2
@@ -44,6 +44,20 @@ scrape_configs:
         target_label: instance
       - target_label: __address__
         replacement: 127.0.0.1:9116
+  - job_name: unifi_snmp
+    file_sd_configs:
+      - files:
+        - '/etc/prometheus/targets_unifi_snmp.json'
+    metrics_path: /snmp
+    params:
+      module: [ubiquiti_unifi]
+    relabel_configs:
+      - source_labels: [__address__]
+        target_label: __param_target
+      - source_labels: [__param_target]
+        target_label: instance
+      - target_label: __address__
+        replacement: 127.0.0.1:9116
   - job_name: django
     scheme: https
     static_configs: