Skip to content

Commit d923021

Browse files
committed
move initial ebgp fabric work to new branch
1 parent 75986a4 commit d923021

22 files changed

Lines changed: 625 additions & 1 deletion

roles/dtc/common/templates/ndfc_fabric.j2

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
{# Include NDFC DC VXLAN EVPN Base Template #}
1010
{% include '/ndfc_fabric/dc_vxlan_fabric/dc_vxlan_fabric_base.j2' %}
1111

12+
{% elif vxlan.fabric.type == 'eBGP_VXLAN'%}
13+
14+
{# Include NDFC eBGP VXLAN EVPN Base Template #}
15+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/ebgp_vxlan_fabric_base.j2' %}
16+
1217
{% elif vxlan.fabric.type == 'MSD'%}
1318

1419
{# Include NDFC MSD Base Template #}

roles/dtc/common/templates/ndfc_fabric/ebgp_vxlan_fabric/.gitkeep

Whitespace-only changes.

roles/dtc/common/templates/ndfc_fabric/ebgp_vxlan_fabric/advanced/.gitkeep

Whitespace-only changes.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{# Auto-generated NDFC eBGP VXLAN EVPN Advanced config data structure for fabric {{ vxlan.fabric.name }} #}
2+
OVERLAY_MODE: cli
3+
GRFIELD_DEBUG_FLAG: Enable
4+
ENABLE_PVLAN: false
5+
AAA_REMOTE_IP_ENABLED: False
6+
FABRIC_MTU: {{ vxlan.underlay.general.intra_fabric_interface_mtu | default(defaults.vxlan.underlay.general.intra_fabric_interface_mtu) }}
7+
L2_HOST_INTF_MTU: {{ vxlan.underlay.general.layer2_host_interface_mtu | default(defaults.vxlan.underlay.general.layer2_host_interface_mtu) }}
8+
{% if vxlan.routed.bootstrap is defined and vxlan.routed.bootstrap.enable_cdp_mgmt is defined %}
9+
CDP_ENABLE: {{ vxlan.routed.bootstrap.enable_cdp_mgmt }}
10+
{% endif %}
11+
ENABLE_NXAPI: {{ vxlan.routed.enable_nxapi_https | default(defaults.vxlan.routed.enable_nxapi_https) }}
12+
{% if vxlan.routed.enable_nxapi_https | default(defaults.vxlan.routed.enable_nxapi_https) | ansible.builtin.bool %}
13+
NXAPI_HTTPS_PORT: {{ vxlan.routed.nxapi_https_port | default(defaults.vxlan.routed.nxapi_https_port) }}
14+
ENABLE_NXAPI_HTTP: {{ vxlan.routed.enable_nxapi_http | default(defaults.vxlan.routed.enable_nxapi_http) }}
15+
{% if vxlan.routed.enable_nxapi_http | default(defaults.vxlan.routed.enable_nxapi_http) | ansible.builtin.bool %}
16+
NXAPI_HTTP_PORT: {{ vxlan.routed.nxapi_http_port | default(defaults.vxlan.routed.nxapi_http_port) }}
17+
{% endif %}
18+
{% endif %}
19+
SNMP_SERVER_HOST_TRAP: {{ vxlan.routed.snmp_server_host_trap | default(defaults.vxlan.routed.snmp_server_host_trap) }}
20+
{% if not (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
21+
FEATURE_PTP: {{ vxlan.routed.ptp.enable | default(defaults.vxlan.routed.ptp.enable) }}
22+
{% if vxlan.routed.ptp.enable is defined and vxlan.routed.ptp.enable | ansible.builtin.bool %}
23+
PTP_DOMAIN_ID: {{ vxlan.routed.ptp.domain_id | default(defaults.vxlan.routed.ptp.domain_id) }}
24+
PTP_LB_ID: {{ vxlan.routed.ptp.lb_id | default(defaults.vxlan.routed.ptp.lb_id) }}
25+
{% if vxlan.routed.ptp.vlan_id is defined %}
26+
PTP_VLAN_ID: {{ vxlan.routed.ptp.vlan_id }}
27+
{% endif %}
28+
{% endif %}
29+
{% endif %}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{# Auto-generated NDFC eBGP VXLAN EVPN Base config data structure for fabric {{ vxlan.fabric.name }} #}
2+
{% from 'macros/convert_ranges.j2' import convert_ranges as convert_ranges %}
3+
- FABRIC_NAME: {{ vxlan.fabric.name }}
4+
FABRIC_TYPE: Easy_Fabric_eBGP
5+
DEPLOY: False
6+
7+
{# Include NDFC eBGP VXLAN EVPN General Template #}
8+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/general/ebgp_vxlan_fabric_general.j2' %}
9+
10+
{# Include NDFC eBGP VXLAN EVPN vPC Template #}
11+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/vpc/ebgp_vxlan_fabric_vpc.j2' %}
12+
13+
{% if ndfc_version | cisco.nac_dc_vxlan.version_compare('12.2.2', '>=') %}
14+
{# Include NDFC eBGP VXLAN EVPN Security Template #}
15+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/security/ebgp_vxlan_fabric_security.j2' %}
16+
{% endif %}
17+
18+
{# Include NDFC eBGP VXLAN EVPN Manageability Template #}
19+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/manageability/ebgp_vxlan_fabric_manageability.j2' %}
20+
21+
{# Include NDFC eBGP VXLAN EVPN Bootstrap Template #}
22+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/bootstrap/ebgp_vxlan_fabric_bootstrap.j2' %}
23+
24+
{# Include NDFC eBGP VXLAN EVPN Flow Monitor Template #}
25+
{% include '/ndfc_fabric/ebgp_vxlan_fabric/flow_monitor/ebgp_vxlan_fabric_flow_monitor.j2' %}

roles/dtc/common/templates/ndfc_fabric/ebgp_vxlan_fabric/evpn/.gitkeep

Whitespace-only changes.
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
{# Auto-generated NDFC eBGP VXLAN EVPN config data structure for fabric {{ vxlan.fabric.name }} #}
2+
ENABLE_EVPN: true
3+
ANYCAST_GW_MAC: {{ vxlan.routed.anycast_gateway_mac | default(defaults.vxlan.routed.anycast_gateway_mac) }}
4+
ADVERTISE_PIP_BGP: {{ (vxlan.global.vpc.advertise_pip | default(defaults.vxlan.global.vpc.advertise_pip) | title) }}
5+
{% if not (vxlan.global.vpc.advertise_pip | default(defaults.vxlan.global.vpc.advertise_pip) | ansible.builtin.bool) %}
6+
ADVERTISE_PIP_ON_BORDER: {{ vxlan.global.vpc.advertise_pip_border_only | default(defaults.vxlan.global.vpc.advertise_pip_border_only) | title }}
7+
{% endif %}
8+
REPLICATION_MODE: {{ vxlan.underlay.general.replication_mode | default(defaults.vxlan.underlay.general.replication_mode) | title }}
9+
{% if not (vxlan.underlay.general.manual_underlay_allocation | default(defaults.vxlan.underlay.general.manual_underlay_allocation) | ansible.builtin.bool) %}
10+
{% if not (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
11+
LOOPBACK1_IP_RANGE: {{ vxlan.underlay.ipv4.underlay_vtep_loopback_ip_range | default(defaults.vxlan.underlay.ipv4.underlay_vtep_loopback_ip_range) }}
12+
{% if (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
13+
LOOPBACK1_IPV6_RANGE: {{ vxlan.underlay.ipv6.underlay_vtep_loopback_ip_range | default(defaults.vxlan.underlay.ipv6.underlay_vtep_loopback_ip_range) }}
14+
{% endif %}
15+
{% if (vxlan.underlay.general.replication_mode | default(defaults.vxlan.underlay.general.replication_mode) | title) == 'Multicast' %}
16+
RP_LB_ID: {{ vxlan.underlay.multicast.underlay_rp_loopback_id | default(defaults.vxlan.underlay.multicast.underlay_rp_loopback_id) }}
17+
RP_COUNT: {{ vxlan.underlay.multicast.rendezvous_points | default(defaults.vxlan.underlay.multicast.rendezvous_points) }}
18+
RP_MODE: {{ vxlan.underlay.multicast.rp_mode | default(defaults.vxlan.underlay.multicast.rp_mode) }}
19+
ENABLE_TRM: {{ vxlan.underlay.multicast.ipv4.trm_enable | default(defaults.vxlan.underlay.multicast.ipv4.trm_enable) | title }}
20+
ENABLE_TRMv6: {{ vxlan.underlay.multicast.ipv6.trmv6_enable | default(defaults.vxlan.underlay.multicast.ipv6.trmv6_enable) | title }}
21+
{% if not (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
22+
ANYCAST_RP_IP_RANGE: {{ vxlan.underlay.ipv4.underlay_rp_loopback_ip_range | default(defaults.vxlan.underlay.ipv4.underlay_rp_loopback_ip_range) }}
23+
MULTICAST_GROUP_SUBNET: {{ vxlan.underlay.multicast.ipv4.group_subnet | default(defaults.vxlan.underlay.multicast.ipv4.group_subnet) }}
24+
{% if (vxlan.underlay.multicast.ipv4.trm_enable | default(defaults.vxlan.underlay.multicast.ipv4.trm_enable) | ansible.builtin.bool) %}
25+
L3VNI_MCAST_GROUP: {{ vxlan.underlay.multicast.ipv4.trm_default_group | default(defaults.vxlan.underlay.multicast.ipv4.trm_default_group) }}
26+
{% endif %}
27+
{% if (vxlan.underlay.multicast.ipv6.trmv6_enable | default(defaults.vxlan.underlay.multicast.ipv6.trmv6_enable) | ansible.builtin.bool) %}
28+
L3VNI_IPv6_MCAST_GROUP: "{{ vxlan.underlay.multicast.ipv6.trmv6_default_group | default(defaults.vxlan.underlay.multicast.ipv6.trmv6_default_group) }}"
29+
{% endif %}
30+
{% if vxlan.underlay.multicast.rp_mode | default(defaults.vxlan.underlay.multicast.rp_mode) == 'bidir' %}
31+
PHANTOM_RP_LB_ID1: {{ vxlan.underlay.multicast.underlay_primary_rp_loopback_id | default(defaults.vxlan.underlay.multicast.underlay_primary_rp_loopback_id) }}
32+
PHANTOM_RP_LB_ID2: {{ vxlan.underlay.multicast.underlay_backup_rp_loopback_id | default(defaults.vxlan.underlay.multicast.underlay_backup_rp_loopback_id) }}
33+
{% if vxlan.underlay.multicast.rendezvous_points | default(defaults.vxlan.underlay.multicast.rendezvous_points) == 4 %}
34+
PHANTOM_RP_LB_ID3: {{ vxlan.underlay.multicast.underlay_second_backup_rp_loopback_id | default(defaults.vxlan.underlay.multicast.underlay_second_backup_rp_loopback_id) }}
35+
PHANTOM_RP_LB_ID4: {{ vxlan.underlay.multicast.underlay_third_backup_rp_loopback_id | default(defaults.vxlan.underlay.multicast.underlay_third_backup_rp_loopback_id) }}
36+
{% endif %}
37+
{% endif %}
38+
{% elif (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
39+
IPv6_ANYCAST_RP_IP_RANGE: {{ vxlan.underlay.ipv6.underlay_rp_loopback_ip_range | default(defaults.vxlan.underlay.ipv6.underlay_rp_loopback_ip_range) }}
40+
IPv6_MULTICAST_GROUP_SUBNET: {{ vxlan.underlay.multicast.ipv6.group_subnet | default(defaults.vxlan.underlay.multicast.ipv6.group_subnet) }}
41+
{% endif %}
42+
{% endif %}
43+
{% if vxlan.routed.layer2_vni_range.from is defined %}
44+
{% set l2_vni_start = vxlan.routed.layer2_vni_range.from %}
45+
{% if vxlan.routed.layer2_vni_range.to is defined %}
46+
{% set l2_vni_end = vxlan.routed.layer2_vni_range.to %}
47+
{% endif %}
48+
{% endif %}
49+
{% if l2_vni_start is defined and l2_vni_end is not defined %}
50+
{% set l2_vni_range = l2_vni_start %}
51+
{% elif l2_vni_start is defined and l2_vni_end is defined %}
52+
{% set l2_vni_range = l2_vni_start ~ '-' ~ l2_vni_end %}
53+
{% else %}
54+
{% set l2_vni_range = defaults.vxlan.routed.layer2_vni_range.from ~ '-' ~ defaults.vxlan.routed.layer2_vni_range.to %}
55+
{% endif %}
56+
L2_SEGMENT_ID_RANGE: {{ l2_vni_range }}
57+
{% if vxlan.routed.layer3_vni_range.from is defined %}
58+
{% set l3_vni_start = vxlan.routed.layer3_vni_range.from %}
59+
{% if vxlan.routed.layer3_vni_range.to is defined %}
60+
{% set l3_vni_end = vxlan.routed.layer3_vni_range.to %}
61+
{% endif %}
62+
{% endif %}
63+
{% if l3_vni_start is defined and l3_vni_end is not defined %}
64+
{% set l3_vni_range = l3_vni_start %}
65+
{% elif l3_vni_start is defined and l3_vni_end is defined %}
66+
{% set l3_vni_range = l3_vni_start ~ '-' ~ l3_vni_end %}
67+
{% else %}
68+
{% set l3_vni_range = defaults.vxlan.routed.layer3_vni_range.from ~ '-' ~ defaults.vxlan.routed.layer3_vni_range.to %}
69+
{% endif %}
70+
L3_PARTITION_ID_RANGE: {{ l3_vni_range }}
71+
{% if vxlan.routed.layer2_vlan_range.from is defined %}
72+
{% set l2_vlan_start = vxlan.routed.layer2_vlan_range.from %}
73+
{% if vxlan.routed.layer2_vlan_range.to is defined %}
74+
{% set l2_vlan_end = vxlan.routed.layer2_vlan_range.to %}
75+
{% endif %}
76+
{% endif %}
77+
{% if l2_vlan_start is defined and l2_vlan_end is not defined %}
78+
{% set l2_vlan_range = l2_vlan_start %}
79+
{% elif l2_vlan_start is defined and l2_vlan_end is defined %}
80+
{% set l2_vlan_range = l2_vlan_start ~ '-' ~ l2_vlan_end %}
81+
{% else %}
82+
{% set l2_vlan_range = defaults.vxlan.routed.layer2_vlan_range.from ~ '-' ~ defaults.vxlan.routed.layer2_vlan_range.to %}
83+
{% endif %}
84+
NETWORK_VLAN_RANGE: {{ l2_vlan_range }}
85+
{% if vxlan.routed.layer3_vlan_range.from is defined %}
86+
{% set l3_vlan_start = vxlan.routed.layer3_vlan_range.from %}
87+
{% if vxlan.routed.layer3_vlan_range.to is defined %}
88+
{% set l3_vlan_end = vxlan.routed.layer3_vlan_range.to %}
89+
{% endif %}
90+
{% endif %}
91+
{% if l3_vlan_start is defined and l3_vlan_end is not defined %}
92+
{% set l3_vlan_range = l3_vlan_start %}
93+
{% elif l3_vlan_start is defined and l3_vlan_end is defined %}
94+
{% set l3_vlan_range = l3_vlan_start ~ '-' ~ l3_vlan_end %}
95+
{% else %}
96+
{% set l3_vlan_range = defaults.vxlan.routed.layer3_vlan_range.from ~ '-' ~ defaults.vxlan.routed.layer3_vlan_range.to %}
97+
{% endif %}
98+
VRF_VLAN_RANGE: {{ l3_vlan_range }}

roles/dtc/common/templates/ndfc_fabric/ebgp_vxlan_fabric/flow_monitor/.gitkeep

Whitespace-only changes.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{# Auto-generated NDFC eBGP VXLAN EVPN Flow Monitor config data structure for fabric {{ vxlan.fabric.name }} #}
2+
{% if not (vxlan.underlay.general.enable_ipv6_underlay | default(defaults.vxlan.underlay.general.enable_ipv6_underlay) | ansible.builtin.bool) %}
3+
ENABLE_NETFLOW: {{ vxlan.routed.netflow.enable | default(defaults.vxlan.routed.netflow.enable) }}
4+
{% if vxlan.routed.netflow.enable is defined and vxlan.routed.netflow.enable | bool or defaults.vxlan.routed.netflow.enable | bool %}
5+
{% if vxlan.routed.netflow.exporter is defined %}
6+
{% set exporter_dict = dict() %}
7+
{% set _ = exporter_dict.update({ "NETFLOW_EXPORTER_LIST":[] }) %}
8+
{% for e in vxlan.routed.netflow.exporter %}
9+
{% set _ = exporter_dict["NETFLOW_EXPORTER_LIST"].append(dict(EXPORTER_NAME=e.name,IP=e.ip_address,VRF=e.vrf | default(""), SRC_IF_NAME=e.source_interface,UDP_PORT=e.udp_port)) %}
10+
{% endfor %}
11+
NETFLOW_EXPORTER_LIST: "{{ exporter_dict | tojson | replace('"', '\\"') }}"
12+
{% endif %}
13+
{% if vxlan.routed.netflow.record is defined %}
14+
{% set record_dict = dict() %}
15+
{% set _ = record_dict.update({ "NETFLOW_RECORD_LIST":[] }) %}
16+
{% for r in vxlan.routed.netflow.record %}
17+
{% set _ = record_dict["NETFLOW_RECORD_LIST"].append(dict(RECORD_NAME=r.name,RECORD_TEMPLATE =r.template,LAYER2_RECORD=r.layer2 | default(false) | string | lower)) %}
18+
{% endfor %}
19+
NETFLOW_RECORD_LIST: "{{ record_dict | tojson | replace('"', '\\"') }}"
20+
{% endif %}
21+
{% if vxlan.routed.netflow.monitor is defined %}
22+
{% set monitor_dict = dict() %}
23+
{% set _ = monitor_dict.update({ "NETFLOW_MONITOR_LIST":[] }) %}
24+
{% for m in vxlan.routed.netflow.monitor %}
25+
{% set _ = monitor_dict["NETFLOW_MONITOR_LIST"].append(dict(MONITOR_NAME=m.name,RECORD_NAME=m.record,EXPORTER1=m.exporter1,EXPORTER2=m.exporter2 | default(""))) %}
26+
{% endfor %}
27+
NETFLOW_MONITOR_LIST: "{{ monitor_dict | tojson | replace('"', '\\"') }}"
28+
{% endif %}
29+
{% endif %}
30+
{% endif %}

roles/dtc/common/templates/ndfc_fabric/ebgp_vxlan_fabric/general/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)