From 9f16bdbdda930c9a7bf1f030d7c8855833ee4b58 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Wed, 14 Sep 2022 20:50:50 +0100 Subject: [PATCH] Ensure syntax check errors include filenames (#77679) This fixes bug which prevents identification of broken playbook when passing multiple playbooks as arguments, something that is common especially with `--syntax-check`. Affects: ansible-lint --- .../fragments/77679-syntax-error-mention-filename.yml | 2 ++ lib/ansible/playbook/__init__.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/77679-syntax-error-mention-filename.yml diff --git a/changelogs/fragments/77679-syntax-error-mention-filename.yml b/changelogs/fragments/77679-syntax-error-mention-filename.yml new file mode 100644 index 00000000000..63c79741d09 --- /dev/null +++ b/changelogs/fragments/77679-syntax-error-mention-filename.yml @@ -0,0 +1,2 @@ +bugfixes: + - Ensure syntax check errors include playbook filenames diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 0dbb38e43bd..0ab22719207 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -28,6 +28,7 @@ from ansible.playbook.play import Play from ansible.playbook.playbook_include import PlaybookInclude from ansible.plugins.loader import add_all_plugin_dirs from ansible.utils.display import Display +from ansible.utils.path import unfrackpath display = Display() @@ -74,13 +75,13 @@ class Playbook: # check for errors and restore the basedir in case this error is caught and handled if ds is None: self._loader.set_basedir(cur_basedir) - raise AnsibleParserError("Empty playbook, nothing to do", obj=ds) + raise AnsibleParserError("Empty playbook, nothing to do: %s" % unfrackpath(file_name), obj=ds) elif not isinstance(ds, list): self._loader.set_basedir(cur_basedir) - raise AnsibleParserError("A playbook must be a list of plays, got a %s instead" % type(ds), obj=ds) + raise AnsibleParserError("A playbook must be a list of plays, got a %s instead: %s" % (type(ds), unfrackpath(file_name)), obj=ds) elif not ds: self._loader.set_basedir(cur_basedir) - raise AnsibleParserError("A playbook must contain at least one play") + raise AnsibleParserError("A playbook must contain at least one play: %s" % unfrackpath(file_name)) # Parse the playbook entries. For plays, we simply parse them # using the Play() object, and includes are parsed using the