Reputation: 85
I want to use a loop within a task to include any number of YAML files. Unfortunately it does not define the corresponding variables in the file.
fatal: [localhost]: FAILED! => {"msg": "Mandatory variable 'job_msg' not defined."}
---
# task file
- name: "Print"
ansible.builtin.debug:
msg: "{{ item.job_msg | mandatory }} \n
{{ item.job_msg2 | mandatory }}"
loop: "{{ q('fileglob', 'tower_job_templates/*') | flatten(levels=1) }}"
---
# job1 file
job:
- job_msg: "a1"
job_msg2: "a1s"
- job_msg: "b1"
job_msg2: "b1s"
---
# job2 file
job:
- job_msg: "a2"
job_msg2: "a2s"
- job_msg: "b2"
job_msg2: "b2s"
Upvotes: 1
Views: 3680
Reputation: 67984
You'll have to create the list first, e.g.
- name: "Concatenate jobs"
ansible.builtin.set_fact:
jobs: "{{ jobs|d([]) + (lookup('file', item)|from_yaml).job }}"
loop: "{{ q('fileglob', 'tower_job_templates/*') | flatten(levels=1) }}"
gives
jobs:
- job_msg: a2
job_msg2: a2s
- job_msg: b2
job_msg2: b2s
- job_msg: a1
job_msg2: a1s
- job_msg: b1
job_msg2: b1s
Then use this list, e.g.
- name: "Print"
ansible.builtin.debug:
msg: "{{ item.job_msg | mandatory }} \n
{{ item.job_msg2 | mandatory }}"
loop: "{{ jobs }}"
Upvotes: 2