The following paths are now implict and optional in vars_files:
./group_vars/groupname.yml (for all groups the host is in) ./host_vars/hostname.yml (for the hostname given in the inventory) This requires an actual inventory file, not script and the paths are relative to the directory of the inventory file.
This commit is contained in:
parent
db1a4d8fac
commit
ba3466af95
3 changed files with 35 additions and 0 deletions
|
@ -31,6 +31,7 @@ Ansible Changes By Release
|
|||
* mount module
|
||||
* apt module now passes DEBIAN_FRONTEND=noninteractive
|
||||
* to catch typos, like 'var' for 'vars', playbooks and tasks now yell on invalid parameters
|
||||
* automatically load (directory_of_inventory_file)/group_vars/groupname and /host_vars/hostname in vars_files
|
||||
|
||||
0.5 "Amsterdam" ------- July 04, 2012
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ class Inventory(object):
|
|||
def _match(self, str, pattern_str):
|
||||
return fnmatch.fnmatch(str, pattern_str)
|
||||
|
||||
# TODO: cache this logic so if called a second time the result is not recalculated
|
||||
def get_hosts(self, pattern="all"):
|
||||
""" Get all host objects matching the pattern """
|
||||
hosts = {}
|
||||
|
@ -107,6 +108,8 @@ class Inventory(object):
|
|||
def get_groups(self):
|
||||
return self.groups
|
||||
|
||||
# TODO: cache this logic so if called a second time the result is not recalculated
|
||||
# if using inventory scripts
|
||||
def get_host(self, hostname):
|
||||
for group in self.groups:
|
||||
for host in group.get_hosts():
|
||||
|
@ -120,12 +123,16 @@ class Inventory(object):
|
|||
return group
|
||||
return None
|
||||
|
||||
# TODO: cache this logic so if called a second time the result is not recalculated
|
||||
# if using inventory scripts
|
||||
def get_group_variables(self, groupname):
|
||||
group = self.get_group(groupname)
|
||||
if group is None:
|
||||
raise Exception("group not found: %s" % groupname)
|
||||
return group.get_variables()
|
||||
|
||||
# TODO: cache this logic so if called a second time the result is not recalculated
|
||||
# if using inventory scripts
|
||||
def get_variables(self, hostname):
|
||||
|
||||
if self._is_script:
|
||||
|
@ -169,3 +176,15 @@ class Inventory(object):
|
|||
""" Do not restrict list operations """
|
||||
|
||||
self._restriction = None
|
||||
|
||||
def is_file(self):
|
||||
""" did inventory come from a file? """
|
||||
if not isinstance(self.host_list, basestring):
|
||||
return False
|
||||
return os.path.exists(self.host_list)
|
||||
|
||||
def basedir(self):
|
||||
""" if inventory came from a file, what's the directory? """
|
||||
if not self.is_file():
|
||||
return None
|
||||
return os.path.dirname(self.host_list)
|
||||
|
|
|
@ -203,6 +203,21 @@ class Play(object):
|
|||
if type(self.vars_files) != list:
|
||||
self.vars_files = [ self.vars_files ]
|
||||
|
||||
|
||||
if (host is not None):
|
||||
inventory = self.playbook.inventory
|
||||
hostrec = inventory.get_host(host)
|
||||
groups = [ g.name for g in hostrec.groups ]
|
||||
basedir = inventory.basedir()
|
||||
if basedir is not None:
|
||||
for x in groups:
|
||||
path = os.path.join(basedir, "group_vars/%s" % x)
|
||||
if os.path.exists(path):
|
||||
self.vars_files.append(path)
|
||||
path = os.path.join(basedir, "host_vars/%s" % hostrec.name)
|
||||
if os.path.exists(path):
|
||||
self.vars_files.append(path)
|
||||
|
||||
for filename in self.vars_files:
|
||||
|
||||
if type(filename) == list:
|
||||
|
|
Loading…
Reference in a new issue