From 5fc8192df18408628128464ad8c63c33164025c6 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 12 Jul 2017 13:19:37 -0700 Subject: [PATCH] Make roles ordered The Ansible role path should be an ordered list as roles may have the same name and precedence is important. Change-Id: I1518789c8b3abea42873885a964ee05f3fe51c4f --- zuul/configloader.py | 2 +- zuul/model.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/zuul/configloader.py b/zuul/configloader.py index 3c9ecf7464..254527adf4 100644 --- a/zuul/configloader.py +++ b/zuul/configloader.py @@ -467,7 +467,7 @@ class JobParser(object): r = JobParser._makeZuulRole(tenant, job, role) if r: roles.append(r) - job.roles = job.roles.union(set(roles)) + job.addRoles(roles) variables = conf.get('vars', None) if variables: diff --git a/zuul/model.py b/zuul/model.py index ffbb70c864..de733d7720 100644 --- a/zuul/model.py +++ b/zuul/model.py @@ -788,7 +788,7 @@ class Job(object): semaphore=None, attempts=3, final=False, - roles=frozenset(), + roles=(), required_projects={}, allowed_projects=None, override_branch=None, @@ -853,6 +853,13 @@ class Job(object): if not self.run: self.run = self.implied_run + def addRoles(self, roles): + newroles = list(self.roles) + for role in roles: + if role not in newroles: + newroles.append(role) + self.roles = tuple(newroles) + def updateVariables(self, other_vars): v = self.variables Job._deepUpdate(v, other_vars) @@ -928,7 +935,7 @@ class Job(object): if other._get('post_run') is not None: self.post_run = other.post_run + self.post_run if other._get('roles') is not None: - self.roles = self.roles.union(other.roles) + self.addRoles(other.roles) if other._get('variables') is not None: self.updateVariables(other.variables) if other._get('required_projects') is not None: