blob: 620e9777564fd219da2286e450861902b6a6b678 [file] [log] [blame]
/*
// Copyright (c) 2019 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#ifndef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
#pragma once
#include <node.hpp>
namespace redfish
{
template <typename CallbackFunc>
void getMainChassisId(std::shared_ptr<bmcweb::AsyncResp> asyncResp,
CallbackFunc&& callback)
{
// Find managed chassis
crow::connections::systemBus->async_method_call(
[callback,
asyncResp](const boost::system::error_code ec,
const crow::openbmc_mapper::GetSubTreeType& subtree) {
if (ec)
{
BMCWEB_LOG_ERROR << ec;
return;
}
if (subtree.size() == 0)
{
BMCWEB_LOG_DEBUG << "Can't find chassis!";
return;
}
std::size_t idPos = subtree[0].first.rfind('/');
if (idPos == std::string::npos ||
(idPos + 1) >= subtree[0].first.size())
{
messages::internalError(asyncResp->res);
BMCWEB_LOG_DEBUG << "Can't parse chassis ID!";
return;
}
std::string chassisId = subtree[0].first.substr(idPos + 1);
BMCWEB_LOG_DEBUG << "chassisId = " << chassisId;
callback(chassisId, asyncResp);
},
"xyz.openbmc_project.ObjectMapper",
"/xyz/openbmc_project/object_mapper",
"xyz.openbmc_project.ObjectMapper", "GetSubTree",
"/xyz/openbmc_project/inventory", 0,
std::array<const char*, 2>{
"xyz.openbmc_project.Inventory.Item.Board",
"xyz.openbmc_project.Inventory.Item.Chassis"});
}
} // namespace redfish
#endif