Save the included directory for playbook includes for use as the basedir
Fixes #12524
This commit is contained in:
parent
4226e49bc6
commit
ffdba96668
3 changed files with 9 additions and 0 deletions
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue