diff --git a/data/grid5000/sites/nancy/clusters/grostiti/grostiti.json b/data/grid5000/sites/nancy/clusters/grostiti/grostiti.json
index bda9dc3e9330486273d1ad44a8c6d7b15e3c36ea..d0d2f23ba6ad51117d84075e5b8ef2af6e37a392 100644
--- a/data/grid5000/sites/nancy/clusters/grostiti/grostiti.json
+++ b/data/grid5000/sites/nancy/clusters/grostiti/grostiti.json
@@ -3,7 +3,7 @@
   "created_at": "Wed, 10 Jan 2024 00:00:00 GMT",
   "exotic": false,
   "kavlan": true,
-  "manufactured_at": null,
+  "manufactured_at": "2015-10-23",
   "metrics": [
     {
       "description": "Speed of Fan1 reported by BMC, in rpm",
@@ -413,5 +413,5 @@
   ],
   "type": "cluster",
   "uid": "grostiti",
-  "warranty_end": null
+  "warranty_end": "2020-10-23"
 }
\ No newline at end of file
diff --git a/data/grid5000/sites/nancy/clusters/grostiti/nodes/grostiti-1.json b/data/grid5000/sites/nancy/clusters/grostiti/nodes/grostiti-1.json
index dc69ebfa763ff77e9eee0a362f5c9e87ee9e2bed..fd42052e13a3295466e77f8f381ddb152f147953 100644
--- a/data/grid5000/sites/nancy/clusters/grostiti/nodes/grostiti-1.json
+++ b/data/grid5000/sites/nancy/clusters/grostiti/nodes/grostiti-1.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.85.85.85",
   "chassis": {
+    "manufactured_at": "2015-10-23",
     "manufacturer": "Dell Inc.",
     "name": "PowerEdge R930",
-    "serial": "2XV3J82"
+    "serial": "2XV3J82",
+    "warranty_end": "2020-10-23"
   },
   "exotic": false,
   "kavlan": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-1.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-1.json
