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 <dyiou...@gmail.com> 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 
ansible-project+unsubscr...@googlegroups.com<mailto:ansible-project+unsubscr...@googlegroups.com>.
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 ansible-project+unsubscr...@googlegroups.com.
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