diff --git a/changelogs/fragments/77108_params_blank.yml b/changelogs/fragments/77108_params_blank.yml new file mode 100644 index 00000000000..05027b1ac9b --- /dev/null +++ b/changelogs/fragments/77108_params_blank.yml @@ -0,0 +1,3 @@ +--- +bugfixes: +- parameters - handle blank values when argument is a list (https://github.com/ansible/ansible/issues/77108). diff --git a/lib/ansible/module_utils/common/parameters.py b/lib/ansible/module_utils/common/parameters.py index 60453d5d93a..a9bbcb28d23 100644 --- a/lib/ansible/module_utils/common/parameters.py +++ b/lib/ansible/module_utils/common/parameters.py @@ -651,10 +651,11 @@ def _validate_argument_values(argument_spec, parameters, options_context=None, e if param in parameters: # Allow one or more when type='list' param with choices if isinstance(parameters[param], list): - diff_list = ", ".join([item for item in parameters[param] if item not in choices]) + diff_list = [item for item in parameters[param] if item not in choices] if diff_list: choices_str = ", ".join([to_native(c) for c in choices]) - msg = "value of %s must be one or more of: %s. Got no match for: %s" % (param, choices_str, diff_list) + diff_str = ", ".join(diff_list) + msg = "value of %s must be one or more of: %s. Got no match for: %s" % (param, choices_str, diff_str) if options_context: msg = "{0} found in {1}".format(msg, " -> ".join(options_context)) errors.append(ArgumentValueError(msg)) diff --git a/test/units/module_utils/common/arg_spec/test_validate_invalid.py b/test/units/module_utils/common/arg_spec/test_validate_invalid.py index 5384ee225af..7302e8aad4e 100644 --- a/test/units/module_utils/common/arg_spec/test_validate_invalid.py +++ b/test/units/module_utils/common/arg_spec/test_validate_invalid.py @@ -100,6 +100,14 @@ INVALID_SPECS = [ {'req': None}, set(), "missing required arguments: req" + ), + ( + 'blank_values', + {'ch_param': {'elements': 'str', 'type': 'list', 'choices': ['a', 'b']}}, + {'ch_param': ['']}, + {'ch_param': ['']}, + set(), + "value of ch_param must be one or more of" ) ]