index 3fc355c5fbdcf3eee3d5330f98117367f11a8cb0..7a0db2a1231359a6e8b95bf8fd9147dba52e3548 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-1.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-1.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRQ"
+    "serial": "CZJ3140RRQ",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-10.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-10.json
index 462b998ae88a45c8cdb37fb70c4ec97eb1b5f84e..0b60575701746b6e9c291e9ed7cd6d8b814746de 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-10.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-10.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRW"
+    "serial": "CZJ3140RRW",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-11.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-11.json
index eb75ad3951d6c47cfe9ba2ded9d7fa07a38f62ba..ede017cd2a6eb6b4f3046e877966b638c327f482 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-11.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-11.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSP"
+    "serial": "CZJ3140RSP",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-12.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-12.json
index e9018f3fafdaa1f10eca6b85e202a9f61d3b2f34..fa207707e132ce16ed1a377c6267a1a269fbe861 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-12.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-12.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRR"
+    "serial": "CZJ3140RRR",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-13.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-13.json
index 6ce30e41b1bd4823f772f834c03fe83c9baf5e0d..24f05000ab56282e06a00059de07b7a2588bd06a 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-13.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-13.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.72",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSD"
+    "serial": "CZJ3140RSD",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-14.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-14.json
index 39ad2ddccdd4833613e6e83b5d94ccd4ada32c82..45f8c7df4e3f5f4889e0556447b9c0b7e7e4dbb5 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-14.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-14.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSN"
+    "serial": "CZJ3140RSN",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-15.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-15.json
index 3e7ac410f82b56556bf678ae32c28448e85e800d..dd587538044d4a0bc555041ce248974f18553d23 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-15.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-15.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS5"
+    "serial": "CZJ3140RS5",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-16.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-16.json
index cdaa94b8fbc61785858ca09fee842e6177028635..af5f2652c2b9f0790bb663d5fdfc8564379d7311 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-16.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-16.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS3"
+    "serial": "CZJ3140RS3",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-17.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-17.json
index ef19ff3ab962798c6550946c24c6ef3aba3200eb..20e0739451c47628b220461ce6bea33d9b0cd80a 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-17.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-17.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.72",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSB"
+    "serial": "CZJ3140RSB",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-18.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-18.json
index 304a1b0172575c2e24d3f5f1af14de2afb35d644..cd1f4ce70d1b4132a834b535fa4839785fd42108 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-18.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-18.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS8"
+    "serial": "CZJ3140RS8",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-19.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-19.json
index 46f1ede81c5b4e6807e8546bf76d3c43ae4070ee..0dc3a9b37ce1e2c8326f7b92e9a0b4856aca40fd 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-19.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-19.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSF"
+    "serial": "CZJ3140RSF",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-2.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-2.json
index 1d352b99936294f95e0eee4e36ea5f72c06dc3c1..bb72c86d46179e740ff54f6fad4cb3a601c47199 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-2.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-2.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSM"
+    "serial": "CZJ3140RSM",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-20.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-20.json
index 75131e3958673972cc232eb20d7246859786b71f..75bc350ee75c6767dd728e8508085dabff53c348 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-20.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-20.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSC"
+    "serial": "CZJ3140RSC",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-21.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-21.json
index 416a54ef366fc4336a2fd59f1dbdf0c146d95b2f..cebf00f8a7c99dfd7b844d13069e19b4f8e48634 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-21.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-21.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRS"
+    "serial": "CZJ3140RRS",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-22.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-22.json
index 5a512371291962624fc3cc4129dbf511465ca0e9..9e015bd2c2cd00932f89acd6a47802906a94db0d 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-22.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-22.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSJ"
+    "serial": "CZJ3140RSJ",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-23.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-23.json
index 1dd34efddaf9eab1fce9f2048e63750082a96320..41eb00a94857d80fb89d6ee5338272418dd94cb5 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-23.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-23.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS4"
+    "serial": "CZJ3140RS4",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-24.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-24.json
index 54ca5ff9d58e36501d8acb3eb17431627675cd3d..b69aadf3b054f561a831bead9efc1ef306638bb8 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-24.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-24.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.72",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS4"
+    "serial": "CZJ3140RS4",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-25.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-25.json
index 106477cb8dfea66d19b78ee2e26e183c91c4d29e..39d9826f61e88dec418a0dbdae894beeec18d1c8 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-25.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-25.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSQ"
+    "serial": "CZJ3140RSQ",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-26.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-26.json
index e5fbceaea9ba166ce6c952edbcd3e1fe229d1073..180a7094317a8681975b324cc1128e75acfbc47b 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-26.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-26.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSL"
+    "serial": "CZJ3140RSL",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-27.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-27.json
index 22fea624af83f2785bab3e95bdecc74d4f93cc94..9886985d7037f65c73b73a6b0e8fa897aa5b825f 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-27.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-27.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSK"
+    "serial": "CZJ3140RSK",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-28.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-28.json
index 012a8396d3aafa790a5f27d040bbe1757bb7da02..7e8df3801c5bf58f1ebad0973b563e7056bd6ed5 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-28.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-28.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.72",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSH"
+    "serial": "CZJ3140RSH",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-29.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-29.json
index 3a0173356262f66dbcfa574fd5037cbd5fdb0a6d..387ca00f39a62e344caa20baf2f3f78c72249f10 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-29.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-29.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRY"
+    "serial": "CZJ3140RRY",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-3.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-3.json
index 77c85ca3025f534502af34fdfab75a99f2ab67fe..44f667a7e1b1e31d2ec64f24e7986abf7547e2a3 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-3.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-3.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRT"
+    "serial": "CZJ3140RRT",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-30.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-30.json
index c28a2f4316ca465c02f1a8e3d3e4afd89d188923..2dc005bd35b9054f6729b2a6e33a3d2e012120d4 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-30.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-30.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRZ"
+    "serial": "CZJ3140RRZ",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-31.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-31.json
index 30ecfbb078c936e3c1a9585b9456e80bd9a2937a..0c972fa9ecac84771136ab83b0911d88bf8cc06f 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-31.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-31.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS1"
+    "serial": "CZJ3140RS1",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-32.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-32.json
index f19b9a7910bec257ffd4ef2f85e32929f247fb28..ee97cfaf1666f937d5a959a16e8cdca6398f150b 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-32.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-32.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RSG"
+    "serial": "CZJ3140RSG",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-4.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-4.json
index d6e197a618c3faa7051060f3c14b5ad8a6e2c5bb..97fee860b56f8c8b12d5516cb1a6f3ee8569b8fb 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-4.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-4.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRV"
+    "serial": "CZJ3140RRV",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-5.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-5.json
index 96db1b9ea6dbc1ecbcef74849dc8dce2639e03eb..5cdde5e78a0dcec9bf60b930298aa4a09f85855e 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-5.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-5.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS9"
+    "serial": "CZJ3140RS9",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-6.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-6.json
index 7dbc554aefa2d35ba6a089a1d4362f7bec4f20cc..ef0c4e36c73b3986c21f41436048f17cb4d8027b 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-6.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-6.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS7"
+    "serial": "CZJ3140RS7",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-7.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-7.json
index 86aac8b83dea63e0462f34d3559f3efca8f1ad0b..210047d0c9499443b6268e8fa5d1d3872de00d00 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-7.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-7.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS2"
+    "serial": "CZJ3140RS2",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-8.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-8.json
index 032870ff9950cf21bff0b3ba8235bac1b8cd02a4..0b400e7ea1df51603695b49fa3caac4234d8dc23 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-8.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-8.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RRX"
+    "serial": "CZJ3140RRX",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-9.json b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-9.json
index d4d54cd3ce8f13db60a8a96908bc29f1683aa307..6f39b2d3277618dda3706010bd5aab8cde12e5c4 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-9.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/nodes/paradoxe-9.json
@@ -13,9 +13,11 @@
   },
   "bmc_version": "2.96",
   "chassis": {
+    "manufactured_at": "2023-05-27",
     "manufacturer": "HPE",
     "name": "ProLiant DL360 Gen10 Plus",
-    "serial": "CZJ3140RS0"
+    "serial": "CZJ3140RS0",
+    "warranty_end": "2030-05-30"
   },
   "exotic": false,
   "main_memory": {
diff --git a/data/grid5000/sites/rennes/clusters/paradoxe/paradoxe.json b/data/grid5000/sites/rennes/clusters/paradoxe/paradoxe.json
index 27955017bfa352716313e8599b715acf308d8c9a..1025793faffa8193235a991ef39ed355f84bf694 100644
--- a/data/grid5000/sites/rennes/clusters/paradoxe/paradoxe.json
+++ b/data/grid5000/sites/rennes/clusters/paradoxe/paradoxe.json
@@ -3,7 +3,7 @@
   "created_at": "Tue, 02 Jan 2024 00:00:00 GMT",
   "exotic": false,
   "kavlan": false,
-  "manufactured_at": null,
+  "manufactured_at": "2023-05-27",
   "metrics": [
 
   ],
@@ -14,5 +14,5 @@
   ],
   "type": "cluster",
   "uid": "paradoxe",
