diff --git a/ansible/expand_ubuntu_disk.yml b/ansible/expand_ubuntu_disk.yml index e4ed344..1f7b905 100644 --- a/ansible/expand_ubuntu_disk.yml +++ b/ansible/expand_ubuntu_disk.yml @@ -1,16 +1,11 @@ --- -- name: Expand Ubuntu root disk in vCenter and inside guest - hosts: all - gather_facts: yes - become: yes +- name: Expand VM disk in vCenter and discover guest IP + hosts: localhost + gather_facts: no vars: disk_controller_number: 0 disk_unit_number: 0 - root_disk: /dev/sda - root_partition: /dev/sda3 - root_partition_number: 3 - root_lv: /dev/mapper/ubuntu--vg-ubuntu--lv tasks: - name: Get VM info from vCenter @@ -21,9 +16,13 @@ validate_certs: false datacenter: "{{ vcenter_datacenter }}" name: "{{ vm_name }}" - delegate_to: localhost register: vm_info + - name: Fail if VM has no guest IP in vCenter + ansible.builtin.fail: + msg: "VM {{ vm_name }} has no detected guest IP in vCenter" + when: not vm_info.instance.ipv4 + - name: Get current disk size in GB ansible.builtin.set_fact: current_disk_gb: >- @@ -43,7 +42,11 @@ - name: Show resize plan ansible.builtin.debug: - msg: "Expanding {{ vm_name }} from {{ current_disk_gb }} GB to {{ target_disk_gb }} GB" + msg: + - "VM: {{ vm_name }}" + - "Guest IP: {{ vm_info.instance.ipv4 }}" + - "Current disk: {{ current_disk_gb }} GB" + - "Target disk: {{ target_disk_gb }} GB" - name: Expand disk in vCenter community.vmware.vmware_guest_disk: @@ -58,8 +61,29 @@ unit_number: "{{ disk_unit_number }}" controller_number: "{{ disk_controller_number }}" size_gb: "{{ target_disk_gb }}" - delegate_to: localhost + - name: Add discovered VM to temporary inventory + ansible.builtin.add_host: + name: resized_ubuntu_target + ansible_host: "{{ vm_info.instance.ipv4 }}" + ansible_user: "{{ guest_ssh_user }}" + ansible_password: "{{ guest_ssh_password }}" + ansible_become: true + ansible_become_password: "{{ guest_become_password }}" + ansible_ssh_common_args: "-o StrictHostKeyChecking=no" + +- name: Expand disk inside Ubuntu guest + hosts: resized_ubuntu_target + gather_facts: yes + become: yes + + vars: + root_disk: /dev/sda + root_partition: /dev/sda3 + root_partition_number: 3 + root_lv: /dev/mapper/ubuntu--vg-ubuntu--lv + + tasks: - name: Rescan SCSI bus ansible.builtin.shell: | for host in /sys/class/scsi_host/host*; do @@ -90,16 +114,16 @@ - name: Resize LVM physical volume ansible.builtin.command: "pvresize {{ root_partition }}" register: pvresize_result - changed_when: "'changed' in (pvresize_result.stdout | lower) or 'resized' in (pvresize_result.stdout | lower)" + changed_when: "'resized' in (pvresize_result.stdout | lower) or 'changed' in (pvresize_result.stdout | lower)" failed_when: false - name: Extend root logical volume and filesystem ansible.builtin.command: "lvextend -r -l +100%FREE {{ root_lv }}" register: lvextend_result - changed_when: "'Size of logical volume' in lvextend_result.stdout or 'Logical volume' in lvextend_result.stdout" + changed_when: "'size of logical volume' in (lvextend_result.stdout | lower) or 'logical volume' in (lvextend_result.stdout | lower)" failed_when: false - - name: Show volume state + - name: Show final disk state ansible.builtin.shell: | pvs vgs @@ -110,6 +134,6 @@ register: final_state changed_when: false - - name: Print final state + - name: Print final disk state ansible.builtin.debug: var: final_state.stdout_lines