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.

Reply via email to