Modify interfaces to match upstream

A dump of witherspoons inventory was done and many
inconsistancies were noticed, try to match as best as
possible. Also autoformat json.

Dump of data can be seen here: https://pastebin.com/NiC7kSMS

Change-Id: I1a99b426d84fdcd9231d1fbda0ed85ad748779f3
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/configurations/1Ux16 Riser.json b/configurations/1Ux16 Riser.json
index 1669436..b9f766d 100644
--- a/configurations/1Ux16 Riser.json
+++ b/configurations/1Ux16 Riser.json
@@ -47,7 +47,13 @@
             }
         ],
         "name": "1Ux16 Riser 1",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F1UL16RISER\\d', 'ADDRESS' : '0x50'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F1UL16RISER\\d', 'ADDRESS' : '0x50'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -97,6 +103,12 @@
             }
         ],
         "name": "1Ux16 Riser 2",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F1UL16RISER\\d', 'ADDRESS' : '0x51'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F1UL16RISER\\d', 'ADDRESS' : '0x51'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/2Ux8 Riser.json b/configurations/2Ux8 Riser.json
index 4b613d1..e861607 100644
--- a/configurations/2Ux8 Riser.json
+++ b/configurations/2Ux8 Riser.json
@@ -47,7 +47,13 @@
             }
         ],
         "name": "2Ux8 Riser 1",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL8RISER1', 'ADDRESS': '0x50'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL8RISER1', 'ADDRESS': '0x50'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -97,6 +103,12 @@
             }
         ],
         "name": "2Ux8 Riser 2",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL8RISER2', 'ADDRESS': '0x51'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL8RISER2', 'ADDRESS': '0x51'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/Delta DPS-750XB PSU.json b/configurations/Delta DPS-750XB PSU.json
index 541371f..62639da 100644
--- a/configurations/Delta DPS-750XB PSU.json
+++ b/configurations/Delta DPS-750XB PSU.json
@@ -14,11 +14,15 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
-        "name": "Delta DPS-750XB PSU",
-        "part_number": "$BOARD_PART_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'DPS-750XB A', 'ADDRESS': '0x51'})"
+        "name": "Delta DPS-750XB PSU 2",
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'DPS-750XB A', 'ADDRESS': '0x51'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -35,10 +39,14 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
-        "name": "Delta DPS-750XB PSU PSU",
-        "part_number": "$BOARD_PART_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'DPS-750XB A', 'ADDRESS': '0x50'})"
+        "name": "Delta DPS-750XB PSU 1",
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'DPS-750XB A', 'ADDRESS': '0x50'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/F2U12X35S3P_riser.json b/configurations/F2U12X35S3P_riser.json
index 365208f..0c6db3f 100644
--- a/configurations/F2U12X35S3P_riser.json
+++ b/configurations/F2U12X35S3P_riser.json
@@ -40,12 +40,14 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
         "name": "2U12x35 Riser1",
-        "part_number": "$BOARD_PART_NUMBER",
-        "serial_number": "$BOARD_SERIAL_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL16RISER\\d', 'ADDRESS' : '0x50'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL16RISER\\d', 'ADDRESS' : '0x50'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -88,11 +90,13 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
         "name": "2U12x35 Riser2",
-        "serial_number": "$BOARD_SERIAL_NUMBER",
-        "part_number": "$BOARD_PART_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL16RISER\\d', 'ADDRESS' : '0x51'})"
+        "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL16RISER\\d', 'ADDRESS' : '0x51'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/Flextronics S-1100ADU00-201 PSU.json b/configurations/Flextronics S-1100ADU00-201 PSU.json
index 537e28d..9dd90ff 100644
--- a/configurations/Flextronics S-1100ADU00-201 PSU.json
+++ b/configurations/Flextronics S-1100ADU00-201 PSU.json
@@ -14,11 +14,15 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
-        "name": "Flextronics S-1100ADU00-201 PSU",
-        "part_number": "$BOARD_PART_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'S-1100ADU00-201', 'ADDRESS': '0x51'})"
+        "name": "Flextronics S-1100ADU00-201 PSU 2",
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'S-1100ADU00-201', 'ADDRESS': '0x51'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -35,10 +39,14 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$BOARD_MANUFACTURER",
-        "model": "$BOARD_PRODUCT_NAME",
-        "name": "Flextronics S-1100ADU00-201 PSU",
-        "part_number": "$BOARD_PART_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'S-1100ADU00-201', 'ADDRESS': '0x50'})"
+        "name": "Flextronics S-1100ADU00-201 PSU 1",
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'S-1100ADU00-201', 'ADDRESS': '0x50'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/Intel Front Panel.json b/configurations/Intel Front Panel.json
index a5a86fa..5cafc90 100644
--- a/configurations/Intel Front Panel.json
+++ b/configurations/Intel Front Panel.json
@@ -39,14 +39,16 @@
             "type": "TMP75"
         }
     ],
