From 4729dbf1ea430b250454297b2c45b2b2337d643a Mon Sep 17 00:00:00 2001 From: Jonathan Dale Date: Fri, 28 Mar 2025 16:10:18 -0400 Subject: [PATCH] infra-crt template --- templates/infra-crt-NSO.config | 238 ++++++++++++++++++++++++--------- 1 file changed, 176 insertions(+), 62 deletions(-) diff --git a/templates/infra-crt-NSO.config b/templates/infra-crt-NSO.config index 9d35121..968fbd6 100644 --- a/templates/infra-crt-NSO.config +++ b/templates/infra-crt-NSO.config @@ -1,69 +1,183 @@ -{# +{#- Declare Lo0.0 and all common protocols for a Core router Lo0.0 must be declared and created before protocols can be applied Protocols for the Lo0.0 are automatically handled by the common packages - #} +#} +{%- for loopback, unit in interfaces["loopback-interface"]["lo0"]["units"].items() %} +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} skip-loopback-check true +{%- if unit["description"] is not none %} +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} description {{unit["description"]}} +{%- else %} +ERROR: Missing Description for Lo0 unit {{unit["name"]}}!!! +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} description "FIX_ME" +{%- endif %} +{%- if unit["inet4"] is not none %} +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} ipv4 {{unit["inet4"]}} +{%- endif %} +{%- if unit["inet6"] is not none %} +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} ipv6 {{unit["inet6"]}} +{%- endif %} +{%- if unit["inet4"] == none and unit["inet6"] == none %} +ERROR: ERROR: IP Addressing Missing for Lo0 unit {{unit["name"]}}!!! +set services infra-crt {{device}} interface loopback-interface lo0 {{unit["name"]}} [ipv4|ipv6] FIX_ME +{%- endif %} +{%- endfor %} -{% for loopback_unit in device_info["interface"]["loopback-interface"]["lo0"]["units"] %} - set services infra-crt {{device_info["device"]}} interface loopback-interface lo0 {{loopback_unit["name"]}} skip-loopback-check true - {% if loopback_unit["description"] not None %} - set services infra-crt {{device_info["device"]}} interface loopback-interface lo0 {{loopback_unit["name"]}} description {{loopback_unit["description"]}} - {% if loopback_unit["inet4"] not None %} - set services infra-crt {{device_info["device"]}} interface loopback-interface lo0 {{loopback_unit["name"]}} ipv4 {{loopback_unit["inet4"]}} - {% if loopback_unit["inet6"] not None %} - set services infra-crt {{device_info["device"]}} interface loopback-interface lo0 {{loopback_unit["name"]}} ipv6 {{loopback_unit["inet6"]}} - -set services infra-crt {{device_info["device"]}} isis -set services infra-crt {{device_info["device"]}} ldp -set services infra-crt {{device_info["device"]}} rsvp -set services infra-crt {{device_info["device"]}} mpls-te -set services infra-crt {{device_info["device"]}} service-policy +set services infra-crt {{device}} isis +set services infra-crt {{device}} ldp +set services infra-crt {{device}} rsvp +set services infra-crt {{device}} mpls-te +set services infra-crt {{device}} service-policy {# Aggregate-interface declaration - protocol declaration for AEs is same as standard core-interfaces #} -{% for aggregate_interface in device_info["interface"]["aggregate-interface"] %} - {% set ae_num = aggregate_interface["name"] | replace('ae', '') %} - {% for aggregate_unit in aggregate_interface["units"] %} - {% if aggregate_unit["mtu"] not None %} - set services infra-crt {{device_info["device"]}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} mtu {{aggregate_unit["mtu"]}} - {% if aggregate_unit["inet4"] not None %} - set services infra-crt {{device_info["device"]}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} ipv4 {{aggregate_unit["inet4"]}} - {% if aggregate_unit["description"] not None %} - set services infra-crt {{device_info["device"]}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} description {{aggregate_unit["description"]}} - {% for core_interface in aggregate_interface["units"] %} - {% if core_interface["description"] not None %} - set services infra-crt {{device_info["device"]}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} core-interface {{core_interface["name"]}} description {{aggregate_unit["description"]}} - {% else %} - set services infra-crt {{device_info["device"]}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} core-interface {{core_interface["name"]}} +{%- for key,aggregate_interface in interfaces["aggregate-interface"].items() %} +{%- set ae_num = key | replace('ae', '') %} +{%- for key,aggregate_unit in aggregate_interface["units"].items() %} +{%- set protocol_int_name = aggregate_interface["name"] ~ '.' ~ aggregate_unit["name"] %} +{%- if aggregate_interface["mtu"] is not none %} +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} mtu {{aggregate_interface["mtu"]}} +{%- endif %} +{%- if aggregate_unit["inet4"] is not none %} +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} ipv4 {{aggregate_unit["inet4"]}} +{%- else %} +ERROR: IP Addressing Missing for {{aggregate_interface["name"]}} unit {{aggregate_unit["name"]}}!!! +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} ipv4 FIX_ME +{%- endif %} +{%- if aggregate_interface["description"] is not none %} +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} description {{aggregate_interface["description"]}} +{%- else %} +ERROR: Missing Description for {{aggregate_interface["name"]}} unit {{aggregate_unit["name"]}}!!! +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} {{aggregate_unit["name"]}} description FIX_ME +{%- endif %} +{#- Find Protocols for AE #} +{#- ISIS#} +{%- if protocol_int_name in isis["interface"] %} +{%- if isis["interface"][protocol_int_name]["passive"] == True %} +set services infra-crt {{device}} isis passive-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} +{%- else %} +set services infra-crt {{device}} isis core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} metric {{isis["interface"][protocol_int_name]["metric"]}} +{%- if isis["interface"][protocol_int_name]["enable-bfd"] == True %} +set services infra-crt {{device}} isis core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} enable-bfd true +set services infra-crt {{device}} isis core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} bfd-min-interval {{isis["interface"][protocol_int_name]["bfd-interval"]}} +set services infra-crt {{device}} isis core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} bfd-multiplier {{isis["interface"][protocol_int_name]["bfd-multiplier"]}} +{%- else %} +set services infra-crt {{device}} isis core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} enable-bfd false +{%- endif %} +{%- endif %} +{%- endif %} +{#- LDP #} +{%- if protocol_int_name in ldp["interface"] %} +set services infra-crt {{device}} ldp core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} +{%- endif %} +{#- MPLS-TE #} +{%- if protocol_int_name in mpls_te["interface"] %} +{%- if mpls_te["interface"][protocol_int_name]["mpls-te-att-names"] is not none %} +set services infra-crt {{device}} mpls-te core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} mpls-te-att-names {{mpls_te["interface"][protocol_int_name]["mpls-te-att-names"]}} +{%- else %} +set services infra-crt {{device}} mpls-te core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} +{%- endif %} +{%- endif %} +{#- MPLS-TE-FRR #} +{%- if protocol_int_name in mpls_te_frr["interface"] %} +set services infra-crt {{device}} mpls-te-frr junos-core-interface {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} backup-bandwidth {{mpls_te_frr["interface"][protocol_int_name]["backup-bandwidth"]}} +{%- endif %} +{#- RSVP #} +{%- if protocol_int_name in rsvp["interface"] %} +set services infra-crt {{device}} rsvp core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} core-intf-bandwidth {{rsvp["interface"][protocol_int_name]["core-intf-bandwidth"]}} +set services infra-crt {{device}} rsvp core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} core-intf-subscription {{rsvp["interface"][protocol_int_name]["core-intf-subscription"]}} +{%- endif %} +{#- Service-Policy #} +{%- if aggregate_unit["name"] in service_policy["interface"][aggregate_interface["name"]]["units"] %} +set services infra-crt {{device}} service-policy core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} +{%- if service_policy["interface"][aggregate_interface["name"]]["service-map"] is not none %} +set services infra-crt {{device}} service-policy core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} service-map {{service_policy["interface"][aggregate_interface["name"]]["service-map"]}} +{%- endif %} +{%- if service_policy["interface"][aggregate_interface["name"]]["shaper-rate"] is not none %} +set services infra-crt {{device}} service-policy core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} shaper-rate {{service_policy["interface"][aggregate_interface["name"]]["shaper-rate"]}} +{%- endif %} +{%- else %} +ERROR: Missing Service-Policy for {{aggregate_interface["name"]}} unit {{aggregate_unit["name"]}}!!! +set services infra-crt {{device}} service-policy core-interface name {{aggregate_interface["name"]}} {{aggregate_unit["name"]}} +{%- endif %} +{%- endfor %} +{%- for key,member_interface in aggregate_interface["member-interface"].items() %} +{%- if member_interface["description"] is not none %} +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} 0 core-interface {{member_interface["name"]}} description {{member_interface["description"]}} +{%- else %} +ERROR: Missing Description for {{aggregate_interface["name"]}} Member-interface {{member_interface["name"]}}!!! +set services infra-crt {{device}} interface aggregate-interface {{ae_num}} 0 core-interface {{member_interface["name"]}} description FIX_ME +{%- endif %} +{%- endfor %} +{%- endfor %} -{# Standard core-interface declaration #} -set services infra-crt {{device_info["device"]}} interface core-interface name {{iface_name}} {{unit_num}} ipv4 {{inet4-cidr}} -set services infra-crt {{device_info["device"]}} interface core-interface name {{iface_name}} {{unit_num}} mtu {{mtu}} -set services infra-crt {{device_info["device"]}} interface core-interface name {{iface_name}} {{unit_num}} description {{description}} - - -{# Below protocol delcarations should only be made if the interface was declared #} - -{# Declare protocol LDP per participating interface #} -set services infra-crt {{device_info["device"]}} ldp core-interface name {{iface_name}} {{unit_num}} - -{# Declare protocol ISIS per participating interface - BFD settings only needed if enable-bfd == true #} -set services infra-crt {{device_info["device"]}} isis core-interface name {{iface_name}} {{unit_num}} metric {{metric}} -set services infra-crt {{device_info["device"]}} isis core-interface name {{iface_name}} {{unit_num}} enable-bfd {{enable-bfd}} -set services infra-crt {{device_info["device"]}} isis core-interface name {{iface_name}} {{unit_num}} bfd-min-interval {{bfd-interval}} -set services infra-crt {{device_info["device"]}} isis core-interface name {{iface_name}} {{unit_num}} bfd-multiplier {{bfd-multiplier}} - -{# Declare protocol RSVP per participating interface #} -set services infra-crt {{device_info["device"]}} rsvp core-interface name {{iface_name}} {{unit_num}} core-intf-bandwidth {{core-intf-bandwidth}} -set services infra-crt {{device_info["device"]}} rsvp core-interface name {{iface_name}} {{unit_num}} core-intf-subscription {{core-intf-subscription}} - -{# Declare Service-Policy per interface -- truncate service-map and shaper-rate if values are null ?? #} -set services infra-crt {{device_info["device"]}} service-policy core-interface name {{iface_name}} {{unit_num}} -set services infra-crt {{device_info["device"]}} service-policy core-interface name {{iface_name}} {{unit_num}} service-map {{service-map}} -set services infra-crt {{device_info["device"]}} service-policy core-interface name {{iface_name}} {{unit_num}} shaper-rate {{shaper-rate}} - -{# Declare MPLS-TE per participating Interface - Truncate line if mpls-te-att-names is null #} -set services infra-crt {{device_info["device"]}} mpls-te core-interface name {{iface_name}} {{unit_num}} -set services infra-crt {{device_info["device"]}} mpls-te core-interface name {{iface_name}} {{unit_num}} mpls-te-att-names [ {{mpls-te-att-names}} ] - -{# Declare MPLS-TE-FRR per participating interface #} -set services infra-crt {{device_info["device"]}} mpls-te-frr junos-core-interface {{iface_name}} {{unit_num}} backup-bandwidth {{backup-bandwidth}} +{#- Standard core-interface declaration #} +{%- for key,core_interface in interfaces["core-interface"].items() %} +{% for key,core_unit in core_interface["units"].items() %} +{%- set protocol_int_name = core_interface["name"] ~ '.' ~ core_unit["name"] %} +{%- if core_interface["description"] is not none %} +set services infra-crt {{device}} interface core-interface name {{core_interface["name"]}} {{core_unit["name"]}} description {{core_interface["description"]}} +{%- endif %} +{%- if core_interface["description"] is none %} +set services infra-crt {{device}} interface core-interface name {{core_interface["name"]}} {{core_unit["name"]}} description FIX_ME +{%- endif %} +{%- if core_interface["mtu"] is not none%} +set services infra-crt {{device}} interface core-interface name {{core_interface["name"]}} {{core_unit["name"]}} mtu {{core_interface["mtu"]}} +{%- endif %} +{%- if core_unit["inet4"] is not none%} +set services infra-crt {{device}} interface core-interface name {{core_interface["name"]}} {{core_unit["name"]}} ipv4 {{core_unit["inet4"]}} +{%- endif %} +{%- if core_unit["inet4"] is none%} +set services infra-crt {{device}} interface core-interface name {{core_interface["name"]}} {{core_unit["name"]}} ipv4 FIX_ME +{%- endif %} +{#- Find Protocols for AE #} +{#- ISIS#} +{%- if protocol_int_name in isis["interface"] %} +{%- if isis["interface"][protocol_int_name]["passive"] == True %} +set services infra-crt {{device}} isis passive-interface name {{core_interface["name"]}} {{core_unit["name"]}} +{%- else %} +set services infra-crt {{device}} isis core-interface name {{core_interface["name"]}} {{core_unit["name"]}} metric {{isis["interface"][protocol_int_name]["metric"]}} +{%- if isis["interface"][protocol_int_name]["enable-bfd"] == True %} +set services infra-crt {{device}} isis core-interface name {{core_interface["name"]}} {{core_unit["name"]}} enable-bfd true +set services infra-crt {{device}} isis core-interface name {{core_interface["name"]}} {{core_unit["name"]}} bfd-min-interval {{isis["interface"][protocol_int_name]["bfd-interval"]}} +set services infra-crt {{device}} isis core-interface name {{core_interface["name"]}} {{core_unit["name"]}} bfd-multiplier {{isis["interface"][protocol_int_name]["bfd-multiplier"]}} +{%- else %} +set services infra-crt {{device}} isis core-interface name {{core_interface["name"]}} {{core_unit["name"]}} enable-bfd false +{%- endif %} +{%- endif %} +{%- endif %} +{#- LDP #} +{%- if protocol_int_name in ldp["interface"] %} +set services infra-crt {{device}} ldp core-interface name {{core_interface["name"]}} {{core_unit["name"]}} +{%- endif %} +{#- MPLS-TE #} +{%- if protocol_int_name in mpls_te["interface"] %} +{%- if mpls_te["interface"][protocol_int_name]["mpls-te-att-names"] is not none %} +set services infra-crt {{device}} mpls-te core-interface name {{core_interface["name"]}} {{core_unit["name"]}} mpls-te-att-names {{mpls_te["interface"][protocol_int_name]["mpls-te-att-names"]}} +{%- else %} +set services infra-crt {{device}} mpls-te core-interface name {{core_interface["name"]}} {{core_unit["name"]}} +{%- endif %} +{%- endif %} +{#- MPLS-TE-FRR #} +{%- if protocol_int_name in mpls_te_frr["interface"] %} +set services infra-crt {{device}} mpls-te-frr junos-core-interface {{core_interface["name"]}} {{core_unit["name"]}} backup-bandwidth {{mpls_te_frr["interface"][protocol_int_name]["backup-bandwidth"]}} +{%- endif %} +{#- RSVP #} +{%- if protocol_int_name in rsvp["interface"] %} +set services infra-crt {{device}} rsvp core-interface name {{core_interface["name"]}} {{core_unit["name"]}} core-intf-bandwidth {{rsvp["interface"][protocol_int_name]["core-intf-bandwidth"]}} +set services infra-crt {{device}} rsvp core-interface name {{core_interface["name"]}} {{core_unit["name"]}} core-intf-subscription {{rsvp["interface"][protocol_int_name]["core-intf-subscription"]}} +{%- endif %} +{#- Service-Policy #} +{%- if core_unit["name"] in service_policy["interface"][core_interface["name"]]["units"] %} +set services infra-crt {{device}} service-policy core-interface name {{core_interface["name"]}} {{core_unit["name"]}} +{%- if service_policy["interface"][core_interface["name"]]["service-map"] is not none %} +set services infra-crt {{device}} service-policy core-interface name {{core_interface["name"]}} {{core_unit["name"]}} service-map {{service_policy["interface"][core_interface["name"]]["service-map"]}} +{%- endif %} +{%- if service_policy["interface"][core_interface["name"]]["shaper-rate"] is not none %} +set services infra-crt {{device}} service-policy core-interface name {{core_interface["name"]}} {{core_unit["name"]}} shaper-rate {{service_policy["interface"][core_interface["name"]]["shaper-rate"]}} +{%- endif %} +{%- else %} +ERROR: Missing Service-Policy for {{core_interface["name"]}} unit {{core_unit["name"]}}!!! +set services infra-crt {{device}} service-policy core-interface name {{core_interface["name"]}} {{core_unit["name"]}} +{%- endif %} +{%- endfor %} +{%- endfor %}