Merge branch 'devel' of https://github.com/skvidal/ansible into skvidal-devel

This commit is contained in:
Michael DeHaan 2012-05-01 22:58:47 -04:00
commit 02efcdced6
2 changed files with 37 additions and 11 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:
@ -131,7 +135,7 @@ class PlayBook(object):
k, v = item.items()[0]
vars[k] = v
else:
vars = play['vars']
vars.update(play['vars'])
vars_prompt = play.get('vars_prompt', {})
if type(vars_prompt) != dict:
@ -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: