Hello
I’m struggling with file check when there’s more than one file in the stat
module.
For example, this works:
- name: Check if conf file exist.
ansible.builtin.stat:
path: /etc/file.conf
register: confcheck
- name: Create the file.conf file.
ansible.builtin.lineinfile:
create: true
group: root
line: root
mode: '0600'
owner: root
path: /etc/file.conf
state: present
when: not confcheck.stat.exists
When I would add a list of files, I’m no longer able to use when:
because I don’t understand how it works.
Using debug
to display the register result, I see the structure, but whatever I put in the when:
block, I get this item is not in the list
error every time. Ansible docs didn’t help.
What I’m trying to do here is to copy the file to /etc/app.d/
folder if it exists in /etc
, if it doesn’t exist in /etc/
and /etc/app.d/
, create the file in /etc/app.d/
and I should be able to determine the exists
value for each file from ther registered variable.
- name: Check if conf files exist.
ansible.builtin.stat:
path: "{{ item }}"
loop:
- /etc/app1.conf
- /etc/app.d/app1.conf
- /etc/app2.conf
- /etc/app.d/app2.conf
register: confcheck
- name: Copy app1.conf to app.d directory.
ansible.builtin.copy:
dest: /etc/app.d/app1.conf
group: root
mode: '0600'
owner: root
remote_src: true
src: "/etc/app1.conf"
loop:
- "{{ confcheck }}"
when: item.stat.exists # This should be: exists /etc/app1.conf and not exists /etc/app.d/app1.conf. This would fail as there is no stat item, although there is when I check with the debug module.
- name: Create the file.conf file.
ansible.builtin.lineinfile:
create: true
group: root
line: root
mode: '0600'
owner: root
path: /etc/file.conf
state: present
loop:
- "{{ confcheck }}"
when: not items.stat.exists # This should be: not exists /etc/app1.conf and not exists /etc/app.d/app1.conf.
I need someone to tell me how to iterate registered list vars.
Right now, I have separate registers per file, and I don’t like it.