ArielGlenn has submitted this change and it was merged. Change subject: git deploy cleanup <minion> to toss minion from redis ......................................................................
git deploy cleanup <minion> to toss minion from redis Bug: T74319 Change-Id: Ieee79ae8932a905d43f33f0b3f0dd09eed8bd4df --- M trigger/config.py M trigger/drivers/__init__.py M trigger/drivers/trebuchet/local.py M trigger/shell.py 4 files changed, 60 insertions(+), 0 deletions(-) Approvals: ArielGlenn: Verified; Looks good to me, approved diff --git a/trigger/config.py b/trigger/config.py index 561a02b..f1d4a8c 100644 --- a/trigger/config.py +++ b/trigger/config.py @@ -107,6 +107,10 @@ 'required': True, 'default': 'trebuchet.local.ReportDriver' }, + 'deploy.cleanup-driver': { + 'required': True, + 'default': 'trebuchet.local.CleanupDriver' + }, } self._register_config(driver_config) for driver in driver_config: diff --git a/trigger/drivers/__init__.py b/trigger/drivers/__init__.py index d7848da..90a2874 100644 --- a/trigger/drivers/__init__.py +++ b/trigger/drivers/__init__.py @@ -93,3 +93,18 @@ def report(self, args): raise NotImplementedError + + +class CleanupDriverError(Exception): + def __init__(self, message, errorno): + Exception.__init__(self, message) + self.errorno = errorno + + def __str__(self): + return self.message + + +class CleanupDriver(Driver): + + def cleanup(self, args): + raise NotImplementedError diff --git a/trigger/drivers/trebuchet/local.py b/trigger/drivers/trebuchet/local.py index 53ef5d2..413c823 100644 --- a/trigger/drivers/trebuchet/local.py +++ b/trigger/drivers/trebuchet/local.py @@ -26,6 +26,7 @@ from trigger.drivers import LockDriverError from trigger.drivers import ServiceDriverError from trigger.drivers import ReportDriverError +from trigger.drivers import CleanupDriverError LOG = config.LOG @@ -383,3 +384,25 @@ else: ret['pending'][minion] = data return ret + + +class CleanupDriver(drivers.CleanupDriver): + + def __init__(self, conf): + self.conf = conf + self._report_driver = self.conf.drivers['report-driver'] + + def cleanup(self, minion): + repo_name = self.conf.config['deploy.repo-name'] + serv = self._report_driver._get_redis_serv() + minions = serv.smembers('deploy:{0}:minions'.format(repo_name)) + if minion not in minions: + raise CleanupDriverError("No such minion {0} known in redis for repo".format( + minion), 1) + else: + # remove minion hash, then remove minion from the set + minion_key = 'deploy:{0}:minions:{1}'.format(repo_name, minion) + serv.delete(minion_key) + serv.srem('deploy:{0}:minions'.format(repo_name), minion) + LOG.info("removed minion {0} from redis targets for {1}".format( + minion, repo_name)) diff --git a/trigger/shell.py b/trigger/shell.py index 111f64c..fa0aa8c 100755 --- a/trigger/shell.py +++ b/trigger/shell.py @@ -29,6 +29,7 @@ from trigger.drivers import SyncDriverError from trigger.drivers import ServiceDriverError from trigger.drivers import ReportDriverError +from trigger.drivers import CleanupDriverError from trigger.config import ConfigurationError from datetime import datetime from git import GitCommandError @@ -54,6 +55,7 @@ self._sync_driver = self.conf.drivers['sync-driver'] self._service_driver = self.conf.drivers['service-driver'] self._report_driver = self.conf.drivers['report-driver'] + self._cleanup_driver = self.conf.drivers['cleanup-driver'] def do_start(self, args): """ @@ -270,6 +272,22 @@ else: self.parser.print_help() + @utils.arg('minion', + metavar='<minion>', + help='Minion to remove from redis known minions for this repo') + def do_cleanup(self, args): + """ + Clean up dead minions for this repository + """ + if not args.minion: + msg = "minion name must be specified as argument" + raise TriggerError(msg, 1) + else: + try: + self._cleanup_driver.cleanup(args.minion) + except CleanupDriverError as e: + LOG.error(e.message) + def _discover_extensions(self): extensions = [] for name, module in self._discover_via_extension_path(): -- To view, visit https://gerrit.wikimedia.org/r/219852 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ieee79ae8932a905d43f33f0b3f0dd09eed8bd4df Gerrit-PatchSet: 5 Gerrit-Project: operations/software/deployment/trebuchet-trigger Gerrit-Branch: master Gerrit-Owner: ArielGlenn <ar...@wikimedia.org> Gerrit-Reviewer: Aklapper <aklap...@wikimedia.org> Gerrit-Reviewer: ArielGlenn <ar...@wikimedia.org> Gerrit-Reviewer: BryanDavis <bda...@wikimedia.org> Gerrit-Reviewer: Cscott <canan...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits