diff --git a/changelogs/fragments/preserve_delegate_nolog.yml b/changelogs/fragments/preserve_delegate_nolog.yml new file mode 100644 index 0000000000..b195c5c594 --- /dev/null +++ b/changelogs/fragments/preserve_delegate_nolog.yml @@ -0,0 +1,2 @@ +bugfixes: + - preseve delegation info on nolog https://github.com/ansible/ansible/issues/42344 diff --git a/lib/ansible/executor/task_result.py b/lib/ansible/executor/task_result.py index f7e95d4c82..f0b20f844b 100644 --- a/lib/ansible/executor/task_result.py +++ b/lib/ansible/executor/task_result.py @@ -13,6 +13,7 @@ from ansible.vars.clean import strip_internal_keys _IGNORE = ('failed', 'skipped') _PRESERVE = ('attempts', 'changed', 'retries') +_SUB_PRESERVE = {'_ansible_delegated_vars': ('ansible_host', 'ansible_port', 'ansible_user', 'ansible_connection')} class TaskResult: @@ -114,9 +115,19 @@ class TaskResult: if self._task.no_log or self._result.get('_ansible_no_log', False): x = {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result"} + + # preserve full for preserve in _PRESERVE: if preserve in self._result: x[preserve] = self._result[preserve] + + # preserve subset + for sub in _SUB_PRESERVE: + if sub in self._result: + x[sub] = {} + for key in _SUB_PRESERVE[sub]: + x[sub][key] = self._result[sub][key] + result._result = x elif self._result: result._result = deepcopy(self._result)