Skip to content

Commit

Permalink
Support boot disk renaming and resizing.
Browse files Browse the repository at this point in the history
Renames the boot disk when the `boot_disk_name` variable is defined
within the profile or the VM properties. (The latter has precedence
over the former). The VM disk must have the bootable flag set.

By default, if `boot_disk_name` is defined, the VM name will be
prepended to the boot disk name so the final name would be:

`{{ vm_name }}_{{ boot_disk_name }}`

This behavior can be disabled by setting the variable
`boot_disk_use_vm_name_prefix` to `false`. In this case the
final name of the boot disk will be the value of `boot_disk_name`.

The boot disk can also be resized by defining the `boot_disk_size`
variable.

The value can contain a suffix that complies to the IEC 60027-2
standard (for example 10GiB, 1024MiB)

Signed-off-by: Miguel Martín <[email protected]>
  • Loading branch information
mmartinv committed Apr 18, 2023
1 parent ea25d0a commit 1423d11
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
minor_changes:
- vm_infra - Support boot disk renaming and resizing. (https://github.com/oVirt/ovirt-ansible-collection/pull/705)
9 changes: 6 additions & 3 deletions roles/vm_infra/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ The `vms` and `profile` variables can contain following attributes, note that if
| name | UNDEF | Name of the virtual machine to create. |
| tag | UNDEF | Name of the tag to assign to the virtual machine. Only administrator users can use this attribute. |
| cloud_init | UNDEF | Dictionary with values for Unix-like Virtual Machine initialization using cloud init. See below <i>cloud_init</i> section for more detailed description. |
| cloud_init_nics | UNDEF | List of dictionaries representing network interafaces to be setup by cloud init. See below <i>cloud_init_nics</i> section for more detailed description. |
| cloud_init_nics | UNDEF | List of dictionaries representing network interfaces to be setup by cloud init. See below <i>cloud_init_nics</i> section for more detailed description. |
| sysprep | UNDEF | Dictionary with values for Windows Virtual Machine initialization using sysprep. See below <i>sysprep</i> section for more detailed description. |
| profile | UNDEF | Dictionary specifying the virtual machine hardware. See the table below. |
| state | present | Should the Virtual Machine be stopped, present or running. Takes precedence before state value in profile. |
Expand All @@ -66,10 +66,13 @@ The `vms` and `profile` variables can contain following attributes, note that if
| clone | No | If yes then the disks of the created virtual machine will be cloned and independent of the template. This parameter is used only when state is running or present and VM didn't exist before. |
| template | Blank | Name of template that the virtual machine should be based on. |
| template_version | UNDEF | Version number of the template to be used for VM. By default the latest available version of the template is used. |
| boot_disk_name | UNDEF | Renames the bootable disk after the VM is created. Useful when creating VMs from templates |
| boot_disk_use_vm_name_prefix | true | Use the name of the virtual machine as prefix when renaming the VM boot disk. The resulting boot disk name would be <i>{{name}}_{{boot_disk_name}}</i>|
| boot_disk_size | UNDEF | Resizes the bootable disk after the VM is created. A suffix that complies to the IEC 60027-2 standard (for example 10GiB, 1024MiB) can be used. |
| memory | UNDEF | Amount of virtual machine memory. |
| memory_max | UNDEF | Upper bound of virtual machine memory up to which memory hot-plug can be performed. |
| memory_guaranteed | UNDEF | Amount of minimal guaranteed memory of the Virtual Machine. Prefix uses IEC 60027-2 standard (for example 1GiB, 1024MiB). <i>memory_guaranteed</i> parameter can't be lower than <i>memory</i> parameter. |
| cores | UNDEF | Number of CPU cores used by the the virtual machine. |
| memory_guaranteed | UNDEF | Amount of minimal guaranteed memory of the Virtual Machine. Suffix uses IEC 60027-2 standard (for example 1GiB, 1024MiB). <i>memory_guaranteed</i> parameter can't be lower than <i>memory</i> parameter. |
| cores | UNDEF | Number of CPU cores used by the virtual machine. |
| sockets | UNDEF | Number of virtual CPUs sockets of the Virtual Machine. |
| cpu_shares | UNDEF | Set a CPU shares for this Virtual Machine. |
| cpu_threads | UNDEF | Set a CPU threads for this Virtual Machine. |
Expand Down
58 changes: 58 additions & 0 deletions roles/vm_infra/tasks/rename_resize_boot_disk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
- name: "Get the '{{ current_vm.name }}' VM info"
ovirt_vm_info:
auth: "{{ ovirt_auth }}"
pattern: "name={{ current_vm.name }}"
fetch_nested: true
nested_attributes:
- "bootable"
all_content: true
register: current_vm_info

- name: "Get the '{{ current_vm.name }}' VM boot disk ID"
ansible.builtin.set_fact:
current_vm_boot_disk_id: "{{item.id}}"
loop: "{{current_vm_info.ovirt_vms[0].disk_attachments}}"
when: item.bootable is defined and item.bootable

- name: "Get the '{{ current_vm.name }}' VM boot disk info"
ovirt_disk_info:
auth: "{{ ovirt_auth }}"
pattern: "id={{ current_vm_boot_disk_id }}"
fetch_nested: true
register: current_vm_boot_disk_info
when: current_vm_boot_disk_id is defined

- name: "Get the Storage Domain info from the '{{ current_vm.name }}' VM boot disk"
ovirt_storage_domain:
auth: "{{ovirt_auth}}"
id: "{{ current_vm_boot_disk_info.ovirt_disks[0].storage_domains[0].id }}"
register: current_vm_boot_disk_sd_info
when: current_vm_boot_disk_id is defined

- name: "Get the '{{ current_vm.name }}' VM boot disk name"
ansible.builtin.set_fact:
current_vm_boot_disk_name: "{{ current_vm.boot_disk_name | default(current_vm.profile.boot_disk_name) }}"
when: current_vm.boot_disk_name is defined or current_vm.profile.boot_disk_name is defined

- name: "Use '{{ current_vm.name }}' as prefix for the VM boot disk name"
ansible.builtin.set_fact:
current_vm_boot_disk_use_vm_name_prefix: "{{ current_vm.boot_disk_use_vm_name_prefix | default(current_vm.profile.boot_disk_use_vm_name_prefix) | default(true) }}"

- name: "Rename the '{{ current_vm.name }}' VM boot disk"
ovirt_disk:
auth: "{{ ovirt_auth }}"
id: "{{ current_vm_boot_disk_id }}"
name: "{% if current_vm_boot_disk_use_vm_name_prefix %}{{ current_vm.name }}_{% endif %}{{ current_vm_boot_disk_name }}"
vm_name: "{{ current_vm.name }}"
storage_domain: "{{current_vm_boot_disk_sd_info.storagedomain.name}}"
when: current_vm_boot_disk_id is defined and current_vm_boot_disk_name is defined

- name: "Resize the '{{ current_vm.name }}' VM boot disk"
ovirt_disk:
auth: "{{ ovirt_auth }}"
id: "{{ current_vm_boot_disk_id }}"
size: "{{ current_vm.boot_disk_size | default(current_vm.profile.boot_disk_size) }}"
vm_name: "{{current_vm.name}}"
when: (current_vm.boot_disk_size is defined or current_vm.profile.boot_disk_size is defined) and current_vm_boot_disk_id is defined
...
6 changes: 6 additions & 0 deletions roles/vm_infra/tasks/vm_state_present.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
- name: Apply any Affinity Labels
import_tasks: affinity_labels.yml

- name: Rename and resize boot disk
include_tasks: rename_resize_boot_disk.yml
with_items: "{{ create_vms }}"
loop_control:
loop_var: "current_vm"

- name: Manage profile disks
ovirt_disk:
auth: "{{ ovirt_auth }}"
Expand Down

0 comments on commit 1423d11

Please sign in to comment.