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))
Esempio n. 2
0
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
Esempio n. 4
0
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
Esempio n. 6
0
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])