PEL: Save BMC Version ID in UserData section
When creating a PEL, save the VERSION_ID value from the /etc/os-release
file in the UserData section that keeps useful system information.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I6d9008b15c5347239bf8c21ef79219d3b6ee08e6
diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index 6ad8b6e..3342569 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -55,6 +55,7 @@
readHostState();
readBMCFWVersion();
readServerFWVersion();
+ readBMCFWVersionID();
}
void DataInterface::readMTMS()
@@ -244,21 +245,35 @@
#endif
}
-void DataInterface::readBMCFWVersion()
+/**
+ * @brief Return a value found in the /etc/os-release file
+ *
+ * @param[in] key - The key name, like "VERSION"
+ *
+ * @return std::optional<std::string> - The value
+ */
+std::optional<std::string> getOSReleaseValue(const std::string& key)
{
std::ifstream versionFile{BMC_VERSION_FILE};
std::string line;
- static const auto versionID = "VERSION=";
+ std::string keyPattern{key + '='};
while (std::getline(versionFile, line))
{
- if (line.find(versionID) != std::string::npos)
+ if (line.find(keyPattern) != std::string::npos)
{
auto pos = line.find_first_of('"') + 1;
- _bmcFWVersion = line.substr(pos, line.find_last_of('"') - pos);
- break;
+ auto value = line.substr(pos, line.find_last_of('"') - pos);
+ return value;
}
}
+
+ return std::nullopt;
+}
+
+void DataInterface::readBMCFWVersion()
+{
+ _bmcFWVersion = getOSReleaseValue("VERSION").value_or("");
}
void DataInterface::readServerFWVersion()
@@ -266,5 +281,10 @@
// Not available yet
}
+void DataInterface::readBMCFWVersionID()
+{
+ _bmcFWVersionID = getOSReleaseValue("VERSION_ID").value_or("");
+}
+
} // namespace pels
} // namespace openpower