I had a task to add an assert to Ansible playbook to check that root /
filesystem supports d_type (i.e. "directory entry type" and is important for Docker / Podman). Here is the result:
- name: Read root filesystem type and device set_fact: root_fstype: "{{ ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='fstype') | join(',') }}" root_device: "{{ ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='device') | join(',') }}" - name: If root filesystem is xfs, get more info from it command: xfs_info "{{ root_device }}" register: xfs_info ignore_errors: true when: "root_fstype != 'ext4'" - name: Check that root filesystem supports directory entry type (aka d_type) assert: that: - "root_fstype == 'ext4' or ( root_fstype == 'xfs' and 'ftype=1' in xfs_info.stdout )"
First, we extract (more info on how we get one value from a list of dicts based on another value) root filesystem type (e.g. "ext4" or "xfs") and device (e.g. /dev/mapper/centos_something-root
) from Ansible facts obtained by setup module (use ansible -u root -i inventory.ini -m setup all
to see all the facts). Then we load additional info by xfs_info
utility if the fs type is "xfs". And last step is finally to assert for d_type support: "ext4" is a clear win, when we got "xfs", "ftype=1" in xfs_info
output is needed.