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

Fixes #12524
pull/12552/head
James Cammarata 9 years ago
parent 4226e49bc6
commit ffdba96668

@ -83,6 +83,9 @@ class PlaybookExecutor:
self._display.vv('%d plays in %s' % (len(plays), playbook_path)) self._display.vv('%d plays in %s' % (len(plays), playbook_path))
for play in plays: 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 # clear any filters which may have been applied to the inventory
self._inventory.remove_restriction() self._inventory.remove_restriction()

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

@ -80,6 +80,8 @@ class PlaybookInclude(Base, Conditional, Taggable):
temp_vars.update(new_obj.vars) temp_vars.update(new_obj.vars)
entry.vars = temp_vars entry.vars = temp_vars
entry.tags = list(set(entry.tags).union(new_obj.tags)) 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 return pb

Loading…
Cancel
Save