Caution

Buildbot no longer supports Python 2.7 on the Buildbot master.

Caution

This page documents the latest, unreleased version of Buildbot. For documentation for released versions, see http://docs.buildbot.net/current/.

2.12.3. Transition to “worker” terminology

Since version 0.9.0 of Buildbot “slave”-based terminology is deprecated in favor of “worker”-based terminology.

API change is done in backward compatible way, so old “slave”-containing classes, functions and attributes are still available and can be used. Old API support will be removed in the future versions of Buildbot.

Rename of API introduced in beta versions of Buildbot 0.9.0 done without providing fallback. See release notes for the list of breaking changes of private interfaces. The fallbacks have been removed in Buildbot version 2.0.0.

2.12.3.1. Old names fallback settings

Use of obsolete names will raise Python warnings with category buildbot.worker_transition.DeprecatedWorkerAPIWarning. By default these warnings are printed in the application log. This behaviour can be changed by setting appropriate Python warnings settings via Python’s warnings module:

import warnings
from buildbot.worker_transition import DeprecatedWorkerAPIWarning
# Treat old-name usage as errors:
warnings.simplefilter("error", DeprecatedWorkerAPIWarning)

See Python’s warnings module documentation for complete list of available actions, in particular warnings can be disabled using "ignore" action.

It’s recommended to configure warnings inside buildbot.tac, before using any other Buildbot classes.

2.12.3.2. Changed API

In general “Slave” and “Buildslave” parts in identifiers and messages were replaced with “Worker”; “SlaveBuilder” with “WorkerForBuilder”.

Below is the list of changed API (use of old names from this list will work). Note that some of these symbols are not included in Buildbot’s public API. Compatibility is provided as a convenience to those using the private symbols anyway.

Old name

New name

buildbot.interfaces.IBuildSlave

IWorker

buildbot.interfaces.NoSlaveError (private)

left as is, but deprecated (it shouldn’t be used at all)

buildbot.interfaces.BuildSlaveTooOldError

WorkerTooOldError

buildbot.interfaces.LatentBuildSlaveFailedToSubstantiate (private)

LatentWorkerFailedToSubstantiate

buildbot.interfaces.ILatentBuildSlave

ILatentWorker

buildbot.interfaces.ISlaveStatus (will be removed in 0.9.x)

IWorkerStatus

buildbot.buildslave module with all contents

buildbot.worker

buildbot.buildslave.AbstractBuildSlave

buildbot.worker.AbstractWorker

buildbot.buildslave.AbstractBuildSlave.slavename (private)

buildbot.worker.AbstractWorker.workername

buildbot.buildslave.AbstractLatentBuildSlave

buildbot.worker.AbstractLatentWorker

buildbot.buildslave.BuildSlave

buildbot.worker.Worker

buildbot.buildslave.ec2

buildbot.worker.ec2

buildbot.buildslave.ec2.EC2LatentBuildSlave

buildbot.worker.ec2.EC2LatentWorker

buildbot.buildslave.libvirt

buildbot.worker.libvirt

buildbot.buildslave.libvirt.LibVirtSlave

buildbot.worker.libvirt.LibVirtWorker

buildbot.buildslave.openstack

buildbot.worker.openstack

buildbot.buildslave.openstack.OpenStackLatentBuildSlave

buildbot.worker.openstack.OpenStackLatentWorker

buildbot.config.MasterConfig.slaves

workers

buildbot.config.BuilderConfig constructor keyword argument slavename was renamed to

workername

buildbot.config.BuilderConfig constructor keyword argument slavenames was renamed to

workernames

buildbot.config.BuilderConfig constructor keyword argument slavebuilddir was renamed to

workerbuilddir

buildbot.config.BuilderConfig constructor keyword argument nextSlave was renamed to

nextWorker

buildbot.config.BuilderConfig.slavenames

workernames

buildbot.config.BuilderConfig.slavebuilddir

workerbuilddir

buildbot.config.BuilderConfig.nextSlave

nextWorker

buildbot.process.slavebuilder

buildbot.process.workerforbuilder

buildbot.process.slavebuilder.AbstractSlaveBuilder

buildbot.process.workerforbuilder.AbstractWorkerForBuilder

buildbot.process.slavebuilder.AbstractSlaveBuilder.slave

buildbot.process.workerforbuilder.AbstractWorkerForBuilder.worker

buildbot.process.slavebuilder.SlaveBuilder

buildbot.process.workerforbuilder.WorkerForBuilder

buildbot.process.slavebuilder.LatentSlaveBuilder

buildbot.process.workerforbuilder.LatentWorkerForBuilder

