Skip to content

Latest commit

 

History

History
491 lines (332 loc) · 17.5 KB

0.9-worker-transition.rst

File metadata and controls

491 lines (332 loc) · 17.5 KB

Transition to "worker" terminology in BuildBot 0.9.0

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.

Old names fallback settings

Use of obsolete names will raise Python warnings with category :pybuildbot.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 :pywarnings module:

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

See Python's :pywarnings 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.

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.

  • :pybuildbot.interfaces.IBuildSlave was renamed to :py~buildbot.interfaces.IWorker
  • :pybuildbot.interfaces.NoSlaveError (private) left as is, but deprecated (it shouldn't be used at all)
  • :pybuildbot.interfaces.BuildSlaveTooOldError was renamed to :py~buildbot.interfaces.WorkerTooOldError
  • :pybuildbot.interfaces.LatentBuildSlaveFailedToSubstantiate (private) was renamed to :py~buildbot.interfaces.LatentWorkerFailedToSubstantiate
  • :pybuildbot.interfaces.ILatentBuildSlave was renamed to :py~buildbot.interfaces.ILatentWorker
  • :pybuildbot.interfaces.ISlaveStatus (will be removed in 0.9.x) was renamed to :py~buildbot.interfaces.IWorkerStatus
  • :pybuildbot.buildslave module with all contents was renamed to :pybuildbot.worker
  • :pybuildbot.buildslave.AbstractBuildSlave was renamed to :pybuildbot.worker.AbstractWorker
  • :pybuildbot.buildslave.AbstractBuildSlave.slavename (private) was renamed to :pybuildbot.worker.AbstractWorker.workername
  • :pybuildbot.buildslave.AbstractLatentBuildSlave was renamed to :pybuildbot.worker.AbstractLatentWorker
  • :pybuildbot.buildslave.BuildSlave was renamed to :pybuildbot.worker.Worker
  • :pybuildbot.buildslave.ec2 was renamed to :pybuildbot.worker.ec2
  • :pybuildbot.buildslave.ec2.EC2LatentBuildSlave was renamed to :pybuildbot.worker.ec2.EC2LatentWorker
  • :pybuildbot.buildslave.libvirt was renamed to :pybuildbot.worker.libvirt
  • :pybuildbot.buildslave.libvirt.LibVirtSlave was renamed to :pybuildbot.worker.libvirt.LibVirtWorker
  • :pybuildbot.buildslave.openstack was renamed to :pybuildbot.worker.openstack
  • :pybuildbot.buildslave.openstack.OpenStackLatentBuildSlave was renamed to :pybuildbot.worker.openstack.OpenStackLatentWorker
  • :pybuildbot.config.MasterConfig.slaves was renamed to :py~buildbot.config.MasterConfig.workers
  • :pybuildbot.config.BuilderConfig constructor keyword argument slavename was renamed to workername
  • :pybuildbot.config.BuilderConfig constructor keyword argument slavenames was renamed to workernames
  • :pybuildbot.config.BuilderConfig constructor keyword argument slavebuilddir was renamed to workerbuilddir
  • :pybuildbot.config.BuilderConfig constructor keyword argument nextSlave was renamed to nextWorker
  • :pybuildbot.config.BuilderConfig.slavenames was renamed to :py~buildbot.config.BuilderConfig.workernames
  • :pybuildbot.config.BuilderConfig.slavebuilddir was renamed to :py~buildbot.config.BuilderConfig.workerbuilddir
  • :pybuildbot.config.BuilderConfig.nextSlave was renamed to :py~buildbot.config.BuilderConfig.nextWorker
  • :pybuildbot.process.slavebuilder was renamed to :pybuildbot.process.workerforbuilder
  • :pybuildbot.process.slavebuilder.AbstractSlaveBuilder was renamed to :pybuildbot.process.workerforbuilder.AbstractWorkerForBuilder
  • :pybuildbot.process.slavebuilder.AbstractSlaveBuilder.slave was renamed to :pybuildbot.process.workerforbuilder.AbstractWorkerForBuilder.worker
  • :pybuildbot.process.slavebuilder.SlaveBuilder was renamed to :pybuildbot.process.workerforbuilder.WorkerForBuilder
  • :pybuildbot.process.slavebuilder.LatentSlaveBuilder was renamed to :pybuildbot.process.workerforbuilder.LatentWorkerForBuilder
  • :pybuildbot.process.build.Build.getSlaveName was renamed to :py~buildbot.process.build.Build.getWorkerName
  • :pybuildbot.process.build.Build.slavename was renamed to :py~buildbot.process.build.Build.workername
  • :pybuildbot.process.builder.enforceChosenSlave was renamed to :py~buildbot.process.builder.enforceChosenWorker
  • :pybuildbot.process.builder.Builder.canStartWithSlavebuilder was renamed to :py~buildbot.process.builder.Builder.canStartWithWorkerForBuilder
  • :pybuildbot.process.builder.Builder.attaching_slaves was renamed to :py~buildbot.process.builder.Builder.attaching_workers
  • :pybuildbot.process.builder.Builder.slaves was renamed to :py~buildbot.process.builder.Builder.workers
  • :pybuildbot.process.builder.Builder.addLatentSlave was renamed to :py~buildbot.process.builder.Builder.addLatentWorker
  • :pybuildbot.process.builder.Builder.getAvailableSlaves was renamed to :py~buildbot.process.builder.Builder.getAvailableWorkers
  • :pybuildbot.schedulers.forcesched.BuildslaveChoiceParameter was renamed to :py~buildbot.schedulers.forcesched.WorkerChoiceParameter
  • :pybuildbot.process.buildstep.BuildStep.buildslave was renamed to :pybuildbot.process.buildstep.BuildStep.worker (also it was moved from class static attribute to instance attribute)
  • :pybuildbot.process.buildstep.BuildStep.setBuildSlave was renamed to :pybuildbot.process.buildstep.BuildStep.setWorker
  • :pybuildbot.process.buildstep.BuildStep.slaveVersion was renamed to :pybuildbot.process.buildstep.BuildStep.workerVersion
  • :pybuildbot.process.buildstep.BuildStep.slaveVersionIsOlderThan was renamed to :pybuildbot.process.buildstep.BuildStep.workerVersionIsOlderThan
  • :pybuildbot.process.buildstep.BuildStep.checkSlaveHasCommand was renamed to :pybuildbot.process.buildstep.BuildStep.checkWorkerHasCommand
  • :pybuildbot.process.buildstep.BuildStep.getSlaveName was renamed to :pybuildbot.process.buildstep.BuildStep.getWorkerName
  • :pybuildbot.locks.SlaveLock was renamed to :pybuildbot.locks.WorkerLock
  • :pybuildbot.locks.SlaveLock.maxCountForSlave was renamed to :pybuildbot.locks.WorkerLock.maxCountForWorker
  • :pybuildbot.locks.SlaveLock constructor argument maxCountForSlave was renamed to maxCountForWorker
  • :pybuildbot.steps.slave was renamed to :pybuildbot.steps.worker
  • :pybuildbot.steps.slave.SlaveBuildStep was renamed to :pybuildbot.steps.worker.WorkerBuildStep
  • :pybuildbot.steps.slave.CompositeStepMixin.getFileContentFromSlave was renamed to :pybuildbot.steps.worker.CompositeStepMixin.getFileContentFromWorker
  • :pybuildbot.steps.transfer.FileUpload.slavesrc was renamed :py~buildbot.steps.transfer.FileUpload.workersrc
  • :pybuildbot.steps.transfer.FileUpload constructor argument slavesrc was renamed to workersrc
  • :pybuildbot.steps.transfer.DirectoryUpload.slavesrc was renamed to :py~buildbot.steps.transfer.DirectoryUpload.workersrc
  • :pybuildbot.steps.transfer.DirectoryUpload constructor argument slavesrc was renamed to workersrc
  • :pybuildbot.steps.transfer.MultipleFileUpload.slavesrcs was renamed to :py~buildbot.steps.transfer.MultipleFileUpload.workersrcs
  • :pybuildbot.steps.transfer.MultipleFileUpload constructor argument slavesrcs was renamed to workersrcs
  • :pybuildbot.steps.transfer.FileDownload.slavedest was renamed to :py~buildbot.steps.transfer.FileDownload.workerdest
  • :pybuildbot.steps.transfer.FileDownload constructor argument slavedest was renamed to workerdest
  • :pybuildbot.steps.transfer.StringDownload.slavedest was renamed to :py~buildbot.steps.transfer.StringDownload.workerdest
  • :pybuildbot.steps.transfer.StringDownload constructor argument slavedest was renamed to workerdest
  • :pybuildbot.steps.transfer.JSONStringDownload.slavedest was renamed to :py~buildbot.steps.transfer.JSONStringDownload.workerdest
  • :pybuildbot.steps.transfer.JSONStringDownload constructor argument slavedest was renamed to workerdest
  • :pybuildbot.steps.transfer.JSONPropertiesDownload.slavedest was renamed to :py~buildbot.steps.transfer.JSONPropertiesDownload.workerdest
  • :pybuildbot.steps.transfer.JSONPropertiesDownload was renamed to constructor argument slavedest was renamed to workerdest
  • :pybuildbot.process.remotecommand.RemoteCommand.buildslave was renamed to :py~buildbot.process.remotecommand.RemoteCommand.worker

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.

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'].

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.

EC2 latent worker changes

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

steps.slave.SetPropertiesFromEnv changes

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

Local worker changes

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

Worker Manager changes

slave_config function argument was renamed to worker_config.

Properties

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

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

    :py~buildbot.worker.AbstractWorker now sets workername property with source Worker which should be used.

Metrics

  • :pybuildbot.process.metrics.AttachedSlavesWatcher was renamed to :pybuildbot.process.metrics.AttachedWorkersWatcher.
  • :pybuildbot.worker.manager.WorkerManager.name (previously buildbot.buildslave.manager.BuildslaveManager.name) metric measurement class name changed from BuildslaveManager to WorkerManager
  • :pybuildbot.worker.manager.WorkerManager.managed_services_name (previously buildbot.buildslave.manager.BuildslaveManager.managed_services_name`) metric measurement managed service name changed frombuildslavestoworkers``

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

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):

  • :pybuildbot.db.buildslaves was renamed to :py~buildbot.db.workers
  • :pybuildbot.db.buildslaves.BuildslavesConnectorComponent was renamed to :pybuildbot.db.workers.WorkersConnectorComponent
  • :pybuildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves (rewritten in nine) was renamed to :pybuildbot.db.workers.WorkersConnectorComponent.getWorkers
  • :pybuildbot.db.connector.DBConnector.buildslaves was renamed to :pybuildbot.db.connector.DBConnector.workers

usePTY changes

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

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.