--- - name: AAP-style LVM filesystem resize workflow hosts: all become: true gather_facts: true vars: lvm_dry_run: true lvm_vg_name: "" lvm_lv_name: "" lvm_mountpoint: "" lvm_size_request: "+10G" lvm_resize_filesystem: true pre_tasks: - name: Validate required survey variables ansible.builtin.assert: that: - lvm_vg_name | length > 0 - lvm_lv_name | length > 0 - lvm_mountpoint | length > 0 - lvm_size_request | length > 0 fail_msg: "Required variables: lvm_vg_name, lvm_lv_name, lvm_mountpoint, lvm_size_request" tasks: - name: Capture block device layout before resize ansible.builtin.command: argv: - lsblk - --fs register: lvm_lsblk_before changed_when: false - name: Capture physical volumes before resize ansible.builtin.command: argv: - pvs - --noheadings - --units - g register: lvm_pvs_before changed_when: false - name: Capture volume groups before resize ansible.builtin.command: argv: - vgs - --noheadings - --units - g register: lvm_vgs_before changed_when: false - name: Capture logical volumes before resize ansible.builtin.command: argv: - lvs - --noheadings - --units - g register: lvm_lvs_before changed_when: false - name: Capture filesystem usage before resize ansible.builtin.command: argv: - df - -hT - "{{ lvm_mountpoint }}" register: lvm_df_before changed_when: false - name: Validate target logical volume exists ansible.builtin.command: argv: - lvs - "/dev/{{ lvm_vg_name }}/{{ lvm_lv_name }}" register: lvm_target_check changed_when: false - name: Show dry-run resize command ansible.builtin.debug: msg: "DRY RUN: would run lvextend -L {{ lvm_size_request }} /dev/{{ lvm_vg_name }}/{{ lvm_lv_name }}" when: lvm_dry_run | bool - name: Extend logical volume ansible.builtin.command: argv: - lvextend - -L - "{{ lvm_size_request }}" - "/dev/{{ lvm_vg_name }}/{{ lvm_lv_name }}" register: lvm_lvextend_result changed_when: true when: not (lvm_dry_run | bool) - name: Detect filesystem type ansible.builtin.command: argv: - findmnt - -n - -o - FSTYPE - "{{ lvm_mountpoint }}" register: lvm_fstype changed_when: false - name: Resize XFS filesystem ansible.builtin.command: argv: - xfs_growfs - "{{ lvm_mountpoint }}" changed_when: true when: - not (lvm_dry_run | bool) - lvm_resize_filesystem | bool - lvm_fstype.stdout == "xfs" - name: Resize ext filesystem ansible.builtin.command: argv: - resize2fs - "/dev/{{ lvm_vg_name }}/{{ lvm_lv_name }}" changed_when: true when: - not (lvm_dry_run | bool) - lvm_resize_filesystem | bool - lvm_fstype.stdout in ["ext2", "ext3", "ext4"] - name: Capture filesystem usage after resize ansible.builtin.command: argv: - df - -hT - "{{ lvm_mountpoint }}" register: lvm_df_after changed_when: false - name: Report LVM resize evidence ansible.builtin.debug: msg: host: "{{ inventory_hostname }}" dry_run: "{{ lvm_dry_run }}" target: "/dev/{{ lvm_vg_name }}/{{ lvm_lv_name }}" mountpoint: "{{ lvm_mountpoint }}" requested_size: "{{ lvm_size_request }}" filesystem_type: "{{ lvm_fstype.stdout | default('unknown') }}" before_df: "{{ lvm_df_before.stdout_lines }}" after_df: "{{ lvm_df_after.stdout_lines }}"