| #include <memory> | |
| #include <string> | |
| #include <string_view> | |
| #include <vector> | |
| #include "boost/process.hpp" // NOLINT | |
| #include "boost/system/error_code.hpp" // NOLINT | |
| #include "async_resp.hpp" | |
| #include "subprocess_utils.hpp" | |
| #include <nlohmann/json.hpp> | |
| namespace redfish { | |
| static std::vector<std::string> resetCmdSystem(const int& delayTimeSecs, | |
| std::string_view resetType, | |
| std::string_view systemName) { | |
| nlohmann::json resetOp; | |
| resetOp["ResetType"] = resetType; | |
| std::string resetURI = "localhost:80/redfish/v1/Systems/" + | |
| std::string(systemName) + | |
| "/Actions/ComputerSystem.Reset"; | |
| std::vector<std::string> resetCmd = { | |
| "systemd-run", | |
| "--on-active=" + std::to_string(delayTimeSecs), | |
| "--timer-property=AccuracySec=100ms", | |
| "--", | |
| "curl", | |
| "-d", | |
| resetOp.dump(), | |
| "-H", | |
| "Content-Type: application/json", | |
| "-X", | |
| "POST", | |
| resetURI}; | |
| return resetCmd; | |
| } | |
| /* Have systemd run a curl command in a set amount of time | |
| * resetURI: Chassis or Systems based on where you want to reset | |
| * resetTimeSec: The amount of seconds to delay reset | |
| * resetOp: same as resetType variable here | |
| * asyncResp update the response | |
| */ | |
| void delayResetSystem(std::string_view systemName, int delayTimeSecs, | |
| std::string_view resetType, | |
| const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) { | |
| SubprocessUtilsBase::getInstance()->childProcessRun( | |
| asyncResp, resetCmdSystem(delayTimeSecs, resetType, systemName)); | |
| } | |
| } // namespace redfish |