buildbot.process.build.Build.getSlaveName

getWorkerName

buildbot.process.build.Build.slavename

workername

buildbot.process.builder.enforceChosenSlave

enforceChosenWorker

buildbot.process.builder.Builder.canStartWithSlavebuilder

canStartWithWorkerForBuilder

buildbot.process.builder.Builder.attaching_slaves

attaching_workers

buildbot.process.builder.Builder.slaves

workers

buildbot.process.builder.Builder.addLatentSlave

addLatentWorker

buildbot.process.builder.Builder.getAvailableSlaves

getAvailableWorkers

buildbot.schedulers.forcesched.BuildslaveChoiceParameter

WorkerChoiceParameter

buildbot.process.buildstep.BuildStep.buildslave

buildbot.process.buildstep.BuildStep.worker (also it was moved from class static attribute to instance attribute)

buildbot.process.buildstep.BuildStep.setBuildSlave

buildbot.process.buildstep.BuildStep.setWorker

buildbot.process.buildstep.BuildStep.slaveVersion

buildbot.process.buildstep.BuildStep.workerVersion

buildbot.process.buildstep.BuildStep.slaveVersionIsOlderThan

buildbot.process.buildstep.BuildStep.workerVersionIsOlderThan

buildbot.process.buildstep.BuildStep.checkSlaveHasCommand

buildbot.process.buildstep.BuildStep.checkWorkerHasCommand

buildbot.process.buildstep.BuildStep.getSlaveName

buildbot.process.buildstep.BuildStep.getWorkerName

buildbot.locks.SlaveLock

buildbot.locks.WorkerLock

buildbot.locks.SlaveLock.maxCountForSlave

buildbot.locks.WorkerLock.maxCountForWorker

buildbot.locks.SlaveLock constructor argument maxCountForSlave was renamed

maxCountForWorker

buildbot.steps.slave

buildbot.steps.worker

buildbot.steps.slave.SlaveBuildStep

buildbot.steps.worker.WorkerBuildStep

buildbot.steps.slave.CompositeStepMixin.getFileContentFromSlave

buildbot.steps.worker.CompositeStepMixin.getFileContentFromWorker

buildbot.steps.transfer.FileUpload.slavesrc

workersrc

buildbot.steps.transfer.FileUpload constructor argument slavesrc was renamed to

workersrc

buildbot.steps.transfer.DirectoryUpload.slavesrc

workersrc

buildbot.steps.transfer.DirectoryUpload constructor argument slavesrc was renamed to

workersrc

buildbot.steps.transfer.MultipleFileUpload.slavesrcs

workersrcs

buildbot.steps.transfer.MultipleFileUpload constructor argument slavesrcs was renamed to

workersrcs

buildbot.steps.transfer.FileDownload.slavedest

workerdest

buildbot.steps.transfer.FileDownload constructor argument slavedest was renamed to

workerdest

buildbot.steps.transfer.StringDownload.slavedest

workerdest

buildbot.steps.transfer.StringDownload constructor argument slavedest was renamed to

workerdest

buildbot.steps.transfer.JSONStringDownload.slavedest

workerdest

buildbot.steps.transfer.JSONStringDownload constructor argument slavedest was renamed to

workerdest

buildbot.steps.transfer.JSONPropertiesDownload.slavedest

workerdest

buildbot.steps.transfer.JSONPropertiesDownload constructor argument slavedest was renamed to

workerdest

buildbot.process.remotecommand.RemoteCommand.buildslave

worker

2.12.3.3. Plugins

buildbot.buildslave entry point was renamed to buildbot.worker, new plugins should be updated accordingly.

Plugins that use old buildbot.buildslave entry point are still available in the configuration file in the same way, as they were in versions prior 0.9.0:

from buildbot.plugins import buildslave  # deprecated, use "worker" instead
w = buildslave.ThirdPartyWorker()

But also they available using new namespace inside configuration file, so its recommended to use buildbot.plugins.worker name even if plugin uses old entry points:

from buildbot.plugins import worker
# ThirdPartyWorker can be defined in using `buildbot.buildslave` entry
# point, this still will work.
w = worker.ThirdPartyWorker()

Other changes:

  • buildbot.plugins.util.BuildslaveChoiceParameter is deprecated in favor of WorkerChoiceParameter.

  • buildbot.plugins.util.enforceChosenSlave is deprecated in favor of enforceChosenWorker.

  • buildbot.plugins.util.SlaveLock is deprecated in favor of WorkerLock.

