Files

73 lines
2.4 KiB
YAML

---
- name: Converge
hosts: all
pre_tasks:
- name: Get /root/image.img stats
ansible.builtin.stat:
path: /root/image.img
register: xfs_project_quotas_img_stat
- name: Create image file
when: not xfs_project_quotas_img_stat.stat.exists
ansible.builtin.command: dd if=/dev/zero of=/root/image.img bs=1M count=400
register: xfs_project_quotas_dd_result
changed_when: xfs_project_quotas_dd_result.rc == 0
- name: Get linked loop devices
ansible.builtin.command: losetup -a
changed_when: false
register: xfs_project_quotas_loop_devs
- name: Link image to loop device
when: "'/root/image.img' not in xfs_project_quotas_loop_devs.stdout"
ansible.builtin.command: losetup --find --show -P /root/image.img
register: xfs_project_quotas_loop_device
changed_when: "'/dev/loop' in xfs_project_quotas_loop_device.stdout"
- name: Get all loop devices
ansible.builtin.command: losetup -a
register: xfs_project_quotas_losetup_out
changed_when: false
- name: Find line with /root/image.img
ansible.builtin.set_fact:
xfs_project_quotas_matched_line: "{{ xfs_project_quotas_losetup_out.stdout_lines
| select('search', '/root/image.img')
| list
| first
| default('') }}"
- name: Extract loop device name (/dev/loopN)
ansible.builtin.set_fact:
xfs_project_quotas_loop_dev: "{{ xfs_project_quotas_matched_line | regex_search('(/dev/loop[0-9]+)', '\\1') | default('') }}"
- name: Debug result
ansible.builtin.debug:
msg: "/root/image.img is linked to {{ xfs_project_quotas_loop_dev[0] }}"
when: xfs_project_quotas_loop_dev != ''
- name: "Quotas | Ensure xfsprogs package is installed"
ansible.builtin.apt:
name: xfsprogs
state: present
update_cache: true
cache_valid_time: 3600
- name: Make xfs filesystem
community.general.filesystem:
fstype: xfs
dev: "{{ xfs_project_quotas_loop_dev[0] }}"
- name: Mount xfs virtual disk
ansible.posix.mount:
path: /mnt
src: /root/image.img
fstype: xfs
opts: defaults,prjquota
state: mounted
roles:
- role: genlab.common.xfs_project_quotas
projects: "{{ lookup('file', 'configuration/example.yml') | from_yaml }}"
storage_mountpoint: "/mnt"