【问题标题】:Ansible parsing lists inside dictionary字典中的 Ansible 解析列表
【发布时间】:2021-02-09 11:10:21
【问题描述】:
- name: Use Collections
  hosts: all
  connection: local
  gather_facts: no

  vars:
    ansible_python_interpreter: /usr/local/bin/python3.9 


  tasks:
        - name: Collect BIG-IP information
          bigip_device_info:
           gather_subset:
            - virtual-servers
           provider:
            server: y.y.y.y
            user: abc
            password: abc1
            validate_certs: False
          delegate_to: localhost
          register: output

        - name: debug
          debug: msg={{output.ansible_facts| json_query(jmesquery)}}
          vars:
             jmesquery: "[*].{Satus: item.availability_status, Destinationaddress: item.destination_address, Destination: item.destination}"

我得到低于输出,空消息

ansible-playbook -i inv bigipfacts.yml

PLAY [Use Collections] ***************************************************************************************************************************************************************************

TASK [Collect BIG-IP information] ****************************************************************************************************************************************************************
ok: [y.y.y.y]

TASK [debug] *************************************************************************************************************************************************************************************
ok: [y.y.y.y] => {
    "msg": ""
}

PLAY RECAP ***************************************************************************************************************************************************************************************
y.y.y.y                 : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

必需/想要的输出-将来我想从底部输出中解析更多。但是现在这三个值。

"availability_status": "available",                
"destination": "/1.1.1..1:8080",
"destination_address": "2.2.2.2",

"availability_status": "available",
"destination": "/3.3.3.3.3%22:8080",
"destination_address": "4.4.4.4",

output.ansible_facts 有以下信息,我想解析下面的输出并只提取列表中的几个值,如上所示

