config: Goldeneye is the authority for what boards exist.

GoldenEye is the authoritative source for what boards exist.  In order
to create a release (etc), that needs to be in GoldenEye.

BUG=None
TEST=refresh

Change-Id: I952351681c2cd27e715f65616c7aaa0717fd9616
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2676602
Reviewed-by: Mike Nichols <mikenichols@chromium.org>
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Tested-by: LaMont Jones <lamontjones@chromium.org>
diff --git a/config/chromeos_config.py b/config/chromeos_config.py
index b4bf419..55bbfaa 100644
--- a/config/chromeos_config.py
+++ b/config/chromeos_config.py
@@ -24,6 +24,17 @@
 from chromite.config.chromeos_test_config import getInfoVMTest
 
 
+def _frozen_ge_set(ge_build_config, values, extras=None):
+  """Return a frozenset of things in GE."""
+  separate_board_names = set(config_lib.GeBuildConfigAllBoards(ge_build_config))
+  unified_builds = config_lib.GetUnifiedBuildConfigAllBuilds(ge_build_config)
+  unified_board_names = set([b[config_lib.CONFIG_TEMPLATE_REFERENCE_BOARD_NAME]
+                             for b in unified_builds])
+  board_names = separate_board_names | unified_board_names
+  return frozenset(
+      x for x in values if x in board_names).union(extras or frozenset())
+
+
 def remove_images(unsupported_images):
   """Remove unsupported images when applying changes to a BuildConfig.
 
@@ -1237,7 +1248,7 @@
       site_config.templates.master_android_pfq_mixin,
       schedule='with 150m interval'
   )
-  _vmmst_no_hwtest_boards = frozenset([
+  _vmmst_no_hwtest_boards = _frozen_ge_set(ge_build_config, [
       'betty-arcvm-master', # No HWTest, No VMTest.
       'hatch-arc-s',
   ])
@@ -1251,14 +1262,14 @@
       schedule='with 60m interval',
   )
 
-  _pi_no_hwtest_boards = frozenset([
+  _pi_no_hwtest_boards = _frozen_ge_set(ge_build_config, [
       'caroline',
       'coral',
       'eve', # TODO(b/172889735): Temporary no_hwtest.
       'reef',
   ])
-  _pi_no_hwtest_experimental_boards = frozenset([])
-  _pi_hwtest_boards = frozenset([
+  _pi_no_hwtest_experimental_boards = _frozen_ge_set(ge_build_config, [])
+  _pi_hwtest_boards = _frozen_ge_set(ge_build_config, [
       # TODO(b/172889735): Temporary disable eve because DUTs are reserved
       # due to crbug/1141713. Instead, adding rammus to cover x86_64.
       # 'eve',
@@ -1266,17 +1277,17 @@
       'kevin',
       'rammus',
   ])
-  _pi_hwtest_experimental_boards = frozenset([])
-  _pi_hwtest_skylab_boards = frozenset([
+  _pi_hwtest_experimental_boards = _frozen_ge_set(ge_build_config, [])
+  _pi_hwtest_skylab_boards = _frozen_ge_set(ge_build_config, [
       # 'eve', TODO(b/172889735): See above.
       'grunt',
       'kevin',
       'rammus',
   ])
-  _pi_vmtest_boards = frozenset([
+  _pi_vmtest_boards = _frozen_ge_set(ge_build_config, [
       'betty-pi-arc',
   ])
-  _pi_vmtest_experimental_boards = frozenset([
+  _pi_vmtest_experimental_boards = _frozen_ge_set(ge_build_config, [
   ])
 
   # Android VM RVC master.
@@ -1287,17 +1298,17 @@
       schedule='with 60m interval',
   )
 
-  _vmrvc_no_hwtest_boards = frozenset([])
-  _vmrvc_no_hwtest_experimental_boards = frozenset([])
-  _vmrvc_hwtest_boards = frozenset([
+  _vmrvc_no_hwtest_boards = _frozen_ge_set(ge_build_config, [])
+  _vmrvc_no_hwtest_experimental_boards = _frozen_ge_set(ge_build_config, [])
+  _vmrvc_hwtest_boards = _frozen_ge_set(ge_build_config, [
       'grunt-arc-r',
       'hatch-arc-r',
       'kukui-arc-r',
       'rammus-arc-r',
   ])
-  _vmrvc_hwtest_experimental_boards = frozenset([])
-  _vmrvc_vmtest_boards = frozenset([])
-  _vmrvc_vmtest_experimental_boards = frozenset([])
+  _vmrvc_hwtest_experimental_boards = _frozen_ge_set(ge_build_config, [])
+  _vmrvc_vmtest_boards = _frozen_ge_set(ge_build_config, [])
+  _vmrvc_vmtest_experimental_boards = _frozen_ge_set(ge_build_config, [])
 
   # Android VMMST slaves.
   # No board to build for now (just roll). empty slave to pass test.
@@ -1419,21 +1430,18 @@
     boards_dict: A dict mapping board types to board name collections.
     ge_build_config: Dictionary containing the decoded GE configuration file.
   """
-  active_builders = frozenset([
-      'amd64-generic',
-      'arm-generic',
-      'arm64-generic',
+  active_builders = _frozen_ge_set(ge_build_config, [
       'eve',
       'hana',
       'kevin',
       'kevin64',
       'tael',
       'tatl',
-  ])
+  ], ('amd64-generic', 'arm-generic', 'arm64-generic'))
 
   # Move the following builders to active_builders once they are consistently
   # green.
-  unstable_builders = frozenset([
+  unstable_builders = _frozen_ge_set(ge_build_config, [
       'lakitu',  # TODO: Re-enable after crbug.com/919630 resolved.
   ])
 
@@ -2036,7 +2044,7 @@
   ### Release configs.
 
   # Used for future bvt migration.
-  _release_experimental_boards = frozenset([
+  _release_experimental_boards = _frozen_ge_set(ge_build_config, [
       'betty-kernelnext',
       'elm-kernelnext',
       'eve-arcvm-mesa-virgl-next',
@@ -2048,7 +2056,7 @@
       'zork-kernelnext',
   ])
 
-  _release_enable_skylab_hwtest = frozenset([
+  _release_enable_skylab_hwtest = _frozen_ge_set(ge_build_config, [
       'asuka',
       'coral',
       'nyan_blaze',
@@ -2059,7 +2067,7 @@
       'coral': ['astronaut', 'nasher', 'lava'],
   }
 
-  _release_enable_skylab_cts_hwtest = frozenset([
+  _release_enable_skylab_cts_hwtest = _frozen_ge_set(ge_build_config, [
       'samus',
       'terra',
   ])
diff --git a/config/chromeos_test_config.py b/config/chromeos_test_config.py
index 75efda6..84dcacd 100644
--- a/config/chromeos_test_config.py
+++ b/config/chromeos_test_config.py
@@ -11,6 +11,7 @@
 
 from chromite.lib import config_lib
 from chromite.lib import constants
+from chromite.lib import cros_logging as logging
 
 from chromite.config import chromeos_config_boards as config_boards
 
@@ -374,7 +375,11 @@
     # for k, v in overrides.items():
     #   assert config[k] != v, ('Unnecessary override: %s: %s' %
     #                           (config_name, k))
-    site_config[config_name].apply(**overrides)
+    if config_name in site_config:
+      site_config[config_name].apply(**overrides)
+    else:
+      logging.warning('ignoring overrides for missing config %s', config_name)
+
 
 
 def IncrementalBuilders(site_config):