A dictionary would solve this using the guest name as the key.
vcenter:
host1: { datacenter: datacenter1, vcenter: vcenter2 }
host2: { datacenter: datacenter1, vcenter: vcenter1 }
host3: { datacenter: datacenter2, vcenter: vcenter2 }
host4: { datacenter: datacenter2, vcenter: vcenter1 }
{{ vcenter[inventory_hostname].datacenter }}
{{ vcenter[inventory_hostname].vcenter }}
Keeping that dictionary update to date will be tedious but could be automated
too. Query each vcenter / datacenter pair for its list of VMs and generate a
vars file with the above dictionary. Include that vars file in your playbooks.
Alternatively (and more expensive) is to create an initial task that queries
the each vcenter / datacenter pair and creates this dictionary in real time.
Walter
--
Walter Rowe, Division Chief
Infrastructure Services Division
Mobile: 202.355.4123
On May 8, 2024, at 12:34 PM, Dimitri Yioulos <[email protected]> wrote:
Hello, all.
The subject of this post is probably terribly named. That said, here's what I'm
trying to accomplish:
I have two VMware vCenter hosts - vcenter1.mycompany.com and
vcenter2.mycompany.com. Within each host is are two datacenters - datacenter1
and datacenter2. for each host, the datacenter alignments are vcenter1 --
datacenter1 and vcenter2 -- datacenter2.
I have a number of playbooks that do actions against vCenter. For example, I
have one deletes all snapshots. It looks like this:
---
- hosts: all
become: false
gather_facts: false
vars_prompt:
- name: "vcenter_username"
prompt: "Enter your Vcenter username (without @vsphere.local)"
private: no
- name: "vcenter_password"
prompt: "Enter your VMware password"
private: yes
- name: "vcenter_hostname"
prompt: "Enter your Vcenter host name:\nvcenter1\nvcenter2\n"
private: no
- name: "vcenter_datacenter"
prompt: "Enter your Vcenter datacenter:\ndatacenter1\ndatacenter2\n"
private: no
tasks:
- name: Find vm folder name
~
- name: Remove all snapshots of all VMs
community.vmware.vmware_guest_snapshot:
hostname: "{{ vcenter_hostname }}.fmycompany.com"
username: "{{ vcenter_username }}@vsphere.local"
password: "{{ vcenter_password }}"
datacenter: "{{ vcenter_datacenter }} Datacenter"
folder: "{{ vm_folder.folders | regex_replace(\"([\\[\\]'])\",'') }}"
name: "{{ inventory_hostname }}"
state: remove_all
validate_certs: False
delegate_to: localhost
As you can see, at present, I have to provide the vCenter name, and the
corresponding datacenter name in order for the playbook to work. I would like
to eliminate the need to specify the datacenter name, and have that populate
datacenter ("{{ vcenter_datacenter }} Datacenter") based on the vCenter host
that I choose (hostname: "{{ vcenter_hostname }}.fmycompany.com"). I'm not
clever enough to suss that out, and would appreciate your help.
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/424d790e-e657-405b-b720-8ce0448df4f4n%40googlegroups.com<https://groups.google.com/d/msgid/ansible-project/424d790e-e657-405b-b720-8ce0448df4f4n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/E3B4BB6D-1A35-4EA0-9D87-B16EEDF3A036%40nist.gov.