summaryrefslogtreecommitdiff
path: root/roles
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2024-04-30 12:34:46 +0200
committerChristian Pointner <equinox@spreadspace.org>2024-04-30 12:34:46 +0200
commitbae487535bfcaa8fd4d0361cfe147dbb1fbb5d3f (patch)
treec0d4fab8a26ede6723baac2612ec2ad1620259eb /roles
parentmonitoiring/alerta: support publishment via nginx vhost (diff)
add storage roles: mdadm and disk
Diffstat (limited to 'roles')
-rw-r--r--roles/storage/disk/base/defaults/main.yml49
-rw-r--r--roles/storage/disk/base/tasks/main.yml23
-rw-r--r--roles/storage/disk/device/defaults/main.yml10
-rw-r--r--roles/storage/disk/device/tasks/main.yml14
-rw-r--r--roles/storage/disk/volume/defaults/main.yml13
-rw-r--r--roles/storage/disk/volume/tasks/main.yml31
-rw-r--r--roles/storage/mdadm/base/defaults/main.yml23
-rw-r--r--roles/storage/mdadm/base/tasks/main.yml23
-rw-r--r--roles/storage/mdadm/device/defaults/main.yml9
-rw-r--r--roles/storage/mdadm/device/handlers/main.yml3
-rw-r--r--roles/storage/mdadm/device/tasks/main.yml23
-rw-r--r--roles/storage/mdadm/volume/defaults/main.yml12
-rw-r--r--roles/storage/mdadm/volume/tasks/main.yml31
13 files changed, 264 insertions, 0 deletions
diff --git a/roles/storage/disk/base/defaults/main.yml b/roles/storage/disk/base/defaults/main.yml
new file mode 100644
index 00000000..547d4d21
--- /dev/null
+++ b/roles/storage/disk/base/defaults/main.yml
@@ -0,0 +1,49 @@
+---
+disk_devices: {}
+
+# disk_devices:
+# foo:
+# device: /dev/disk/by-id/foo
+# label: gpt
+# number: 1
+# part_type: primary
+# part_start: "10GiB"
+# part_end: "100%"
+# sda1:
+# device: /dev/sda
+# number: 1
+# part_start: "0%"
+# part_end: "10GiB"
+# sda2:
+# device: /dev/sda
+# number: 2
+# part_start: "10GiB"
+# part_end: "100%"
+
+disk_volumes: {}
+
+# disk_volumes:
+# foo:
+# device: /dev/disk/by-id/foo
+# label: gpt
+# number: 1
+# part_type: primary
+# part_start: "10GiB"
+# part_end: "100%"
+# fs: ext4
+# dest: /srv/foo
+# mntopts: x-systemd.automount,nofail
+# sda1:
+# device: /dev/sda
+# number: 1
+# part_start: "0%"
+# part_end: "10GiB"
+# fs: ext4
+# dest: /srv/part1
+# sda2:
+# device: /dev/sda
+# number: 2
+# part_start: "10GiB"
+# part_end: "100%"
+# fs: ext4
+# dest: /srv/part2
diff --git a/roles/storage/disk/base/tasks/main.yml b/roles/storage/disk/base/tasks/main.yml
new file mode 100644
index 00000000..317a7f2f
--- /dev/null
+++ b/roles/storage/disk/base/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+- name: install parted
+ apt:
+ name: parted
+ state: present
+
+- name: create disk devices
+ loop: "{{ disk_devices | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ vars:
+ disk_device: "{{ item.value }}"
+ include_role:
+ name: storage/disk/device
+
+- name: create disk volumes
+ loop: "{{ disk_volumes | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ vars:
+ disk_volume: "{{ item.value }}"
+ include_role:
+ name: storage/disk/volume
diff --git a/roles/storage/disk/device/defaults/main.yml b/roles/storage/disk/device/defaults/main.yml
new file mode 100644
index 00000000..97dd76d4
--- /dev/null
+++ b/roles/storage/disk/device/defaults/main.yml
@@ -0,0 +1,10 @@
+---
+# disk_device:
+# device: /dev/disk/by-id/foo
+# label: gpt
+# number: 1
+# part_type: primary
+# part_start: "10GiB"
+# part_end: "100%"
+
+disk_device: "{{ storage_device }}"
diff --git a/roles/storage/disk/device/tasks/main.yml b/roles/storage/disk/device/tasks/main.yml
new file mode 100644
index 00000000..1dd424ec
--- /dev/null
+++ b/roles/storage/disk/device/tasks/main.yml
@@ -0,0 +1,14 @@
+---
+- name: create partition
+ parted:
+ device: "{{ disk_device.device }}"
+ label: "{{ disk_device.label | default(omit) }}"
+ number: "{{ disk_device.number }}"
+ part_type: "{{ disk_device.part_type | default(omit) }}"
+ part_start: "{{ disk_device.part_start | default(omit) }}"
+ part_end: "{{ disk_device.part_end | default(omit) }}"
+ state: present
+
+- name: export device path
+ set_fact:
+ storage_device_path: "{{ disk_device.device }}{{ disk_device.device.startswith('/dev/disk/') | ternary('-part','') }}{{ disk_device.number }}"
diff --git a/roles/storage/disk/volume/defaults/main.yml b/roles/storage/disk/volume/defaults/main.yml
new file mode 100644
index 00000000..5e27bb51
--- /dev/null
+++ b/roles/storage/disk/volume/defaults/main.yml
@@ -0,0 +1,13 @@
+---
+# disk_volume:
+# device: /dev/disk/by-id/foo
+# label: gpt
+# number: 1
+# part_type: primary
+# part_start: "10GiB"
+# part_end: "100%"
+# fs: ext4
+# dest: /srv/foo
+# mntopts: x-systemd.automount,nofail
+
+disk_volume: "{{ storage_volume }}"
diff --git a/roles/storage/disk/volume/tasks/main.yml b/roles/storage/disk/volume/tasks/main.yml
new file mode 100644
index 00000000..364e4d7f
--- /dev/null
+++ b/roles/storage/disk/volume/tasks/main.yml
@@ -0,0 +1,31 @@
+---
+- name: create disk device
+ vars:
+ disk_device: "{{ disk_volume }}"
+ include_role:
+ name: storage/disk/device
+
+- name: create filesystem
+ filesystem:
+ dev: "{{ storage_device_path }}"
+ fstype: "{{ disk_volume.fs }}"
+
+- name: mount filesytem
+ mount:
+ src: "{{ storage_device_path }}"
+ path: "{{ disk_volume.dest }}"
+ fstype: "{{ disk_volume.fs }}"
+ opts: "{{ disk_volume.mntopts | default(omit) }}"
+ state: mounted
+
+- name: set volume owner/group and mode
+ file:
+ state: directory
+ path: "{{ disk_volume.dest }}"
+ mode: "{{ disk_volume.mode | default(omit) }}"
+ owner: "{{ disk_volume.owner | default(omit) }}"
+ group: "{{ disk_volume.group | default(omit) }}"
+
+- name: export volume mountpoint
+ set_fact:
+ storage_volume_mountpoint: "{{ disk_volume.dest }}"
diff --git a/roles/storage/mdadm/base/defaults/main.yml b/roles/storage/mdadm/base/defaults/main.yml
new file mode 100644
index 00000000..ef875336
--- /dev/null
+++ b/roles/storage/mdadm/base/defaults/main.yml
@@ -0,0 +1,23 @@
+---
+mdadm_devices: {}
+
+# mdadm_devices:
+# foobar:
+# name: mdfoobar
+# level: 1
+# devices:
+# - /dev/disk/by-id/foo
+# - /dev/disk/by-id/bar
+
+mdadm_volumes: {}
+
+# mdadm_volumes:
+# foobar:
+# name: mdfoobar
+# level: 1
+# devices:
+# - /dev/disk/by-id/foo
+# - /dev/disk/by-id/bar
+# fs: ext4
+# dest: /srv/foobar
+# mntopts: x-systemd.automount,nofail
diff --git a/roles/storage/mdadm/base/tasks/main.yml b/roles/storage/mdadm/base/tasks/main.yml
new file mode 100644
index 00000000..3ed83c4c
--- /dev/null
+++ b/roles/storage/mdadm/base/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+- name: install mdadm
+ apt:
+ name: mdadm
+ state: present
+
+- name: create mdadm devices
+ loop: "{{ mdadm_devices | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ vars:
+ mdadm_device: "{{ item.value }}"
+ include_role:
+ name: storage/mdadm/device
+
+- name: create mdadm volumes
+ loop: "{{ mdadm_volumes | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ vars:
+ mdadm_volume: "{{ item.value }}"
+ include_role:
+ name: storage/mdadm/volume
diff --git a/roles/storage/mdadm/device/defaults/main.yml b/roles/storage/mdadm/device/defaults/main.yml
new file mode 100644
index 00000000..d2672a8b
--- /dev/null
+++ b/roles/storage/mdadm/device/defaults/main.yml
@@ -0,0 +1,9 @@
+---
+# mdadm_volume:
+# name: mdfoobar
+# level: 1
+# devices:
+# - /dev/disk/by-id/foo
+# - /dev/disk/by-id/bar
+
+mdadm_device: "{{ storage_device }}"
diff --git a/roles/storage/mdadm/device/handlers/main.yml b/roles/storage/mdadm/device/handlers/main.yml
new file mode 100644
index 00000000..f967fa86
--- /dev/null
+++ b/roles/storage/mdadm/device/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: rebuild initramfs
+ command: update-initramfs -u
diff --git a/roles/storage/mdadm/device/tasks/main.yml b/roles/storage/mdadm/device/tasks/main.yml
new file mode 100644
index 00000000..338f26f7
--- /dev/null
+++ b/roles/storage/mdadm/device/tasks/main.yml
@@ -0,0 +1,23 @@
+---
+- name: create array
+ command: "mdadm --create /dev/md/{{ mdadm_device.name }} --metadata default --level {{ mdadm_device.level }} --raid-devices {{ mdadm_device.devices | length }} {{ mdadm_device.devices | join(' ') }}"
+ args:
+ creates: "/dev/md/{{ mdadm_device.name }}"
+
+- name: fetch UUID of array
+ command: "mdadm --detail --scan /dev/md/{{ mdadm_device.name }}"
+ changed_when: false
+ check_mode: no
+ register: mdadm_device_uuid
+
+- name: udpate mdadm.conf
+ lineinfile:
+ path: /etc/mdadm/mdadm.conf
+ regexp: '^ARRAY /dev/md/{{ mdadm_device.name }} '
+ line: "{{ mdadm_device_uuid.stdout_lines | first }}"
+ insertafter: "# definitions of existing MD arrays"
+ notify: rebuild initramfs
+
+- name: export device path
+ set_fact:
+ storage_device_path: "/dev/md/{{ mdadm_device.name }}"
diff --git a/roles/storage/mdadm/volume/defaults/main.yml b/roles/storage/mdadm/volume/defaults/main.yml
new file mode 100644
index 00000000..b4a16a1d
--- /dev/null
+++ b/roles/storage/mdadm/volume/defaults/main.yml
@@ -0,0 +1,12 @@
+---
+# mdadm_volume:
+# name: mdfoobar
+# level: 1
+# devices:
+# - /dev/disk/by-id/foo
+# - /dev/disk/by-id/bar
+# fs: ext4
+# dest: /srv/foobar
+# mntopts: x-systemd.automount,nofail
+
+mdadm_volume: "{{ storage_volume }}"
diff --git a/roles/storage/mdadm/volume/tasks/main.yml b/roles/storage/mdadm/volume/tasks/main.yml
new file mode 100644
index 00000000..c7c6f3f9
--- /dev/null
+++ b/roles/storage/mdadm/volume/tasks/main.yml
@@ -0,0 +1,31 @@
+---
+- name: create mdadm device
+ vars:
+ mdadm_device: "{{ mdadm_volume }}"
+ include_role:
+ name: storage/mdadm/device
+
+- name: create filesystem
+ filesystem:
+ dev: "{{ storage_device_path }}"
+ fstype: "{{ mdadm_volume.fs }}"
+
+- name: mount filesytem
+ mount:
+ src: "{{ storage_device_path }}"
+ path: "{{ mdadm_volume.dest }}"
+ fstype: "{{ mdadm_volume.fs }}"
+ opts: "{{ mdadm_volume.mntopts | default(omit) }}"
+ state: mounted
+
+- name: set volume owner/group and mode
+ file:
+ state: directory
+ path: "{{ mdadm_volume.dest }}"
+ mode: "{{ mdadm_volume.mode | default(omit) }}"
+ owner: "{{ mdadm_volume.owner | default(omit) }}"
+ group: "{{ mdadm_volume.group | default(omit) }}"
+
+- name: export volume mountpoint
+ set_fact:
+ storage_volume_mountpoint: "{{ mdadm_volume.dest }}"