Allow the msg argument to fail_json() to be a positional argument
fial_json() requires a message be given to it to inform the end user of why the module failed. Prior to this commit, the message had to be a keyword argument: module.fail_json(msg='Failed due to error') Since this is a required parameter, this commit allows the message to be given as a positional argument instead: module.fail_json('Failed due to an error')
This commit is contained in:
parent
148e83f832
commit
6531ba38f8
3 changed files with 21 additions and 5 deletions
|
@ -0,0 +1,5 @@
|
||||||
|
minor_features:
|
||||||
|
- `AnsibleModule.fail_json()` has always required that a message be passed
|
||||||
|
in which informs the end user why the module failed. In the past this
|
||||||
|
message had to be passed as the `msg` keyword argument but it can now be
|
||||||
|
passed as the first positional argument instead.
|
|
@ -2041,12 +2041,11 @@ class AnsibleModule(object):
|
||||||
self._return_formatted(kwargs)
|
self._return_formatted(kwargs)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def fail_json(self, **kwargs):
|
def fail_json(self, msg, **kwargs):
|
||||||
''' return from the module, with an error message '''
|
''' return from the module, with an error message '''
|
||||||
|
|
||||||
if 'msg' not in kwargs:
|
|
||||||
raise AssertionError("implementation error -- msg to explain the error is required")
|
|
||||||
kwargs['failed'] = True
|
kwargs['failed'] = True
|
||||||
|
kwargs['msg'] = msg
|
||||||
|
|
||||||
# Add traceback if debug or high verbosity and it is missing
|
# Add traceback if debug or high verbosity and it is missing
|
||||||
# NOTE: Badly named as exception, it really always has been a traceback
|
# NOTE: Badly named as exception, it really always has been a traceback
|
||||||
|
|
|
@ -55,11 +55,23 @@ class TestAnsibleModuleExitJson:
|
||||||
expected['failed'] = True
|
expected['failed'] = True
|
||||||
assert return_val == expected
|
assert return_val == expected
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
||||||
|
def test_fail_json_msg_positional(self, am, capfd):
|
||||||
|
with pytest.raises(SystemExit) as ctx:
|
||||||
|
am.fail_json('This is the msg')
|
||||||
|
assert ctx.value.code == 1
|
||||||
|
|
||||||
|
out, err = capfd.readouterr()
|
||||||
|
return_val = json.loads(out)
|
||||||
|
# Fail_json should add failed=True
|
||||||
|
assert return_val == {'msg': 'This is the msg', 'failed': True,
|
||||||
|
'invocation': EMPTY_INVOCATION}
|
||||||
|
|
||||||
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
||||||
def test_fail_json_no_msg(self, am):
|
def test_fail_json_no_msg(self, am):
|
||||||
with pytest.raises(AssertionError) as ctx:
|
with pytest.raises(TypeError) as ctx:
|
||||||
am.fail_json()
|
am.fail_json()
|
||||||
assert ctx.value.args[0] == "implementation error -- msg to explain the error is required"
|
assert ctx.value.args[0] == "fail_json() missing 1 required positional argument: 'msg'"
|
||||||
|
|
||||||
|
|
||||||
class TestAnsibleModuleExitValuesRemoved:
|
class TestAnsibleModuleExitValuesRemoved:
|
||||||
|
|
Loading…
Reference in a new issue