blob: 903749e3efd1b1c605cf0a140f45404f01d26d4e [file] [log] [blame] [edit]
#pragma once
#include <string>
#include "baremetal.grpc.pb.h"
#include "grpcblob_defs.h"
#include "grpcpp/server_context.h"
#include "grpcpp/support/status.h"
namespace blobs {
class BaremetalTransferServiceImpl final
: public phosphor::baremetal::grpc_gen::BaremetalTransferService::Service {
public:
explicit BaremetalTransferServiceImpl(int instance,
const std::string& basePath)
: phosphor::baremetal::grpc_gen::BaremetalTransferService::Service(),
instanceNumber(instance),
instanceString(std::to_string(instance + 1)),
basePath_(basePath),
bmSignalPath(basePath + "/run/bm-ready.flag"),
linuxBootDonePath(basePath + "/run/linux-boot-done.flag"),
bmInstanceBasePath(basePath + "/run/bm-instance/"),
bmDriveCleaningFlagPath(basePath + "/run/bm-drive-cleaning.flag"),
bmDriveCleaningDoneFlagPath(basePath +
"/run/bm-drive-cleaning-done.flag"),
bmDriveCleaningDoneAckFlagPath(basePath +
"/run/bm-drive-cleaning-done-ack.flag")
// Instance ID will be 1-indexed to better match the redfish Systems
{
// For the last instance, use 0 as instanceString as last instance is used
// only in single-host machines.
if ((instanceNumber + 1) == numInstances) {
instanceString = "0";
}
}
grpc::Status BmModeTransfer(
[[maybe_unused]] grpc::ServerContext* context,
[[maybe_unused]] const phosphor::baremetal::BmModeRequest* request,
phosphor::baremetal::BmModeResponse* response);
grpc::Status LinuxBootDone(
[[maybe_unused]] grpc::ServerContext* context,
[[maybe_unused]] const phosphor::baremetal::LinuxBootDoneRequest* request,
[[maybe_unused]] phosphor::baremetal::LinuxBootDoneResponse* response);
grpc::Status BMInstancePropertiesTransfer(
[[maybe_unused]] grpc::ServerContext* context,
[[maybe_unused]] const phosphor::baremetal::
BMInstancePropertiesTransferRequest* request,
phosphor::baremetal::BMInstancePropertiesTransferResponse* response);
private:
int instanceNumber;
std::string instanceString;
std::string basePath_;
std::string bmSignalPath;
std::string linuxBootDonePath;
std::string bmInstanceBasePath;
std::string bmDriveCleaningFlagPath;
std::string bmDriveCleaningDoneFlagPath;
std::string bmDriveCleaningDoneAckFlagPath;
std::string readBMInstanceFromFile(const std::string& bmInstancePath);
};
} // namespace blobs