diff --git a/docsite/rst/playbooks2.rst b/docsite/rst/playbooks2.rst index 7eb9e6a4bd2..ab2d1a015c6 100644 --- a/docsite/rst/playbooks2.rst +++ b/docsite/rst/playbooks2.rst @@ -146,6 +146,8 @@ period, without the rest of the domain. Don't worry about any of this unless you think you need it. You'll know when you do. +Also available, *inventory_dir* is the pathname of the directory holding Ansible's inventory host file. + Variable File Separation ```````````````````````` diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 91e1aa39bc8..4d561f30093 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -121,7 +121,10 @@ class PlayBook(object): self.inventory = inventory self.basedir = os.path.dirname(playbook) or '.' - (self.playbook, self.play_basedirs) = self._load_playbook_from_file(playbook) + vars = {} + if self.inventory.basedir() is not None: + vars['inventory_dir'] = self.inventory.basedir() + (self.playbook, self.play_basedirs) = self._load_playbook_from_file(playbook, vars) # ***************************************************** @@ -171,7 +174,7 @@ class PlayBook(object): for t in tokens[1:]: (k,v) = t.split("=", 1) incvars[k] = utils.template(basedir, v, incvars) - included_path = utils.path_dwim(basedir, tokens[0]) + included_path = utils.path_dwim(basedir, utils.template(basedir, tokens[0], incvars)) (plays, basedirs) = self._load_playbook_from_file(included_path, incvars) for p in plays: if 'vars' not in p: diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 67e1c1a2173..e59912c458c 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -80,8 +80,11 @@ class Play(object): self._update_vars_files_for_host(None) - self._tasks = self._load_tasks(self._ds.get('tasks', [])) - self._handlers = self._load_tasks(self._ds.get('handlers', [])) + load_vars = {} + if self.playbook.inventory.basedir() is not None: + load_vars['inventory_dir'] = self.playbook.inventory.basedir(); + self._tasks = self._load_tasks(self._ds.get('tasks', []), load_vars) + self._handlers = self._load_tasks(self._ds.get('handlers', []), load_vars) if self.tags is None: self.tags = [] diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 3d1181a3c0d..fa7537a0e3f 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -339,6 +339,8 @@ class Runner(object): inject['groups'] = self.inventory.groups_list() inject['vars'] = self.module_vars inject['environment'] = self.environment + if self.inventory.basedir() is not None: + inject['inventory_dir'] = self.inventory.basedir() # allow with_foo to work in playbooks... items = None