summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilly Tu <wltu@google.com>2021-09-29 06:24:52 +0300
committerWilly Tu <wltu@google.com>2021-11-17 19:49:31 +0300
commit308f70c77194b891c97e6f56c50adee4f39f0de7 (patch)
treeab563520aceed3f7f13988e12bfce85dec031c06
parent333b530119154072b3dbf23ebd7a82355da5b51c (diff)
downloadbmcweb-308f70c77194b891c97e6f56c50adee4f39f0de7.tar.xz
chassis: refactor chassis property to prepare for future support
Move `LocationCode` and `UUID` to a method to cleanup the the main Chassis handler. Tested: RedfishValidator Passed ``` *** /redfish/v1/Chassis/chassis0 INFO - Type (#Chassis.v1_14_0.Chassis), GET SUCCESS (time: 0.405691) WARNING - Thermal: The given property is deprecated by revision: This link has been deprecated in favor of the ThermalSubsystem link property. WARNING - Power: The given property is deprecated by revision: This link has been deprecated in favor of the PowerSubsystem link property. INFO - PASS INFO - ... *** /redfish/v1/Chassis/chassis1 INFO - Type (#Chassis.v1_14_0.Chassis), GET SUCCESS (time: 0.406565) WARNING - Thermal: The given property is deprecated by revision: This link has been deprecated in favor of the ThermalSubsystem link property. WARNING - Power: The given property is deprecated by revision: This link has been deprecated in favor of the PowerSubsystem link property. INFO - PASS INFO - *** /redfish/v1/Chassis/chassis1/Sensors INFO - Type (#SensorCollection.SensorCollection), GET SUCCESS (time: 0.358176) INFO - PASS INFO - *** /redfish/v1/Chassis/chassis1/ResetActionInfo INFO - Type (#ActionInfo.v1_1_2.ActionInfo), GET SUCCESS (time: 0.369962) INFO - PASS ... ``` Example, ``` $ curl -u root:0penBmc -X GET http://localhost:3967/redfish/v1/Chassis/chassis1 { "@odata.id": "/redfish/v1/Chassis/chassis1", "@odata.type": "#Chassis.v1_14_0.Chassis", "Actions": { "#Chassis.Reset": { "@Redfish.ActionInfo": "/redfish/v1/Chassis/chassis1/ResetActionInfo", "target": "/redfish/v1/Chassis/chassis1/Actions/Chassis.Reset" } }, "ChassisType": "RackMount", "Id": "chassis1", "Links": { "ComputerSystems": [ { "@odata.id": "/redfish/v1/Systems/system" } ], "ManagedBy": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ] }, "Location": { "PartLocation": { "ServiceLabel": "PE0" } }, "Manufacturer": "manufacturer1", "Model": "model1", "Name": "chassis1", "PCIeDevices": { "@odata.id": "/redfish/v1/Systems/system/PCIeDevices" }, "Power": { "@odata.id": "/redfish/v1/Chassis/chassis1/Power" }, ... } ``` Change-Id: I7a26530d3d718ce8fbf4182ee565f9fe9d94c5b5 Signed-off-by: Willy Tu <wltu@google.com>
-rw-r--r--redfish-core/lib/chassis.hpp141
1 files changed, 71 insertions, 70 deletions
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index b0c6291899..c625b4b460 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -179,6 +179,65 @@ inline void requestRoutesChassisCollection(App& app)
});
}
+inline void
+ getChassisLocationCode(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& connectionName,
+ const std::string& path)
+{
+ crow::connections::systemBus->async_method_call(
+ [asyncResp](const boost::system::error_code ec,
+ const std::variant<std::string>& property) {
+ if (ec)
+ {
+ BMCWEB_LOG_DEBUG << "DBUS response error for "
+ "Location";
+ messages::internalError(asyncResp->res);
+ return;
+ }
+
+ const std::string* value = std::get_if<std::string>(&property);
+ if (value == nullptr)
+ {
+ BMCWEB_LOG_DEBUG << "Null value returned "
+ "for locaton code";
+ messages::internalError(asyncResp->res);
+ return;
+ }
+ asyncResp->res
+ .jsonValue["Location"]["PartLocation"]["ServiceLabel"] = *value;
+ },
+ connectionName, path, "org.freedesktop.DBus.Properties", "Get",
+ "xyz.openbmc_project.Inventory.Decorator.LocationCode", "LocationCode");
+}
+
+inline void getChassisUUID(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& connectionName,
+ const std::string& path)
+{
+ crow::connections::systemBus->async_method_call(
+ [asyncResp](const boost::system::error_code ec,
+ const std::variant<std::string>& chassisUUID) {
+ if (ec)
+ {
+ BMCWEB_LOG_DEBUG << "DBUS response error for "
+ "UUID";
+ messages::internalError(asyncResp->res);
+ return;
+ }
+ const std::string* value = std::get_if<std::string>(&chassisUUID);
+ if (value == nullptr)
+ {
+ BMCWEB_LOG_DEBUG << "Null value returned "
+ "for UUID";
+ messages::internalError(asyncResp->res);
+ return;
+ }
+ asyncResp->res.jsonValue["UUID"] = *value;
+ },
+ connectionName, path, "org.freedesktop.DBus.Properties", "Get",
+ "xyz.openbmc_project.Common.UUID", "UUID");
+}
+
/**
* Chassis override class for delivering Chassis Schema
* Functions triggers appropriate requests on DBus
@@ -330,44 +389,6 @@ inline void requestRoutesChassis(App& app)
}
}
- const std::string locationInterface =
- "xyz.openbmc_project.Inventory.Decorator."
- "LocationCode";
- if (std::find(interfaces2.begin(), interfaces2.end(),
- locationInterface) != interfaces2.end())
- {
- crow::connections::systemBus->async_method_call(
- [asyncResp, chassisId(std::string(chassisId))](
- const boost::system::error_code ec,
- const std::variant<std::string>& property) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG
- << "DBUS response error for "
- "Location";
- messages::internalError(asyncResp->res);
- return;
- }
-
- const std::string* value =
- std::get_if<std::string>(&property);
- if (value == nullptr)
- {
- BMCWEB_LOG_DEBUG
- << "Null value returned "
- "for locaton code";
- messages::internalError(asyncResp->res);
- return;
- }
- asyncResp->res
- .jsonValue["Location"]["PartLocation"]
- ["ServiceLabel"] = *value;
- },
- connectionName, path,
- "org.freedesktop.DBus.Properties", "Get",
- locationInterface, "LocationCode");
- }
-
crow::connections::systemBus->async_method_call(
[asyncResp, chassisId(std::string(chassisId))](
const boost::system::error_code /*ec2*/,
@@ -430,39 +451,19 @@ inline void requestRoutesChassis(App& app)
"org.freedesktop.DBus.Properties", "GetAll",
"xyz.openbmc_project.Inventory.Decorator.Asset");
- // Chassis UUID
- const std::string uuidInterface =
- "xyz.openbmc_project.Common.UUID";
- if (std::find(interfaces2.begin(), interfaces2.end(),
- uuidInterface) != interfaces2.end())
+ for (const auto& interface : interfaces2)
{
- crow::connections::systemBus->async_method_call(
- [asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>&
- chassisUUID) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG
- << "DBUS response error for "
- "UUID";
- messages::internalError(asyncResp->res);
- return;
- }
- const std::string* value =
- std::get_if<std::string>(&chassisUUID);
- if (value == nullptr)
- {
- BMCWEB_LOG_DEBUG
- << "Null value returned "
- "for UUID";
- messages::internalError(asyncResp->res);
- return;
- }
- asyncResp->res.jsonValue["UUID"] = *value;
- },
- connectionName, path,
- "org.freedesktop.DBus.Properties", "Get",
- uuidInterface, "UUID");
+ if (interface == "xyz.openbmc_project.Common.UUID")
+ {
+ getChassisUUID(asyncResp, connectionName, path);
+ }
+ else if (interface ==
+ "xyz.openbmc_project.Inventory."
+ "Decorator.LocationCode")
+ {
+ getChassisLocationCode(asyncResp,
+ connectionName, path);
+ }
}
return;