| Index: infra/scripts/legacy/scripts/slave/bootstrap.py
|
| diff --git a/infra/scripts/legacy/scripts/slave/bootstrap.py b/infra/scripts/legacy/scripts/slave/bootstrap.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2bfa4cede28ef8ca648099128f9d4bb6f14509e8
|
| --- /dev/null
|
| +++ b/infra/scripts/legacy/scripts/slave/bootstrap.py
|
| @@ -0,0 +1,47 @@
|
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Utilities to enable slaves to determine their master without importing any
|
| +buildbot or twisted code.
|
| +"""
|
| +
|
| +import inspect
|
| +import os
|
| +import sys
|
| +
|
| +from common import chromium_utils
|
| +import config_bootstrap
|
| +
|
| +
|
| +def ImportMasterConfigs(master_name=None, include_internal=True):
|
| + """Imports master configs.
|
| +
|
| + Normally a slave can use chromium_utils.GetActiveMaster() to find
|
| + itself and determine which ActiveMaster to use. In that case, the
|
| + active master name is passed in as an arg, and we only load the
|
| + site_config.py that defines it. When testing, the current "slave"
|
| + won't be found. In that case, we don't know which config to use, so
|
| + load them all. In either case, masters are assigned as attributes
|
| + to the config.Master object.
|
| + """
|
| + for master in chromium_utils.ListMasters(include_internal=include_internal):
|
| + path = os.path.join(master, 'master_site_config.py')
|
| + if os.path.exists(path):
|
| + local_vars = {}
|
| + try:
|
| + execfile(path, local_vars)
|
| + # pylint: disable=W0703
|
| + except Exception, e:
|
| + # Naked exceptions are banned by the style guide but we are
|
| + # trying to be resilient here.
|
| + print >> sys.stderr, 'WARNING: cannot exec ' + path
|
| + print >> sys.stderr, e
|
| + for (symbol_name, symbol) in local_vars.iteritems():
|
| + if inspect.isclass(symbol):
|
| + setattr(symbol, 'local_config_path', master)
|
| + setattr(config_bootstrap.Master, symbol_name, symbol)
|
| + # If we have a master_name and it matches, set
|
| + # config_bootstrap.Master.active_master.
|
| + if master_name and master_name == symbol_name:
|
| + setattr(config_bootstrap.Master, 'active_master', symbol)
|
|
|