We created a playbook that creates a VM in vCenter described by a YAML file (in the playbook). It is possible to automatically create multiple disks at the same time. However, when we re-run the underlying YAML file with a newly added disk, the new disk is not created. Is there a way to enable such customization using Ansible?
vars:
vm_disk_gb:
- sda:
- sdb: 35
- sdc: 500
tasks:
- name: "Setting disks facts for mk_disks"
ansible.builtin.set_fact:
mk_disks: |-
{% filter from_yaml %}
{% for vm_disk in vm_disk_gb %}
- size_gb: "{{ vm_disk.values() | first | d(50, true) }}"
type: "{{ vm_disk_type }}"
datastore: "{{ vm_datastore }}"
{% endfor %}
{% endfilter %}
Debug: 'mk_disks: [{''size_gb'': ''50'', ''type'': ''eagerzeroedthick'', ''datastore'':''SZHs1s90-vSAN''}, {''size_gb'': ''35'', ''type'':''eagerzeroedthick'', ''datastore'':''SZHs1s90-vSAN''}, {''size_gb'': ''300'', ''type'': ''eagerzeroedthick'', ''datastore'':''SZHs1s90-vSAN''}]'
- name: "Create VM with yaml-template"
vmware_guest:
name: "{{ vm_name }}"
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
template: "{{ vm_template }}"
validate_certs: "{{ vcenter_validate_certs|default(False) }}"
esxi_hostname: "{{ esxi_hostnames | random }}"
datacenter: "{{ datacenter | default('ha-datacenter') }}"
folder: "{{ vm_folder }}"
state: "{{ vm_state }}"
guest_id: "{{ vm_guestid }}"
annotation: "{{ annotation }}"
hardware:
memory_mb: "{{ vm_hw_ram_mb | default(4096) }}"
num_cpus: "{{ vm_hw_cpu_n | default(2) }}"
disk: "{{ mk_disks }}"
networks:
- name: "{{ networks.name }}"
ip: "{{ networks.ip }}"
netmask: "{{ networks.netmask }}"
gateway: "{{ networks.gateway }}"
device_type: "vmxnet3"
domain: "{{ domain }}"
dns_servers:
- "{{ dns_servers }}"
customization:
dns_servers:
- "{{ dns_servers }}"
domain: "{{ domain }}"
hostname: "{{ vm_name }}"
wait_for_ip_address: yes
wait_for_customization: true
delegate_to: localhost