来自输出的 Ansible 变量问题并使用 json_query 过滤

Ansible variables question from output and filtered with json_query

我正在尝试从 vmware 模块输出中获取相关字段,我正在使用 json 进行过滤,但是说我的变量 target_vm_name 未定义。如何获得仅包含匹配条件的变量,该条件由我要遍历的主机列表的 IP 地址过滤?

代码如下:


- name: Loop thru hosts and get IPs
  hosts: rpa_test

  vars:
     ip_addr:
          "{{ lookup('dig', ansible_host) }}"
  tasks:
        - debug:
             msg: "System {{ inventory_hostname }} has ip address of {{ ip_addr }}"
        - name: get vm info based on ip
          community.vmware.vmware_vm_info:
                            hostname: "{{ vcenter_hostname }}"
                            username: "{{ vault_vcenter_admin_name }}"
                            password: "{{ vault_vcenter_admin_password }}"
                            validate_certs: False
          delegate_to: localhost
          register: vm_info
          vars:
                           target_vm_name: "{{ vm_info.virtual_machines | json_query(query) }}"
                           query: "[?ip_address=={{ ip_addr }}]"
        - debug:
                           msg:  "{{ target_vm_name.virtual_machines.guest_name }}"


vars 不在 community.vmware.vmware_vm_info 任务中的正确位置,

你应该把它放在debug任务中:

  tasks:
        - debug:
            msg: "System {{ inventory_hostname }} has ip address of {{ ip_addr }}"
        - name: get vm info based on ip
          community.vmware.vmware_vm_info:
                            hostname: "{{ vcenter_hostname }}"
                            username: "{{ vault_vcenter_admin_name }}"
                            password: "{{ vault_vcenter_admin_password }}"
                            validate_certs: False
          delegate_to: localhost
          register: vm_info

        - debug:
            msg:  "{{ target_vm_name.virtual_machines.guest_name }}"
          vars:
            target_vm_name: "{{ vm_info.virtual_machines | json_query(query) }}"
            query: "[?ip_address=={{ ip_addr }}]"