From 2aee391368a3c5b6d093a24a2abefaca8011c356 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Tue, 16 Sep 2025 16:55:22 +0100 Subject: [PATCH 1/9] support raid root disks in stackhpc-built images --- ansible/.gitignore | 2 ++ ansible/extras.yml | 9 +++++++++ ansible/roles/raid/README.md | 13 +++++++++++++ ansible/roles/raid/tasks/main.yml | 13 +++++++++++++ environments/.stackhpc/inventory/extra_groups | 4 ++++ environments/common/inventory/groups | 2 ++ environments/site/inventory/groups | 3 +++ 7 files changed, 46 insertions(+) create mode 100644 ansible/roles/raid/README.md create mode 100644 ansible/roles/raid/tasks/main.yml diff --git a/ansible/.gitignore b/ansible/.gitignore index 62c9a543c..b5b3572af 100644 --- a/ansible/.gitignore +++ b/ansible/.gitignore @@ -98,3 +98,5 @@ roles/* !roles/eessi/** !roles/topology/ !roles/topology/** +!roles/raid/ +!roles/raid/** diff --git a/ansible/extras.yml b/ansible/extras.yml index 08892e4ec..dd0f99168 100644 --- a/ansible/extras.yml +++ b/ansible/extras.yml @@ -1,3 +1,12 @@ +- hosts: raid + become: yes + gather_facts: no + tags: raid + name: Configure image for baremetal software raid root disks + tasks: + - include_role: + name: raid + - hosts: k3s_server:!builder become: yes tags: k3s diff --git a/ansible/roles/raid/README.md b/ansible/roles/raid/README.md new file mode 100644 index 000000000..8e8b9880c --- /dev/null +++ b/ansible/roles/raid/README.md @@ -0,0 +1,13 @@ +# raid + +Configure an image to support software raid (via [mdadm](https://github.com/md-raid-utilities/mdadm)). + +RockyLinux genericcloud images already have the necessary `mdraid` dracut +module installed, as well as kernel modules for `raid0`, `raikd1`, `raid10` and +`raid456` [^1]. This covers all raid modes [supported by Ironic](https://docs.openstack.org/ironic/latest/admin/raid.html#software-raid) +hence this role does not support extending this. + +This role changes the command line for the current kernel. It does not reboot +the instance so generally is only useful during image builds. + +[^1]: As shown by `lsinitrd /boot/initramfs-$(uname -r).img | grep raid` diff --git a/ansible/roles/raid/tasks/main.yml b/ansible/roles/raid/tasks/main.yml new file mode 100644 index 000000000..871172612 --- /dev/null +++ b/ansible/roles/raid/tasks/main.yml @@ -0,0 +1,13 @@ +- name: Enable autoassembly of mdraid devices + # adds rd.auto=1 - see `man dracut.cmdline` + ansible.builtin.lineinfile: + path: /etc/default/grub + regexp: '^GRUB_CMDLINE_LINUX_DEFAULT="((?:(?!rd.auto=1).)*?)"$' + line: 'GRUB_CMDLINE_LINUX_DEFAULT="\1 rd.auto=1"' + backup: true + backrefs: true + register: update_grub + +- name: Update GRUB configuration file + command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline + when: update_grub.changed diff --git a/environments/.stackhpc/inventory/extra_groups b/environments/.stackhpc/inventory/extra_groups index f3a996499..29d9d9378 100644 --- a/environments/.stackhpc/inventory/extra_groups +++ b/environments/.stackhpc/inventory/extra_groups @@ -50,3 +50,7 @@ cluster [compute_init:children] compute + +[raid:children] +# Configure fatimage for raid +builder diff --git a/environments/common/inventory/groups b/environments/common/inventory/groups index 6926355ed..246162116 100644 --- a/environments/common/inventory/groups +++ b/environments/common/inventory/groups @@ -218,3 +218,5 @@ extra_packages # pulp_host ansible_host= # Note the host name can't conflict with group names i.e can't be called `pulp` or `pulp_server` +[raid] +# Add `builder` to configure image for software raid diff --git a/environments/site/inventory/groups b/environments/site/inventory/groups index b78197df0..342201f97 100644 --- a/environments/site/inventory/groups +++ b/environments/site/inventory/groups @@ -166,3 +166,6 @@ compute # separately from the appliance. e.g # pulp_host ansible_host= # Note inventory host name cannot conflict with group names i.e can't be called `pulp` or `pulp_server`. + +[raid] +# Add `builder` to configure image for software raid From 75a33023bda9b3ccd802cbb296c8ec36c6d11332 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Wed, 17 Sep 2025 07:54:28 +0000 Subject: [PATCH 2/9] clarify image requirements --- ansible/roles/raid/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ansible/roles/raid/README.md b/ansible/roles/raid/README.md index 8e8b9880c..4774a467d 100644 --- a/ansible/roles/raid/README.md +++ b/ansible/roles/raid/README.md @@ -10,4 +10,8 @@ hence this role does not support extending this. This role changes the command line for the current kernel. It does not reboot the instance so generally is only useful during image builds. +Note that the `rootfs_uuid` image property described in the [Ironic raid documentation](https://docs.openstack.org/ironic/latest/admin/raid.html#image-requirements) +is not required; the root partition is the first (non-boot) partition and this +is sufficent for Ironic to find the root file system. + [^1]: As shown by `lsinitrd /boot/initramfs-$(uname -r).img | grep raid` From 58576ae8baae9883f54f32d7c55e564dad3be9d5 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Wed, 17 Sep 2025 07:55:25 +0000 Subject: [PATCH 3/9] bump CI image --- environments/.stackhpc/tofu/cluster_image.auto.tfvars.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json index 6b294d157..df5690219 100644 --- a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json +++ b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json @@ -1,6 +1,6 @@ { "cluster_image": { - "RL8": "openhpc-RL8-250820-0800-767addd8", - "RL9": "openhpc-RL9-250908-2047-d90ebd0e" + "RL8": "openhpc-RL8-250916-1615-2aee3913", + "RL9": "openhpc-RL9-250916-1615-2aee3913" } } From 186c523acb1fe6f41d4cfe6be7b13a32702aa218 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 13:43:24 +0000 Subject: [PATCH 4/9] fixup grub for RL8 --- ansible/extras.yml | 4 ++-- ansible/roles/raid/tasks/main.yml | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ansible/extras.yml b/ansible/extras.yml index 06d0f4b6d..9f0df6d34 100644 --- a/ansible/extras.yml +++ b/ansible/extras.yml @@ -1,6 +1,6 @@ - hosts: raid - become: yes - gather_facts: no + become: true + gather_facts: true tags: raid name: Configure image for baremetal software raid root disks tasks: diff --git a/ansible/roles/raid/tasks/main.yml b/ansible/roles/raid/tasks/main.yml index 871172612..7c22e8e49 100644 --- a/ansible/roles/raid/tasks/main.yml +++ b/ansible/roles/raid/tasks/main.yml @@ -2,12 +2,18 @@ # adds rd.auto=1 - see `man dracut.cmdline` ansible.builtin.lineinfile: path: /etc/default/grub - regexp: '^GRUB_CMDLINE_LINUX_DEFAULT="((?:(?!rd.auto=1).)*?)"$' - line: 'GRUB_CMDLINE_LINUX_DEFAULT="\1 rd.auto=1"' + regexp: > + ^{{ grub_cmdline_var[ansible_distribution_major_version] }}="((?:(?!rd.auto=1).)*?)"$ + line: > + {{ grub_cmdline_var[ansible_distribution_major_version] }}="\1 rd.auto=1" backup: true backrefs: true register: update_grub - + vars: + grub_cmdline_var: + '8': GRUB_CMDLINE_LINUX + '9': GRUB_CMDLINE_LINUX_DEFAULT + - name: Update GRUB configuration file command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline when: update_grub.changed From fec151246f053e665c6f31b5dbb1f60db519e98d Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 14:41:30 +0000 Subject: [PATCH 5/9] fix linter issues --- ansible/extras.yml | 5 ++--- ansible/roles/raid/handlers/main.yml | 3 +++ ansible/roles/raid/tasks/main.yml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 ansible/roles/raid/handlers/main.yml diff --git a/ansible/extras.yml b/ansible/extras.yml index 9f0df6d34..3c790be81 100644 --- a/ansible/extras.yml +++ b/ansible/extras.yml @@ -1,10 +1,9 @@ - hosts: raid become: true - gather_facts: true tags: raid - name: Configure image for baremetal software raid root disks + gather_facts: true tasks: - - include_role: + - ansible.builtin.include_role: name: raid - hosts: k3s_server:!builder diff --git a/ansible/roles/raid/handlers/main.yml b/ansible/roles/raid/handlers/main.yml new file mode 100644 index 000000000..9b29e68e0 --- /dev/null +++ b/ansible/roles/raid/handlers/main.yml @@ -0,0 +1,3 @@ +- name: Update GRUB configuration file + ansible.builtin.command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline + when: update_grub.changed diff --git a/ansible/roles/raid/tasks/main.yml b/ansible/roles/raid/tasks/main.yml index 7c22e8e49..709bebeab 100644 --- a/ansible/roles/raid/tasks/main.yml +++ b/ansible/roles/raid/tasks/main.yml @@ -15,5 +15,5 @@ '9': GRUB_CMDLINE_LINUX_DEFAULT - name: Update GRUB configuration file - command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline + ansible.builtin.command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline when: update_grub.changed From a6cc8e3627064151e2860adaa47f9a0256130404 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 15:37:00 +0000 Subject: [PATCH 6/9] fix raid kernel commandline configuration for RL8 [no ci] --- ansible/roles/raid/handlers/main.yml | 2 +- ansible/roles/raid/tasks/main.yml | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ansible/roles/raid/handlers/main.yml b/ansible/roles/raid/handlers/main.yml index 9b29e68e0..0eacf1e2f 100644 --- a/ansible/roles/raid/handlers/main.yml +++ b/ansible/roles/raid/handlers/main.yml @@ -1,3 +1,3 @@ - name: Update GRUB configuration file - ansible.builtin.command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline + ansible.builtin.command: "grub2-mkconfig -o /boot/grub2/grub.cfg {{ '--update-bls-cmdline' if ansible_distribution_major_version == '9' else '' }}" when: update_grub.changed diff --git a/ansible/roles/raid/tasks/main.yml b/ansible/roles/raid/tasks/main.yml index 709bebeab..3ea61dbe4 100644 --- a/ansible/roles/raid/tasks/main.yml +++ b/ansible/roles/raid/tasks/main.yml @@ -9,11 +9,9 @@ backup: true backrefs: true register: update_grub + notify: + - Update GRUB configuration file vars: grub_cmdline_var: '8': GRUB_CMDLINE_LINUX '9': GRUB_CMDLINE_LINUX_DEFAULT - -- name: Update GRUB configuration file - ansible.builtin.command: grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline - when: update_grub.changed From 3c85ab2127040f6177078a4689d7b0e08e0c7a1c Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 16:22:26 +0000 Subject: [PATCH 7/9] bump CI image --- environments/.stackhpc/tofu/cluster_image.auto.tfvars.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json index bcb56cf84..7611bebca 100644 --- a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json +++ b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json @@ -1,6 +1,6 @@ { "cluster_image": { - "RL8": "openhpc-RL8-250924-1502-e9afbfe5", - "RL9": "openhpc-RL9-250924-1536-e9afbfe5" + "RL8": "openhpc-RL8-250925-1539-a6cc8e36", + "RL9": "openhpc-RL9-250925-1539-a6cc8e36" } } From 62d67ae3a9e177125b5756e18b4d7ceb8d6aa24b Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 16:30:15 +0000 Subject: [PATCH 8/9] fix handler ansible-lint errors --- ansible/roles/raid/handlers/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/roles/raid/handlers/main.yml b/ansible/roles/raid/handlers/main.yml index 0eacf1e2f..02867f7d2 100644 --- a/ansible/roles/raid/handlers/main.yml +++ b/ansible/roles/raid/handlers/main.yml @@ -1,3 +1,3 @@ - name: Update GRUB configuration file ansible.builtin.command: "grub2-mkconfig -o /boot/grub2/grub.cfg {{ '--update-bls-cmdline' if ansible_distribution_major_version == '9' else '' }}" - when: update_grub.changed + changed_when: true From dc840e12b51b15af8b518e243390a316b35648c8 Mon Sep 17 00:00:00 2001 From: Steve Brasier Date: Thu, 25 Sep 2025 18:40:12 +0000 Subject: [PATCH 9/9] bump CI image --- environments/.stackhpc/tofu/cluster_image.auto.tfvars.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json index 7611bebca..9650ccd36 100644 --- a/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json +++ b/environments/.stackhpc/tofu/cluster_image.auto.tfvars.json @@ -1,6 +1,6 @@ { "cluster_image": { - "RL8": "openhpc-RL8-250925-1539-a6cc8e36", - "RL9": "openhpc-RL9-250925-1539-a6cc8e36" + "RL8": "openhpc-RL8-250925-1639-62d67ae3", + "RL9": "openhpc-RL9-250925-1639-62d67ae3" } }