I'm not sure about your prompt question,
but for the report, try this:

        content: |
          {% for host in ansible_play_hosts %}
          {%     if hostvars[host].snapshot_info.guest_snapshots.snapshots is 
defined %}
          {{ host }}:
          {{ hostvars[host]['snapshot_info']|default("None", false) }}

          {%     endif %}
          {% endfor -%}

Cheers,
--
Todd

On 12/22/23 8:43 AM, Dimitri Yioulos wrote:
Season's greetings, all.

I've created a playbook to generate a report of all VMware guests (vms) which have snapshots:

---

- hosts: all
  gather_facts: false

  vars_prompt:

    - name: "vcenter_username"
      prompt: "Enter your Vcenter username"
      private: no
    - name: "vcenter_password"
      prompt: "Enter your VMware password"
      private: yes
    #- name: "vcenter_hostname"
    #prompt: "Enter your Vcenter Hostname\n1- vcenter1.mycompany.com\n2- vcenter2.mycompany.com\n"
        #private: no
        #- name: "vcenter_datacenter"
        #prompt: "Enter your Vcenter Datacenter\n1- First Datacenter\n2- Second Datacenter\n"
        #private: no

  vars:
    vcenter_hostname: vcenter1.mycompany.com
    vcenter_datacenter: First Datacenter

  tasks:

    - name: Gather snapshot information about the virtual machines in the given vCenter
      community.vmware.vmware_guest_snapshot_info:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        datacenter: "{{ vcenter_datacenter }}"
        folder: "/{{ vcenter_datacenter }}/vm"
        validate_certs: False
        name: "{{ inventory_hostname }}"
      register: snapshot_info
      delegate_to: localhost

    - name: Show snapshots
      ansible.builtin.debug:
        msg: "{{ snapshot_info }}"

    - local_action:
        module: copy
        content: |
          {% for host in ansible_play_hosts %}
          {{ host }}:
          {{ hostvars[host]['snapshot_info']|default("None", false) }}

          {% endfor -%}
        dest: "/home/user/snapshotsB.txt"
      run_once: yes

This works, producing the following output:

host-01:
{'changed': False, 'guest_snapshots': {}, 'failed': False}

host-02:
{'changed': False, 'guest_snapshots': {'snapshots': [{'id': 1355, 'name': 'VM Snapshot 12%2f20%2f2023, 08:01:11 PM', 'description': 'Pre OS patching - DGY', 'creation_time': '2023-12-21T01:01:12.319638+00:00', 'state': 'poweredOff', 'quiesced': False}], 'current_snapshot': {'id': 1355, 'name': 'VM Snapshot 12%2f20%2f2023, 08:01:11 PM', 'description': 'Pre OS patching - DGY', 'creation_time': '2023-12-21T01:01:12.319638+00:00', 'state': 'poweredOff', 'quiesced': False}}, 'failed': False}

host-01 has no snapshot, and I'd like only hosts that have snaps to be included in the report. How do I accomplish that?

Additionally, there are two datacenters, one on each of two vCenter hosts. You'll notice that I tried to create prompts to select the datacenter and host (currently commented out). While the prompts appear, and I choose the right values from the presented pick lists, it doesn't work. the errors are that vms are non-existent. How can I make this work?

Thanks so much.
--
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/d5cae40b-0a06-4e54-81f7-b4a297207799n%40googlegroups.com <https://groups.google.com/d/msgid/ansible-project/d5cae40b-0a06-4e54-81f7-b4a297207799n%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/fbe06dee-25cd-4187-8631-20950b8e50d9%40gmail.com.

Reply via email to