Use pop in cb clean results (#33779)
* Fix _clean_result for debug callback with 1 char var names
The check in _clean_results was removing any keys that happened
to be one of the chars in ('invocation') instead of the string
'invocation'. This was meant to be a tuple but there was no comma
so the for iterated the string instead of the tuple.
Introduced in 9dba580204
Update unit test to catch this.
Fixes #33723
* Use .pop() to remove invocation from results dict
In base callback _clean_results, simplify the way the
'invocation' item is removed.
Add some more unit tests.
This commit is contained in:
parent
07e9df11b3
commit
a57d6a4206
2 changed files with 42 additions and 6 deletions
|
@ -236,9 +236,7 @@ class CallbackBase(AnsiblePlugin):
|
||||||
def _clean_results(self, result, task_name):
|
def _clean_results(self, result, task_name):
|
||||||
''' removes data from results for display '''
|
''' removes data from results for display '''
|
||||||
if task_name in ['debug']:
|
if task_name in ['debug']:
|
||||||
for remove_key in ('invocation'):
|
result.pop('invocation', None)
|
||||||
if remove_key in result:
|
|
||||||
del result[remove_key]
|
|
||||||
|
|
||||||
def set_play_context(self, play_context):
|
def set_play_context(self, play_context):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -67,15 +67,53 @@ class TestCallbackResults(unittest.TestCase):
|
||||||
res = cb._get_item(results)
|
res = cb._get_item(results)
|
||||||
self.assertEquals(res, "some_item")
|
self.assertEquals(res, "some_item")
|
||||||
|
|
||||||
|
def test_clean_results_debug_task(self):
|
||||||
|
cb = CallbackBase()
|
||||||
|
result = {'item': 'some_item',
|
||||||
|
'invocation': 'foo --bar whatever [some_json]',
|
||||||
|
'a': 'a single a in result note letter a is in invocation',
|
||||||
|
'b': 'a single b in result note letter b is not in invocation',
|
||||||
|
'changed': True}
|
||||||
|
|
||||||
|
cb._clean_results(result, 'debug')
|
||||||
|
|
||||||
|
# See https://github.com/ansible/ansible/issues/33723
|
||||||
|
self.assertTrue('a' in result)
|
||||||
|
self.assertTrue('b' in result)
|
||||||
|
self.assertFalse('invocation' in result)
|
||||||
|
self.assertTrue('changed' in result)
|
||||||
|
|
||||||
|
def test_clean_results_debug_task_no_invocation(self):
|
||||||
|
cb = CallbackBase()
|
||||||
|
result = {'item': 'some_item',
|
||||||
|
'a': 'a single a in result note letter a is in invocation',
|
||||||
|
'b': 'a single b in result note letter b is not in invocation',
|
||||||
|
'changed': True}
|
||||||
|
|
||||||
|
cb._clean_results(result, 'debug')
|
||||||
|
self.assertTrue('a' in result)
|
||||||
|
self.assertTrue('b' in result)
|
||||||
|
self.assertTrue('changed' in result)
|
||||||
|
self.assertFalse('invocation' in result)
|
||||||
|
|
||||||
|
def test_clean_results_debug_task_empty_results(self):
|
||||||
|
cb = CallbackBase()
|
||||||
|
result = {}
|
||||||
|
cb._clean_results(result, 'debug')
|
||||||
|
self.assertFalse('invocation' in result)
|
||||||
|
self.assertEqual(len(result), 0)
|
||||||
|
|
||||||
def test_clean_results(self):
|
def test_clean_results(self):
|
||||||
cb = CallbackBase()
|
cb = CallbackBase()
|
||||||
result = {'item': 'some_item',
|
result = {'item': 'some_item',
|
||||||
'invocation': 'foo --bar whatever [some_json]',
|
'invocation': 'foo --bar whatever [some_json]',
|
||||||
|
'a': 'a single a in result note letter a is in invocation',
|
||||||
|
'b': 'a single b in result note letter b is not in invocation',
|
||||||
'changed': True}
|
'changed': True}
|
||||||
|
|
||||||
self.assertTrue('changed' in result)
|
expected_result = result.copy()
|
||||||
self.assertTrue('invocation' in result)
|
cb._clean_results(result, 'ebug')
|
||||||
cb._clean_results(result, 'debug')
|
self.assertEqual(result, expected_result)
|
||||||
|
|
||||||
|
|
||||||
class TestCallbackDumpResults(unittest.TestCase):
|
class TestCallbackDumpResults(unittest.TestCase):
|
||||||
|
|
Loading…
Reference in a new issue