From b8d988f7f19112c3cc2a8379a4ed20418414abba Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sat, 1 Apr 2017 23:04:22 +0800 Subject: [PATCH] qa/tasks/workunit.py: use "overrides" as the default settings of workunit otherwise the settings in "workunit" tasks are always overridden by the settings in template config. so we'd better follow the way of how "install" task updates itself with the "overrides" settings: it uses the "overrides" as the *defaults*. Fixes: http://tracker.ceph.com/issues/19429 Signed-off-by: Kefu Chai (cherry picked from commit 47080150a17d238f38d9da824d227393ad767aad) --- qa/tasks/workunit.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/qa/tasks/workunit.py b/qa/tasks/workunit.py index 4420761783ee4..888b75eefff5a 100644 --- a/qa/tasks/workunit.py +++ b/qa/tasks/workunit.py @@ -5,6 +5,7 @@ import logging import pipes import os +from copy import deepcopy from util import get_remote_for_role from teuthology import misc @@ -127,10 +128,18 @@ def task(ctx, config): assert isinstance(config.get('clients'), dict), \ 'configuration must contain a dictionary of clients' - overrides = ctx.config.get('overrides', {}) - misc.deep_merge(config, overrides.get('workunit', {})) - - for spec, cls in [('branch', Branch), ('tag', Refspec), ('sha1', Refspec)]: + # mimic the behavior of the "install" task, where the "overrides" are + # actually the defaults of that task. in other words, if none of "sha1", + # "tag", or "branch" is specified by a "workunit" tasks, we will update + # it with the information in the "workunit" sub-task nested in "overrides". + overrides = deepcopy(ctx.config.get('overrides', {}).get('workunit', {})) + refspecs = {'branch': Branch, 'tag': Refspec, 'sha1': Refspec} + if any(map(lambda i: i in config, refspecs.iterkeys())): + for i in refspecs.iterkeys(): + overrides.pop(i, None) + misc.deep_merge(config, overrides) + + for spec, cls in refspecs.iteritems(): refspec = config.get(spec) if refspec: refspec = cls(refspec) -- 2.39.5