From 18f74fc745650ef2eb37aee1c56dd484e356d729 Mon Sep 17 00:00:00 2001 From: warner Date: Fri, 27 Jul 2007 14:11:01 +0100 Subject: [PATCH] rename c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave instances instead of tuples. Closes #63. --- ChangeLog | 12 ++++++ buildbot/master.py | 81 +++++++++++++++++++++++++------------- buildbot/scripts/sample.cfg | 9 +++-- buildbot/slave/__init__.py | 10 +++++ buildbot/test/test_changes.py | 2 +- buildbot/test/test_config.py | 47 ++++++++++++++++------ buildbot/test/test_control.py | 3 +- buildbot/test/test_dependencies.py | 3 +- buildbot/test/test_locks.py | 3 +- buildbot/test/test_properties.py | 3 +- buildbot/test/test_run.py | 3 +- buildbot/test/test_slaves.py | 7 +++- buildbot/test/test_status.py | 3 +- buildbot/test/test_steps.py | 3 +- buildbot/test/test_vc.py | 3 +- buildbot/test/test_web.py | 8 ++-- docs/buildbot.texinfo | 25 +++++++----- 17 files changed, 157 insertions(+), 68 deletions(-) diff --git a/ChangeLog b/ChangeLog index a615ee6..10c8ed7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-07-27 Brian Warner + + * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename + c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave + instances instead of tuples. Closes #63. + * buildbot/slave/__init__.py (BuildSlave): define marker class + * buildbot/scripts/sample.cfg: use c['slaves'] in sample config + * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves'] + * buildbot/test/test_*.py: update tests to match + * buildbot/test/test_config.py (ConfigTest.testBots): verify that + the c['bots'] backwards-compatibility handler works + 2007-07-26 Brian Warner * buildbot/changes/hgbuildbot.py (hook): add an in-process diff --git a/buildbot/master.py b/buildbot/master.py index f65edb6..d569718 100644 --- a/buildbot/master.py +++ b/buildbot/master.py @@ -11,6 +11,7 @@ try: pickle = cPickle except ImportError: import pickle +import warnings from zope.interface import implements from twisted.python import log, components @@ -29,6 +30,7 @@ from buildbot.status.builder import SlaveStatus, Status from buildbot.changes.changes import Change, ChangeMaster from buildbot.sourcestamp import SourceStamp from buildbot import interfaces +from buildbot.slave import BuildSlave ######################################## @@ -38,7 +40,7 @@ from buildbot import interfaces class BotPerspective(NewCredPerspective): """This is the master-side representative for a remote buildbot slave. There is exactly one for each slave described in the config file (the - c['bots'] list). When buildbots connect in (.attach), they get a + c['slaves'] list). When buildbots connect in (.attach), they get a reference to this instance. The BotMaster object is stashed as the .service attribute.""" @@ -530,7 +532,7 @@ class BuildMaster(service.MultiService, styles.Versioned): self.statusTargets = [] - self.bots = [] + self.slaves = [] # this ChangeMaster is a dummy, only used by tests. In the real # buildmaster, where the BuildMaster instance is activated # (startService is called) by twistd, this attribute is overwritten. @@ -649,21 +651,21 @@ class BuildMaster(service.MultiService, styles.Versioned): log.err("config file must define BuildmasterConfig") raise - known_keys = "bots sources schedulers builders slavePortnum " + \ - "debugPassword manhole " + \ - "status projectName projectURL buildbotURL" - known_keys = known_keys.split() + known_keys = ("bots", "slaves", "sources", "schedulers", "builders", + "slavePortnum", "debugPassword", "manhole", + "status", "projectName", "projectURL", "buildbotURL", + ) for k in config.keys(): if k not in known_keys: log.msg("unknown key '%s' defined in config dictionary" % k) try: # required - bots = config['bots'] sources = config['sources'] schedulers = config['schedulers'] builders = config['builders'] slavePortnum = config['slavePortnum'] + #slaves = config['slaves'] # optional debugPassword = config.get('debugPassword') @@ -678,10 +680,28 @@ class BuildMaster(service.MultiService, styles.Versioned): log.msg("leaving old configuration in place") raise + #if "bots" in config: + # raise KeyError("c['bots'] is no longer accepted") + + slaves = config.get('slaves', []) + if "bots" in config: + m = ("c['bots'] is deprecated as of 0.7.6, please use " + "c['slaves'] instead") + log.msg(m) + warnings.warn(m, DeprecationWarning) + for name, passwd in config['bots']: + slaves.append(BuildSlave(name, passwd)) + + if "bots" not in config and "slaves" not in config: + log.msg("config dictionary must have either 'bots' or 'slaves'") + log.msg("leaving old configuration in place") + raise KeyError("must have either 'bots' or 'slaves'") + # do some validation first - for name, passwd in bots: - if name in ("debug", "change", "status"): - raise KeyError, "reserved name '%s' used for a bot" % name + for s in slaves: + assert isinstance(s, BuildSlave) + if s.name in ("debug", "change", "status"): + raise KeyError, "reserved name '%s' used for a bot" % s.name if config.has_key('interlocks'): raise KeyError("c['interlocks'] is no longer accepted") @@ -698,7 +718,7 @@ class BuildMaster(service.MultiService, styles.Versioned): for s in status: assert interfaces.IStatusReceiver(s, None) - slavenames = [name for name,pw in bots] + slavenames = [s.name for s in slaves] buildernames = [] dirnames = [] for b in builders: @@ -784,10 +804,10 @@ class BuildMaster(service.MultiService, styles.Versioned): self.projectURL = projectURL self.buildbotURL = buildbotURL - # self.bots: Disconnect any that were attached and removed from the - # list. Update self.checker with the new list of passwords, - # including debug/change/status. - d.addCallback(lambda res: self.loadConfig_Slaves(bots)) + # self.slaves: Disconnect any that were attached and removed from the + # list. Update self.checker with the new list of passwords, including + # debug/change/status. + d.addCallback(lambda res: self.loadConfig_Slaves(slaves)) # self.debugPassword if debugPassword: @@ -846,25 +866,30 @@ class BuildMaster(service.MultiService, styles.Versioned): d.addCallback(lambda res: self.botmaster.maybeStartAllBuilds()) return d - def loadConfig_Slaves(self, bots): + def loadConfig_Slaves(self, slaves): # set up the Checker with the names and passwords of all valid bots self.checker.users = {} # violates abstraction, oh well - for user, passwd in bots: - self.checker.addUser(user, passwd) + for s in slaves: + self.checker.addUser(s.name, s.password) self.checker.addUser("change", "changepw") # identify new/old bots - old = self.bots; oldnames = [name for name,pw in old] - new = bots; newnames = [name for name,pw in new] + old = []; new = [] + for s in slaves: + if s not in self.slaves: + new.append(s) + for s in self.slaves: + if s not in slaves: + old.append(s) # removeSlave will hang up on the old bot - dl = [self.botmaster.removeSlave(name) - for name in oldnames if name not in newnames] - [self.botmaster.addSlave(name) - for name in newnames if name not in oldnames] - - # all done - self.bots = bots - return defer.DeferredList(dl, fireOnOneErrback=1, consumeErrors=0) + dl = [self.botmaster.removeSlave(s.name) for s in old] + d = defer.DeferredList(dl, fireOnOneErrback=True) + def _add(res): + for s in new: + self.botmaster.addSlave(s.name) + self.slaves = slaves + d.addCallback(_add) + return d def loadConfig_Sources(self, sources): log.msg("loadConfig_Sources, change_svc is", self.change_svc, diff --git a/buildbot/scripts/sample.cfg b/buildbot/scripts/sample.cfg index ebbe313..6a9f38e 100644 --- a/buildbot/scripts/sample.cfg +++ b/buildbot/scripts/sample.cfg @@ -16,10 +16,11 @@ c = BuildmasterConfig = {} ####### BUILDSLAVES -# the 'bots' list defines the set of allowable buildslaves. Each element is a -# tuple of bot-name and bot-password. These correspond to values given to the -# buildslave's mktap invocation. -c['bots'] = [("bot1name", "bot1passwd")] +# the 'slaves' list defines the set of allowable buildslaves. Each element is +# a tuple of bot-name and bot-password. These correspond to values given to +# the buildslave's mktap invocation. +from buildbot.slave import BuildSlave +c['slaves'] = [BuildSlave("bot1name", "bot1passwd")] # 'slavePortnum' defines the TCP port to listen on. This must match the value diff --git a/buildbot/slave/__init__.py b/buildbot/slave/__init__.py index e69de29..d3babcc 100644 --- a/buildbot/slave/__init__.py +++ b/buildbot/slave/__init__.py @@ -0,0 +1,10 @@ + +from buildbot.util import ComparableMixin + +class BuildSlave(ComparableMixin): + compare_attrs = ["name", "password"] + + def __init__(self, name, password): + self.name = name + self.password = password + diff --git a/buildbot/test/test_changes.py b/buildbot/test/test_changes.py index 741ba6e..c3e75b3 100644 --- a/buildbot/test/test_changes.py +++ b/buildbot/test/test_changes.py @@ -97,7 +97,7 @@ class TestChangePerspective(unittest.TestCase): config_empty = """ BuildmasterConfig = c = {} -c['bots'] = [] +c['slaves'] = [] c['builders'] = [] c['sources'] = [] c['schedulers'] = [] diff --git a/buildbot/test/test_config.py b/buildbot/test/test_config.py index f80c532..ff18411 100644 --- a/buildbot/test/test_config.py +++ b/buildbot/test/test_config.py @@ -36,7 +36,7 @@ except ImportError: emptyCfg = \ """ BuildmasterConfig = c = {} -c['bots'] = [] +c['slaves'] = [] c['sources'] = [] c['schedulers'] = [] c['builders'] = [] @@ -49,8 +49,9 @@ c['buildbotURL'] = 'http://dummy.example.com/buildbot' buildersCfg = \ """ from buildbot.process.factory import BasicBuildFactory +from buildbot.slave import BuildSlave BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 9999 @@ -158,8 +159,9 @@ c['debugPassword'] = 'sekrit' interlockCfgBad = \ """ from buildbot.process.factory import BasicBuildFactory +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] f1 = BasicBuildFactory('cvsroot', 'cvsmodule') @@ -181,8 +183,9 @@ lockCfgBad1 = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -203,8 +206,9 @@ lockCfgBad2 = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock, SlaveLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -225,8 +229,9 @@ lockCfgBad3 = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -247,8 +252,9 @@ lockCfg1a = \ """ from buildbot.process.factory import BasicBuildFactory from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] f1 = BasicBuildFactory('cvsroot', 'cvsmodule') @@ -268,8 +274,9 @@ lockCfg1b = \ """ from buildbot.process.factory import BasicBuildFactory from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] f1 = BasicBuildFactory('cvsroot', 'cvsmodule') @@ -291,8 +298,9 @@ lockCfg2a = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -315,8 +323,9 @@ lockCfg2b = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -339,8 +348,9 @@ lockCfg2c = \ from buildbot.steps.dummy import Dummy from buildbot.process.factory import BuildFactory, s from buildbot.locks import MasterLock +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] l1 = MasterLock('lock1') @@ -362,8 +372,9 @@ schedulersCfg = \ """ from buildbot.scheduler import Scheduler, Dependent from buildbot.process.factory import BasicBuildFactory +from buildbot.slave import BuildSlave c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] f1 = BasicBuildFactory('cvsroot', 'cvsmodule') b1 = {'name':'builder1', 'slavename':'bot1', @@ -496,6 +507,15 @@ class ConfigTest(unittest.TestCase): master.loadConfig(emptyCfg) self.failUnlessEqual(master.checker.users, {"change": "changepw"}) + slavesCfg = (emptyCfg + + "from buildbot.slave import BuildSlave\n" + "c['slaves'] = [BuildSlave('bot1','pw1'), " + "BuildSlave('bot2','pw2')]\n") + master.loadConfig(slavesCfg) + self.failUnlessEqual(master.checker.users, + {"change": "changepw", + "bot1": "pw1", + "bot2": "pw2"}) def testSources(self): @@ -1107,8 +1127,9 @@ cfg1 = \ from buildbot.process.factory import BuildFactory, s from buildbot.steps.shell import ShellCommand from buildbot.steps.source import Darcs +from buildbot.slave import BuildSlave BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'pw1')] +c['slaves'] = [BuildSlave('bot1', 'pw1')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 9999 diff --git a/buildbot/test/test_control.py b/buildbot/test/test_control.py index 8a6b498..5656fa1 100644 --- a/buildbot/test/test_control.py +++ b/buildbot/test/test_control.py @@ -15,6 +15,7 @@ from buildbot.test.runutils import rmtree config = """ from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave def s(klass, **kwargs): return (klass, kwargs) @@ -23,7 +24,7 @@ f1 = factory.BuildFactory([ s(dummy.Dummy, timeout=1), ]) c = {} -c['bots'] = [['bot1', 'sekrit']] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['builders'] = [{'name': 'force', 'slavename': 'bot1', diff --git a/buildbot/test/test_dependencies.py b/buildbot/test/test_dependencies.py index 479c352..da8de5e 100644 --- a/buildbot/test/test_dependencies.py +++ b/buildbot/test/test_dependencies.py @@ -11,11 +11,12 @@ config_1 = """ from buildbot import scheduler from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave s = factory.s from buildbot.test.test_locks import LockStep BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit'), ('bot2', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit'), BuildSlave('bot2', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 0 diff --git a/buildbot/test/test_locks.py b/buildbot/test/test_locks.py index 18a36d4..889bc21 100644 --- a/buildbot/test/test_locks.py +++ b/buildbot/test/test_locks.py @@ -283,11 +283,12 @@ class LockStep(dummy.Dummy): config_1 = """ from buildbot import locks from buildbot.process import factory +from buildbot.slave import BuildSlave s = factory.s from buildbot.test.test_locks import LockStep BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit'), ('bot2', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit'), BuildSlave('bot2', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 0 diff --git a/buildbot/test/test_properties.py b/buildbot/test/test_properties.py index 3008737..3b7f674 100644 --- a/buildbot/test/test_properties.py +++ b/buildbot/test/test_properties.py @@ -135,10 +135,11 @@ class Interpolate(unittest.TestCase): run_config = """ from buildbot.process import factory from buildbot.steps.shell import ShellCommand, WithProperties +from buildbot.slave import BuildSlave s = factory.s BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 0 diff --git a/buildbot/test/test_run.py b/buildbot/test/test_run.py index bb95c63..875cf97 100644 --- a/buildbot/test/test_run.py +++ b/buildbot/test/test_run.py @@ -15,6 +15,7 @@ from buildbot.test.runutils import RunMixin, rmtree config_base = """ from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave s = factory.s f1 = factory.QuickBuildFactory('fakerep', 'cvsmodule', configure=None) @@ -25,7 +26,7 @@ f2 = factory.BuildFactory([ ]) BuildmasterConfig = c = {} -c['bots'] = [['bot1', 'sekrit']] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['builders'] = [] diff --git a/buildbot/test/test_slaves.py b/buildbot/test/test_slaves.py index d04f7b6..80d5e1a 100644 --- a/buildbot/test/test_slaves.py +++ b/buildbot/test/test_slaves.py @@ -13,10 +13,12 @@ from buildbot.slave import bot config_1 = """ from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave s = factory.s BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit'), ('bot2', 'sekrit'), ('bot3', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit'), BuildSlave('bot2', 'sekrit'), + BuildSlave('bot3', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 0 @@ -190,10 +192,11 @@ class Slave(RunMixin, unittest.TestCase): config_3 = """ from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave s = factory.s BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['slavePortnum'] = 0 diff --git a/buildbot/test/test_status.py b/buildbot/test/test_status.py index 2b92233..a5be88f 100644 --- a/buildbot/test/test_status.py +++ b/buildbot/test/test_status.py @@ -729,6 +729,7 @@ class Log(unittest.TestCase): config_base = """ from buildbot.process import factory from buildbot.steps import dummy +from buildbot.slave import BuildSlave s = factory.s f1 = factory.QuickBuildFactory('fakerep', 'cvsmodule', configure=None) @@ -739,7 +740,7 @@ f2 = factory.BuildFactory([ ]) BuildmasterConfig = c = {} -c['bots'] = [['bot1', 'sekrit']] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['builders'] = [] diff --git a/buildbot/test/test_steps.py b/buildbot/test/test_steps.py index a40e12a..79eba59 100644 --- a/buildbot/test/test_steps.py +++ b/buildbot/test/test_steps.py @@ -311,11 +311,12 @@ class VersionCheckingStep(buildstep.BuildStep): version_config = """ from buildbot.process import factory from buildbot.test.test_steps import VersionCheckingStep +from buildbot.slave import BuildSlave BuildmasterConfig = c = {} f1 = factory.BuildFactory([ factory.s(VersionCheckingStep), ]) -c['bots'] = [['bot1', 'sekrit']] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['builders'] = [{'name':'quick', 'slavename':'bot1', diff --git a/buildbot/test/test_vc.py b/buildbot/test/test_vc.py index 86209bb..5819c73 100644 --- a/buildbot/test/test_vc.py +++ b/buildbot/test/test_vc.py @@ -97,13 +97,14 @@ def myGetProcessOutputAndValue(executable, args=(), env={}, path='.', config_vc = """ from buildbot.process import factory from buildbot.steps import source +from buildbot.slave import BuildSlave s = factory.s f1 = factory.BuildFactory([ %s, ]) c = {} -c['bots'] = [['bot1', 'sekrit']] +c['slaves'] = [BuildSlave('bot1', 'sekrit')] c['sources'] = [] c['schedulers'] = [] c['builders'] = [{'name': 'vc', 'slavename': 'bot1', diff --git a/buildbot/test/test_web.py b/buildbot/test/test_web.py index 63220cf..bdb4b8a 100644 --- a/buildbot/test/test_web.py +++ b/buildbot/test/test_web.py @@ -36,7 +36,7 @@ components.registerAdapter(master.Control, ConfiguredMaster, base_config = """ from buildbot.status import html BuildmasterConfig = c = { - 'bots': [], + 'slaves': [], 'sources': [], 'schedulers': [], 'builders': [], @@ -281,6 +281,7 @@ from buildbot.process import factory from buildbot.steps import dummy from buildbot.scheduler import Scheduler from buildbot.changes.base import ChangeSource +from buildbot.slave import BuildSlave s = factory.s class DiscardScheduler(Scheduler): @@ -290,7 +291,7 @@ class DummyChangeSource(ChangeSource): pass BuildmasterConfig = c = {} -c['bots'] = [('bot1', 'sekrit'), ('bot2', 'sekrit')] +c['slaves'] = [BuildSlave('bot1', 'sekrit'), BuildSlave('bot2', 'sekrit')] c['sources'] = [DummyChangeSource()] c['schedulers'] = [DiscardScheduler('discard', None, 60, ['b1'])] c['slavePortnum'] = 0 @@ -385,9 +386,10 @@ class Logfile(BaseWeb, RunMixin, unittest.TestCase): config = """ from buildbot.status import html from buildbot.process.factory import BasicBuildFactory +from buildbot.slave import BuildSlave f1 = BasicBuildFactory('cvsroot', 'cvsmodule') BuildmasterConfig = { - 'bots': [('bot1', 'passwd1')], + 'slaves': [BuildSlave('bot1', 'passwd1')], 'sources': [], 'schedulers': [], 'builders': [{'name': 'builder1', 'slavename': 'bot1', diff --git a/docs/buildbot.texinfo b/docs/buildbot.texinfo index afdb531..b98bf6c 100644 --- a/docs/buildbot.texinfo +++ b/docs/buildbot.texinfo @@ -2212,17 +2212,19 @@ and they are all configured to contact the buildmaster at @node Buildslave Specifiers, Defining Builders, Setting the slaveport, Configuration @section Buildslave Specifiers -@bcindex c['bots'] +@bcindex c['slaves'] -The @code{c['bots']} key is a list of known buildslaves. Each -buildslave is defined by a tuple of (slavename, slavepassword). These -are the same two values that need to be provided to the buildslave -administrator when they create the buildslave. +The @code{c['slaves']} key is a list of known buildslaves. Each +buildslave is defined by an instance of the BuildSlave class, created +with two values: (slavename, slavepassword). These are the same two +values that need to be provided to the buildslave administrator when +they create the buildslave. @example -c['bots'] = [('bot-solaris', 'solarispasswd'), - ('bot-bsd', 'bsdpasswd'), - ] +from buildbot.slave import BuildSlave +c['slaves'] = [BuildSlave('bot-solaris', 'solarispasswd'), + BuildSlave('bot-bsd', 'bsdpasswd'), + ] @end example The slavenames must be unique, of course. The password exists to @@ -2234,6 +2236,11 @@ Buildslaves with an unrecognized slavename or a non-matching password will be rejected when they attempt to connect, and a message describing the problem will be put in the log file (see @ref{Logfiles}). +Historical note: in buildbot-0.7.5 and earlier, the @code{c['bots']} +key was used instead, and it took a list of (name, password) tuples. +This key is accepted for backwards compatibility, but is deprecated as +of 0.7.6 and will go away in some future release. + @node Defining Builders, Defining Status Targets, Buildslave Specifiers, Configuration @section Defining Builders @@ -2261,7 +2268,7 @@ reports. @item slavename This specifies which buildslave will be used by this Builder. -@code{slavename} must appear in the @code{c['bots']} list. Each +@code{slavename} must appear in the @code{c['slaves']} list. Each buildslave can accomodate multiple Builders. @item slavenames -- 2.11.4.GIT