- hosts: all vars: mkfs_package: btrfs: btrfs-progs ext2: e2fsprogs ext3: e2fsprogs ext4: e2fsprogs xfs: xfsprogs tasks: - name: ensure filesystem tools are installed package: name: >- {{ data_volumes | d([]) | map(attribute='fstype') | map('extract', mkfs_package) | list }} tags: - install - name: ensure lvm volume groups exist lvg: vg: '{{ item.key }}' pvs: '{{ item.value.pvs }}' loop: '{{ logical_volumes | d({}) | dict2items }}' loop_control: label: '{{ item.key }}' tags: - lvm - lvm-vg - name: ensure lvm logical volumes exist lvol: lv: '{{ item.1.name }}' vg: '{{ item.0.key }}' size: '{{ item.1.size }}' loop: '{{ logical_volumes | d({}) | dict2items | subelements("value.lvs") }}' loop_control: label: '{{ item.0.key }}/{{ item.1.name }}' tags: - lvm - lvm-lv - name: ensure data volume filesystem exists filesystem: dev: '{{ item.dev }}' fstype: '{{ item.fstype }}' opts: '{{ item.opts|d(omit) }}' loop: '{{ data_volumes|d([]) }}' tags: - mkfs - name: ensure btrfs subvolumes exist community.general.btrfs_subvolume: name: '{{ item.name }}' filesystem_device: '{{ item.device }}' automount: true loop: '{{ btrfs_subvolumes|d([]) }}' tags: - btrfs - name: ensure mount point exists file: path: '{{ item.mountpoint }}' state: directory loop: '{{ data_volumes|d([]) }}' - name: ensure data volume is mounted mount: path: '{{ item.mountpoint }}' src: '{{ item.dev }}' fstype: '{{ item.fstype }}' opts: '{{ item.mountopts|d(omit) }}' state: mounted loop: '{{ data_volumes|d([]) }}' notify: - reload systemd - fix data volume selinux context handlers: - name: reload systemd systemd: daemon_reload: true - name: fix data volume selinux context command: restorecon -F {{ item.mountpoint }} loop: '{{ data_volumes }}'