-  "warranty_end": null
+  "warranty_end": "2030-05-30"
 }
\ No newline at end of file
diff --git a/input/grid5000/dell-product-data.yaml b/input/grid5000/dell-product-data.yaml
index 314d2f8ee92c82b984ae9e0d2d5801da6ab05aea..05d230cf1d4b3aeeee09ce5abe9c26721c9b2db0 100644
--- a/input/grid5000/dell-product-data.yaml
+++ b/input/grid5000/dell-product-data.yaml
@@ -1482,6 +1482,12 @@ sites:
             chassis:
               manufactured_at: 2019-07-16
               warranty_end: 2024-07-17
+      grostiti:
+        nodes:
+          grostiti-1:
+            chassis:
+              manufactured_at: 2015-10-23
+              warranty_end: 2020-10-23
       grouille:
         nodes:
           grouille-1:
diff --git a/input/grid5000/sites/rennes/clusters/paradoxe/paradoxe.yaml b/input/grid5000/sites/rennes/clusters/paradoxe/paradoxe.yaml
index 8cab2065f4d35c4f8f9c58773ec968d6d4559b0c..b647eabb9f8869d956ec99e3f37adb05bc6976ab 100644
--- a/input/grid5000/sites/rennes/clusters/paradoxe/paradoxe.yaml
+++ b/input/grid5000/sites/rennes/clusters/paradoxe/paradoxe.yaml
@@ -8,6 +8,9 @@ queues:
   - testing
 nodes:
   paradoxe-[1-32]:
