Apply Expression Substitution for I2C Bus in Entity Config.

The bus number varies on different mobos in server3.

#tlbmc

PiperOrigin-RevId: 780345227
Change-Id: Iaa030d08fbae6822b66e52b41787a30421c8b4d3
diff --git a/tlbmc/configs/entity_config_json_impl.cc b/tlbmc/configs/entity_config_json_impl.cc
index a2314ca..68d29e2 100644
--- a/tlbmc/configs/entity_config_json_impl.cc
+++ b/tlbmc/configs/entity_config_json_impl.cc
@@ -1088,7 +1088,30 @@
         const std::string* config_bus = GetValueAsString(element, "Bus");
         if (config_bus != nullptr && fru_info.has_i2c_info() &&
             absl::StrContainsIgnoreCase(*config_bus, "$bus")) {
-          element["Bus"] = fru_info.i2c_info().bus();
+          absl::string_view config_bus_view(*config_bus);
+          absl::StatusOr<std::string> bus_value_substitute_result =
+              EvaluateStrExpressionSubstitution(
+                  config_bus_view,
+                  absl::StrContains(config_bus_view, "$bus") ? "$bus" : "$BUS",
+                  absl::StrCat(fru_info.i2c_info().bus()));
+          if (!bus_value_substitute_result.ok()) {
+            mutable_data.parsed_status = bus_value_substitute_result.status();
+            return EntityConfigJsonImplData{
+                .immutable_data = std::move(immutable_data),
+                .mutable_data = std::move(mutable_data),
+                .max_updates_to_mutable_data = ad_hoc_fru_count};
+          }
+          uint64_t bus_value;
+          if (!absl::SimpleAtoi(*bus_value_substitute_result, &bus_value)) {
+            LOG(WARNING) << absl::StrCat(
+                "Invalid json: Failed to convert value at Bus",
+                " to unsigned value: ", config_bus_view);
+            return EntityConfigJsonImplData{
+                .immutable_data = std::move(immutable_data),
+                .mutable_data = std::move(mutable_data),
+                .max_updates_to_mutable_data = ad_hoc_fru_count};
+          }
+          element["Bus"] = bus_value;
         }
 
         // Substitute Address field.