Add controller calls to fill out ModelMetadata using service calls.

BUG=chromium:1071620
TEST=manual, run_tests

Change-Id: Ia09f2a6a547460f36484ce309ad84b1f1f52903d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2220161
Tested-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/packages.py b/api/controller/packages.py
index ef1a050..909b66a 100644
--- a/api/controller/packages.py
+++ b/api/controller/packages.py
@@ -232,8 +232,6 @@
   build_target_metadata.arc_use_set = 'arc' in portage_util.GetBoardUseFlags(
       build_target.name)
 
-  # TODO(crbug/1071620): Add service layer calls to fill out the rest of
-  # build_target_metadata and model_metadata.
   fw_versions = packages.determine_firmware_versions(build_target)
   build_target_metadata.main_firmware_version = fw_versions.main_fw_version
   build_target_metadata.ec_firmware_version = fw_versions.ec_fw_version
@@ -242,6 +240,25 @@
   for fingerprint in packages.find_fingerprints(build_target):
     build_target_metadata.fingerprints.append(fingerprint)
 
+  models = packages.get_models(build_target)
+  if models:
+    all_fw_versions = packages.get_all_firmware_versions(build_target)
+    for model in models:
+      if model in all_fw_versions:
+        fw_versions = all_fw_versions[model]
+        ec = fw_versions.ec_rw or fw_versions.ec
+        main_ro = fw_versions.main
+        main_rw = fw_versions.main_rw or main_ro
+        # Get the firmware key-id for the current board and model.
+        key_id = packages.get_key_id(build_target, model)
+        model_metadata = output_proto.model_metadata.add()
+        model_metadata.model_name = model
+        model_metadata.ec_firmware_version = ec
+        model_metadata.firmware_key_id = key_id
+        model_metadata.main_readonly_firmware_version = main_ro
+        model_metadata.main_readwrite_firmware_version = main_rw
+
+
 def _HasPrebuiltSuccess(_input_proto, output_proto, _config):
   """The mock success case for HasChromePrebuilt."""
   output_proto.has_prebuilt = True