Save the included directory for playbook includes for use as the basedir

Fixes #12524
This commit is contained in:
James Cammarata 2015-09-29 00:25:59 -04:00
parent 4226e49bc6
commit ffdba96668
3 changed files with 9 additions and 0 deletions

View file

@ -83,6 +83,9 @@ class PlaybookExecutor:
self._display.vv('%d plays in %s' % (len(plays), playbook_path))
for play in plays:
if play._included_path is not None:
self._loader.set_basedir(play._included_path)
# clear any filters which may have been applied to the inventory
self._inventory.remove_restriction()

View file

@ -95,6 +95,7 @@ class Play(Base, Taggable, Become):
def __init__(self):
super(Play, self).__init__()
self._included_path = None
self.ROLE_CACHE = {}
def __repr__(self):
@ -321,12 +322,14 @@ class Play(Base, Taggable, Become):
for role in self.get_roles():
roles.append(role.serialize())
data['roles'] = roles
data['included_path'] = self._included_path
return data
def deserialize(self, data):
super(Play, self).deserialize(data)
self._included_path = data.get('included_path', None)
if 'roles' in data:
role_data = data.get('roles', [])
roles = []
@ -341,5 +344,6 @@ class Play(Base, Taggable, Become):
def copy(self):
new_me = super(Play, self).copy()
new_me.ROLE_CACHE = self.ROLE_CACHE.copy()
new_me._included_path = self._included_path
return new_me

View file

@ -80,6 +80,8 @@ class PlaybookInclude(Base, Conditional, Taggable):
temp_vars.update(new_obj.vars)
entry.vars = temp_vars
entry.tags = list(set(entry.tags).union(new_obj.tags))
if entry._included_path is None:
entry._included_path = os.path.dirname(file_name)
return pb