From 68888862a1464eedd9ccf83ada7c32888f97f31c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 22 Jul 2013 13:03:24 -0700 Subject: [PATCH] sequential, parallel: allow entries to be references to top-level config Often we want to build a test collection that substitutes different sequences of tasks into a parallel/sequential construction. However, the yaml combination that happens when generating jobs is not smart enough to substitute some fragment into a deeply-nested piece of yaml. Instead, make these sequences top-level entries in the config dict, and reference them. For example: tasks: - install: - ceph: - parallel: - workload - upgrade-sequence workload: workunit: - something upgrade-sequence: install.restart: [osd.0, osd.1] Signed-off-by: Sage Weil --- teuthology/task/parallel.py | 14 ++++++++++++++ teuthology/task/sequential.py | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/teuthology/task/parallel.py b/teuthology/task/parallel.py index d8fe1409bbbd3..6127e07c78320 100644 --- a/teuthology/task/parallel.py +++ b/teuthology/task/parallel.py @@ -17,12 +17,26 @@ def task(ctx, config): - tasktest: - tasktest: + You can also reference the job from elsewhere: + + foo: + tasktest: + tasks: + - parallel: + - foo + - tasktest: + + That is, if the entry is not a dict, we will look it up in the top-level + config. + Sequential task and Parallel tasks can be nested. """ log.info('starting parallel...') with parallel.parallel() as p: for entry in config: + if not isinstance(entry, dict): + entry = ctx.config.get(entry, {}) ((taskname, confg),) = entry.iteritems() p.spawn(_run_spawned, ctx, confg, taskname) diff --git a/teuthology/task/sequential.py b/teuthology/task/sequential.py index ebcafcf8b83d7..4f74359c6ffe7 100644 --- a/teuthology/task/sequential.py +++ b/teuthology/task/sequential.py @@ -16,11 +16,26 @@ def task(ctx, config): - tasktest: - tasktest: + You can also reference the job from elsewhere: + + foo: + tasktest: + tasks: + - sequential: + - tasktest: + - foo + - tasktest: + + That is, if the entry is not a dict, we will look it up in the top-level + config. + Sequential task and Parallel tasks can be nested. """ stack = [] try: for entry in config: + 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) -- 2.39.5