+    chassis:
+      manufactured_at: 2023-05-27
+      warranty_end: 2030-05-30
     supported_job_types:
       deploy: true
       besteffort: true
diff --git a/lib/refrepo/gen/dell-product-data.rb b/lib/refrepo/gen/dell-product-data.rb
index 850c5ed3e30c34ea9ef88b803cb8e6786d2fd17b..064e24cef15ad4995b0efd23471f2b4f3e7086b9 100644
--- a/lib/refrepo/gen/dell-product-data.rb
+++ b/lib/refrepo/gen/dell-product-data.rb
@@ -41,10 +41,15 @@ def get_dell_hardware
         s_hash["clusters"].delete_if {|_c_uid, c_hash| !c_hash["model"].downcase.start_with?("dell")}
         s_hash["clusters"].each do |_c_uid, c_hash| 
             # We keep only nodes
-            c_hash.delete_if{ |key| key != 'nodes'}
+            c_hash.delete_if{ |key| key != 'nodes' }
             c_hash["nodes"].each do |n_uid, n_hash|
+                if !n_hash.key?('chassis')
+                    puts "Removing node #{n_uid}, because it has no chassis information"
+                    c_hash["nodes"].delete(n_uid)
+                    next
+                end
                 if n_hash['chassis']['serial'] == 'N/A' 
-                    puts "Removing node #{n_uid}, because no serial #15114"
+                    puts "Removing node #{n_uid}, because no serial #15114" 
                     c_hash["nodes"].delete(n_uid)
                     next
                 end
diff --git a/lib/refrepo/gen/puppet/clusters.rb b/lib/refrepo/gen/puppet/clusters.rb
index e2be7dcc6a77e8f42a922c42241dc69b3d4fd30d..d75dfcf55f1732315c3580fbcdb591725eca6489 100644
--- a/lib/refrepo/gen/puppet/clusters.rb
+++ b/lib/refrepo/gen/puppet/clusters.rb
@@ -1,34 +1,49 @@
 require 'refrepo/data_loader'
 
 def generate_puppet_clusters(options)
+    
     if not options[:conf_dir]
         options[:conf_dir] = "#{options[:output_dir]}/platforms/production/hieradata/"
     end
-
-    if options[:sites] != G5K_SITES
-        raise "SITE options is not valid as clusters.yaml contains all sites"
-    end 
-    data = load_data_hierarchy
-    data.delete_if { |key| key != 'sites' }
+    # Loading current data from hiera
+    hiera = YAML.load_file("#{options[:conf_dir]}clusters.yaml")['grid5000::clusters']
     
-    yaml_data = {}
+    # Updating data from refrepo
+    refrepo = load_data_hierarchy
+    refrepo.delete_if { |key| key != 'sites' }
     
