summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Tanous <ed@tanous.net>2022-12-29 03:22:54 +0300
committerEd Tanous <ed@tanous.net>2023-06-21 22:31:32 +0300
commit7f3e84a151e106d9227d08358e9ee3fd225b34c4 (patch)
tree9ad5f77c62f73618e0dde7a27c658fa518118a7b
parent8a7c4b475469c8811dffe265992b903060aad65f (diff)
downloadbmcweb-7f3e84a151e106d9227d08358e9ee3fd225b34c4.tar.xz
Add an option flag for multi-computersystem
A number of discussions have occurred, and it's clear that multi-computer system is not a transition that can be done in a single series of commits, and needs to be done incrementally over time. This commit adds the initial option for multi-computer system support, with an option flag that can be enabled when the new behavior is desired. This is to prevent needing a long-lived fork. This option operatates such that if enabled, all ComputerSystem route options will now return 404. This is to allow the redfish service validator to pass, and to be used for incremental development. As the routes are moved over, they will be enabled, and service validator re-run. Per the description in the meson options, this option flag, and all code beneath of it will be removed on 9/1/23. The expectation is that by this date, given the appropriate level of effort in implementation, there will be no code remaining under that option flag. After this date, code beneath this option flag will be removed. Tested: No functional changes without option. With option enabled, /redfish/v1/Systems produces no entries. Spot check of various routes returns 404. Redfish service validator passes. Change-Id: I3b58642cb76d61df668076c2e0f1e7bed110ae25 Signed-off-by: Ed Tanous <ed@tanous.net>
-rw-r--r--config/bmcweb_config.h.in2
-rw-r--r--config/meson.build2
-rw-r--r--meson.build1
-rw-r--r--meson_options.txt10
-rw-r--r--redfish-core/lib/bios.hpp15
-rw-r--r--redfish-core/lib/fabric_adapters.hpp28
-rw-r--r--redfish-core/lib/log_services.hpp190
-rw-r--r--redfish-core/lib/managers.hpp20
-rw-r--r--redfish-core/lib/memory.hpp16
-rw-r--r--redfish-core/lib/pcie.hpp43
-rw-r--r--redfish-core/lib/processor.hpp62
-rw-r--r--redfish-core/lib/storage.hpp19
-rw-r--r--redfish-core/lib/systems.hpp97
13 files changed, 458 insertions, 47 deletions
diff --git a/config/bmcweb_config.h.in b/config/bmcweb_config.h.in
index df16bc1a07..933c6e8a2b 100644
--- a/config/bmcweb_config.h.in
+++ b/config/bmcweb_config.h.in
@@ -20,4 +20,6 @@ constexpr const char* bmcwebLoggingLevel = "@BMCWEB_LOGGING_LEVEL@";
constexpr const bool bmcwebEnableHealthPopulate = @BMCWEB_ENABLE_HEALTH_POPULATE@ == 1;
constexpr const bool bmcwebEnableProcMemStatus = @BMCWEB_ENABLE_PROC_MEM_STATUS@ == 1;
+
+constexpr const bool bmcwebEnableMultiHost = @BMCWEB_ENABLE_MULTI_HOST@ == 1;
// clang-format on
diff --git a/config/meson.build b/config/meson.build
index 8e2127ef97..11ef95c6e5 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -16,6 +16,8 @@ enable_health_populate = get_option('redfish-health-populate')
conf_data.set10('BMCWEB_ENABLE_HEALTH_POPULATE', enable_health_populate.enabled())
enable_proc_mem_status = get_option('redfish-enable-proccessor-memory-status')
conf_data.set10('BMCWEB_ENABLE_PROC_MEM_STATUS', enable_proc_mem_status.enabled())
+enable_multi_host = get_option('experimental-redfish-multi-computer-system')
+conf_data.set10('BMCWEB_ENABLE_MULTI_HOST', enable_multi_host.enabled())
# Logging level
loglvlopt = get_option('bmcweb-logging')
diff --git a/meson.build b/meson.build
index e59eee9c21..f9d2825d38 100644
--- a/meson.build
+++ b/meson.build
@@ -91,6 +91,7 @@ feature_map = {
'rest' : '-DBMCWEB_ENABLE_DBUS_REST',
'session-auth' : '-DBMCWEB_ENABLE_SESSION_AUTHENTICATION',
'static-hosting' : '-DBMCWEB_ENABLE_STATIC_HOSTING',
+ 'experimental-redfish-multi-computer-system' : '-DBMCWEB_ENABLE_MULTI_COMPUTERSYSTEM',
'vm-websocket' : '-DBMCWEB_ENABLE_VM_WEBSOCKET',
'xtoken-auth' : '-DBMCWEB_ENABLE_XTOKEN_AUTHENTICATION',
#'vm-nbdproxy' : '-DBMCWEB_ENABLE_VM_NBDPROXY',
diff --git a/meson_options.txt b/meson_options.txt
index c1beb25e69..dbfa00d0fe 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -271,6 +271,16 @@ option(
description: 'Allows this BMC to aggregate resources from satellite BMCs'
)
+option(
+ 'experimental-redfish-multi-computer-system',
+ type: 'feature',
+ value: 'disabled',
+ description: '''This is a temporary option flag for staging the
+ ComputerSystemCollection transition to multi-host. It, as well as the code
+ still beneath it will be removed on 9/1/2023. Do not enable in a
+ production environment, or where API stability is required.'''
+)
+
# Insecure options. Every option that starts with a `insecure` flag should
# not be enabled by default for any platform, unless the author fully comprehends
# the implications of doing so.In general, enabling these options will cause security
diff --git a/redfish-core/lib/bios.hpp b/redfish-core/lib/bios.hpp
index 11535165e6..b358b5f68c 100644
--- a/redfish-core/lib/bios.hpp
+++ b/redfish-core/lib/bios.hpp
@@ -19,6 +19,13 @@ inline void
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -63,6 +70,14 @@ inline void
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
diff --git a/redfish-core/lib/fabric_adapters.hpp b/redfish-core/lib/fabric_adapters.hpp
index 2b4b4aefba..d3119d3404 100644
--- a/redfish-core/lib/fabric_adapters.hpp
+++ b/redfish-core/lib/fabric_adapters.hpp
@@ -255,6 +255,13 @@ inline void
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
getValidFabricAdapterPath(
adapterId, systemName, asyncResp,
@@ -274,6 +281,13 @@ inline void handleFabricAdapterCollectionGet(
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -307,6 +321,13 @@ inline void handleFabricAdapterCollectionHead(
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -329,6 +350,13 @@ inline void
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
getValidFabricAdapterPath(adapterId, systemName, asyncResp,
[asyncResp, systemName, adapterId](
const std::string&, const std::string&) {
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index fedf7ad6c0..7ad489b141 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -1088,6 +1088,13 @@ inline void requestRoutesSystemLogServiceCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1359,6 +1366,13 @@ inline void requestRoutesJournalEventLogEntryCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1457,6 +1471,13 @@ inline void requestRoutesJournalEventLogEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
@@ -1527,6 +1548,13 @@ inline void requestRoutesDBusEventLogEntryCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1719,6 +1747,13 @@ inline void requestRoutesDBusEventLogEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1826,6 +1861,13 @@ inline void requestRoutesDBusEventLogEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1869,6 +1911,13 @@ inline void requestRoutesDBusEventLogEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1934,6 +1983,13 @@ inline void requestRoutesDBusEventLogEntryDownload(App& app)
asyncResp->res.result(boost::beast::http::status::bad_request);
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -2103,6 +2159,13 @@ inline void requestRoutesSystemHostLogger(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -2140,6 +2203,13 @@ inline void requestRoutesSystemHostLoggerCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -2217,6 +2287,13 @@ inline void requestRoutesSystemHostLoggerLogEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -2815,15 +2892,24 @@ inline void handleLogServicesDumpCollectDiagnosticDataPost(
inline void handleLogServicesDumpCollectDiagnosticDataComputerSystemPost(
crow::App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& chassisId)
+ const std::string& systemName)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
- if (chassisId != "system")
+
+ if constexpr (bmcwebEnableMultiHost)
{
- messages::resourceNotFound(asyncResp->res, "ComputerSystem", chassisId);
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+ if (systemName != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
return;
}
createDump(asyncResp, req, "System");
@@ -2843,15 +2929,23 @@ inline void handleLogServicesDumpClearLogPost(
inline void handleLogServicesDumpClearLogComputerSystemPost(
crow::App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& chassisId)
+ const std::string& systemName)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
- if (chassisId != "system")
+ if constexpr (bmcwebEnableMultiHost)
{
- messages::resourceNotFound(asyncResp->res, "ComputerSystem", chassisId);
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+ if (systemName != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
return;
}
clearDump(asyncResp, "System");
@@ -3023,6 +3117,13 @@ inline void requestRoutesCrashdumpService(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3074,6 +3175,13 @@ void inline requestRoutesCrashdumpClear(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3184,6 +3292,13 @@ inline void requestRoutesCrashdumpEntryCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3253,6 +3368,13 @@ inline void requestRoutesCrashdumpEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3280,6 +3402,13 @@ inline void requestRoutesCrashdumpFile(App& app)
// Do not call getRedfishRoute here since the crashdump file is not a
// Redfish resource.
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3382,6 +3511,13 @@ inline void requestRoutesCrashdumpCollect(App& app)
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3511,6 +3647,13 @@ inline void requestRoutesDBusLogServiceActionsClear(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3558,6 +3701,13 @@ inline void requestRoutesPostCodesLogService(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3603,6 +3753,13 @@ inline void requestRoutesPostCodesClear(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3945,6 +4102,13 @@ inline void requestRoutesPostCodesEntryCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
@@ -3989,6 +4153,13 @@ inline void requestRoutesPostCodesEntryAdditionalData(App& app)
asyncResp->res.result(boost::beast::http::status::bad_request);
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -4068,6 +4239,13 @@ inline void requestRoutesPostCodesEntry(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index b630609a54..a3f060bdef 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -2006,17 +2006,19 @@ inline void requestRoutesManager(App& app)
asyncResp->res.jsonValue["GraphicalConsole"]["ConnectTypesSupported"] =
nlohmann::json::array_t({"KVMIP"});
#endif // BMCWEB_ENABLE_KVM
+ if constexpr (!bmcwebEnableMultiHost)
+ {
+ asyncResp->res.jsonValue["Links"]["ManagerForServers@odata.count"] =
+ 1;
- asyncResp->res.jsonValue["Links"]["ManagerForServers@odata.count"] = 1;
-
- nlohmann::json::array_t managerForServers;
- nlohmann::json::object_t manager;
- manager["@odata.id"] = "/redfish/v1/Systems/system";
- managerForServers.emplace_back(std::move(manager));
-
- asyncResp->res.jsonValue["Links"]["ManagerForServers"] =
- std::move(managerForServers);
+ nlohmann::json::array_t managerForServers;
+ nlohmann::json::object_t manager;
+ manager["@odata.id"] = "/redfish/v1/Systems/system";
+ managerForServers.emplace_back(std::move(manager));
+ asyncResp->res.jsonValue["Links"]["ManagerForServers"] =
+ std::move(managerForServers);
+ }
if constexpr (bmcwebEnableHealthPopulate)
{
auto health = std::make_shared<HealthPopulate>(asyncResp);
diff --git a/redfish-core/lib/memory.hpp b/redfish-core/lib/memory.hpp
index c85ff26007..6c970db5bb 100644
--- a/redfish-core/lib/memory.hpp
+++ b/redfish-core/lib/memory.hpp
@@ -787,6 +787,13 @@ inline void requestRoutesMemoryCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -823,6 +830,15 @@ inline void requestRoutesMemory(App& app)
{
return;
}
+
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
diff --git a/redfish-core/lib/pcie.hpp b/redfish-core/lib/pcie.hpp
index a89fe1d28e..d623321c1a 100644
--- a/redfish-core/lib/pcie.hpp
+++ b/redfish-core/lib/pcie.hpp
@@ -106,6 +106,13 @@ static inline void handlePCIeDeviceCollectionGet(
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -363,6 +370,13 @@ inline void
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -436,12 +450,19 @@ inline void addPCIeFunctionList(
inline void handlePCIeFunctionCollectionGet(
App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& pcieDeviceId)
+ const std::string& systemName, const std::string& pcieDeviceId)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
getValidPCIeDevicePath(
pcieDeviceId, asyncResp,
@@ -474,7 +495,7 @@ inline void requestRoutesSystemPCIeFunctionCollection(App& app)
* Functions triggers appropriate requests on DBus
*/
BMCWEB_ROUTE(app,
- "/redfish/v1/Systems/system/PCIeDevices/<str>/PCIeFunctions/")
+ "/redfish/v1/Systems/<str>/PCIeDevices/<str>/PCIeFunctions/")
.privileges(redfish::privileges::getPCIeFunctionCollection)
.methods(boost::beast::http::verb::get)(
std::bind_front(handlePCIeFunctionCollectionGet, std::ref(app)));
@@ -574,6 +595,7 @@ inline void addPCIeFunctionCommonProperties(crow::Response& resp,
inline void
handlePCIeFunctionGet(App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& systemName,
const std::string& pcieDeviceId,
const std::string& pcieFunctionIdStr)
{
@@ -581,6 +603,20 @@ inline void
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+ if (systemName != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
uint64_t pcieFunctionId = 0;
std::from_chars_result result = std::from_chars(
&*pcieFunctionIdStr.begin(), &*pcieFunctionIdStr.end(), pcieFunctionId);
@@ -610,8 +646,7 @@ inline void
inline void requestRoutesSystemPCIeFunction(App& app)
{
BMCWEB_ROUTE(
- app,
- "/redfish/v1/Systems/system/PCIeDevices/<str>/PCIeFunctions/<str>/")
+ app, "/redfish/v1/Systems/<str>/PCIeDevices/<str>/PCIeFunctions/<str>/")
.privileges(redfish::privileges::getPCIeFunction)
.methods(boost::beast::http::verb::get)(
std::bind_front(handlePCIeFunctionGet, std::ref(app)));
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index 2d52cd7519..1806ffc4bc 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -1163,17 +1163,32 @@ inline void handleProcessorCollectionHead(
inline void requestRoutesOperatingConfigCollection(App& app)
{
- BMCWEB_ROUTE(
- app, "/redfish/v1/Systems/system/Processors/<str>/OperatingConfigs/")
+ BMCWEB_ROUTE(app,
+ "/redfish/v1/Systems/<str>/Processors/<str>/OperatingConfigs/")
.privileges(redfish::privileges::getOperatingConfigCollection)
.methods(boost::beast::http::verb::get)(
[&app](const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& cpuName) {
+ const std::string& systemName, const std::string& cpuName) {
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
+
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
+ if (systemName != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
asyncResp->res.jsonValue["@odata.type"] =
"#OperatingConfigCollection.OperatingConfigCollection";
asyncResp->res.jsonValue["@odata.id"] = boost::urls::format(
@@ -1230,16 +1245,31 @@ inline void requestRoutesOperatingConfig(App& app)
{
BMCWEB_ROUTE(
app,
- "/redfish/v1/Systems/system/Processors/<str>/OperatingConfigs/<str>/")
+ "/redfish/v1/Systems/<str>/Processors/<str>/OperatingConfigs/<str>/")
.privileges(redfish::privileges::getOperatingConfig)
.methods(boost::beast::http::verb::get)(
[&app](const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& cpuName, const std::string& configName) {
+ const std::string& systemName, const std::string& cpuName,
+ const std::string& configName) {
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
+ if (systemName != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
// Ask for all objects implementing OperatingConfig so we can search
// for one with a matching name
constexpr std::array<std::string_view, 1> interfaces = {
@@ -1306,6 +1336,14 @@ inline void requestRoutesProcessorCollection(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1353,6 +1391,13 @@ inline void requestRoutesProcessor(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -1384,6 +1429,13 @@ inline void requestRoutesProcessor(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp
index fce53f41a6..6b60ae75fa 100644
--- a/redfish-core/lib/storage.hpp
+++ b/redfish-core/lib/storage.hpp
@@ -96,7 +96,6 @@ inline void requestRoutesStorageCollection(App& app)
.privileges(redfish::privileges::getStorageCollection)
.methods(boost::beast::http::verb::get)(
std::bind_front(handleSystemsStorageCollectionGet, std::ref(app)));
-
BMCWEB_ROUTE(app, "/redfish/v1/Storage/")
.privileges(redfish::privileges::getStorageCollection)
.methods(boost::beast::http::verb::get)(
@@ -202,12 +201,20 @@ inline void afterSystemsStorageGetSubtree(
inline void
handleSystemsStorageGet(App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& systemName,
const std::string& storageId)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
constexpr std::array<std::string_view, 1> interfaces = {
"xyz.openbmc_project.Inventory.Item.Storage"};
@@ -280,7 +287,7 @@ inline void
inline void requestRoutesStorage(App& app)
{
- BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/Storage/<str>/")
+ BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/Storage/<str>/")
.privileges(redfish::privileges::getStorage)
.methods(boost::beast::http::verb::get)(
std::bind_front(handleSystemsStorageGet, std::ref(app)));
@@ -705,6 +712,14 @@ inline void handleSystemsStorageDriveGet(
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 86730a5368..26905bf701 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -2833,28 +2833,46 @@ inline void requestRoutesSystemsCollection(App& app)
asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/Systems";
asyncResp->res.jsonValue["Name"] = "Computer System Collection";
+ nlohmann::json& ifaceArray = asyncResp->res.jsonValue["Members"];
+ ifaceArray = nlohmann::json::array();
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ asyncResp->res.jsonValue["Members@odata.count"] = 0;
+ // Option currently returns no systems. TBD
+ return;
+ }
+ asyncResp->res.jsonValue["Members@odata.count"] = 1;
+ nlohmann::json::object_t system;
+ system["@odata.id"] = "/redfish/v1/Systems/system";
+ ifaceArray.emplace_back(std::move(system));
sdbusplus::asio::getProperty<std::string>(
*crow::connections::systemBus, "xyz.openbmc_project.Settings",
"/xyz/openbmc_project/network/hypervisor",
"xyz.openbmc_project.Network.SystemConfiguration", "HostName",
[asyncResp](const boost::system::error_code& ec2,
const std::string& /*hostName*/) {
- nlohmann::json& ifaceArray = asyncResp->res.jsonValue["Members"];
- ifaceArray = nlohmann::json::array();
- auto& count = asyncResp->res.jsonValue["Members@odata.count"];
-
- nlohmann::json::object_t system;
- system["@odata.id"] = "/redfish/v1/Systems/system";
- ifaceArray.emplace_back(std::move(system));
- count = ifaceArray.size();
- if (!ec2)
+ if (ec2)
{
- BMCWEB_LOG_DEBUG << "Hypervisor is available";
- nlohmann::json::object_t hypervisor;
- hypervisor["@odata.id"] = "/redfish/v1/Systems/hypervisor";
- ifaceArray.emplace_back(std::move(hypervisor));
- count = ifaceArray.size();
+ return;
+ }
+ auto val = asyncResp->res.jsonValue.find("Members@odata.count");
+ if (val == asyncResp->res.jsonValue.end())
+ {
+ BMCWEB_LOG_CRITICAL << "Count wasn't found??";
+ return;
+ }
+ uint64_t* count = val->get_ptr<uint64_t*>();
+ if (count == nullptr)
+ {
+ BMCWEB_LOG_CRITICAL << "Count wasn't found??";
+ return;
}
+ *count = *count + 1;
+ BMCWEB_LOG_DEBUG << "Hypervisor is available";
+ nlohmann::json& ifaceArray2 = asyncResp->res.jsonValue["Members"];
+ nlohmann::json::object_t hypervisor;
+ hypervisor["@odata.id"] = "/redfish/v1/Systems/hypervisor";
+ ifaceArray2.emplace_back(std::move(hypervisor));
});
});
}
@@ -2933,16 +2951,29 @@ inline void requestRoutesSystemActionsReset(App& app)
* Function handles POST method request.
* Analyzes POST body message before sends Reset request data to D-Bus.
*/
- BMCWEB_ROUTE(app,
- "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset/")
+ BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/Actions/ComputerSystem.Reset/")
.privileges(redfish::privileges::postComputerSystem)
.methods(boost::beast::http::verb::post)(
[&app](const crow::Request& req,
- const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& systemId) {
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemId);
+ return;
+ }
+ if (systemId != "system")
+ {
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemId);
+ return;
+ }
std::string resetType;
if (!json_util::readJsonAction(req, asyncResp->res, "ResetType",
resetType))
@@ -3041,7 +3072,8 @@ inline void requestRoutesSystemActionsReset(App& app)
inline void handleComputerSystemCollectionHead(
App& app, const crow::Request& req,
- const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& /*systemName*/)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
@@ -3094,7 +3126,7 @@ inline void afterPortRequest(
*/
inline void requestRoutesSystems(App& app)
{
- BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/")
+ BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/")
.privileges(redfish::privileges::headComputerSystem)
.methods(boost::beast::http::verb::head)(
std::bind_front(handleComputerSystemCollectionHead, std::ref(app)));
@@ -3112,6 +3144,14 @@ inline void requestRoutesSystems(App& app)
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
+
if (systemName == "hypervisor")
{
handleHypervisorSystemGet(asyncResp);
@@ -3261,6 +3301,13 @@ inline void requestRoutesSystems(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName != "system")
{
messages::resourceNotFound(asyncResp->res, "ComputerSystem",
@@ -3386,7 +3433,8 @@ inline void requestRoutesSystems(App& app)
inline void handleSystemCollectionResetActionHead(
crow::App& app, const crow::Request& req,
- const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const std::string& /*systemId*/)
{
if (!redfish::setUpRedfishRoute(app, req, asyncResp))
{
@@ -3403,7 +3451,7 @@ inline void handleSystemCollectionResetActionHead(
*/
inline void requestRoutesSystemResetActionInfo(App& app)
{
- BMCWEB_ROUTE(app, "/redfish/v1/Systems/system/ResetActionInfo/")
+ BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/ResetActionInfo/")
.privileges(redfish::privileges::headActionInfo)
.methods(boost::beast::http::verb::head)(std::bind_front(
handleSystemCollectionResetActionHead, std::ref(app)));
@@ -3420,6 +3468,13 @@ inline void requestRoutesSystemResetActionInfo(App& app)
{
return;
}
+ if constexpr (bmcwebEnableMultiHost)
+ {
+ // Option currently returns no systems. TBD
+ messages::resourceNotFound(asyncResp->res, "ComputerSystem",
+ systemName);
+ return;
+ }
if (systemName == "hypervisor")
{