-    "manufacturer": "$BOARD_MANUFACTURER",
-    "model": "$BOARD_PRODUCT_NAME",
     "name": "Intel Front Panel",
-    "part_number": "$BOARD_PART_NUMBER",
-    "serial_number": "$BOARD_SERIAL_NUMBER",
     "probe": [
         "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'FFPANEL'})",
         "OR",
         "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F2USTOPANEL'})"
-    ]
+    ],
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "$BOARD_MANUFACTURER",
+        "Model": "$BOARD_PRODUCT_NAME",
+        "PartNumber": "$BOARD_PART_NUMBER",
+        "SerialNumber": "$BOARD_SERIAL_NUMBER"
+    }
 }
\ No newline at end of file
diff --git a/configurations/PCIE SSD Retimer.json b/configurations/PCIE SSD Retimer.json
index bd88d88..79f6c13 100644
--- a/configurations/PCIE SSD Retimer.json
+++ b/configurations/PCIE SSD Retimer.json
@@ -13,10 +13,12 @@
             "type": "TMP75"
         }
     ],
-    "manufacturer": "$BOARD_MANUFACTURER",
-    "model": "$BOARD_PRODUCT_NAME",
     "name": "PCIE SSD Retimer",
-    "part_number": "$BOARD_PART_NUMBER",
-    "serial_number": "$BOARD_SERIAL_NUMBER",
-    "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'SP3RT040X16'})"
+    "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'SP3RT040X16'})",
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "$BOARD_MANUFACTURER",
+        "Model": "$BOARD_PRODUCT_NAME",
+        "PartNumber": "$BOARD_PART_NUMBER",
+        "SerialNumber": "$BOARD_SERIAL_NUMBER"
+    }
 }
\ No newline at end of file
diff --git a/configurations/PSSF132202A.json b/configurations/PSSF132202A.json
index 6161111..1bcbe8e 100755
--- a/configurations/PSSF132202A.json
+++ b/configurations/PSSF132202A.json
@@ -14,12 +14,15 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$PRODUCT_MANUFACTURER",
-        "model": "$PRODUCT_PRODUCT_NAME",
         "name": "Solum 1300W PSU 2",
-        "part_number": "$PRODUCT_PART_NUMBER",
-        "serial_number": "$PRODUCT_PRODUCT_SERIAL_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'PSSF132202A', 'ADDRESS': '0x51'})"
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'PSSF132202A', 'ADDRESS': '0x51'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$PRODUCT_MANUFACTURER",
+            "Model": "$PRODUCT_PRODUCT_NAME",
+            "PartNumber": "$PRODUCT_PART_NUMBER",
+            "SerialNumber": "$PRODUCT_PRODUCT_SERIAL_NUMBER"
+        }
     },
     {
         "exposes": [
@@ -36,11 +39,14 @@
                 "type": "IntelFruDevice"
             }
         ],
-        "manufacturer": "$PRODUCT_MANUFACTURER",
-        "model": "$PRODUCT_PRODUCT_NAME",
         "name": "Solum 1300W PSU 1",
-        "part_number": "$PRODUCT_PART_NUMBER",
-        "serial_number": "$PRODUCT_PRODUCT_SERIAL_NUMBER",
-        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'PSSF132202A', 'ADDRESS': '0x50'})"
+        "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'PSSF132202A', 'ADDRESS': '0x50'})",
+        "type": "PowerSupply",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$PRODUCT_MANUFACTURER",
+            "Model": "$PRODUCT_PRODUCT_NAME",
+            "PartNumber": "$PRODUCT_PART_NUMBER",
+            "SerialNumber": "$PRODUCT_PRODUCT_SERIAL_NUMBER"
+        }
     }
 ]
\ No newline at end of file
diff --git a/configurations/R1000 Chassis.json b/configurations/R1000 Chassis.json
index 65a9ef6..6c1e20b 100644
--- a/configurations/R1000 Chassis.json
+++ b/configurations/R1000 Chassis.json
@@ -242,12 +242,16 @@
         }
     ],
     "name": "R1000 Chassis",
