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