101 lines
2.6 KiB
YAML
101 lines
2.6 KiB
YAML
---
|
|
- 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
|