--- - 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-id/ata-* | \ grep -F -e "{{ hardware['hdd']['data'].values() | join('" -e "') }}" | \ grep -vE -- '-part[0-9]+$' | \ sort changed_when: false register: "hdd_path_list" - name: Check vmm_hdd filesystem already exists ansible.builtin.command: | blkid -L {{ hardware['btrfs']['label'] }} register: is_vmm_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 {{ hardware['btrfs']['label'] }} \ -d {{ hardware['btrfs']['level'] }} \ -m {{ hardware['btrfs']['level'] }} \ {{ hdd_path_list.stdout_lines | join(' ') }} become: true when: - is_vmm_data.rc != 0 - (hdd_path_list.stdout_lines | length) >= 4 changed_when: is_mkfs.rc == 0 register: "is_mkfs" - name: Create mount volume ansible.builtin.file: path: "{{ hardware['btrfs']['mount_point'] }}" state: "directory" owner: "root" group: "root" mode: "0711" become: true - name: Mount btrfs raid10 volume ansible.posix.mount: path: "{{ hardware['btrfs']['mount_point'] }}" src: "LABEL={{ hardware['btrfs']['label'] }}" state: "mounted" fstype: "btrfs" opts: "defaults,noatime,nodatacow,degraded,nofail" become: true - name: Set mounted btrfs volume permissions ansible.builtin.file: path: "{{ hardware['btrfs']['mount_point'] }}" state: "directory" owner: "root" group: "root" mode: "0711" become: true - name: Deploy btrfs scrub service and timer ansible.builtin.template: src: "{{ hostvars['console']['node']['config_path'] }}/services/systemd/vmm/btrfs/{{ item }}.j2" dest: "/etc/systemd/system/{{ item }}" owner: "root" group: "root" mode: "0644" loop: - "btrfs-scrub.service" - "btrfs-scrub.timer" become: true - name: Enable auto btrfs scrub ansible.builtin.systemd: name: "btrfs-scrub.timer" state: "started" enabled: true daemon_reload: true become: true