summaryrefslogtreecommitdiff
path: root/redfish-core/lib
diff options
context:
space:
mode:
authorChicago Duan <duanzhijia01@inspur.com>2021-02-05 10:48:26 +0300
committerGeorge Liu <liuxiwei@inspur.com>2022-10-21 03:36:55 +0300
commit77b364371531be5c61d84d5e83dfd72444434dd0 (patch)
tree211185ba28fc67c9c8c70fac6306451bf017c80c /redfish-core/lib
parent532d769725d346d5339387016ce14d75d41ee3b2 (diff)
downloadbmcweb-77b364371531be5c61d84d5e83dfd72444434dd0.tar.xz
Implements PowerSubsystem schema
This commit implements the Redfish PowerSubsystem schema and collects default property values. PowerSupplies will be implemented in the next commit. ref: https://www.dmtf.org/sites/default/files/standards/documents/ DSP0268_2022.2.pdf (6.86 PowerSubsystem 1.1.0) https://redfish.dmtf.org/schemas/v1/PowerSupply.v1_1_0.json Tested: Validator and UT passes 1. curl -k -H "X-Auth-Token: $token" -X GET https://${bmc}/redfish/v1/Chassis/chassis/PowerSubsystem { "@odata.id": "/redfish/v1/Chassis/chassis/PowerSubsystem", "@odata.type": "#PowerSubsystem.v1_1_0.PowerSubsystem", "Id": "PowerSubsystem", "Name": "Power Subsystem", "Status": { "Health": "OK", "State": "Enabled" } } 2. bad chassisID curl -k -H "X-Auth-Token: $token" -X GET https://${bmc} /redfish/v1/Chassis/badchassisID/PowerSubsystem/ PowerSupplies/powersupply0 { "error": { "@Message.ExtendedInfo": [ { "@odata.type": "#Message.v1_1_1.Message", "Message": "The requested resource of type Chassis named badchassisID was not found.", "MessageArgs": [ "Chassis", "badchassisID" ], "MessageId": "Base.1.13.1.ResourceNotFound", "MessageSeverity": "Critical", "Resolution": "Provide a valid resource identifier and resubmit the request." } ], "code": "Base.1.13.1.ResourceNotFound", "message": "The requested resource of type Chassis named badchassisID was not found." } } Signed-off-by: Chicago Duan <duanzhijia01@inspur.com> Change-Id: I6885b1777082538eceaf7ea85a8f69966459ee43
Diffstat (limited to 'redfish-core/lib')
-rw-r--r--redfish-core/lib/chassis.hpp3
-rw-r--r--redfish-core/lib/power_subsystem.hpp64
2 files changed, 67 insertions, 0 deletions
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index c51b150444..261411505c 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -403,6 +403,9 @@ inline void
asyncResp->res.jsonValue["ThermalSubsystem"]["@odata.id"] =
crow::utility::urlFromPieces("redfish", "v1", "Chassis",
chassisId, "ThermalSubsystem");
+ asyncResp->res.jsonValue["PowerSubsystem"]["@odata.id"] =
+ crow::utility::urlFromPieces("redfish", "v1", "Chassis",
+ chassisId, "PowerSubsystem");
#endif
// SensorCollection
asyncResp->res.jsonValue["Sensors"]["@odata.id"] =
diff --git a/redfish-core/lib/power_subsystem.hpp b/redfish-core/lib/power_subsystem.hpp
new file mode 100644
index 0000000000..c3b898c278
--- /dev/null
+++ b/redfish-core/lib/power_subsystem.hpp
@@ -0,0 +1,64 @@
+#pragma once
+
+#include "app.hpp"
+#include "query.hpp"
+#include "registries/privilege_registry.hpp"
+#include "utils/chassis_utils.hpp"
+
+#include <memory>
+#include <optional>
+#include <string>
+
+namespace redfish
+{
+
+inline void doPowerSubsystemCollection(
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& chassisId,
+ const std::optional<std::string>& validChassisPath)
+{
+ if (!validChassisPath)
+ {
+ BMCWEB_LOG_ERROR << "Not a valid chassis ID" << chassisId;
+ messages::resourceNotFound(asyncResp->res, "Chassis", chassisId);
+ return;
+ }
+
+ asyncResp->res.jsonValue["@odata.type"] =
+ "#PowerSubsystem.v1_1_0.PowerSubsystem";
+ asyncResp->res.jsonValue["Name"] = "Power Subsystem";
+ asyncResp->res.jsonValue["Id"] = "PowerSubsystem";
+ asyncResp->res.jsonValue["@odata.id"] = crow::utility::urlFromPieces(
+ "redfish", "v1", "Chassis", chassisId, "PowerSubsystem");
+ asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
+ asyncResp->res.jsonValue["Status"]["Health"] = "OK";
+
+ asyncResp->res.addHeader(
+ boost::beast::http::field::link,
+ "</redfish/v1/JsonSchemas/PowerSubsystem/PowerSubsystem.json>; rel=describedby");
+}
+
+inline void handlePowerSubsystemCollectionGet(
+ App& app, const crow::Request& req,
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& chassisId)
+{
+ if (!redfish::setUpRedfishRoute(app, req, asyncResp))
+ {
+ return;
+ }
+
+ redfish::chassis_utils::getValidChassisPath(
+ asyncResp, chassisId,
+ std::bind_front(doPowerSubsystemCollection, asyncResp, chassisId));
+}
+
+inline void requestRoutesPowerSubsystem(App& app)
+{
+ BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/")
+ .privileges(redfish::privileges::getPowerSubsystem)
+ .methods(boost::beast::http::verb::get)(
+ std::bind_front(handlePowerSubsystemCollectionGet, std::ref(app)));
+}
+
+} // namespace redfish