Create an new additional disk in vCenter-VM with Ansible

40 Views Asked by At

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
0

There are 0 best solutions below