The debug module prints to the job log. It's a common mistake to try to use the job log as formatted output for other purposes, like reports. Instead you could use the ansible.builtin.template module to output the desired data in some other file. Or you can take the often-warned-against shortcut of using the copy module to do the same, like so:

---
- name: Example
  hosts: localhost
  gather_facts: false
  vars:
    vm_info:
      virtual_machines:
        - {'guest_name': 'rhel8tst', 'guest_fullname': 'Red Hat Enterprise 
Linux 8 (64-bit)', 'power_state': 'poweredOn', 'ip_address': 'xxx.xxx.xxx.xxx', 
'mac_address': ['xxx'], 'uuid': '422c523e-7bb0-1f95-1c16-742c30ba445d', 
'vm_network': {'xxx': {'ipv4': ['xxx.xxx.xxx.xxx'], 'ipv6': ['xxx']}}, 
'esxi_hostname': '.xxxx', 'datacenter': 'xxxx', 'cluster': 'xxxxx', 
'resource_pool': None, 'attributes': {}, 'tags': [], 'folder': None, 'moid': 
'vm-502018', 'datastore_url': [{'name': 'xxxx', 'url': 'xxx'}], 'allocated': {}}
  tasks:
    - name: Show virtual machines guest_name in job log
      ansible.builtin.debug:
        msg: "{{ item['guest_name'] }}"
      with_items: "{{ vm_info.virtual_machines }}"
    - name: Print virtual machines guest_name in output file
      ansible.builtin.copy: # should really use template here
        content: |
            Virtual Machine Names
            {% for vm in vm_info.virtual_machines %}
            - {{ vm['guest_name'] }}
            {% endfor %}
        dest: /tmp/virtual_machine_names.txt


On 5/2/23 2:00 PM, Alex Wanderley wrote:
Hello,

I need to collect some info from VMs in our VMware cluster and am having trouble figuring out how to print only the information I need.
When running the code below:

       - name: collect VMs in specific folder
         community.vmware.vmware_vm_info:
              validate_certs: False
              hostname: "{{ vcenter_hostname }}"
              username: "{{ vcenter_username }}"
              password: "{{ vcenter_passwd }}"
              folder: "{{ vcenter_folder }}"
         delegate_to: localhost
         register: vm_info

       - name: print VM info
         debug:
            msg: "{{ item['guest_name'] }}"
         with_items: "{{ vm_info.virtual_machines }}"

I'm getting this result:

TASK [print VM info] *********************************************************************************************** ok: [localhost] => (item={'guest_name': 'rhel8tst', 'guest_fullname': 'Red Hat Enterprise Linux 8 (64-bit)', 'power_state': 'poweredOn', 'ip_address': 'xxx.xxx.xxx.xxx', 'mac_address': ['xxx'], 'uuid': '422c523e-7bb0-1f95-1c16-742c30ba445d', 'vm_network': {'xxx': {'ipv4': ['xxx.xxx.xxx.xxx'], 'ipv6': ['xxx']}}, 'esxi_hostname': '.xxxx', 'datacenter': 'xxxx', 'cluster': 'xxxxx', 'resource_pool': None, 'attributes': {}, 'tags': [], 'folder': None, 'moid': 'vm-502018', 'datastore_url': [{'name': 'xxxx', 'url': 'xxx'}], 'allocated': {}}) => {
    "msg": "rhel8tst"
}

How could I have (in this case) only the VM name "rhel8tst" printed out?

Thanks a lot,

Alex

--
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/5ed898e2-c8cd-3367-c19f-d821807400df%40gmail.com.

Reply via email to