summaryrefslogtreecommitdiff
path: root/roles/storage/zfs
diff options
context:
space:
mode:
Diffstat (limited to 'roles/storage/zfs')
-rw-r--r--roles/storage/zfs/base/defaults/main.yml19
-rw-r--r--roles/storage/zfs/base/tasks/main.yml9
-rw-r--r--roles/storage/zfs/device/defaults/main.yml11
-rw-r--r--roles/storage/zfs/device/tasks/main.yml14
4 files changed, 50 insertions, 3 deletions
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 }}"