2.12.3.4. BuildmasterConfig changes

  • c['slaves'] was replaced with c['workers']. Use of c['slaves'] will work, but is considered deprecated, and will be removed in the future versions of Buildbot.

  • Configuration key c['slavePortnum'] is deprecated in favor of c['protocols']['pb']['port'].

2.12.3.5. Docker latent worker changes

In addition to class being renamed, environment variables that are set inside container SLAVENAME and SLAVEPASS were renamed to WORKERNAME and WORKERPASS accordingly. Old environment variable are still available, but are deprecated and will be removed in the future.

2.12.3.6. EC2 latent worker changes

Use of default values of keypair_name and security_name constructor arguments of buildbot.worker.ec2.EC2LatentWorker is deprecated. Please specify them explicitly.

2.12.3.7. steps.slave.SetPropertiesFromEnv changes

In addition to buildbot.steps.slave module being renamed to buildbot.steps.worker, default source value for SetPropertiesFromEnv was changed from "SlaveEnvironment" to "WorkerEnvironment".

2.12.3.8. Local worker changes

Working directory for local workers were changed from master-basedir/slaves/name to master-basedir/workers/name.

2.12.3.9. Worker Manager changes

slave_config function argument was renamed to worker_config.

2.12.3.10. Properties

  • slavename property is deprecated in favor of workername property. Render of deprecated property will produce warning.

    buildbot.worker.AbstractWorker (previously buildbot.buildslave.AbstractBuildSlave) slavename property source were changed from BuildSlave to Worker (deprecated)

    AbstractWorker now sets workername property with source Worker which should be used.

2.12.3.11. Metrics

  • buildbot.process.metrics.AttachedSlavesWatcher was renamed to buildbot.process.metrics.AttachedWorkersWatcher.

  • buildbot.worker.manager.WorkerManager.name (previously buildbot.buildslave.manager.BuildslaveManager.name) metric measurement class name changed from BuildslaveManager to WorkerManager

  • buildbot.worker.manager.WorkerManager.managed_services_name (previously buildbot.buildslave.manager.BuildslaveManager.managed_services_name`) metric measurement managed service name changed from ``buildslaves to workers

Renamed events:

Old name

New name

AbstractBuildSlave.attached_slaves

AbstractWorker.attached_workers

BotMaster.attached_slaves

BotMaster.attached_workers

BotMaster.slaveLost()

BotMaster.workerLost()

BotMaster.getBuildersForSlave()

BotMaster.getBuildersForWorker()

AttachedSlavesWatcher

AttachedWorkersWatcher

attached_slaves

attached_workers

2.12.3.12. Database

Schema changes:

Old name

New name

buildslaves table

workers

builds.buildslaveid (not ForeignKey) column

workerid (now ForeignKey)

configured_buildslaves table

configured_workers

configured_buildslaves.buildslaveid (ForeignKey) column

workerid

connected_buildslaves table

connected_workers

connected_buildslaves.buildslaveid (ForeignKey) column

workerid

buildslaves_name index

workers_name

configured_slaves_buildmasterid index

configured_workers_buildmasterid

configured_slaves_slaves index

configured_workers_workers

configured_slaves_identity index

configured_workers_identity

connected_slaves_masterid index

connected_workers_masterid

connected_slaves_slaves index

connected_workers_workers

connected_slaves_identity index

connected_workers_identity

builds_buildslaveid index

builds_workerid

List of database-related changes in API (fallback for old API is provided):

Old name

New name

buildbot.db.buildslaves

workers

buildbot.db.buildslaves.BuildslavesConnectorComponent

buildbot.db.workers.WorkersConnectorComponent

buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves (rewritten in nine)

buildbot.db.workers.WorkersConnectorComponent.getWorkers

buildbot.db.connector.DBConnector.buildslaves

buildbot.db.connector.DBConnector.workers

2.12.3.13. usePTY changes

usePTY default value has been changed from slave-config to None (use of slave-config will still work, but discouraged).

2.12.3.14. buildbot-worker

buildbot-slave package has been renamed to buildbot-worker.

buildbot-worker has backward incompatible changes and requires buildmaster >= 0.9.0b8. buildbot-slave from 0.8.x will work with both 0.8.x and 0.9.x versions of buildmaster, so there is no need to upgrade currently deployed buildbot-slaves during switch from 0.8.x to 0.9.x.

Master/worker compatibility table

master 0.8.x

master 0.9.x

buildbot-slave

yes

yes

buildbot-worker

no

yes

buildbot-worker doesn’t support worker-side specification of usePTY (with --usepty command line switch of buildbot-worker create-worker), you need to specify this option on master side.

getSlaveInfo remote command was renamed to getWorkerInfo in buildbot-worker.