|  | 
| 1 | 1 | --- | 
|  | 2 | +- name: Get OS disk size digits | 
|  | 3 | +  vars: | 
|  | 4 | +    match_regex: '^[0-9]*' | 
|  | 5 | +  set_fact: | 
|  | 6 | +    os_vm_disk_size: "{{ vm_root_disk_size | regex_search(match_regex) }}" | 
|  | 7 | + | 
| 2 | 8 | - name: DEPLOY_VM get {{ os_qcow_template }} size | 
| 3 | 9 |   shell: > | 
| 4 | 10 |     qemu-img info "{{ os_qcow_template }}" | awk -F'[^0-9]*' '/virtual size/ {print $3}' | 
|  | 
| 7 | 13 | 
 | 
| 8 | 14 | - name: DEPLOY_VM convert disk size to bytes | 
| 9 | 15 |   vars: | 
| 10 |  | -    new_disk_size: "{{ vm_root_disk_size }} GB" | 
|  | 16 | +    new_disk_size: "{{ os_vm_disk_size }} GB" | 
| 11 | 17 |     disk_size_in_bytes: "{{ new_disk_size|human_to_bytes }}" | 
| 12 | 18 |   set_fact: | 
| 13 | 19 |     qcow_source_disk_size: "{{ qcow_source_size.stdout }}" | 
| 14 | 20 |     wanted_size: "{{ disk_size_in_bytes }}" | 
|  | 21 | +    os_disk_wanted_size: "{{ os_vm_disk_size }}G" | 
| 15 | 22 |     expand_os_disk: "{{ true if disk_size_in_bytes|int > qcow_source_size.stdout|int else false }}" | 
| 16 | 23 | 
 | 
| 17 | 24 | - name: DEPLOY_VM check if {{ vm_name }} disk {{ os_disk }} exist | 
| 18 | 25 |   stat: | 
| 19 | 26 |     path: "{{ os_disk }}" | 
|  | 27 | +    get_checksum: no | 
|  | 28 | +    get_attributes: no | 
| 20 | 29 |   register: os_disk_created | 
| 21 | 30 | 
 | 
| 22 |  | -- name: DEPLOY_VM {{ vm_name }} disk image | 
|  | 31 | +- name: DEPLOY_VM - Ensure {{ os_disk }} disk size is {{ os_vm_disk_size }}G | 
| 23 | 32 |   when: vm_name not in all_instances.list_vms and expand_os_disk|bool | 
| 24 | 33 |   block: | 
|  | 34 | +    - name: DEPLOY_VM - Get existing VM disk size | 
|  | 35 | +      when: os_disk_created.stat.exists | 
|  | 36 | +      command: "qemu-img info {{ os_disk }}" | 
|  | 37 | +      register: _os_sda_disk_size | 
|  | 38 | +      changed_when: False | 
|  | 39 | +      become: yes | 
|  | 40 | + | 
|  | 41 | +    - name: DEPLOY_VM - Get the size of disk {{ os_disk }} | 
|  | 42 | +      when: os_disk_created.stat.exists | 
|  | 43 | +      vars: | 
|  | 44 | +        match_regex: "[0-9]*G" | 
|  | 45 | +      set_fact: | 
|  | 46 | +        existing_os_vm_disk_size: "{{ _os_sda_disk_size.stdout | regex_search(match_regex) }}" | 
|  | 47 | + | 
|  | 48 | +    - name: DEPLOY_VM - Disk {{ os_disk }} size is {{ existing_os_vm_disk_size }} - REMOVING | 
|  | 49 | +      file: | 
|  | 50 | +        path: "{{ os_disk }}" | 
|  | 51 | +        state: absent | 
|  | 52 | +      when: existing_os_vm_disk_size is defined and existing_os_vm_disk_size != os_disk_wanted_size | 
|  | 53 | + | 
|  | 54 | +    - name: DEPLOY_VM check if {{ vm_name }} disk {{ os_disk }} exist | 
|  | 55 | +      stat: | 
|  | 56 | +        path: "{{ os_disk }}" | 
|  | 57 | +        get_checksum: no | 
|  | 58 | +        get_attributes: no | 
|  | 59 | +      register: os_disk_created       | 
|  | 60 | + | 
| 25 | 61 |     - name: DEPLOY_VM Create operating system disk for {{ vm_name }} | 
| 26 | 62 |       when: not os_disk_created.stat.exists | 
| 27 |  | -      command: "qemu-img create -f qcow2 -o preallocation={{ qemu_img_allocation }} {{ os_disk }} {{ vm_root_disk_size }}" | 
|  | 63 | +      command: "qemu-img create -f qcow2 -o preallocation={{ qemu_img_allocation }} {{ os_disk }} {{ os_vm_disk_size }}G" | 
| 28 | 64 |       args: | 
| 29 | 65 |         creates: "{{ os_disk }}" | 
| 30 | 66 |       register: create_os_disk | 
| 31 | 67 | 
 | 
