Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,8 @@ You can use variables described in this section to control the exact sizes and p

Whether to configure the VG from [hpc_rootvg_name](#hpc_rootvg_name) to have logical volumes [hpc_rootlv_name](#hpc_rootlv_name), [hpc_usrlv_name](#hpc_usrlv_name) and [hpc_varlv_name](#hpc_varlv_name) with indicated sizes and mounted to indicated mount points.

When enabled, it will also automatically handle disk expansion by resizing partitions (via `growpart`), physical volumes (via `pvresize`), as well as logical volumes.

Note that the role configures not the exact size, but ensures that the size is at least as indicated, i.e. the role won't shrink logical volumes.

Default: `true`
Expand Down
69 changes: 61 additions & 8 deletions tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,37 +152,89 @@

- name: Check if rootlv exists
stat:
path: /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_rootlv_name }}
path: /dev/{{ hpc_rootvg_name }}/{{ hpc_rootlv_name }}
register: __hpc_rootlv_stat

- name: Check if usrlv exists
stat:
path: /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_usrlv_name }}
path: /dev/{{ hpc_rootvg_name }}/{{ hpc_usrlv_name }}
register: __hpc_usrlv_stat

- name: Check if varlv exists
stat:
path: /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_varlv_name }}
path: /dev/{{ hpc_rootvg_name }}/{{ hpc_varlv_name }}
register: __hpc_varlv_stat

- name: Get current LV size of rootlv
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_rootlv_name }}
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/{{ hpc_rootvg_name }}/{{ hpc_rootlv_name }}
register: __hpc_rootlv_size_cmd
changed_when: false
when: __hpc_rootlv_stat.stat.exists

- name: Get current LV size of usrlv
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_usrlv_name }}
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/{{ hpc_rootvg_name }}/{{ hpc_usrlv_name }}
register: __hpc_usrlv_size_cmd
changed_when: false
when: __hpc_usrlv_stat.stat.exists

- name: Get current LV size of varlv
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/mapper/{{ hpc_rootvg_name }}-{{ hpc_varlv_name }}
command: lvs --noheadings --units g --nosuffix -o lv_size /dev/{{ hpc_rootvg_name }}/{{ hpc_varlv_name }}
register: __hpc_varlv_size_cmd
changed_when: false
when: __hpc_varlv_stat.stat.exists

- name: Check if volume group exists
command: vgs --noheadings -o vg_name {{ hpc_rootvg_name }}
register: __hpc_vg_check
changed_when: false
failed_when: false

- name: Get PV devices for volume group
command: pvs --noheadings -o pv_name -S vg_name={{ hpc_rootvg_name }}
register: __hpc_pv_devices
changed_when: false
when: __hpc_vg_check.rc == 0

- name: Set PV device list for storage role
set_fact:
__hpc_rootvg_disks: "{{ __hpc_pv_devices.stdout_lines | map('trim') | list }}"
when:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: Guard against PVs that are whole devices (no partition number) to avoid length filter errors.

For whole-disk PVs like /dev/sdb, regex_search('([0-9]+)$') returns None, so partition_number | length > 0 will fail at runtime.

To handle both partitioned and whole-disk PVs safely, default partition_number to an empty string and use that in the when clauses, for example:

task vars:
  partition_number: "{{ pv_device | regex_search('([0-9]+)$') | default('') }}"

when:
  - partition_number | length > 0
  - parent_device != pv_device

This preserves the existing behavior for partition-backed PVs while avoiding errors when VGs contain unpartitioned disks.

- __hpc_vg_check.rc == 0
- __hpc_pv_devices.stdout_lines | length > 0

- name: Expand partitions if underlying disks have been expanded
when:
- __hpc_vg_check.rc == 0
- __hpc_rootvg_disks is defined
- __hpc_rootvg_disks | length > 0
block:
- name: Install cloud-utils-growpart for partition expansion
package:
name: cloud-utils-growpart
state: present
use: "{{ (__hpc_server_is_ostree | d(false)) |
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"

- name: Expand partitions via growpart
vars:
# From pv_device to extract parent_device and partition_number example
# SCSI: /dev/sda4 -> /dev/sda and 4
# NVMe: /dev/nvme0n1p4 -> /dev/nvme0n1 and 4
pv_device: "{{ item }}"
parent_device: "{{ pv_device | regex_replace('p?([0-9]+)$', '') }}"
partition_number: "{{ pv_device | regex_search('([0-9]+)$') }}"
command: growpart {{ parent_device }} {{ partition_number }}
register: __hpc_growpart_result
changed_when:
- __hpc_growpart_result.rc == 0
- "'NOCHANGE' not in __hpc_growpart_result.stdout"
loop: "{{ __hpc_rootvg_disks }}"
when:
- partition_number | length > 0
- parent_device != pv_device
# 0: grown, 1: NOCHANGE, others: real error
failed_when: __hpc_growpart_result.rc not in [0, 1]

- name: Initialize volumes list
set_fact:
__hpc_volumes: []
Expand Down Expand Up @@ -229,12 +281,13 @@
- __hpc_varlv_stat.stat.exists
- (size_expected | int) > (size_current | int)

- name: Configure storage
- name: Configure storage via storage role
include_role:
name: fedora.linux_system_roles.storage
vars:
storage_pools:
- name: "{{ hpc_rootvg_name }}"
disks: "{{ __hpc_rootvg_disks | default(omit) }}"
grow_to_fill: true
volumes: "{{ __hpc_volumes }}"
when: __hpc_volumes | length > 0
Expand Down Expand Up @@ -1261,7 +1314,7 @@
Skipping azurehpc-health-checks installation because aznhc-nv Docker image cannot be pulled.
To install health checks, increase /var space by:
(1) Expanding the root disk in Azure portal,
(2) Adding the new space as a PV to the volume group (e.g., pvresize /dev/sda2),
(2) Adding the new space as a PV to the volume group (e.g., pvresize /dev/sda4),
(3) Expanding the /var logical volume (e.g., lvextend -L +20G /dev/rootvg/varlv && xfs_growfs /var).
See https://learn.microsoft.com/en-us/azure/virtual-machines/linux/expand-disks?tabs=rhellvm for details.
Alternatively, configure hpc_varlv_size before running this role.
Expand Down
Loading