--- - name: Check for existing zroot zfs volume ansible.builtin.command: zpool list -Ho name zroot register: zroot_check ignore_errors: true - when: zroot_check.rc != 0 block: - name: Initialize disk device to id table ansible.builtin.set_fact: partition_device_to_ids: {} - name: Create disk device to id table ansible.builtin.set_fact: partition_device_to_ids: >- {{ partition_device_to_ids | combine({ item.value: (partition_device_to_ids[item.value] | default([])) + [item.key] }) }} with_items: "{{ base_partitions_by_id | dict2items }}" - ansible.builtin.debug: var: base_root_partitions | map('extract', partition_device_to_ids) | map('first') - name: Create zroot volume become: true ansible.builtin.command: >- zpool create -f -o ashift=12 -o autotrim=on -O devices=off -O relatime=on -O xattr=sa -O acltype=posixacl -O normalization=formD -O compression=lz4 -O canmount=off -O mountpoint=none -R /mnt zroot {{ mirror }} {{ base_root_partitions | map('extract', partition_device_to_ids) | map('first') | list | join(' ') }} vars: mirror: "{{ 'mirror' if base_root_partitions | length > 1 else '' }}" - name: Create zroot/ROOT and zroot/DATA volumes community.general.zfs: name: "zroot/{{ item }}" state: present register: zfs_zroot_root_volume with_items: [ROOT, DATA] - name: Create zroot/ROOT/arch community.general.zfs: name: zroot/ROOT/arch state: present extra_zfs_properties: canmount: noauto mountpoint: / when: zfs_zroot_root_volume.changed - name: Create zroot/home community.general.zfs: name: zroot/DATA/home state: present extra_zfs_properties: mountpoint: /home - name: Export zroot pool ansible.builtin.command: zpool export zroot - name: Import zroot pool (-R /mnt) ansible.builtin.command: zpool import -R /mnt zroot -N