Bugfix: args gets ignored alongside named parameters

This commit is contained in:
Bo Maryniuk 2017-07-12 17:13:19 +02:00
parent 74689e3462
commit ea8351362c

View file

@ -315,22 +315,35 @@ def _call_function(name, returner=None, **kwargs):
'''
argspec = salt.utils.args.get_function_argspec(__salt__[name])
func_kw = dict(zip(argspec.args[-len(argspec.defaults or []):], # pylint: disable=incompatible-py3-code
argspec.defaults or []))
func_args = []
for funcset in kwargs.get('func_args') or {}:
if isinstance(funcset, dict):
func_kw.update(funcset)
argspec.defaults or []))
arg_type, na_type, kw_type = [], {}, False
for funcset in reversed(kwargs.get('func_args') or []):
if not isinstance(funcset, dict):
kw_type = True
if kw_type:
if isinstance(funcset, dict):
arg_type += funcset.values()
na_type.update(funcset)
else:
arg_type.append(funcset)
else:
func_args.append(funcset)
func_kw.update(funcset)
arg_type.reverse()
_exp_prm = len(argspec.args or []) - len(argspec.defaults or [])
_passed_prm = len(arg_type)
missing = []
for arg in argspec.args:
if arg not in func_kw:
missing.append(arg)
if na_type and _exp_prm > _passed_prm:
for arg in argspec.args:
if arg not in func_kw:
missing.append(arg)
if missing:
raise SaltInvocationError('Missing arguments: {0}'.format(', '.join(missing)))
elif _exp_prm > _passed_prm:
raise SaltInvocationError('Function expects {0} parameters, got only {1}'.format(
_exp_prm, _passed_prm))
mret = __salt__[name](*func_args, **func_kw)
mret = __salt__[name](*arg_type, **func_kw)
if returner is not None:
returners = salt.loader.returners(__opts__, __salt__)
if returner in returners: