1c893f43dSJason Ling /* 2c893f43dSJason Ling * Copyright 2019 Google Inc. 3c893f43dSJason Ling * 4c893f43dSJason Ling * Licensed under the Apache License, Version 2.0 (the "License"); 5c893f43dSJason Ling * you may not use this file except in compliance with the License. 6c893f43dSJason Ling * You may obtain a copy of the License at 7c893f43dSJason Ling * 8c893f43dSJason Ling * http://www.apache.org/licenses/LICENSE-2.0 9c893f43dSJason Ling * 10c893f43dSJason Ling * Unless required by applicable law or agreed to in writing, software 11c893f43dSJason Ling * distributed under the License is distributed on an "AS IS" BASIS, 12c893f43dSJason Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c893f43dSJason Ling * See the License for the specific language governing permissions and 14c893f43dSJason Ling * limitations under the License. 15c893f43dSJason Ling */ 16c893f43dSJason Ling #include "buildjson.hpp" 17c893f43dSJason Ling 18c893f43dSJason Ling #include "file_handler.hpp" 19*bec23189SWilliam A. Kennington III #include "general_systemd.hpp" 20c893f43dSJason Ling 21c893f43dSJason Ling #include <nlohmann/json.hpp> 22c893f43dSJason Ling #include <sdbusplus/bus.hpp> 23c893f43dSJason Ling 24c893f43dSJason Ling #include <algorithm> 25c893f43dSJason Ling #include <cstdio> 26c893f43dSJason Ling #include <exception> 27c893f43dSJason Ling #include <fstream> 28c893f43dSJason Ling #include <string> 29c893f43dSJason Ling 30c893f43dSJason Ling namespace ipmi_flash 31c893f43dSJason Ling { 32c893f43dSJason Ling 33c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface> buildFileSystemd(const nlohmann::json & data)34c893f43dSJason Ling buildFileSystemd(const nlohmann::json& data) 35c893f43dSJason Ling { 36c893f43dSJason Ling /* This type of action requires a path and unit, and optionally a mode. */ 37c893f43dSJason Ling const auto& path = data.at("path"); 38c893f43dSJason Ling const auto& unit = data.at("unit"); 39c893f43dSJason Ling 40c893f43dSJason Ling /* the mode parameter is optional. */ 41c893f43dSJason Ling std::string systemdMode = "replace"; 42c893f43dSJason Ling const auto& mode = data.find("mode"); 43c893f43dSJason Ling if (mode != data.end()) 44c893f43dSJason Ling { 45c893f43dSJason Ling systemdMode = data.at("mode").get<std::string>(); 46c893f43dSJason Ling } 47c893f43dSJason Ling 48c893f43dSJason Ling return SystemdWithStatusFile::CreateSystemdWithStatusFile( 49c893f43dSJason Ling sdbusplus::bus::new_default(), path, unit, systemdMode); 50c893f43dSJason Ling } 51c893f43dSJason Ling 52c893f43dSJason Ling std::unique_ptr<TriggerableActionInterface> buildSystemd(const nlohmann::json & data)53c893f43dSJason Ling buildSystemd(const nlohmann::json& data) 54c893f43dSJason Ling { 55c893f43dSJason Ling /* This type of action requires a unit, and optionally a mode. */ 56c893f43dSJason Ling const auto& unit = data.at("unit"); 57c893f43dSJason Ling 58c893f43dSJason Ling /* the mode parameter is optional. */ 59c893f43dSJason Ling std::string systemdMode = "replace"; 60c893f43dSJason Ling const auto& mode = data.find("mode"); 61c893f43dSJason Ling if (mode != data.end()) 62c893f43dSJason Ling { 63c893f43dSJason Ling systemdMode = data.at("mode").get<std::string>(); 64c893f43dSJason Ling } 65c893f43dSJason Ling 66c893f43dSJason Ling return SystemdNoFile::CreateSystemdNoFile(sdbusplus::bus::new_default(), 67c893f43dSJason Ling unit, systemdMode); 68c893f43dSJason Ling } 69c893f43dSJason Ling 70c893f43dSJason Ling } // namespace ipmi_flash 71