diff options
| author | James Feist <james.feist@linux.intel.com> | 2019-10-21 16:10:49 -0700 |
|---|---|---|
| committer | James Feist <james.feist@linux.intel.com> | 2019-10-23 23:18:58 +0000 |
| commit | 22984074fa0ec13967fe95b93282de2294411c6b (patch) | |
| tree | 54020d0215697049c9694b08a1f2c3cdeaf00d03 | |
| parent | a25aeccf45933dbccfd68c633d0ae13ddd3e1962 (diff) | |
| download | bmcweb-22984074fa0ec13967fe95b93282de2294411c6b.tar.gz bmcweb-22984074fa0ec13967fe95b93282de2294411c6b.zip | |
Add Rebuilding to Drives
When the xyz.openbmc_project.Drive.State has rebuilding
set true, make the state Updating.
Tested:
{
"@odata.context": "/redfish/v1/$metadata#Drive.Drive",
"@odata.id": "/redfish/v1/Systems/system/Storage/1/Drive/Drive_1",
"@odata.type": "#Drive.v1_2_0.Drive",
"Id": "Drive_1",
"Manufacturer": "INTEL",
"Model": "P4800X",
"Name": "Drive_1",
"PartNumber": "INTEL SSDPE21K375GA",
"SerialNumber": "PHKE722600NL375AGN",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Updating"
}
}
Change-Id: I401e5a8c416d969831cebde8b5b0723f41c3e1c7
Signed-off-by: James Feist <james.feist@linux.intel.com>
| -rw-r--r-- | redfish-core/lib/storage.hpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp index 3c4fe4c..5554839 100644 --- a/redfish-core/lib/storage.hpp +++ b/redfish-core/lib/storage.hpp @@ -274,6 +274,35 @@ class Drive : public Node }, connectionName, path, "org.freedesktop.DBus.Properties", "Get", "xyz.openbmc_project.Inventory.Item", "Present"); + + crow::connections::systemBus->async_method_call( + [asyncResp](const boost::system::error_code ec, + const std::variant<bool> rebuilding) { + // this interface isn't necessary, only check it if we + // get a good return + if (ec) + { + return; + } + const bool *updating = std::get_if<bool>(&rebuilding); + if (updating == nullptr) + { + BMCWEB_LOG_DEBUG << "Illegal property present"; + messages::internalError(asyncResp->res); + return; + } + + // updating and disabled in the backend shouldn't be + // able to be set at the same time, so we don't need to + // check for the race condition of these two calls + if ((*updating)) + { + asyncResp->res.jsonValue["Status"]["State"] = + "Updating"; + } + }, + connectionName, path, "org.freedesktop.DBus.Properties", + "Get", "xyz.openbmc_project.State.Drive", "Rebuilding"); }, "xyz.openbmc_project.ObjectMapper", "/xyz/openbmc_project/object_mapper", |

