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):
|
||||
data = {'hosts': data}
|
||||
# is not those subkeys, then simplified syntax, host with vars
|
||||
elif not any(k in data for k in ('hosts','vars')):
|
||||
data = {'hosts': [group_name], 'vars': 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']:
|
||||
if not hostname in all_hosts:
|
||||
|
@ -96,6 +100,10 @@ class InventoryScript(object):
|
|||
group.add_host(host)
|
||||
|
||||
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():
|
||||
if group.name == all.name:
|
||||
all.set_variable(k, v)
|
||||
|
|
|
@ -696,12 +696,23 @@ def parse_kv(args):
|
|||
options[k.strip()] = unquote(v.strip())
|
||||
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):
|
||||
''' recursively merges hash b into a
|
||||
keys from b take precedence over keys from a '''
|
||||
|
||||
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:
|
||||
# next, iterate over b keys and values
|
||||
for k, v in dicts.iteritems():
|
||||
|
@ -1308,6 +1319,8 @@ def listify_lookup_plugin_terms(terms, basedir, inject):
|
|||
|
||||
def combine_vars(a, b):
|
||||
|
||||
_validate_both_dicts(a, b)
|
||||
|
||||
if C.DEFAULT_HASH_BEHAVIOUR == "merge":
|
||||
return merge_hash(a, b)
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue