1
votes

I am in the process of migrating to Ansible roles model and I have the following structure -

../roles/vms/tasks/main.yml

---
# To Create VMs on the VMware vCenter Server
  - name: Creation of Windows 8.1 VMs
    vsphere_guest:
      vcenter_hostname: "name"
      guest: "{{ item }}"
      from_template: yes
      template_src: "templatename"
      validate_certs: no
      esxi:
        datacenter: dc
        hostname: hname
    with_items: "{{ vmname81 }}"

../roles/vms/vars/main.yml

---
vmname81:
  - Client1
  - Client2
  - Client3


vmname10:
  - Client4
  - Client5

playbook.yml

---
# To Create VMs on the VMware vCenter Server
- hosts: localhost
  name: Creation of Windows 8.1 VMs
  roles:
    - { role: vms }

As you can see in the playbook, I am trying to create Windows 8.1 VMs but I am unable to figure out how to pass the vmname81 in the roles for the creation of 8.1 VMs. The inputs provided here needs to be used by with_items in the /tasks/main.yml so that I three Windows 8.1 VMs are created. I am also interested to know if this can be done in a better way.

1

1 Answers

3
votes

You shouldn't add VM names to a role, role should be generic.

  • Replace with_items: "{{ vmname81 }}" to with_items: "{{ vm_names }}"
  • Move vars (vmname81, vmname10) to your playbook/hosts/groups vars
  • Apply role like this:

    - hosts: localhost
      name: Creation of Windows 8.1 VMs
      roles:
        - role: vms
          vm_names: "{{ vmname81 }}"