]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/tasks/workunit.py: use "overrides" as the default settings of workunit 14487/head
authorKefu Chai <kchai@redhat.com>
Sat, 1 Apr 2017 15:04:22 +0000 (23:04 +0800)
committerZack Cerza <zack@redhat.com>
Wed, 12 Apr 2017 16:21:02 +0000 (10:21 -0600)
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 <kchai@redhat.com>
(cherry picked from commit 47080150a17d238f38d9da824d227393ad767aad)

qa/tasks/workunit.py

index 4420761783ee42820ecf73e691380710905309f5..888b75eefff5a03427f74aff9ecd2d8fab9a994c 100644 (file)
@@ -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)