From c8a06d4ac2af321dbaea13e4f8ae78c1bb5f8b3b Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 4 May 2015 10:41:21 -0700 Subject: [PATCH] task: add loop --- teuthology/task/loop.py | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 teuthology/task/loop.py diff --git a/teuthology/task/loop.py b/teuthology/task/loop.py new file mode 100644 index 0000000000..598f561a54 --- /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 -- 2.39.5