import logging from buildman.orchestrator import orchestrator_from_config, OrchestratorError from util import slash_join logger = logging.getLogger(__name__) CANCEL_PREFIX = 'cancel/' class OrchestratorCanceller(object): """ An asynchronous way to cancel a build with any Orchestrator. """ def __init__(self, config): self._orchestrator = orchestrator_from_config(config, canceller_only=True) def try_cancel_build(self, build_uuid): logger.info('Cancelling build %s', build_uuid) cancel_key = slash_join(CANCEL_PREFIX, build_uuid) try: self._orchestrator.set_key_sync(cancel_key, build_uuid, expiration=60) return True except OrchestratorError: logger.exception('Failed to write cancel action to redis with uuid %s', build_uuid) return False