From ba2ab1cb42db29c8287c65a3f1e0b646eeba0464 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 20 Jan 2024 22:42:30 +0100 Subject: add storage_device roles --- roles/storage/zfs/base/defaults/main.yml | 19 ++++++++++++++++--- roles/storage/zfs/base/tasks/main.yml | 9 +++++++++ roles/storage/zfs/device/defaults/main.yml | 11 +++++++++++ roles/storage/zfs/device/tasks/main.yml | 14 ++++++++++++++ 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 roles/storage/zfs/device/defaults/main.yml create mode 100644 roles/storage/zfs/device/tasks/main.yml (limited to 'roles/storage/zfs') diff --git a/roles/storage/zfs/base/defaults/main.yml b/roles/storage/zfs/base/defaults/main.yml index df56f0c8..96fb3b73 100644 --- a/roles/storage/zfs/base/defaults/main.yml +++ b/roles/storage/zfs/base/defaults/main.yml @@ -12,7 +12,7 @@ zfs_pool_default_properties: # mountpoint: /srv/storage # create_vdevs: mirror /dev/sda /dev/sdb mirror /dev/sdc /dev/sdd log mirror /dev/nvme0n1p3 /dev/nvme1n1p3 cache /dev/nvme0n1p4 /dev/nvme1n1p4 # test: -# mountpoint: /srv/storage +# mountpoint: /srv/test # create_vdevs: raidz /dev/sda /dev/sdb /dev/sdc /dev/sdd # properties: # ashift: 12 @@ -40,10 +40,23 @@ zfs_volumes: {} # quota: 2G # children: # ben: {} -# after: +# vms: # properties: -# quota: 100M +# canmount: no +# mountpoint: none # test: # sub1: # properties: # quota: 512M + +zfs_devices: {} + +# zfs_devices: +# - pool: storage +# name: vms/host1 +# size: 1g +# properties: +# compression: lz4 +# - pool: storage +# name: vms/host2 +# size: 2g diff --git a/roles/storage/zfs/base/tasks/main.yml b/roles/storage/zfs/base/tasks/main.yml index b731bb1f..d0854880 100644 --- a/roles/storage/zfs/base/tasks/main.yml +++ b/roles/storage/zfs/base/tasks/main.yml @@ -68,3 +68,12 @@ zfs_volume: "{{ item }}" include_role: name: storage/zfs/volume + +- name: create zfs devices + loop: "{{ zfs_devices }}" + loop_control: + label: "{{ item.pool }}/{{ item.name }}" + vars: + zfs_device: "{{ item }}" + include_role: + name: storage/zfs/device diff --git a/roles/storage/zfs/device/defaults/main.yml b/roles/storage/zfs/device/defaults/main.yml new file mode 100644 index 00000000..175136eb --- /dev/null +++ b/roles/storage/zfs/device/defaults/main.yml @@ -0,0 +1,11 @@ +--- +# zfs_device: +# parent: +# ... +# pool: tank +# name: bar +# size: 10g +# properties: +# ... + +zfs_device: "{{ storage_device }}" diff --git a/roles/storage/zfs/device/tasks/main.yml b/roles/storage/zfs/device/tasks/main.yml new file mode 100644 index 00000000..1204da02 --- /dev/null +++ b/roles/storage/zfs/device/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- name: compute full zfs device path + set_fact: + zfs_device_path_full: "{{ ('parent' in zfs_device) | ternary((zfs_device.parent.pool | default(''))~'/'~(zfs_device.parent.name | default('')), zfs_device.pool) }}/{{ zfs_device.name }}" + +- name: create zfs volume + zfs: + name: "{{ zfs_device_path_full }}" + extra_zfs_properties: "{{ zfs_device.properties | default({}) | combine({'volsize': zfs_device.size}) | dehumanize_zfs_properties }}" + state: present + +- name: export device path + set_fact: + storage_device_path: "/dev/zvol/{{ zfs_device_path_full }}" -- cgit v1.2.3