inventory group 'all' variables are global variables

applied to every host and available all over
they are read in so that ones defined first can be used to define
the later ones.
This commit is contained in:
Seth Vidal 2012-05-02 18:29:46 -04:00
parent df61a65344
commit dc35dd99c0
2 changed files with 36 additions and 10 deletions

View file

@ -32,11 +32,15 @@ class Inventory(object):
systems, or a script that will be called with --list or --host.
"""
def __init__(self, host_list=C.DEFAULT_HOST_LIST):
def __init__(self, host_list=C.DEFAULT_HOST_LIST, global_host_vars={}):
self._restriction = None
self._variables = {}
self._global_host_vars = global_host_vars # lets us pass in a global var list
# that each host gets
# after we have set up the inventory
# to get all group variables
if type(host_list) == list:
self.host_list = host_list
self.groups = dict(ungrouped=host_list)
@ -98,6 +102,9 @@ class Inventory(object):
return variables
def get_global_vars(self):
return self._global_host_vars
# *****************************************************
def _parse_from_file(self):
@ -177,9 +184,24 @@ class Inventory(object):
hosts = []
groups = {}
ungrouped = []
# go through once and grab up the global_host_vars from the 'all' group
for item in data:
if type(item) == dict:
if "group" in item and 'all' == item["group"]:
if "vars" in item:
variables = item['vars']
if type(variables) == list:
for variable in variables:
if len(variable) != 1:
raise errors.AnsibleError("Only one item expected in %s"%(variable))
k, v = variable.items()[0]
self._global_host_vars[k] = utils.template(v, self._global_host_vars, {})
elif type(variables) == dict:
self._global_host_vars.update(variables)
for item in data:
if type(item) == dict:
if "group" in item:
@ -187,7 +209,7 @@ class Inventory(object):
group_vars = []
if "vars" in item:
group_vars = item["vars"]
group_vars.extend(item["vars"])
group_hosts = []
if "hosts" in item:

View file

@ -103,16 +103,20 @@ class PlayBook(object):
self.sudo = sudo
self.sudo_pass = sudo_pass
self.extra_vars = extra_vars
self.basedir = os.path.dirname(playbook)
self.playbook = self._parse_playbook(playbook)
self.global_vars = {}
if override_hosts is not None:
if type(override_hosts) != list:
raise errors.AnsibleError("override hosts must be a list")
self.global_vars.update(ansible.inventory.Inventory(host_list).get_global_vars())
self.inventory = ansible.inventory.Inventory(override_hosts)
else:
self.inventory = ansible.inventory.Inventory(host_list)
self.global_vars.update(ansible.inventory.Inventory(host_list).get_global_vars())
self.basedir = os.path.dirname(playbook)
self.playbook = self._parse_playbook(playbook)
# *****************************************************
@ -123,7 +127,7 @@ class PlayBook(object):
play['vars'] = {}
if type(play['vars']) not in [dict, list]:
raise errors.AnsibleError("'vars' section must contain only key/value pairs")
vars = {}
vars = self.global_vars
# translate a list of vars into a dict
if type(play['vars']) == list:
@ -151,9 +155,9 @@ class PlayBook(object):
''' load tasks included from external files. '''
# include: some.yml a=2 b=3 c=4
include_tokens = task['include'].split()
path = utils.path_dwim(dirname, include_tokens[0])
play_vars = self._get_vars(play, dirname)
include_tokens = utils.template(task['include'], play_vars, SETUP_CACHE).split()
path = utils.path_dwim(dirname, include_tokens[0])
include_vars = {}
for i,x in enumerate(include_tokens):
if x.find("=") != -1: