1---
2- name: 'Create a "disk" file'
3  community.general.filesize:
4    path: '{{ image_file }}'
5    size: '{{ fssize }}M'
6    force: true
7
8- vars:
9    dev: '{{ image_file }}'
10  block:
11    - when: fstype == 'lvm'
12      block:
13        - name: 'Create a loop device for LVM'
14          ansible.builtin.command:
15            cmd: 'losetup --show -f {{ dev }}'
16          register: loop_device_cmd
17
18        - name: 'Switch to loop device target for further tasks'
19          ansible.builtin.set_fact:
20            dev: "{{ loop_device_cmd.stdout }}"
21
22    - when: fstype == 'ufs'
23      block:
24        - name: 'Create a memory disk for UFS'
25          ansible.builtin.command:
26            cmd: 'mdconfig -a -f {{ dev }}'
27          register: memory_disk_cmd
28
29        - name: 'Switch to memory disk target for further tasks'
30          ansible.builtin.set_fact:
31            dev: "/dev/{{ memory_disk_cmd.stdout }}"
32
33    - include_tasks: '{{ action }}.yml'
34
35  always:
36    - name: 'Detach loop device used for LVM'
37      ansible.builtin.command:
38        cmd: 'losetup -d {{ dev }}'
39        removes: '{{ dev }}'
40      when: fstype == 'lvm'
41
42    - name: 'Detach memory disk used for UFS'
43      ansible.builtin.command:
44        cmd: 'mdconfig -d -u {{ dev }}'
45        removes: '{{ dev }}'
46      when: fstype == 'ufs'
47
48    - name: 'Clean correct device for LVM and UFS'
49      ansible.builtin.set_fact:
50        dev: '{{ image_file }}'
51      when: fstype in ['lvm', 'ufs']
52
53    - name: 'Remove disk image file'
54      ansible.builtin.file:
55        name: '{{ image_file }}'
56        state: absent
57