create single vmware dynamic inventory from multiple vcenters

409 views
Skip to first unread message

Amjad Saleem

unread,
Jan 23, 2022, 7:28:08 AM1/23/22
to Ansible Project
I am trying to collect all vms in four different vcenters to create inventory and further act on the that inventory. Using vmware_vm_inventory, I can target one vcenter and hostname does not support a list:

plugin: vmware_vm_inventory strict: False hostname: 10.65.223.31 username: admini...@vsphere.local password: XXXXXYYZZ validate_certs: False with_tags: True

I can make hostname as variable and provide it at runtime but then I will have run the playbook four times.

Is there a way to collect vms from all four vcenters and then run tasks on them?

Thanks in advance.

Rodrigues

unread,
Jan 23, 2022, 12:25:41 PM1/23/22
to Ansible Project
Not sure exactly what details you need from VMs, but defining vcenters as vars or part of your inventory will get you a list of vms using vmware_vm_info. Just update the vars section and add as many VCs as you'd like.  You will end up with a list of vcenters and whitin the VM details.

---
- hosts: localhost
connection: local
gather_facts: false
vars:
vcenters:
- vc1
- vc2
- vc3
vcenter_username: "admini...@vsphere.local"
vcenter_password: "password"
tasks:

- name: Gather all registered virtual machines
community.vmware.vmware_vm_info:
hostname: '{{ item }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
validate_certs: False
delegate_to: localhost
register: myvm
with_items: '{{ vcenters }}'
- name: debug
debug:
msg: "{{ myvm }}"

Eshtehar Khan

unread,
Jan 23, 2022, 12:46:43 PM1/23/22
to Ansible Project
Thanks Rodrigues. The ended up using separate inventory file for each vcenter and than specifying them with multiple -i flags like so:
ansible-inventory -i inventory_file1.yml -i inventory_file2.yml -i inventory_file3.yml 
to get all the vms in all the vcenters.

Reply all
Reply to author
Forward
0 new messages