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/disk/base/defaults/main.yml | 49 +++++++++++++++++++++++++++++ roles/storage/disk/base/tasks/main.yml | 23 ++++++++++++++ roles/storage/disk/device/defaults/main.yml | 10 ++++++ roles/storage/disk/device/tasks/main.yml | 14 +++++++++ roles/storage/disk/volume/defaults/main.yml | 13 ++++++++ roles/storage/disk/volume/tasks/main.yml | 31 ++++++++++++++++++ 6 files changed, 140 insertions(+) create mode 100644 roles/storage/disk/base/defaults/main.yml create mode 100644 roles/storage/disk/base/tasks/main.yml create mode 100644 roles/storage/disk/device/defaults/main.yml create mode 100644 roles/storage/disk/device/tasks/main.yml create mode 100644 roles/storage/disk/volume/defaults/main.yml create mode 100644 roles/storage/disk/volume/tasks/main.yml (limited to 'roles/storage/disk') 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 }}" -- cgit v1.2.3