-    data['sites'].sort.each do |s_uid, s_hash| 
-        yaml_data[s_uid] = {}
+    refrepo['sites'].select{ |k, _v| options[:sites].include? k}.sort.each do |s_uid, s_hash| 
+        if ! hiera.key? s_uid
+            puts "Add #{s_uid}"
+            hiera[s_uid] = {}
+        end
         s_hash['clusters'].sort_by{|c_uid, _c_hash| [c_uid[/(\D+)/, 1], c_uid[/(\d+)/, 1].to_i]}.each do |c_uid, c_hash|
+            if ! hiera[s_uid].key? c_uid
+                puts "  Add #{s_uid}"
+                hiera[s_uid][c_uid] = {}
+            end
             _, f_node = c_hash["nodes"].first
-            queue = f_node['supported_job_types']['queues'].sort.reverse.first
+            queue = f_node['supported_job_types']['queues'].select{|q| q != 'admin'}[0]
             disk_reservation = f_node['storage_devices'].filter{|d| d.key?('reservation')}.length > 0
-            gpu = f_node.key?('gpu_devices')             
-            warrantied = f_node['chassis'].key?('warranty_end') ? DateTime.parse(f_node['chassis']['warranty_end']) > DateTime.now : false
-
-            yaml_data[s_uid][c_uid] = {"queue" => queue, 
-                                       "disk_reservation" => disk_reservation,
-                                       "gpu" => gpu,
-                                       "warrantied" => warrantied}
+            gpu = f_node.key?('gpu_devices')
+            if ! f_node.key?('chassis')
+                puts "no chassis field for #{f_node['uid']}, has g5k-checks data been imported ?" 
+                warrantied = false
+            else
+                warrantied = f_node['chassis'].key?('warranty_end') ? DateTime.parse(f_node['chassis']['warranty_end']) > DateTime.now : false
+            end
+            c_data = {"queue" => queue, 
+                "disk_reservation" => disk_reservation,
+                "gpu" => gpu,
+                "warrantied" => warrantied}
+            if hiera[s_uid][c_uid] != c_data
+                diff = hiera[s_uid][c_uid].dup.delete_if { |k, v| c_data[k] == v }.merge!(c_data.dup.delete_if { |k, _v| hiera[s_uid][c_uid].has_key?(k) })
+                puts "#{s_uid}-#{c_uid}  Changes detected #{diff}"
+                hiera[s_uid][c_uid] = c_data
+            end
         end
     end
 
     outfile = File.open("#{options[:conf_dir]}clusters.yaml", "w")
-    outfile.write({'grid5000::clusters' => yaml_data}.to_yaml)
+    outfile.write({'grid5000::clusters' => hiera}.to_yaml)
 end
\ No newline at end of file
diff --git a/lib/refrepo/gen/wiki/generators/cpu_parameters.rb b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb
index 143ce848bc545516161c2df93d0d6cfcda7fe2aa..e27ecf79684e4e440ae5c8777b8bad0850590c79 100644
--- a/lib/refrepo/gen/wiki/generators/cpu_parameters.rb
+++ b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb
@@ -20,11 +20,13 @@ class CPUParametersGenerator < WikiGenerator
         turboboost_enabled = node_hash["operating_system"]["turboboost_enabled"]
         pstate_driver = node_hash["operating_system"]["pstate_driver"]
         cstate_driver = node_hash["operating_system"]["cstate_driver"]
+        created_at = DateTime.parse(*cluster_hash["created_at"]).strftime("%Y-%m-%d")
+        manufactured_at = DateTime.parse(*cluster_hash["manufactured_at"]).strftime("%Y-%m-%d")
 
         #One line per cluster
         table_data << [
-          DateTime.parse(*cluster_hash["created_at"]).strftime("%Y-%m-%d"),
-          DateTime.parse(*cluster_hash["manufactured_at"]).strftime("%Y-%m-%d"),
+          created_at,
+          manufactured_at,
           site_uid,
           cluster_uid,
           cpu_family,