35e6b139fc
ci / validate (push) Failing after 1m8s
Rework portfolio around Linux operations, Zabbix monitoring, migration validation, and ELK/Grafana log observability. Add AAP-style LVM resize workflow, Zabbix server/proxy/agent automation assets, Linux/AIX monitoring templates, and updated validation CI.
150 lines
3.9 KiB
YAML
150 lines
3.9 KiB
YAML
---
|
|
- 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 }}"
|