{# vxlan_yang.j2 — Produce a JSON object representing the VXLAN/VTEP configuration for the device, including VLAN-to-VNI mappings and VRF-to-VNI mappings. Input: GraphQL response from vxlan_intent query. #} {%- set vtep_edges = data.InfraVTEP.edges -%} {%- set vrf_edges = data.InfraVRFDeviceAssignment.edges -%} {#— Build VTEP section (there is one VTEP per device) —#} {%- if vtep_edges | length > 0 -%} {%- set vtep = vtep_edges[0].node -%} {%- set source_iface = none -%} {%- if vtep.source_interface is defined and vtep.source_interface is not none and vtep.source_interface.node is not none -%} {%- set source_iface = vtep.source_interface.node.name.value -%} {%- endif -%} {#— Build VLAN-to-VNI mapping list —#} {%- set vlan_vni_list = [] -%} {%- for mapping_edge in vtep.vlan_vni_mappings.edges -%} {%- set m = mapping_edge.node -%} {%- set vlan_id = none -%} {%- set vlan_name = none -%} {%- if m.vlan is defined and m.vlan is not none and m.vlan.node is not none -%} {%- set vlan_id = m.vlan.node.vlan_id.value -%} {%- set vlan_name = m.vlan.node.name.value -%} {%- endif -%} {%- set vni_val = none -%} {%- set vni_type_val = none -%} {%- if m.vni is defined and m.vni is not none and m.vni.node is not none -%} {%- set vni_val = m.vni.node.vni.value -%} {%- set vni_type_val = m.vni.node.vni_type.value -%} {%- endif -%} {%- set _ = vlan_vni_list.append({ "vlan_id": vlan_id, "vlan_name": vlan_name, "vni": vni_val, "vni_type": vni_type_val }) -%} {%- endfor -%} {#— Build VRF-to-VNI mapping list —#} {%- set vrf_vni_list = [] -%} {%- for vrf_edge in vrf_edges -%} {%- set assignment = vrf_edge.node -%} {%- set vrf_name = none -%} {%- set l3vni = none -%} {%- set import_rts = [] -%} {%- set export_rts = [] -%} {%- if assignment.vrf is defined and assignment.vrf is not none and assignment.vrf.node is not none -%} {%- set vrf_node = assignment.vrf.node -%} {%- set vrf_name = vrf_node.name.value -%} {%- if vrf_node.l3vni is defined and vrf_node.l3vni is not none and vrf_node.l3vni.node is not none -%} {%- set l3vni = vrf_node.l3vni.node.vni.value -%} {%- endif -%} {%- for rt_edge in vrf_node.import_targets.edges -%} {%- set _ = import_rts.append(rt_edge.node.target.value) -%} {%- endfor -%} {%- for rt_edge in vrf_node.export_targets.edges -%} {%- set _ = export_rts.append(rt_edge.node.target.value) -%} {%- endfor -%} {%- endif -%} {%- set _ = vrf_vni_list.append({ "vrf": vrf_name, "l3vni": l3vni, "route_distinguisher": assignment.route_distinguisher.value | default(none), "import_targets": import_rts, "export_targets": export_rts }) -%} {%- endfor -%} {%- set result = { "vtep": { "source_address": vtep.source_address.value, "source_interface": source_iface, "udp_port": vtep.udp_port.value, "learn_restrict": vtep.learn_restrict.value | default(none), "vlan_vni_mappings": vlan_vni_list | sort(attribute='vlan_id'), "vrf_vni_mappings": vrf_vni_list } } -%} {%- else -%} {%- set result = { "vtep": none, "vrf_vni_mappings": [] } -%} {%- endif -%} {{ result | tojson(indent=2) }}