From: Sage Weil Date: Mon, 22 Jul 2013 20:03:24 +0000 (-0700) Subject: sequential, parallel: allow entries to be references to top-level config X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ddb92aa30819ee2215311662e6996f7a275702f9;p=teuthology.git 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 (cherry picked from commit 68888862a1464eedd9ccf83ada7c32888f97f31c) --- diff --git a/teuthology/task/parallel.py b/teuthology/task/parallel.py index d8fe1409b..6127e07c7 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 ebcafcf8b..4f74359c6 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)