--- - name: Check btrfs installation ansible.builtin.shell: | command -v btrfs become: true # btrfs is located in /usr/sbin, which means root permission is needed. changed_when: false failed_when: false register: "is_btrfs_installed" ignore_errors: true - name: Install btrfs ansible.builtin.apt: name: "btrfs-progs" state: "present" become: true when: is_btrfs_installed.rc != 0 - name: Set hard disk path ansible.builtin.shell: | set -o pipefail ls -1 /dev/disk/by-path/*{{ vm['pass_through']['sata_controller']['address'] }}* | \ grep -v '\.0$' | \ sort changed_when: false register: "hdd_path_list" - name: Check app_hdd filesystem already exists ansible.builtin.command: | blkid -L {{ storage['btrfs']['label'] }} register: is_app_data changed_when: false failed_when: false become: true - name: Check disk number ansible.builtin.fail: msg: "Below 4 disks for RAID10, found {{ hdd_path_list.stdout_lines | length }}" when: (hdd_path_list.stdout_lines | length) < 4 - name: Set btrfs raid10 volume ansible.builtin.shell: | mkfs.btrfs -f \ -L {{ storage['btrfs']['label'] }} \ -d {{ storage['btrfs']['level'] }} \ -m {{ storage['btrfs']['level'] }} \ {{ hdd_path_list.stdout_lines | join(' ') }} become: true when: - is_app_data.rc != 0 - (hdd_path_list.stdout_lines | length) >= 4 changed_when: is_mkfs.rc == 0 register: "is_mkfs" - name: Mount btrfs raid10 volume ansible.posix.mount: path: "{{ storage['btrfs']['mount_point'] }}" src: "LABEL={{ storage['btrfs']['label'] }}" state: "mounted" fstype: "btrfs" opts: "defaults,noatime,compress=zstd:3,autodefrag,degraded,nofail" become: true - name: Set hard disk path permissions ansible.builtin.file: path: "{{ storage['btrfs']['mount_point'] }}" state: "directory" owner: "{{ ansible_user }}" group: "svadmins" mode: "0770" become: true