--- - name: Converge hosts: all pre_tasks: - name: Get /root/image.img stats ansible.builtin.stat: path: /root/image.img register: make_lv_img_stat - name: Create image file when: not make_lv_img_stat.stat.exists ansible.builtin.command: dd if=/dev/zero of=/root/image.img bs=1M count=128 register: make_lv_dd_result changed_when: make_lv_dd_result.rc == 0 - name: Get linked loop devices ansible.builtin.command: losetup -a changed_when: false register: make_lv_loop_devs - name: Link image to loop device when: "'/root/image.img' not in make_lv_loop_devs.stdout" ansible.builtin.command: losetup --find --show -P /root/image.img register: make_lv_loop_device changed_when: "'/dev/loop' in make_lv_loop_device.stdout" - name: Get all loop devices ansible.builtin.command: losetup -a register: make_lv_losetup_out changed_when: false - name: Find line with /root/image.img ansible.builtin.set_fact: make_lv_matched_line: "{{ make_lv_losetup_out.stdout_lines | select('search', '/root/image.img') | list | first | default('') }}" - name: Extract loop device name (/dev/loopN) ansible.builtin.set_fact: make_lv_loop_dev: "{{ make_lv_matched_line | regex_search('(/dev/loop[0-9]+)', '\\1') | default('') }}" - name: Debug result ansible.builtin.debug: msg: "/root/image.img is linked to {{ make_lv_loop_dev[0] }}" when: make_lv_loop_dev != '' roles: - role: genlab.common.make_lv virtual_group: "group" logical_volume: "volume" lvm_dev: "{{ make_lv_loop_dev[0] }}" make_lv_size: 100%FREE make_lv_fs_type: ext4 make_lv_storage_mountpoint: "/mnt" make_lv_storage_mountpoint_mode: "0755" make_lv_mountpoint_owner: root make_lv_mountpoint_group: root make_lv_is_container: true