Fixing role param precedence issues
* Make role param resolution follow the role dependency chain, rather than using all roles within the play * Also move params to be merged in after role vars in general, to match our variable precedence rules * Changes to the way var lookup is done in role helper methods for get_vars(), get_inherited_vars(), and get_role_params() to make the above possible without trampling on previously merged vars Fixes #14472 Fixes #14475
This commit is contained in:
parent
4a00999875
commit
9d2fe2fb2c
2 changed files with 9 additions and 9 deletions
|
@ -259,31 +259,31 @@ class Role(Base, Become, Conditional, Taggable):
|
||||||
default_vars = combine_vars(default_vars, self._default_vars)
|
default_vars = combine_vars(default_vars, self._default_vars)
|
||||||
return default_vars
|
return default_vars
|
||||||
|
|
||||||
def get_inherited_vars(self, dep_chain=[], include_params=True):
|
def get_inherited_vars(self, dep_chain=[]):
|
||||||
inherited_vars = dict()
|
inherited_vars = dict()
|
||||||
|
|
||||||
if dep_chain:
|
if dep_chain:
|
||||||
for parent in dep_chain:
|
for parent in dep_chain:
|
||||||
inherited_vars = combine_vars(inherited_vars, parent._role_vars)
|
inherited_vars = combine_vars(inherited_vars, parent._role_vars)
|
||||||
if include_params:
|
|
||||||
inherited_vars = combine_vars(inherited_vars, parent._role_params)
|
|
||||||
return inherited_vars
|
return inherited_vars
|
||||||
|
|
||||||
def get_role_params(self):
|
def get_role_params(self, dep_chain=[]):
|
||||||
params = {}
|
params = {}
|
||||||
for dep in self.get_all_dependencies():
|
if dep_chain:
|
||||||
params = combine_vars(params, dep._role_params)
|
for parent in dep_chain:
|
||||||
|
params = combine_vars(params, parent._role_params)
|
||||||
|
params = combine_vars(params, self._role_params)
|
||||||
return params
|
return params
|
||||||
|
|
||||||
def get_vars(self, dep_chain=[], include_params=True):
|
def get_vars(self, dep_chain=[], include_params=True):
|
||||||
all_vars = self.get_inherited_vars(dep_chain, include_params=include_params)
|
all_vars = self.get_inherited_vars(dep_chain)
|
||||||
|
|
||||||
for dep in self.get_all_dependencies():
|
for dep in self.get_all_dependencies():
|
||||||
all_vars = combine_vars(all_vars, dep.get_vars(include_params=include_params))
|
all_vars = combine_vars(all_vars, dep.get_vars(include_params=include_params))
|
||||||
|
|
||||||
all_vars = combine_vars(all_vars, self._role_vars)
|
all_vars = combine_vars(all_vars, self._role_vars)
|
||||||
if include_params:
|
if include_params:
|
||||||
all_vars = combine_vars(all_vars, self._role_params)
|
all_vars = combine_vars(all_vars, self.get_role_params(dep_chain=dep_chain))
|
||||||
|
|
||||||
return all_vars
|
return all_vars
|
||||||
|
|
||||||
|
|
|
@ -308,12 +308,12 @@ class VariableManager:
|
||||||
|
|
||||||
if not C.DEFAULT_PRIVATE_ROLE_VARS:
|
if not C.DEFAULT_PRIVATE_ROLE_VARS:
|
||||||
for role in play.get_roles():
|
for role in play.get_roles():
|
||||||
all_vars = combine_vars(all_vars, role.get_role_params())
|
|
||||||
all_vars = combine_vars(all_vars, role.get_vars(include_params=False))
|
all_vars = combine_vars(all_vars, role.get_vars(include_params=False))
|
||||||
|
|
||||||
if task:
|
if task:
|
||||||
if task._role:
|
if task._role:
|
||||||
all_vars = combine_vars(all_vars, task._role.get_vars())
|
all_vars = combine_vars(all_vars, task._role.get_vars())
|
||||||
|
all_vars = combine_vars(all_vars, task._role.get_role_params(task._block._dep_chain))
|
||||||
all_vars = combine_vars(all_vars, task.get_vars())
|
all_vars = combine_vars(all_vars, task.get_vars())
|
||||||
|
|
||||||
if host:
|
if host:
|
||||||
|
|
Loading…
Reference in a new issue