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

时间:2020-08-12 23:57:02

标签: ansible jinja2

我有一个任务,该任务将从开关返回的输出分配给变量,然后下一个任务通过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",
            "tree_tree_type": "vlan",
            "tree_protocol": "rstp",
            "port_count": "1",
            "bridge_mac": "0027.e3b1.23bc",
            "bridge_priority": "24699",
            "tree_designated_root": "0027.e3b1.23bc",
            "tree_designated_root_priority": "24699",
            "stp_active": "enabled",
            "root_path_cost": "0", 
            "root_port_if_index": null,
            "root_port_priority": "0",
            "root_port_number": "0",
            "topology_change": "false",
            "topology_change_detected": "false",
            "topology_change_count": "1",
            "topology_change_time_since_last": "34183",
            "tc_initiator_if_index": "Ethernet1/38",
            "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/38",
                    "port_info_tree_id": "123",
                    "state": "forwarding",
                    "role": "designated",
                    "port_priority": "128",
                    "port_number": "166",
                    "port_protocol": "rstp",
                    "port_tree_type": "vlan",
                    "path_cost": "2",
                    "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",
                    "tc_acknowledge": "false",
                    "forward_transition_count": "1", 
                    "self_looped": "false",
                    "inconsistency": "0",
                    "bpdus_in": "0",
                    "bpdus_out": "17107",
                    "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": "0",
                    "peer": "rstp",
                    "dispute": "false"
                }
            }
        },
        {
            "tree_id": "800",
            "tree_tree_type": "vlan",
            "tree_protocol": "rstp",
            "port_count": "11",
            "bridge_mac": "0027.e3b1.23bc",
            "bridge_priority": "800",
            "tree_designated_root": "0027.e3b1.23bc",
            "tree_designated_root_priority": "800",
            "stp_active": "enabled",
            "root_path_cost": "0",
            "root_port_if_index": null,
            "root_port_priority": "0",
            "root_port_number": "0",
            "topology_change": "false",
            "topology_change_detected": "false",
            "topology_change_count": "183",
            "topology_change_time_since_last": "105428",
            "tc_initiator_if_index": "Ethernet1/27",
            "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": "11",
            "invalid": "0",
            "TABLE_port": {
                "ROW_port": [
                    {
                        "if_index": "Ethernet1/1",
                        "port_info_tree_id": "800",
                        "state": "forwarding",
                        "role": "designated",
                        "port_priority": "128", 
                        "port_number": "129",
                        "port_protocol": "rstp",
                        "port_tree_type": "vlan",
                        "path_cost": "2",
                        "port_designated_root": "0027.e3b1.23bc",
                        "port_designated_root_priority": "800",
                        "designated_cost": "0",
                        "designated_bridge": "0027.e3b1.23bc",
                        "designated_bridge_priority": "800",
                        "designated_port": "32897",
                        "tc_acknowledge": "false",
                        "forward_transition_count": "1",
                        "self_looped": "false",
                        "inconsistency": "0",
                        "bpdus_in": "0",
                        "bpdus_out": "7775885",
                        "port_fast": "enable",
                        "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": "0",
                        "peer": "rstp",
                        "dispute": "false"
                    },
                    {
                        "if_index": "Ethernet1/2",
                        "port_info_tree_id": "800",
                        "state": "forwarding",
                        "role": "designated",
                        "port_priority": "128",
                        "port_number": "130",
                        "port_protocol": "rstp",
                        "port_tree_type": "vlan",
                        "path_cost": "2",
                        "port_designated_root": "0027.e3b1.23bc",
                        "port_designated_root_priority": "800",
                        "designated_cost": "0",
                        "designated_bridge": "0027.e3b1.23bc",
                        "designated_bridge_priority": "800",
                        "designated_port": "32898",
                        "tc_acknowledge": "false",
                        "forward_transition_count": "1",
                        "self_looped": "false",
                        "inconsistency": "0",
                        "bpdus_in": "0",
                        "bpdus_out": "7775885",
                        "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": "0",
                        "peer": "rstp",
                        "dispute": "false"
                    },

0 个答案:

没有答案