diff --git a/changelogs/fragments/68605-ansible-error-orig-exc-context.yml b/changelogs/fragments/68605-ansible-error-orig-exc-context.yml new file mode 100644 index 00000000000..02a12d3c684 --- /dev/null +++ b/changelogs/fragments/68605-ansible-error-orig-exc-context.yml @@ -0,0 +1,3 @@ +minor_changes: +- Errors - Ensure that errors passed with ``orig_exc`` include the context of that exception + (https://github.com/ansible/ansible/issues/68605) diff --git a/lib/ansible/errors/__init__.py b/lib/ansible/errors/__init__.py index 0f1e5422f6e..c9831a5cdd6 100644 --- a/lib/ansible/errors/__init__.py +++ b/lib/ansible/errors/__init__.py @@ -57,9 +57,7 @@ class AnsibleError(Exception): self._suppress_extended_error = suppress_extended_error self._message = to_native(message) self.obj = obj - - if orig_exc: - self.orig_exc = orig_exc + self.orig_exc = orig_exc @property def message(self): @@ -67,11 +65,17 @@ class AnsibleError(Exception): # since the objects code also imports ansible.errors from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject + message = [self._message] if isinstance(self.obj, AnsibleBaseYAMLObject): extended_error = self._get_extended_error() if extended_error and not self._suppress_extended_error: - return '%s\n\n%s' % (self._message, to_native(extended_error)) - return self._message + message.append( + '\n\n%s' % to_native(extended_error) + ) + elif self.orig_exc: + message.append('. %s' % to_native(self.orig_exc)) + + return ''.join(message) @message.setter def message(self, val):