aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Segundo2023-04-20 10:24:53 +0200
committerChristian Segundo2023-04-20 10:24:53 +0200
commit23ec5073810119ac5684d1b4458ec27ed898228e (patch)
treeb426bf0a9d165c0fd2eff285af344f64d5264d3b
downloadzfs-1.0.0.tar.gz
first commit1.0.0
-rw-r--r--README.md29
-rw-r--r--defaults/main.yaml2
-rw-r--r--meta/main.yml12
-rw-r--r--tasks/main.yaml28
-rw-r--r--tasks/zpool.yaml23
5 files changed, 94 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b6505e6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,29 @@
+# zfs
+
+## Example playbook
+
+```
+- hosts: foo
+ vars:
+ roles:
+ - role: someone_stole_my_name.zfs
+ vars:
+ zpools:
+ - name: foopool
+ state: present
+ mode: mirror
+ mountpoint: none
+ devices:
+ - ata-ST4000VN006-5CW102_ZW60XPA3
+ - ata-ST4000VN006-5CW102_ZW60XPA5
+
+ zvols:
+ - name: barvool
+ state: present
+ pool: foopool
+ extra_zfs_properties:
+ refquota: 256M
+ dedup: on
+ compression: on
+ mountpoint: /mnt/barvool
+```
diff --git a/defaults/main.yaml b/defaults/main.yaml
new file mode 100644
index 0000000..62240ea
--- /dev/null
+++ b/defaults/main.yaml
@@ -0,0 +1,2 @@
+zpools: []
+zvols: []
diff --git a/meta/main.yml b/meta/main.yml
new file mode 100644
index 0000000..eec0f11
--- /dev/null
+++ b/meta/main.yml
@@ -0,0 +1,12 @@
+---
+galaxy_info:
+ description: Manage ZFS pools and volumes
+ role_name: zfs
+ namespace: someone_stole_my_name
+ author: Christian Segundo
+ license: BSD-3-Clause
+ min_ansible_version: "2.7"
+ platforms:
+ - name: Debian
+ galaxy_tags:
+ - zfs
diff --git a/tasks/main.yaml b/tasks/main.yaml
new file mode 100644
index 0000000..207006b
--- /dev/null
+++ b/tasks/main.yaml
@@ -0,0 +1,28 @@
+- name: Install packages
+ block:
+ - apt:
+ name:
+ - linux-headers-amd64
+ - zfs-dkms
+ - apt:
+ name: zfsutils-linux
+ default_release: "{{ ansible_distribution_release | lower }}-backports"
+
+- name: Add the zfs module
+ community.general.modprobe:
+ name: zfs
+ state: present
+
+- include_tasks: zpool.yaml
+ loop: "{{ zpools }}"
+ loop_control:
+ loop_var: zpool
+
+- name: Create ZVOL
+ community.general.zfs:
+ name: "{{ zvol.pool }}/{{ zvol.name }}"
+ state: "{{ zvol.state }}"
+ extra_zfs_properties: "{{ zvol.extra_zfs_properties }}"
+ loop: "{{ zvols }}"
+ loop_control:
+ loop_var: zvol
diff --git a/tasks/zpool.yaml b/tasks/zpool.yaml
new file mode 100644
index 0000000..97ba8c6
--- /dev/null
+++ b/tasks/zpool.yaml
@@ -0,0 +1,23 @@
+- name: Check ZFS pool existance
+ command: zpool list -Ho name {{ zpool.name }}
+ register: result_pool_list
+ ignore_errors: true
+ changed_when: false
+
+- name: Create ZFS pool
+ command: >-
+ zpool create
+ {% if zpool.options is defined and zpool.options | length > 0 %}-o {{ zpool.options | join(' -o ') }}{% endif %}
+ {% if zpool.mountpoint %}-m {{ zpool.mountpoint }}{% endif %}
+ {{ zpool.name }}
+ {% if zpool.mode is defined %}{{ zpool.mode }}{% endif %}
+ {{ zpool.devices | join(' ') }}
+ when:
+ - zpool.state | default('present') == 'present'
+ - result_pool_list.rc == 1
+
+- name: Destroy ZFS pool
+ command: zpool destroy {{ zpool.name }}
+ when:
+ - zpool.state | default('present') == 'absent'
+ - result_pool_list.rc == 0