-    "part_number": "R1208",
-    "serial_number": "23165",
     "probe": [
         "FOUND('WFP Baseboard')",
         "AND",
         "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'F1UL16RISER\\d'})",
         "MATCH_ONE"
-    ]
+    ],
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "Intel Corporation",
+        "Model": "R1000",
+        "PartNumber": "R1208",
+        "SerialNumber": "23165"
+    }
 }
\ No newline at end of file
diff --git a/configurations/R2000 Chassis.json b/configurations/R2000 Chassis.json
index b2d4893..220ad4d 100644
--- a/configurations/R2000 Chassis.json
+++ b/configurations/R2000 Chassis.json
@@ -121,16 +121,17 @@
             "type": "AspeedFan"
         }
     ],
-
-    "manufacturer": "Intel Corporation",
-    "model": "R2000",
     "name": "R2000 Chassis",
-    "part_number": "R2104",
-    "serial_number": "23165",
     "probe": [
         "FOUND('WFP Baseboard')",
         "AND",
         "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UL\\d+RISER\\d'})",
         "MATCH_ONE"
-    ]
+    ],
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "Intel Corporation",
+        "Model": "R2000",
+        "PartNumber": "R2104",
+        "SerialNumber": "23165"
+    }
 }
\ No newline at end of file
diff --git a/configurations/STP Baseboard.json b/configurations/STP Baseboard.json
index 148c147..44872e3 100644
--- a/configurations/STP Baseboard.json
+++ b/configurations/STP Baseboard.json
@@ -801,21 +801,21 @@
             "type": "ADC"
         },
         {
-            "cpu_id": 0,
             "address": "0x30",
+            "cpu_id": 0,
             "name": "Skylake CPU 0",
             "thresholds": [
                 {
                     "direction": "greater than",
-                    "name": "upper critical",
                     "label": "DIMM",
+                    "name": "upper critical",
                     "severity": 1,
                     "value": 99
                 },
                 {
                     "direction": "greater than",
-                    "name": "upper non critical",
                     "label": "DIMM",
+                    "name": "upper non critical",
                     "severity": 0,
                     "value": 89
                 }
@@ -823,21 +823,21 @@
             "type": "SkylakeCPU"
         },
         {
-            "cpu_id": 1,
             "address": "0x31",
+            "cpu_id": 1,
             "name": "Skylake CPU 1",
             "thresholds": [
                 {
                     "direction": "greater than",
-                    "name": "upper critical",
                     "label": "DIMM",
+                    "name": "upper critical",
                     "severity": 1,
                     "value": 99
                 },
                 {
                     "direction": "greater than",
-                    "name": "upper non critical",
                     "label": "DIMM",
+                    "name": "upper non critical",
                     "severity": 0,
                     "value": 89
                 }
@@ -846,5 +846,12 @@
         }
     ],
     "name": "STP Baseboard",
-    "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': '.*STB'})"
-}
+    "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': '.*STB'})",
+    "type": "Board",
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "$PRODUCT_MANUFACTURER",
+        "Model": "$PRODUCT_PRODUCT_NAME",
+        "PartNumber": "$PRODUCT_PART_NUMBER",
+        "SerialNumber": "$PRODUCT_PRODUCT_SERIAL_NUMBER"
+    }
+}
\ No newline at end of file
diff --git a/configurations/WFT Baseboard.json b/configurations/WFT Baseboard.json
index bf356c0..a7be0e2 100644
--- a/configurations/WFT Baseboard.json
+++ b/configurations/WFT Baseboard.json
@@ -796,21 +796,21 @@
             "type": "TMP75"
         },
         {
-            "cpu_id": 0,
             "address": "0x30",
+            "cpu_id": 0,
             "name": "Skylake CPU 0",
             "thresholds": [
                 {
                     "direction": "greater than",
-                    "name": "upper critical",
                     "label": "DIMM",
+                    "name": "upper critical",
                     "severity": 1,
                     "value": 99
                 },
                 {
                     "direction": "greater than",
-                    "name": "upper non critical",
                     "label": "DIMM",
+                    "name": "upper non critical",
                     "severity": 0,
                     "value": 89
                 }
@@ -818,21 +818,21 @@
             "type": "SkylakeCPU"
         },
         {
-            "cpu_id": 1,
             "address": "0x31",
+            "cpu_id": 1,
             "name": "Skylake CPU 1",
             "thresholds": [
                 {
                     "direction": "greater than",
-                    "name": "upper critical",
                     "label": "DIMM",
+                    "name": "upper critical",
                     "severity": 1,
                     "value": 99
                 },
                 {
                     "direction": "greater than",
-                    "name": "upper non critical",
                     "label": "DIMM",
+                    "name": "upper non critical",
                     "severity": 0,
                     "value": 89
                 }
@@ -840,10 +840,13 @@
             "type": "SkylakeCPU"
         }
     ],
-    "manufacturer": "$BOARD_MANUFACTURER",
-    "model": "$BOARD_PRODUCT_NAME",
     "name": "WFP Baseboard",
-    "part_number": "$BOARD_PART_NUMBER",
-    "serial_number": "$BOARD_SERIAL_NUMBER",
-    "probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': '.*WFT'})"
-}
+    "probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': '.*WFT'})",
+    "type": "Board",
+    "xyz.openbmc_project.Inventory.Decorator.Asset": {
+        "Manufacturer": "$PRODUCT_MANUFACTURER",
+        "Model": "$PRODUCT_PRODUCT_NAME",
+        "PartNumber": "$PRODUCT_PART_NUMBER",
+        "SerialNumber": "$PRODUCT_PRODUCT_SERIAL_NUMBER"
+    }
+}
\ No newline at end of file
diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index 4f4e9c6..021126f 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -21,6 +21,7 @@
 #include <fstream>
 #include <future>
 #include <regex>
