def GetSlaveName(self, master=None, builder=None, os=None, tester=None, bits=None, version=None): """Similar to GetSlave() except that it only returns the slave name.""" return chromium_utils.EntryToSlaveName( self.GetSlave(master, builder, os, tester, bits, version))
def VerifySetup(c, slaves): """Verify all the available slaves in the slave configuration are used and that all the builders have a slave.""" # Extract the list of slaves associated to a builder and make sure each # builder has its slaves connected. # Verify each builder has at least one slave. builders_slaves = set() slaves_name = [s.slavename for s in c['slaves']] for b in c['builders']: builder_slaves = set() slavename = b.get('slavename') if slavename: builder_slaves.add(slavename) slavenames = b.get('slavenames', []) for s in slavenames: builder_slaves.add(s) if not slavename and not slavenames: raise InvalidConfig('Builder %s has no slave' % b['name']) # Now test. for s in builder_slaves: if not s in slaves_name: raise InvalidConfig('Builder %s using undefined slave %s' % (b['name'], s)) builders_slaves |= builder_slaves if len(builders_slaves) != len(slaves_name): raise InvalidConfig('Same slave defined multiple times') # Make sure each slave has their builder. builders_name = [b['name'] for b in c['builders']] for s in c['slaves']: name = s.slavename if not name in builders_slaves: raise InvalidConfig('Slave %s not associated with any builder' % name) # Make sure every defined slave is used. for s in slaves.GetSlaves(): name = chromium_utils.EntryToSlaveName(s) if not name in slaves_name: raise InvalidConfig('Slave %s defined in your slaves_list is not ' 'referenced at all' % name) builders = s.get('builder', []) if not isinstance(builders, (list, tuple)): builders = [builders] testers = s.get('testers', []) if not isinstance(testers, (list, tuple)): testers = [testers] builders.extend(testers) for b in builders: if not b in builders_name: raise InvalidConfig('Slave %s uses non-existent builder %s' % (name, b))
def GetPreferredBuildersDict(self, master=None, builder=None, os=None, tester=None, bits=None, version=None): """Make a dict that is from slave name to preferred_builder.""" d = {} for e in self.GetSlaves(master, builder, os, tester, bits, version): if e.has_key('preferred_builder'): d[chromium_utils.EntryToSlaveName(e)] = e.get( 'preferred_builder') return d
def main(): status = 0 slaves = {} for slave in chromium_utils.GetAllSlaves(): mastername = slave['mastername'] slavename = chromium_utils.EntryToSlaveName(slave) if slave.get('subdir') == 'b': print 'Illegal subdir for %s: %s' % (mastername, slavename) status = 1 if slavename and slave.get('hostname') not in WHITELIST: slaves.setdefault(slavename, []).append(mastername) for slavename, masters in slaves.iteritems(): if len(masters) > 1: print '%s duplicated in masters: %s' % (slavename, ' '.join(masters)) status = 1 return status
def main(): # Get public slaves. slaves_list = chromium_utils.GetAllSlaves(fail_hard=True, include_internal=False) # Get internal slaves, if appropriate. build_internal = os.path.join(BASE_DIR, '..', 'build_internal') if os.path.exists(build_internal): internal_test_data = chromium_utils.ParsePythonCfg(os.path.join( build_internal, 'tests', 'internal_masters_cfg.py'), fail_hard=True) internal_cfg = internal_test_data['masters_cfg_test'] internal_sys_path = [ os.path.join(build_internal, p) for p in internal_cfg['paths'] ] + sys.path with using_sys_path(internal_sys_path): slaves_list.extend( chromium_utils.GetAllSlaves(fail_hard=True, include_public=False)) status = 0 slaves = {} for slave in slaves_list: mastername = slave['mastername'] slavename = chromium_utils.EntryToSlaveName(slave) if slave.get('subdir') == 'b': print 'Illegal subdir for %s: %s' % (mastername, slavename) status = 1 if slavename and slave.get('hostname') not in WHITELIST: slaves.setdefault(slavename, []).append(mastername) for slavename, masters in slaves.iteritems(): if len(masters) > 1: print '%s duplicated in masters: %s' % (slavename, ' '.join(masters)) status = 1 return status
def VerifySetup(c, slaves, enforce_sane_slave_pools=True): """Verify all the available slaves in the slave configuration are used and that all the builders have a slave.""" # Extract the list of slaves associated to a builder and make sure each # builder has its slaves connected. # Verify each builder has at least one slave. builders_slaves = set() slaves_name = [s.slavename for s in c['slaves']] slave_mapping = {} for b in c['builders']: builder_slaves = set() slavename = b.get('slavename') if slavename: builder_slaves.add(slavename) slavenames = b.get('slavenames', []) for s in slavenames: builder_slaves.add(s) if not slavename and not slavenames: raise InvalidConfig('Builder %s has no slave' % b['name']) # Now test. for s in builder_slaves: if not s in slaves_name: raise InvalidConfig('Builder %s using undefined slave %s' % (b['name'], s)) slave_mapping[b['name']] = builder_slaves builders_slaves |= builder_slaves if len(builders_slaves) != len(slaves_name): raise InvalidConfig('Same slave defined multiple times') slaves_by_name = { chromium_utils.EntryToSlaveName(s): s for s in slaves.GetSlaves() } # Make sure slave pools are either equal or disjoint. This makes capacity # analysis and planning simpler, easier, and more reliable. if enforce_sane_slave_pools: for b1, b1_slaves in slave_mapping.iteritems(): for b2, b2_slaves in slave_mapping.iteritems(): if b1_slaves != b2_slaves and not b1_slaves.isdisjoint( b2_slaves): raise InvalidConfig( 'Builders %r and %r should have either equal or disjoint slave ' 'pools' % (b1, b2)) # Explicitly specified slave pools must be consistent. b1_pool = None for slave in b1_slaves: pool = chromium_utils.EntryToSlavePool( slaves_by_name.get(slave, {})) if b1_pool is None: b1_pool = pool if b1_pool != pool: raise InvalidConfig( 'Slave %s for build %r belongs to pool %s, but expected %s' % (slave, b1, pool, b1_pool)) # Make sure each slave has their builder. builders_name = [b['name'] for b in c['builders']] for s in c['slaves']: name = s.slavename if not name in builders_slaves: raise InvalidConfig('Slave %s not associated with any builder' % name) # Make sure every defined slave is used. for s in slaves.GetSlaves(): name = chromium_utils.EntryToSlaveName(s) if not name in slaves_name: raise InvalidConfig('Slave %s defined in your slaves_list is not ' 'referenced at all' % name) builders = s.get('builder', []) if not isinstance(builders, (list, tuple)): builders = [builders] testers = s.get('testers', []) if not isinstance(testers, (list, tuple)): testers = [testers] builders.extend(testers) for b in builders: if not b in builders_name: raise InvalidConfig('Slave %s uses non-existent builder %s' % (name, b))
def __init__(self, slaves, default_master=None): self.slaves = slaves self.default_master = default_master _CheckDupes( [chromium_utils.EntryToSlaveName(x).lower() for x in self.slaves])