From: Samuel Just Date: Mon, 4 May 2015 17:41:21 +0000 (-0700) Subject: task: add loop X-Git-Tag: 1.1.0~952^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F481%2Fhead;p=teuthology.git task: add loop --- diff --git a/teuthology/task/loop.py b/teuthology/task/loop.py new file mode 100644 index 000000000..598f561a5 --- /dev/null +++ b/teuthology/task/loop.py @@ -0,0 +1,44 @@ +""" +Task to loop a list of items +""" +import sys +import logging + +from teuthology import run_tasks + +log = logging.getLogger(__name__) + +def task(ctx, config): + """ + Loop a sequential group of tasks + + example: + - loop: + count: 10 + body: + - tasktest: + - tasktest: + + :param ctx: Context + :param config: Configuration + """ + for i in range(config.get('count', 1)): + stack = [] + try: + for entry in config.get('body', []): + if not isinstance(entry, dict): + entry = ctx.config.get(entry, {}) + ((taskname, confg),) = entry.iteritems() + log.info('In sequential, running task %s...' % taskname) + mgr = run_tasks.run_one_task(taskname, ctx=ctx, config=confg) + if hasattr(mgr, '__enter__'): + mgr.__enter__() + stack.append(mgr) + finally: + try: + exc_info = sys.exc_info() + while stack: + mgr = stack.pop() + mgr.__exit__(*exc_info) + finally: + del exc_info