From bae487535bfcaa8fd4d0361cfe147dbb1fbb5d3f Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 30 Apr 2024 12:34:46 +0200 Subject: add storage roles: mdadm and disk --- roles/storage/mdadm/base/defaults/main.yml | 23 +++++++++++++++++++++ roles/storage/mdadm/base/tasks/main.yml | 23 +++++++++++++++++++++ roles/storage/mdadm/device/defaults/main.yml | 9 ++++++++ roles/storage/mdadm/device/handlers/main.yml | 3 +++ roles/storage/mdadm/device/tasks/main.yml | 23 +++++++++++++++++++++ roles/storage/mdadm/volume/defaults/main.yml | 12 +++++++++++ roles/storage/mdadm/volume/tasks/main.yml | 31 ++++++++++++++++++++++++++++ 7 files changed, 124 insertions(+) create mode 100644 roles/storage/mdadm/base/defaults/main.yml create mode 100644 roles/storage/mdadm/base/tasks/main.yml create mode 100644 roles/storage/mdadm/device/defaults/main.yml create mode 100644 roles/storage/mdadm/device/handlers/main.yml create mode 100644 roles/storage/mdadm/device/tasks/main.yml create mode 100644 roles/storage/mdadm/volume/defaults/main.yml create mode 100644 roles/storage/mdadm/volume/tasks/main.yml (limited to 'roles/storage/mdadm') 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 }}" -- cgit v1.2.3