微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

过滤调试信息

如何解决过滤调试信息

我正在使用 Ansible 2.9.13 并且我有这个剧本:

---
- hosts: localhost
  connection: local
  vars:
    ansible_python_interpreter: /usr/bin/env python3
  vars_files:
            - vars.yml
  tasks:
    - name: Get Tags from given VM Name
      vmware_vm_info:
         validate_certs: no
         hostname: '{{ vcenter_server }}'
         username: '{{ vcenter_user }}'
         password: '{{ vcenter_pass }}'
         folder: '{{ provision_folder }}'
      delegate_to: localhost
      register: vm_info
    - debug:
         msg:  "{{ vm_info.virtual_machines | json_query(query) }}"
      vars:
         query: "[?guest_name=='C97A1612171478']"

当我运行它时,我得到了这个输出

ok: [localhost] => {
    "msg": [
        {
            "attributes": {},"cluster": "xxx01","esxi_hostname": "xxxx","guest_fullname": "Microsoft Windows 10 (64-bit)","guest_name": "C97A1612171478","ip_address": "10.x.x.x","mac_address": [
                "0x:x:x:x:xd:x"
            ],"power_state": "poweredOn","tags": [],"uuid": "420xxaf-xxx-xe2-9xe-a5xxxxxa3c","vm_network": {
                "0x:x:x:xa:x:x": {
                    "ipv4": [
                        "169.x.x.x"
                    ],"ipv6": [
                        "x::x:x:x:xc"
                    ]
                },"x:x:x:x:x0:x1": {
                    "ipv4": [
                        "169.x.x.x"
                    ],"ipv6": [
                        "x::x7:xf:x:x"
                    ]
                },"0x:5x:x:x:ax:x": {
                    "ipv4": [
                        "10.x.x.x"
                    ],"ipv6": [
                        "x::1xx:x:8xx:x"
                    ]
                }
            }
        }
    ]
}

如何过滤输出以使其仅显示 "ip_address": "10.x.x.x"。 最后只有10.x.x.x

我尝试了一些在消息代码添加ip_address方法,但所有方法都给我一个错误

我可以使用 Python 过滤 msg,但如果有办法使用 Ansible 获取它,我想知道如何。

解决方法

如果您想在没有 loop 的情况下获取此信息:

  • 如果您因此需要一个对象:
    - debug:
        msg: "{{ vm_info.virtual_machines | json_query(query) }}"
      vars:
        query: "[?guest_name=='C97A1612171478'] | [0].{ip_address: ip_address}"
    
    会屈服
    {
      "ip_address": "10.x.x.x"
    }
    
  • 如果您需要一个字符串作为结果:
    - debug:
        msg: "{{ vm_info.virtual_machines | json_query(query) }}"
      vars:
        query: "[?guest_name=='C97A1612171478'] | [0].ip_address"
    
    会屈服
    "10.x.x.x"
    
,

我无法正确测试,但尝试修改以下代码:

- debug:
    msg:  "{{ item.ip_address | json_query(query) }}"
  loop: "{{ vm_info.virtual_machines }}"
  vars:
    query: "[?guest_name=='C97A1612171478']"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。