diff --git a/ansible/expand_ubuntu_disk_workflow.yml b/ansible/expand_ubuntu_disk_workflow.yml new file mode 100644 index 0000000..a25cdec --- /dev/null +++ b/ansible/expand_ubuntu_disk_workflow.yml @@ -0,0 +1,119 @@ +--- +- name: Stage 1 - Resize disk in vCenter with Terraform + hosts: localhost + connection: local + gather_facts: false + become: false + + vars: + tf_dir: "{{ playbook_dir }}/../terraform/resize-vm-disk" + + tasks: + - name: Terraform init + ansible.builtin.shell: terraform init -reconfigure -no-color + args: + chdir: "{{ tf_dir }}" + environment: + TF_VAR_vsphere_server: "{{ vsphere_server }}" + TF_VAR_vsphere_datacenter: "{{ vsphere_datacenter }}" + TF_VAR_vsphere_user: "{{ vsphere_user }}" + TF_VAR_vsphere_password: "{{ vsphere_password }}" + TF_VAR_vm_name: "{{ vm_name }}" + TF_VAR_increase_gb: "{{ increase_gb }}" + + - name: Terraform apply + ansible.builtin.shell: terraform apply -auto-approve -no-color -lock=false + args: + chdir: "{{ tf_dir }}" + environment: + TF_VAR_vsphere_server: "{{ vsphere_server }}" + TF_VAR_vsphere_datacenter: "{{ vsphere_datacenter }}" + TF_VAR_vsphere_user: "{{ vsphere_user }}" + TF_VAR_vsphere_password: "{{ vsphere_password }}" + TF_VAR_vm_name: "{{ vm_name }}" + TF_VAR_increase_gb: "{{ increase_gb }}" + + - name: Add Ubuntu VM to in-memory inventory + ansible.builtin.add_host: + name: ubuntu-resize-target + groups: ubuntu_resize_group + ansible_host: "{{ vm_ip }}" + ansible_user: "{{ ansible_user }}" + ansible_password: "{{ ansible_password }}" + ansible_become: true + ansible_become_password: "{{ ansible_become_password }}" + ansible_ssh_extra_args: "-o StrictHostKeyChecking=no" + +- name: Stage 2 - Wait for SSH + hosts: ubuntu_resize_group + gather_facts: false + tasks: + - name: Wait for SSH connection + ansible.builtin.wait_for_connection: + timeout: 300 + +- name: Stage 3 - Expand partition, LVM and filesystem + hosts: ubuntu_resize_group + gather_facts: false + become: true + + vars: + root_disk: /dev/sda + root_partition_number: 3 + root_partition: /dev/sda3 + 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 + echo "- - -" > "$host/scan" + done + args: + executable: /bin/bash + changed_when: true + + - name: Wait after rescan + ansible.builtin.pause: + seconds: 5 + + - name: Ensure growpart is installed + ansible.builtin.apt: + name: cloud-guest-utils + state: present + update_cache: yes + + - name: Expand partition if needed + ansible.builtin.command: "growpart {{ root_disk }} {{ root_partition_number }}" + register: growpart_result + changed_when: "'CHANGED:' in growpart_result.stdout" + failed_when: > + growpart_result.rc != 0 and + 'NOCHANGE:' not in growpart_result.stdout + + - name: Resize LVM physical volume + ansible.builtin.command: "pvresize {{ root_partition }}" + register: pvresize_result + failed_when: false + changed_when: true + + - name: Extend root logical volume and filesystem + ansible.builtin.command: "lvextend -r -l +100%FREE {{ root_lv }}" + register: lvextend_result + failed_when: false + changed_when: true + + - name: Show final disk state + ansible.builtin.shell: | + pvs + vgs + lvs + df -h / + args: + executable: /bin/bash + register: final_state + changed_when: false + + - name: Print final disk state + ansible.builtin.debug: + var: final_state.stdout_lines diff --git a/ansible/expand_ubuntu_lvm.yml b/ansible/expand_ubuntu_lvm.yml deleted file mode 100644 index c977270..0000000 --- a/ansible/expand_ubuntu_lvm.yml +++ /dev/null @@ -1,66 +0,0 @@ ---- -- name: Expand Ubuntu LVM root filesystem - hosts: all - gather_facts: no - 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 - echo "- - -" > "$host/scan" - done - args: - executable: /bin/bash - changed_when: true - - - name: Wait after rescan - ansible.builtin.pause: - seconds: 5 - - - name: Ensure growpart is installed - ansible.builtin.apt: - name: cloud-guest-utils - state: present - update_cache: yes - - - name: Expand partition if needed - ansible.builtin.command: "growpart {{ root_disk }} {{ root_partition_number }}" - register: growpart_result - changed_when: "'CHANGED:' in growpart_result.stdout" - failed_when: > - growpart_result.rc != 0 and - 'NOCHANGE:' not in growpart_result.stdout - - - name: Resize LVM physical volume - ansible.builtin.command: "pvresize {{ root_partition }}" - register: pvresize_result - 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: "'logical volume' in (lvextend_result.stdout | lower) or 'size of logical volume' in (lvextend_result.stdout | lower)" - failed_when: false - - - name: Show final disk state - ansible.builtin.shell: | - pvs - vgs - lvs - df -h / - args: - executable: /bin/bash - register: final_state - changed_when: false - - - name: Print final disk state - ansible.builtin.debug: - var: final_state.stdout_lines