How to create an empty file with Ansible?
The documentation of the file module says
If
state=file
, the file will NOT be created if it does not exist, see the copy or template module if you want that behavior.
So we use the copy module, using force=no
to create a new empty file only when the file does not yet exist (if the file exists, its content is preserved).
- name: ensure file exists
copy:
content: ""
dest: /etc/nologin
force: no
group: sys
owner: root
mode: 0555
This is a declarative and elegant solution.
Something like this (using the stat
module first to gather data about it and then filtering using a conditional) should work:
- stat: path=/etc/nologin
register: p
- name: create fake 'nologin' shell
file: path=/etc/nologin state=touch owner=root group=sys mode=0555
when: p.stat.exists is defined and not p.stat.exists
You might alternatively be able to leverage the changed_when
functionality.
Another option, using the command module:
- name: Create file
command: touch /path/to/file
args:
creates: /path/to/file
The 'creates' argument ensures that this action is not performed if the file exists.
file module provide way to touch file without modifying its time.
- name: Touch again the same file, but dont change times this makes the task idempotent
file:
path: /etc/foo.conf
state: touch
mode: u+rw,g-wx,o-rwx
modification_time: preserve
access_time: preserve
Reference: https://docs.ansible.com/ansible/latest/modules/file_module.html