From e4efe0b2f163255a081f7a8b6ed18c31cf211784 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Wed, 5 Oct 2016 01:24:23 -0500 Subject: [PATCH] Move searching for roles in the cur basedir to last Searching the DEFAULT_ROLES_PATH and the roles basedir should come before this, and it has been a long standing oversight. Fixes #17882 (cherry picked from commit 0a86ddc25125359c244ac7040036a5080dd5bb04) --- lib/ansible/playbook/role/definition.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/ansible/playbook/role/definition.py b/lib/ansible/playbook/role/definition.py index f58899434da..6b78a1b3498 100644 --- a/lib/ansible/playbook/role/definition.py +++ b/lib/ansible/playbook/role/definition.py @@ -138,18 +138,22 @@ class RoleDefinition(Base, Become, Conditional, Taggable): # we always start the search for roles in the base directory of the playbook role_search_paths = [ os.path.join(self._loader.get_basedir(), u'roles'), - self._loader.get_basedir(), ] # also search in the configured roles path if C.DEFAULT_ROLES_PATH: role_search_paths.extend(C.DEFAULT_ROLES_PATH) - # finally, append the roles basedir, if it was set, so we can + # next, append the roles basedir, if it was set, so we can # search relative to that directory for dependent roles if self._role_basedir: role_search_paths.append(self._role_basedir) + # finally as a last resort we look in the current basedir as set + # in the loader (which should be the playbook dir itself) but without + # the roles/ dir appended + role_search_paths.append(self._loader.get_basedir()) + # create a templar class to template the dependency names, in # case they contain variables if self._variable_manager is not None: