diff options
author | Gunnar Mills <gmills@us.ibm.com> | 2020-05-20 03:18:17 +0300 |
---|---|---|
committer | Gunnar Mills <gmills@us.ibm.com> | 2020-06-04 20:54:05 +0300 |
commit | 3e40fc742265c3ec1384e7e5994e62aed356331f (patch) | |
tree | 9a55827a7568f375f65400e28376a02446806191 /redfish-core | |
parent | d4342a9202e8781a3634a14c4d5311aaaab23fda (diff) | |
download | bmcweb-3e40fc742265c3ec1384e7e5994e62aed356331f.tar.xz |
Redfish: Manager: ResetToDefault
ResetToDefaults, called factory reset in OpenBMC, was added in
2020.1.
Calls BMC code updater factory reset since BMC code updater factory
reset wipes the whole BMC read-write filesystem which includes things
like the network settings.
OpenBMC only supports ResetToDefaultsType "ResetAll".
Depends on
https://gerrit.openbmc-project.xyz/c/openbmc/phosphor-bmc-code-mgmt/+/32989
Tested: Along with 32989, validator passes and was able to
factory reset.
curl -k https://$bmc/redfish/v1/Managers/bmc
{
"@odata.id": "/redfish/v1/Managers/bmc",
"@odata.type": "#Manager.v1_8_0.Manager",
"Actions": {
"#Manager.Reset": {
"ResetType@Redfish.AllowableValues": [
"GracefulRestart"
],
"target": "/redfish/v1/Managers/bmc/Actions/Manager.Reset"
},
"#Manager.ResetToDefaults": {
"ResetType@Redfish.AllowableValues": [
"ResetAll"
],
"target": "/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults"
}
},
...
curl -k -X POST \
https://${bmc}/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults \
-d '{"ResetToDefaultsType": "ResetAll"}'
{
"@Message.ExtendedInfo": [
{
"@odata.type": "#Message.v1_0_0.Message",
"Message": "Successfully Completed Request",
"MessageArgs": [],
"MessageId": "Base.1.4.0.Success",
"Resolution": "None",
"Severity": "OK"
}
]
}
Change-Id: Ia830fd05dc15fd6311f84dff191a3718c645c040
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
Diffstat (limited to 'redfish-core')
-rw-r--r-- | redfish-core/include/redfish.hpp | 1 | ||||
-rw-r--r-- | redfish-core/lib/managers.hpp | 83 |
2 files changed, 83 insertions, 1 deletions
diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp index 92245aa527..19cd0b825a 100644 --- a/redfish-core/include/redfish.hpp +++ b/redfish-core/include/redfish.hpp @@ -75,6 +75,7 @@ class RedfishService nodes.emplace_back(std::make_unique<ManagerCollection>(app)); nodes.emplace_back(std::make_unique<Manager>(app)); nodes.emplace_back(std::make_unique<ManagerResetAction>(app)); + nodes.emplace_back(std::make_unique<ManagerResetToDefaultsAction>(app)); nodes.emplace_back(std::make_unique<Power>(app)); nodes.emplace_back(std::make_unique<ChassisCollection>(app)); nodes.emplace_back(std::make_unique<Chassis>(app)); diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp index 65de109e3a..8a74ed2c75 100644 --- a/redfish-core/lib/managers.hpp +++ b/redfish-core/lib/managers.hpp @@ -110,6 +110,78 @@ class ManagerResetAction : public Node } }; +/** + * ManagerResetToDefaultsAction class supports POST method for factory reset + * action. + */ +class ManagerResetToDefaultsAction : public Node +{ + public: + ManagerResetToDefaultsAction(CrowApp& app) : + Node(app, "/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults/") + { + entityPrivileges = { + {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; + } + + private: + /** + * Function handles ResetToDefaults POST method request. + * + * Analyzes POST body message and factory resets BMC by calling + * BMC code updater factory reset followed by a BMC reboot. + * + * BMC code updater factory reset wipes the whole BMC read-write + * filesystem which includes things like the network settings. + * + * OpenBMC only supports ResetToDefaultsType "ResetAll". + */ + void doPost(crow::Response& res, const crow::Request& req, + const std::vector<std::string>& params) override + { + BMCWEB_LOG_DEBUG << "Post ResetToDefaults."; + + std::string resetType; + auto asyncResp = std::make_shared<AsyncResp>(res); + + if (!json_util::readJson(req, asyncResp->res, "ResetToDefaultsType", + resetType)) + { + BMCWEB_LOG_DEBUG << "Missing property ResetToDefaultsType."; + + messages::actionParameterMissing(asyncResp->res, "ResetToDefaults", + "ResetToDefaultsType"); + return; + } + + if (resetType != "ResetAll") + { + BMCWEB_LOG_DEBUG << "Invalid property value for " + "ResetToDefaultsType: " + << resetType; + messages::actionParameterNotSupported(asyncResp->res, resetType, + "ResetToDefaultsType"); + return; + } + + crow::connections::systemBus->async_method_call( + [asyncResp](const boost::system::error_code ec) { + if (ec) + { + BMCWEB_LOG_DEBUG << "Failed to ResetToDefaults: " << ec; + messages::internalError(asyncResp->res); + return; + } + // Factory Reset doesn't actually happen until a reboot + // Can't erase what the BMC is running on + doBMCGracefulRestart(asyncResp); + }, + "xyz.openbmc_project.Software.BMC.Updater", + "/xyz/openbmc_project/software", + "xyz.openbmc_project.Common.FactoryReset", "Reset"); + } +}; + static constexpr const char* objectManagerIface = "org.freedesktop.DBus.ObjectManager"; static constexpr const char* pidConfigurationIface = @@ -1561,7 +1633,7 @@ class Manager : public Node const std::vector<std::string>& params) override { res.jsonValue["@odata.id"] = "/redfish/v1/Managers/bmc"; - res.jsonValue["@odata.type"] = "#Manager.v1_3_0.Manager"; + res.jsonValue["@odata.type"] = "#Manager.v1_8_0.Manager"; res.jsonValue["Id"] = "bmc"; res.jsonValue["Name"] = "OpenBmc Manager"; res.jsonValue["Description"] = "Baseboard Management Controller"; @@ -1604,6 +1676,15 @@ class Manager : public Node "/redfish/v1/Managers/bmc/Actions/Manager.Reset"; managerReset["ResetType@Redfish.AllowableValues"] = {"GracefulRestart"}; + // ResetToDefaults (Factory Reset) has values like + // PreserveNetworkAndUsers and PreserveNetwork that aren't supported + // on OpenBMC + nlohmann::json& resetToDefaults = + res.jsonValue["Actions"]["#Manager.ResetToDefaults"]; + resetToDefaults["target"] = + "/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults"; + resetToDefaults["ResetType@Redfish.AllowableValues"] = {"ResetAll"}; + res.jsonValue["DateTime"] = crow::utility::dateTimeNow(); // Fill in SerialConsole info |