| 32 |  | -    - name: DEPLOY_VM grow {{ vm_name }} operating system | 
|  | 68 | +    - name: DEPLOY_VM  Get {{ os_disk }} filesystem size | 
|  | 69 | +      shell: > | 
|  | 70 | +        virt-filesystems -a {{ os_disk }} -h --filesystems -l| awk 'NR>1 {print $5}' | 
|  | 71 | +      changed_when: False | 
|  | 72 | +      register: filesystem_size | 
|  | 73 | +      become: yes | 
|  | 74 | + | 
|  | 75 | +    - name: DEPLOY_VM Declare {{ os_disk }}  filesystem size | 
|  | 76 | +      set_fact: | 
|  | 77 | +        grow_filesystem_size: "{{ 'yes' if os_disk_wanted_size != filesystem_size.stdout else 'no' }}" | 
|  | 78 | + | 
|  | 79 | +    - name: DEPLOY_VM grow {{ vm_name }} disk {{ os_disk }} based on {{ os_qcow_template }} | 
|  | 80 | +      when: grow_filesystem_size|bool | 
| 33 | 81 |       command: > | 
| 34 |  | -        sudo virt-resize -v -x --expand /dev/sda1 "{{ os_qcow_template }}" "{{ os_disk }}" | 
|  | 82 | +        virt-resize -v -x --expand /dev/sda1 "{{ os_qcow_template }}" "{{ os_disk }}" | 
| 35 | 83 |       register: resize_create_os_disk | 
| 36 | 84 |       changed_when: '"Resize operation completed with no errors" in resize_create_os_disk.stdout' | 
|  | 85 | +      become: yes | 
| 37 | 86 | 
 | 
| 38 |  | -    - name: DEPLOY_VM Grow rhel root filesystem | 
| 39 |  | -      command: /usr/local/bin/qubi-virt-customize -a {{ os_disk }} --run-command 'xfs_growfs /' | 
| 40 |  | -      register: grow_create_os_disk | 
| 41 |  | -      changed_when: '"Finishing off" in grow_create_os_disk.stdout' | 
| 42 |  | -      when: "'rhel' in os_release" | 
| 43 |  | - | 
| 44 |  | -    - name: DEPLOY_VM Grow fedora root filesystem | 
| 45 |  | -      command: /usr/local/bin/qubi-virt-customize -a {{ os_disk }} --run-command 'resize2fs /dev/sda1' | 
| 46 |  | -      register: grow_create_os_disk | 
| 47 |  | -      changed_when: '"Finishing off" in grow_create_os_disk.stdout' | 
| 48 |  | -      when: "'fedora' in os_release" | 
|  | 87 | +## TODO: Remove becasuse the virt-resize task does this | 
|  | 88 | +#    - name: DEPLOY_VM Grow rhel root filesystem | 
|  | 89 | +#      command: /usr/local/bin/qubi-virt-customize -a {{ os_disk }} --run-command 'xfs_growfs /' | 
|  | 90 | +#      register: grow_create_os_disk | 
|  | 91 | +#      changed_when: '"Finishing off" in grow_create_os_disk.stdout' | 
|  | 92 | +#      when: > | 
|  | 93 | +#        "'rhel' in os_release" and  | 
|  | 94 | +#        grow_filesystem_size|bool | 
|  | 95 | +# | 
|  | 96 | +#    - name: DEPLOY_VM Grow fedora root filesystem | 
|  | 97 | +#      command: /usr/local/bin/qubi-virt-customize -a {{ os_disk }} --run-command 'resize2fs /dev/sda1' | 
|  | 98 | +#      register: grow_create_os_disk | 
|  | 99 | +#      changed_when: '"Finishing off" in grow_create_os_disk.stdout' | 
|  | 100 | +#      when: >  | 
|  | 101 | +#        "'fedora' in os_release" and | 
|  | 102 | +#        grow_filesystem_size|bool | 
| 49 | 103 | 
 | 
| 50 | 104 | - name: DEPLOY_VM Copy {{ vm_qcow_image }} to {{ os_disk }} | 
| 51 | 105 |   when: vm_name not in all_instances.list_vms and not expand_os_disk|bool | 
|  | 
| 95 | 149 |   when: item.enable | 
| 96 | 150 |   changed_when: '"Disk attached successfully" in attached_disk.stdout' | 
| 97 | 151 | 
 | 
|  | 152 | +- name: DEPLOY_VM - Shutdown {{ vm_name }} when extra disk is added | 
|  | 153 | +  when: attached_disk.changed | 
|  | 154 | +  shell: > | 
|  | 155 | +    virsh destroy "{{ vm_name }}" | 
|  | 156 | +  ignore_errors: yes | 
|  | 157 | +  register: virsh_shutdown | 
|  | 158 | +  become: yes | 
|  | 159 | + | 
|  | 160 | +- name: DEPLOY_VM - Ensure {{ vm_name }} is shutdown | 
|  | 161 | +  when: virsh_shutdown.changed | 
|  | 162 | +  virt: | 
|  | 163 | +    command: list_vms | 
|  | 164 | +    state: shutdown | 
|  | 165 | +  register: shutdown_vms | 
|  | 166 | +  until: vm_name in shutdown_vms.list_vms | 
|  | 167 | +  retries: 120 | 
|  | 168 | +  delay: 30 | 
|  | 169 | +  become: yes | 
|  | 170 | + | 
|  | 171 | +- name: DEPLOY_VM - Start {{ vm_name }} | 
|  | 172 | +  when: attached_disk.changed | 
|  | 173 | +  virt: | 
|  | 174 | +    name: "{{ vm_name }}" | 
|  | 175 | +    state: running | 
|  | 176 | +  become: yes | 
|  | 177 | + | 
| 98 | 178 | - name: DEPLOY_VM wait for {{ vm_name }} ip address | 
| 99 | 179 |   command: "/usr/local/bin/getvmip -r {{ vm_name }}" | 
| 100 | 180 |   until: dhcp_vm_ip.stdout != "" | 
|  | 
0 commit comments