Jinja2-无法遍历返回嵌套字典JSON的输出

问题描述

我有一个任务,该任务将从开关返回的输出分配给变量,然后下一个任务通过jinja2模板运行输出:

- name: CHECKING SPANNING-TREE STATE
            nxos_command:
              commands:
                - show spanning-tree
              provider: "{{ nxos_provider }}"
            register: stp
- name: RUN OUTPUT THROUGH TEMPLATE THEN WRITE OUTPUT TO FILE
            template:
              src: /sandbox/git/net/ansible/roles/template/templates/stp.j2

在Jinja2模板中,我可以使用下面的逻辑轻松地遍历“ TABLE_tree.ROW_tree”,但是当我尝试遍历“ TABLE_port.ROW_port”时,在Ansible中会出现“ undefinedvariable”错误。只是不确定如何为每个“ TABLE_tree.ROW_tree”遍历嵌套字典(TABLE_port.ROW_port)。任何帮助将不胜感激。

工作逻辑代码段:

{% for tree in stp.stdout_lines[0].TABLE_tree.ROW_tree %}
VLAN{{ tree.tree_id  }}:
Root Bridge Priority: {{ tree.tree_designated_root_priority }}

逻辑中断:

{% for interface in stp.stdout_lines[0].TABLE_tree.ROW_tree.TABLE_port.ROW_port. %}
INTERFACES STATES:
Interface {{ interface.if_index }}
        Role: {{ interface.role }}
        State: {{ interface.state }}
------------------------------------------------------
{% endfor %}

stdout_lines示例:

{
"TABLE_tree": {
    "ROW_tree": [
        {
            "tree_id": "1","tree_tree_type": "vlan","tree_protocol": "rstp","port_count": "1","bridge_mac": "0027.e3b1.23bc","bridge_priority": "32769","tree_designated_root": "001c.7369.3b17","tree_designated_root_priority": "32768","stp_active": "enabled","root_path_cost": "2002","root_port_if_index": "Ethernet1/11","root_port_priority": "128","root_port_number": "139","topology_change": "false","topology_change_detected": "false","topology_change_count": "5","topology_change_time_since_last": "2610361","tc_initiator_if_index": "Ethernet1/42","bridge_forward_delay": "15","bridge_max_age": "20","bridge_hello_time": "2","max_age": "20","hello_time": "2","fex_hello_time": "12","forward_delay": "15","hold_time": "1","hello_timer": "0","topology_change_timer": "0","tcn_timer": "0","aging_timer": "0","disabled": "0","blocking": "0","listening": "0","learning": "0","forwarding": "1","invalid": "0","TABLE_port": {
                "ROW_port": {
                    "if_index": "Ethernet1/11","port_info_tree_id": "1","state": "forwarding","role": "root","port_priority": "128","port_number": "139","port_protocol": "rstp","port_tree_type": "vlan","path_cost": "2","port_designated_root": "001c.7369.3b17","port_designated_root_priority": "32768","designated_cost": "2000","designated_bridge": "001c.731e.9996","designated_bridge_priority": "32769","designated_port": "32791","tc_acknowledge": "false","forward_transition_count": "1","self_looped": "false","inconsistency": "0","bpdus_in": "7771654","bpdus_out": "9","port_fast": "default1","link_type": "auto","port_guard": "default1","bpdu_guard": "default1","bpdu_filter": "default1","oper_portfast": "false","oper_p2p": "true","oper_loopguard": "false","oper_bpduguard": "false","oper_bpdufilter": "false","int_bpdufilter": "false","oper_networkport": "false","forward_delay_timer": "0","hold_timer": "0","message_age": "16","peer": "rstp","dispute": "false"
                }
            }
        },{
            "tree_id": "123","bridge_priority": "24699","tree_designated_root": "0027.e3b1.23bc","tree_designated_root_priority": "24699","root_path_cost": "0","root_port_if_index": null,"root_port_priority": "0","root_port_number": "0","topology_change_count": "1","topology_change_time_since_last": "34183","tc_initiator_if_index": "Ethernet1/38","TABLE_port": {
                "ROW_port": {
                    "if_index": "Ethernet1/38","port_info_tree_id": "123","role": "designated","port_number": "166","port_designated_root": "0027.e3b1.23bc","port_designated_root_priority": "24699","designated_cost": "0","designated_bridge": "0027.e3b1.23bc","designated_bridge_priority": "24699","designated_port": "32934","bpdus_in": "0","bpdus_out": "17107","message_age": "0",{
            "tree_id": "800","port_count": "11","bridge_priority": "800","tree_designated_root_priority": "800","topology_change_count": "183","topology_change_time_since_last": "105428","tc_initiator_if_index": "Ethernet1/27","forwarding": "11","TABLE_port": {
                "ROW_port": [
                    {
                        "if_index": "Ethernet1/1","port_info_tree_id": "800","port_number": "129","port_designated_root_priority": "800","designated_bridge_priority": "800","designated_port": "32897","bpdus_out": "7775885","port_fast": "enable","dispute": "false"
                    },{
                        "if_index": "Ethernet1/2","port_number": "130","designated_port": "32898",

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...