任务[调试] ********************************************** ****************************************************** ****************************************************** *********************************** 好的:[x.x.x.x] => { “味精”:{ “ansible_net_queried”:是的, “ansible_net_virtual_servers”:[ { "auto_lasthop": "默认", “availability_status”:“可用”, “client_side_bits_in”:0, “client_side_bits_out”:0, “client_side_current_connections”:0, “client_side_evicted_connections”:0, “client_side_max_connections”:0, “client_side_pkts_in”:0, “client_side_pkts_out”:0, “client_side_slow_killed”:0, “client_side_total_connections”:0, “cmp_enabled”:“是”, "cmp_mode": "所有 CPU", “连接限制”:0, “connection_mirror_enabled”:“否”, “cpu_usage_ratio_last_1_min”:0, “cpu_usage_ratio_last_5_min”:0, “cpu_usage_ratio_last_5_sec”:0, “current_syn_cache”:0, "default_pool": "/POOL01", "目的地": "/1.1.1..1:8080", "destination_address": "2.2.2.2", “目的地端口”:8080, “启用”:“否”, “ephemeral_bits_in”:0, “ephemeral_bits_out”:0, “ephemeral_current_connections”:0, “ephemeral_evicted_connections”:0, “ephemeral_max_connections”:0, “ephemeral_pkts_in”:0, “ephemeral_pkts_out”:0, “ephemeral_slow_killed”:0, “ephemeral_total_connections”:0, "full_path": "/p1/VS01", “gtm_score”:0, “hardware_syn_cookie_instances”:0, “max_conn_duration”:0, “mean_conn_duration”:0, “min_conn_duration”:0, “名称”:“vs01”, "nat64_enabled": "否", “个人资料”:[ { “上下文”:“所有”, "full_path": "/Common/http", “名称”:“http” }, { “上下文”:“所有”, "full_path": "/Common/oneconnect", “名称”:“一个连接” }, { “上下文”:“所有”, "full_path": "/Common/tcp", “名称”:“tcp” } ], “协议”:“tcp”, “rate_limit”:-1, “rate_limit_destination_mask”:0, “rate_limit_mode”:“对象”, “rate_limit_source_mask”:0, "snat_type": "自动地图", “software_syn_cookie_instances”:0, "source_address": "0.0.0.0%22/0", “source_port_behavior”:“保留”, "status_reason": "虚拟服务器可用", “syn_cache_overflow”:0, "syn_cookies_status": "未激活", “total_hardware_accepted_syn_cookies”:0, “total_hardware_syn_cookies”:0, “total_requests”:0, “total_software_accepted_syn_cookies”:0, “total_software_rejected_syn_cookies”:0, “total_software_syn_cookies”:0, "translate_address": "是的", "translate_port": "是的", “类型”:“标准”, “vlan”:[ “/通用/VLAN” ] }, { "auto_lasthop": "默认", “availability_status”:“可用”, “client_side_bits_in”:0, “client_side_bits_out”:0, “client_side_current_connections”:0, “client_side_evicted_connections”:0, “client_side_max_connections”:0, “client_side_pkts_in”:0, “client_side_pkts_out”:0, “client_side_slow_killed”:0, “client_side_total_connections”:0, “cmp_enabled”:“是”, "cmp_mode": "所有 CPU", “连接限制”:0, “connection_mirror_enabled”:“否”, “cpu_usage_ratio_last_1_min”:0, “cpu_usage_ratio_last_5_min”:0, “cpu_usage_ratio_last_5_sec”:0, “current_syn_cache”:0, "default_pool": "/POOL01", "目的地": "/3.3.3.3.3%22:8080", "destination_address": "4.4.4.4", “目的地端口”:8080, “启用”:“否”, “ephemeral_bits_in”:0, “ephemeral_bits_out”:0, “ephemeral_current_connections”:0, “ephemeral_evicted_connections”:0, “ephemeral_max_connections”:0, “ephemeral_pkts_in”:0, “ephemeral_pkts_out”:0, “ephemeral_slow_killed”:0, “ephemeral_total_connections”:0, "full_path": "/p1/VS01", “gtm_score”:0, “hardware_syn_cookie_instances”:0, “max_conn_duration”:0, “mean_conn_duration”:0, “min_conn_duration”:0, “名称”:“vs02”, "nat64_enabled": "否", “个人资料”:[ { “上下文”:“所有”, "full_path": "/Common/http", “名称”:“http” }, { “上下文”:“所有”, "full_path": "/Common/oneconnect", “名称”:“一个连接” }, { “上下文”:“所有”, "full_path": "/Common/tcp", “名称”:“tcp” } ], “协议”:“tcp”, “rate_limit”:-1, “rate_limit_destination_mask”:0, “rate_limit_mode”:“对象”, “rate_limit_source_mask”:0, "snat_type": "自动地图", “software_syn_cookie_instances”:0, "source_address": "0.0.0.0%22/0", “source_port_behavior”:“保留”, "status_reason": "虚拟服务器可用", “syn_cache_overflow”:0, "syn_cookies_status": "未激活", “total_hardware_accepted_syn_cookies”:0, “total_hardware_syn_cookies”:0, “total_requests”:0, “total_software_accepted_syn_cookies”:0, “total_software_rejected_syn_cookies”:0, “total_software_syn_cookies”:0, "translate_address": "是的", "translate_port": "是的", “类型”:“标准”, “vlan”:[ “/普通/vlan” ] } ] } }

【问题讨论】:

    标签: list dictionary parsing ansible


    【解决方案1】:

    您完全省略了 ansible_net_virtual_servers,并且似乎将 with_items:(在 jinja2 中设置了一个 item 名称)与没有此类隐式名称创建的 JMESPath 混为一谈

      - debug:
          msg: >-
            {{ output.ansible_facts.ansible_net_virtual_servers
            | json_query(jmesquery) }}
        vars:
          jmesquery: "[*].{Satus: availability_status, Destinationaddress: destination_address, Destination: destination}"
    

    生产

    ok: [localhost] => {
        "msg": [
            {
                "Destination": "/1.1.1..1:8080",
                "Destinationaddress": "2.2.2.2",
                "Satus": "available"
            },
            {
                "Destination": "/3.3.3.3.3%22:8080",
                "Destinationaddress": "4.4.4.4",
                "Satus": "available"
            }
        ]
    }
    

    【讨论】:

    • 我在上面尝试过,但我得到的值为 null ` ok: [1host] => { "msg": [ { "Destination": null, "Satus": null }, { "Destination" : null, "萨图斯": null }, { `
    • 我的错,我在脚本中有错字。谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多