Merge branch 'sergevanginderachter-issue_8704_stacktrace_varmerge' into devel
This commit is contained in:
commit
f9183fcb01
2 changed files with 21 additions and 0 deletions
|
@ -84,10 +84,14 @@ class InventoryScript(object):
|
||||||
|
|
||||||
if not isinstance(data, dict):
|
if not isinstance(data, dict):
|
||||||
data = {'hosts': data}
|
data = {'hosts': data}
|
||||||
|
# is not those subkeys, then simplified syntax, host with vars
|
||||||
elif not any(k in data for k in ('hosts','vars')):
|
elif not any(k in data for k in ('hosts','vars')):
|
||||||
data = {'hosts': [group_name], 'vars': data}
|
data = {'hosts': [group_name], 'vars': data}
|
||||||
|
|
||||||
if 'hosts' in data:
|
if 'hosts' in data:
|
||||||
|
if not isinstance(data['hosts'], list):
|
||||||
|
raise errors.AnsibleError("You defined a group \"%s\" with bad "
|
||||||
|
"data for the host list:\n %s" % (group_name, data))
|
||||||
|
|
||||||
for hostname in data['hosts']:
|
for hostname in data['hosts']:
|
||||||
if not hostname in all_hosts:
|
if not hostname in all_hosts:
|
||||||
|
@ -96,6 +100,10 @@ class InventoryScript(object):
|
||||||
group.add_host(host)
|
group.add_host(host)
|
||||||
|
|
||||||
if 'vars' in data:
|
if 'vars' in data:
|
||||||
|
if not isinstance(data['vars'], dict):
|
||||||
|
raise errors.AnsibleError("You defined a group \"%s\" with bad "
|
||||||
|
"data for variables:\n %s" % (group_name, data))
|
||||||
|
|
||||||
for k, v in data['vars'].iteritems():
|
for k, v in data['vars'].iteritems():
|
||||||
if group.name == all.name:
|
if group.name == all.name:
|
||||||
all.set_variable(k, v)
|
all.set_variable(k, v)
|
||||||
|
|
|
@ -696,12 +696,23 @@ def parse_kv(args):
|
||||||
options[k.strip()] = unquote(v.strip())
|
options[k.strip()] = unquote(v.strip())
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
def _validate_both_dicts(a, b):
|
||||||
|
|
||||||
|
if not (isinstance(a, dict) and isinstance(b, dict)):
|
||||||
|
raise errors.AnsibleError(
|
||||||
|
"failed to combine variables, expected dicts but got a '%s' and a '%s'" % (type(a).__name__, type(b).__name__)
|
||||||
|
)
|
||||||
|
|
||||||
def merge_hash(a, b):
|
def merge_hash(a, b):
|
||||||
''' recursively merges hash b into a
|
''' recursively merges hash b into a
|
||||||
keys from b take precedence over keys from a '''
|
keys from b take precedence over keys from a '''
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
|
# we check here as well as in combine_vars() since this
|
||||||
|
# function can work recursively with nested dicts
|
||||||
|
_validate_both_dicts(a, b)
|
||||||
|
|
||||||
for dicts in a, b:
|
for dicts in a, b:
|
||||||
# next, iterate over b keys and values
|
# next, iterate over b keys and values
|
||||||
for k, v in dicts.iteritems():
|
for k, v in dicts.iteritems():
|
||||||
|
@ -1308,6 +1319,8 @@ def listify_lookup_plugin_terms(terms, basedir, inject):
|
||||||
|
|
||||||
def combine_vars(a, b):
|
def combine_vars(a, b):
|
||||||
|
|
||||||
|
_validate_both_dicts(a, b)
|
||||||
|
|
||||||
if C.DEFAULT_HASH_BEHAVIOUR == "merge":
|
if C.DEFAULT_HASH_BEHAVIOUR == "merge":
|
||||||
return merge_hash(a, b)
|
return merge_hash(a, b)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue