Fix group/host var loading relative to playbook basedir

This commit is contained in:
James Cammarata 2015-07-14 09:26:24 -04:00
parent 7dd5600839
commit 4e94bb64d8
2 changed files with 14 additions and 8 deletions

View file

@ -73,6 +73,7 @@ class PlaybookExecutor:
try: try:
for playbook_path in self._playbooks: for playbook_path in self._playbooks:
pb = Playbook.load(playbook_path, variable_manager=self._variable_manager, loader=self._loader) pb = Playbook.load(playbook_path, variable_manager=self._variable_manager, loader=self._loader)
self._inventory.set_playbook_basedir(os.path.dirname(playbook_path))
if self._tqm is None: # we are doing a listing if self._tqm is None: # we are doing a listing
entry = {'playbook': playbook_path} entry = {'playbook': playbook_path}

View file

@ -595,22 +595,27 @@ class Inventory(object):
""" returns the directory of the current playbook """ """ returns the directory of the current playbook """
return self._playbook_basedir return self._playbook_basedir
def set_playbook_basedir(self, dir): def set_playbook_basedir(self, dir_name):
""" """
sets the base directory of the playbook so inventory can use it as a sets the base directory of the playbook so inventory can use it as a
basedir for host_ and group_vars, and other things. basedir for host_ and group_vars, and other things.
""" """
# Only update things if dir is a different playbook basedir # Only update things if dir is a different playbook basedir
if dir != self._playbook_basedir: if dir_name != self._playbook_basedir:
self._playbook_basedir = dir self._playbook_basedir = dir_name
# get group vars from group_vars/ files # get group vars from group_vars/ files
# FIXME: excluding the new_pb_basedir directory may result in group_vars
# files loading more than they should, however with the file caching
# we do this shouldn't be too much of an issue. Still, this should
# be fixed at some point to allow a "first load" to touch all of the
# directories, then later runs only touch the new basedir specified
for group in self.groups: for group in self.groups:
# FIXME: combine_vars #group.vars = combine_vars(group.vars, self.get_group_vars(group, new_pb_basedir=True))
group.vars = combine_vars(group.vars, self.get_group_vars(group, new_pb_basedir=True)) group.vars = combine_vars(group.vars, self.get_group_vars(group))
# get host vars from host_vars/ files # get host vars from host_vars/ files
for host in self.get_hosts(): for host in self.get_hosts():
# FIXME: combine_vars #host.vars = combine_vars(host.vars, self.get_host_vars(host, new_pb_basedir=True))
host.vars = combine_vars(host.vars, self.get_host_vars(host, new_pb_basedir=True)) host.vars = combine_vars(host.vars, self.get_host_vars(host))
# invalidate cache # invalidate cache
self._vars_per_host = {} self._vars_per_host = {}
self._vars_per_group = {} self._vars_per_group = {}
@ -646,7 +651,7 @@ class Inventory(object):
# this can happen from particular API usages, particularly if not run # this can happen from particular API usages, particularly if not run
# from /usr/bin/ansible-playbook # from /usr/bin/ansible-playbook
if basedir is None: if basedir is None:
continue basedir = './'
scan_pass = scan_pass + 1 scan_pass = scan_pass + 1