diff --git a/bigboot-op.yml b/bigboot-op.yml index 70a2f0b..e032aea 100644 --- a/bigboot-op.yml +++ b/bigboot-op.yml @@ -6,35 +6,42 @@ strategy: free vars: - bigboot_size_target: 1G + bigboot_size_target: 2G + tasks: - name: Capture boot device details ansible.builtin.import_tasks: tasks/capture_boot_device_details.yml - name: Shrink a logical volume for /boot expansion if needed - ansible.builtin.import_tasks: tasks/bigboot_manage_lv-op.yml + ansible.builtin.import_tasks: tasks/capture_lv_device_details.yml - name: Import hi playbook ansible.builtin.import_playbook: rhc.rear.hi - when: bigboot_expansion_diff | int > 0 + when: bigboot_execute_bigboot | bool -- name: Expand the /boot partition +- name: Execute logical volume and boot parition resizing hosts: all become: true gather_facts: true strategy: free tasks: - - name: Something should go here + - name: Execute Shrink_LV ansible.builtin.debug: - msg: "Something should go here -> {{ bigboot_size }} -> {{ bigboot_expansion_diff }}" + msg: + - "device: {{ bigboot_adjacent_lvm_device | trim }}" + - "size : {{ bigboot_lv_shrink_size | int }}" + when: bigboot_execute_shrink_lv | bool - - name: Execute Shrink_LV/Bigboot as needed + - name: Execute Bigboot as needed ansible.builtin.debug: - msg: "we made it {{ bigboot_adjacent_lvm_device }} -> {{ bigboot_lv_pe_size_in_mb }}" + msg: "{{ bigboot_size }}" + when: bigboot_execute_bigboot | bool + + # - name: Execute Shrink_LV/Bigboot as needed # when: bigboot_expansion_diff | int <= 0 diff --git a/tasks/capture_boot_device_details.yml b/tasks/capture_boot_device_details.yml index f71812c..c66ab36 100644 --- a/tasks/capture_boot_device_details.yml +++ b/tasks/capture_boot_device_details.yml @@ -31,16 +31,21 @@ - name: Validate if we need to expand boot block: + - name: Set flag for Bigboot execution + ansible.builtin.set_fact: + bigboot_execute_bigboot: false + - name: Assert that /boot requires expansion ansible.builtin.assert: that: bigboot_expansion_diff | int <= 0 fail_msg: The /boot partition will need to be resized success_msg: The /boot partition is already at the desired size - - name: The /boot parition is already at the desired size. - ansible.builtin.meta: end_host - rescue: + - name: Set flag for Bigboot execution + ansible.builtin.set_fact: + bigboot_execute_bigboot: true + - name: Expansion of /boot required ansible.builtin.debug: msg: "Will need to expand /boot by an additional {{ bigboot_size }}." diff --git a/tasks/capture_lv_device_details.yml b/tasks/capture_lv_device_details.yml new file mode 100644 index 0000000..05b414f --- /dev/null +++ b/tasks/capture_lv_device_details.yml @@ -0,0 +1,80 @@ +--- +- name: Capture logical volume adjacent to /boot + ansible.builtin.shell: + cmd: | + set -o pipefail + lsblk -p -o name,type|grep lvm|head -1 + executable: /bin/bash + changed_when: false + register: bigboot_adjacent_lvm + +- name: Set adjacent LVM device name + ansible.builtin.set_fact: + bigboot_adjacent_lvm_device: "{{ bigboot_adjacent_lvm.stdout | regex_replace('.*(/dev.*)\\s+.*$', '\\1') }}" + +- name: Get logical volume mount information + ansible.builtin.set_fact: + bigboot_lv_info: "{{ ansible_facts.mounts \ + | selectattr('device', 'equalto', bigboot_adjacent_lvm_device | trim) | first }}" + +- name: Assert that there is space on the logical volume for shrinkage + ansible.builtin.assert: + that: bigboot_lv_info.size_available > bigboot_expansion_diff | int + fail_msg: There is not enough space available for LV shrinking. + +- name: Capture shrink size for logical volume + ansible.builtin.set_fact: + bigboot_lv_shrink_size: "{{ bigboot_lv_info.size_total - bigboot_expansion_diff | int }}" + +- name: Capture logical volume name + ansible.builtin.shell: + cmd: | + set -o pipefail + lvdisplay {{ bigboot_adjacent_lvm_device }} | grep -i 'vg name' + executable: /bin/bash + changed_when: false + register: bigboot_lv_vg_name + +- name: Format logical volume name + ansible.builtin.set_fact: + bigboot_lv_vg_name: "{{ bigboot_lv_vg_name.stdout | regex_replace('VG\\s+Name\\s+(.*)$', '\\1') }}" + +- name: Capture volume group free PE + ansible.builtin.shell: + cmd: | + set -o pipefail + vgdisplay {{ bigboot_lv_vg_name | trim }} | grep -i 'free' + executable: /bin/bash + changed_when: false + register: bigboot_lv_vg_free_pe + +- name: Format logical volume free PE + ansible.builtin.set_fact: + # Ex: + # Free PE / Size 320 / 1.25 GiB" + # Free PE / Size 189 / 756.00 MiB" + # Free PE / Size 414 / <1.62 GiB + # Free PE / Size 0 / 0 + bigboot_lv_vg_free_pe: "{{ bigboot_lv_vg_free_pe.stdout | regex_replace('^.*/.*/\\s+[<]?(.*)', '\\1') }}" + +- name: Get size in MB for PE and + ansible.builtin.set_fact: + bigboot_lv_pe_size_in_mb: + "{{ bigboot_lv_vg_free_pe | regex_replace('i|\\s+|<', '') | human_to_bytes | human_readable(unit='M') }}" + +- name: Verify if there's available PE or not and execute Shrink_LV + block: + - name: Set flag for Shrink_LV execution + ansible.builtin.set_fact: + bigboot_execute_shrink_lv: false + + - name: Assert if we need to execute the shrink_lv role to gain free PE + ansible.builtin.assert: + that: (bigboot_lv_pe_size_in_mb[:-3] | int | round) | int > bigboot_size[:-1] | int + fail_msg: Not enough PE to expand /boot. + + rescue: + - name: Set flag for Shrink_LV execution + ansible.builtin.set_fact: + bigboot_execute_shrink_lv: true +