+#include <boost/algorithm/string/case_conv.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/variant/apply_visitor.hpp>
@@ -539,16 +540,29 @@
                       << " reverting to Chassis.\n";
             boardType = "Chassis";
         }
+        std::string boardtypeLower = boost::algorithm::to_lower_copy(boardType);
 
         std::regex_replace(boardKey.begin(), boardKey.begin(), boardKey.end(),
                            ILLEGAL_DBUS_REGEX, "_");
-        std::string boardName =
-            "/xyz/openbmc_project/Inventory/Item/" + boardType + "/" + boardKey;
+        std::string boardName = "/xyz/openbmc_project/inventory/system/" +
+                                boardtypeLower + "/" + boardKey;
         auto boardObject = objServer.add_object(boardName);
 
-        auto boardIface = boardObject->add_interface(
-            "xyz.openbmc_project.Configuration." + boardType);
+        auto boardIface =
+            boardObject->add_interface("xyz.openbmc_project.Inventory.Item");
+
+        boardObject->add_interface("xyz.openbmc_project.Inventory.Item." +
+                                   boardType);
         populateInterfaceFromJson(boardIface.get(), boardValues, objServer);
+        for (auto &boardField : nlohmann::json::iterator_wrapper(boardValues))
+        {
+            if (boardField.value().type() == nlohmann::json::value_t::object)
+            {
+                auto iface = boardObject->add_interface(boardField.key());
+                populateInterfaceFromJson(iface.get(), boardField.value(),
+                                          objServer);
+            }
+        }
         auto exposes = boardValues.find("exposes");
         if (exposes == boardValues.end())
         {
@@ -638,7 +652,16 @@
         &foundDevice,
     size_t &foundDeviceIdx)
 {
-    if (keyPair.value().type() != nlohmann::json::value_t::string)
+    if (keyPair.value().type() == nlohmann::json::value_t::object)
+    {
+        for (auto nextLayer = keyPair.value().begin();
+             nextLayer != keyPair.value().end(); nextLayer++)
+        {
+            templateCharReplace(nextLayer, foundDevice, foundDeviceIdx);
+        }
+        return;
+    }
+    else if (keyPair.value().type() != nlohmann::json::value_t::string)
     {
         return;
     }
@@ -994,9 +1017,8 @@
         }
         // this creates a filter for properties changed for any new probe type
         auto propertyChange = std::make_unique<dbus::match>(
-            SYSTEM_BUS,
-            "type='signal',member='PropertiesChanged',arg0='" +
-                objectMap.first + "'");
+            SYSTEM_BUS, "type='signal',member='PropertiesChanged',arg0='" +
+                            objectMap.first + "'");
         auto filter =
             std::make_shared<dbus::filter>(SYSTEM_BUS, [](dbus::message &m) {
                 auto member = m.get_member();