diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py index ab79c55765b..79057de020b 100644 --- a/lib/ansible/playbook/role/__init__.py +++ b/lib/ansible/playbook/role/__init__.py @@ -496,7 +496,9 @@ class Role(Base, Conditional, Taggable, CollectionSearch, Delegatable): dep_chain = [] if dep_chain is None else dep_chain default_vars = dict() - for dep in self.get_all_dependencies(): + # FIXME combining deps' default_vars can be optimized by moving it + # into _load_role_data so it is done just once + for dep in self._dependencies: default_vars = combine_vars(default_vars, dep.get_default_vars()) if dep_chain: for parent in dep_chain: @@ -536,13 +538,15 @@ class Role(Base, Conditional, Taggable, CollectionSearch, Delegatable): all_vars = self.get_inherited_vars(dep_chain, only_exports=only_exports) # get exported variables from meta/dependencies + # FIXME combining deps' role_vars can be optimized by moving it + # into _load_role_data so it is done just once seen = [] for dep in self.get_all_dependencies(): # Avoid rerunning dupe deps since they can have vars from previous invocations and they accumulate in deps # TODO: re-examine dep loading to see if we are somehow improperly adding the same dep too many times if dep not in seen: # only take 'exportable' vars from deps - all_vars = combine_vars(all_vars, dep.get_vars(include_params=False, only_exports=True)) + all_vars = combine_vars(all_vars, dep._role_vars) seen.append(dep) # role_vars come from vars/ in a role