我有一个任务,该任务将从开关返回的输出分配给变量,然后下一个任务通过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"
},