awx
awx copied to clipboard
"file not found" error when file lookup plugin 'errors' parameter set to ignore
Please confirm the following
- [X] I agree to follow this project's code of conduct.
- [X] I have checked the current issues for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am NOT reporting a (potential) security vulnerability. (These should be emailed to
[email protected]
instead.)
Bug Summary
When using the file lookup plugin to template a files contents the AWX job fails even with the errors='ignore'
We've setup a mechanism to add file contents to templates based on the presence of a file in directory. When the template step is defined in the playbook the errors (if a file is not found) are ignored (i.e. ...ignoring
) however if the template step is defined in a role errors are not ignored.
I've pushed a scaffold to https://github.com/GROwen/awx-errors-not-ignored but also outlined it below.
Structure
.
├── bug-report.yml
└── roles
├── requirements.yml
└── templating-role
├── files
│ └── bug-report
│ ├── environment_variables.yml
│ └── templates
│ └── test.yml.j2
└── tasks
└── main.yml
File contents
./bug-report.yml
---
-
name: Playbook to reproduce error handling error.
hosts: all
gather_facts: false
connection: local
vars:
project_name: bug-report
present_variables_file: "{{ role_path }}/files/{{ project_name }}/environment_variables.yml"
present_variables: "{{ lookup('file', present_variables_file, errors='ignore') }}"
absent_variables_file: "{{ role_path }}/files/{{ project_name }}/absent_variables.yml"
absent_variables: "{{ lookup('file', absent_variables_file, errors='ignore') }}"
collections:
- community.general
tasks:
- name: Set working directory
set_fact:
working_directory: "{{ project_name }}"
tags:
- always
- name: Template files
include_role:
name: templating-role
apply:
tags:
- always
./roles/requirements.yml
---
- src: VCS
name: templating-role
./roles/templating-role/files/bug-report/environment_variables.yml
KEY=value
./roles/templating-role/files/bug-report/templates/test.yml.j2
---
project: {{ project_name }}
{{ present_variables }}
{{ absent_variables }}
./roles/templating-role/tasks/main.yml
---
- name: Template files
template:
src: "{{ item.src }}"
dest: "{{ working_directory }}/{{ item.path | splitext | first }}"
mode: preserve
trim_blocks: no
with_filetree: '{{ role_path }}/files/{{ project_name }}/templates'
when: item.state == 'file'
- name: Pause for confirmation of file contents
pause:
minutes: 5
This mechanism has worked until recently
AWX version
AWX 23.6.0
Select the relevant components
- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other
Installation method
kubernetes
Modifications
no
Ansible version
2.13.6
Operating system
Debian GNU/Linux 12 (bookworm)
Web browser
Safari
Steps to reproduce
- Execute the
templating-role
tasks using theinclude-role
module
Expected results
An error is thrown because the absent_variables_file
is not found but is ignored and the job completes successfully.
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible.errors.AnsibleError: An unhandled exception occurred while templating '{{ lookup('file', absent_variables_file, errors='ignore') }}'. Error was a <class 'ansible.errors.AnsibleOptionsError'>, original message: The 'file' lookup had an issue accessing the file '/runner/requirements_roles/sdp-tide-platform/files/bug-report/absent_variables.yml'. file not found, use -vvvvv to see paths searched
failed: [content-legislation-vic-gov-au-develop] (item={'root': '/runner/requirements_roles/sdp-tide-platform/files/bug-report/templates', 'path': '.test.yml.j2', 'state': 'file', 'src': '/runner/requirements_roles/sdp-tide-platform/files/bug-report/templates/.test.yml.j2', 'uid': 1000, 'gid': 0, 'owner': '1000', 'group': 'root', 'mode': '0777', 'size': 80, 'mtime': 1712035704.0, 'ctime': 1712035852.2879279}) => {"ansible_loop_var": "item", "changed": false, "item": {"ctime": 1712035852.2879279, "gi…
...ignoring
Actual results
An error is thrown and the job fails.
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible.errors.AnsibleError: An unhandled exception occurred while templating '{{ lookup('file', absent_variables_file, errors='ignore') }}'. Error was a <class 'ansible.errors.AnsibleOptionsError'>, original message: The 'file' lookup had an issue accessing the file '/runner/requirements_roles/sdp-tide-platform/files/bug-report/absent_variables.yml'. file not found, use -vvvvv to see paths searched
failed: [content-legislation-vic-gov-au-develop] (item={'root': '/runner/requirements_roles/sdp-tide-platform/files/bug-report/templates', 'path': '.test.yml.j2', 'state': 'file', 'src': '/runner/requirements_roles/sdp-tide-platform/files/bug-report/templates/.test.yml.j2', 'uid': 1000, 'gid': 0, 'owner': '1000', 'group': 'root', 'mode': '0777', 'size': 80, 'mtime': 1712032380.0, 'ctime': 1712034523.8676915}) => {"ansible_loop_var": "item", "changed": false, "item": {"ctime": 1712034523.8676915, "gi…
Additional information
No response
@GROwen do you experience this issue when running the playbook directly from command line (not through awx)? ideally using exact same ansible and collections modules versions