Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 180 additions & 0 deletions ansible/roles/eos/templates/t0-16-leaf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
{% set host = configuration[hostname] %}
{% set mgmt_ip = ansible_host %}
hostname {{ hostname }}
!
vrf definition MGMT
rd 1:1
!
spanning-tree mode mstp
!
aaa root secret 0 123456
!
username admin privilege 15 role network-admin secret 0 123456
!
clock timezone UTC
!
lldp run
lldp management-address Management1
lldp management-address vrf MGMT
!
snmp-server community {{ snmp_rocommunity }} ro
snmp-server vrf MGMT
!
ip routing
ip routing vrf MGMT
ipv6 unicast-routing
!
{% if vm_mgmt_gw is defined %}
ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }}
{% else %}
ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }}
{% endif %}
!
route-map DEFAULT_ROUTES permit
!
{# #}
{# NOTE: Using large enough values (e.g., podset_number = 200, #}
{# max_tor_subnet_number = 16, tor_subnet_size = 64), will cause #}
{# us to overflow the 192.168.0.0/16 private address space here. #}
{# This should be fine for internal use, but may pose an issue if used otherwise #}
{# #}
{% for podset in range(0, props.podset_number) %}
{% for tor in range(0, props.tor_number) %}
{% for subnet in range(0, props.tor_subnet_number) %}
{# Skip tor 0 podset 0 #}
{% if podset != 0 or tor != 0 %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) +
(subnet * props.tor_subnet_size) ) %}
{% set octet2 = (168 + ((suffix // (256 ** 2))) % 256) %}
{% set octet3 = ((suffix // 256) % 256) %}
{% set octet4 = (suffix % 256) %}
{% set prefixlen_v4 = (32 - ((props.tor_subnet_size | log(2))) | int) %}
ip route 192.{{ octet2 }}.{{ octet3 }}.{{ octet4 }}/{{ prefixlen_v4 }} {{ props.nhipv4 }}
ipv6 route 20C0:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/64 {{ props.nhipv6 }}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
!
{% for podset in range(0, props.podset_number) %}
{% for tor in range(0, props.tor_number) %}
{# Skip tor 0 podset 0 #}
{% if podset != 0 or tor != 0 %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) ) %}
{% set octet2 = (168 + ((suffix // (256 ** 2))) % 256) %}
{% set octet3 = ((suffix // 256) % 256) %}
{% set octet4 = (suffix % 256) %}
{% set prefixlen_v4 = (32 - (((props.max_tor_subnet_number * props.tor_subnet_size) | log(2)) | int) ) %}
{% set prefixlen_v6 = (64 - (((props.max_tor_subnet_number * props.tor_subnet_size) | log(2)) | int) ) %}
ip prefix-list test_ipv4_{{ podset}}_{{ tor }} seq 10 permit 192.{{ octet2 }}.{{ octet3 }}.{{ octet4 }}/{{ prefixlen_v4 }} ge {{ prefixlen_v4 }}
ipv6 prefix-list test_ipv6_{{ podset}}_{{ tor }}
seq 10 permit 20C0:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/{{ prefixlen_v6 }} ge {{ prefixlen_v6 }}
exit
{% endif %}
{% endfor %}
{% endfor %}
!
interface Management 1
description TO LAB MGMT SWITCH
vrf forwarding MGMT
ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }}
no shutdown
!
{% for name, iface in host['interfaces'].items() %}
interface {{ name }}
{% if name.startswith('Loopback') %}
description LOOPBACK
{% else %}
no switchport
{% endif %}
{% if name.startswith('Port-Channel') %}
port-channel min-links 1
{% endif %}
{% if iface['lacp'] is defined %}
channel-group {{ iface['lacp'] }} mode active
lacp rate normal
{% endif %}
{% if iface['ipv4'] is defined %}
ip address {{ iface['ipv4'] }}
{% endif %}
{% if iface['ipv6'] is defined %}
ipv6 enable
ipv6 address {{ iface['ipv6'] }}
ipv6 nd ra suppress
{% endif %}
no shutdown
!
{% endfor %}
!
interface {{ bp_ifname }}
description backplane
no switchport
{% if host['bp_interface']['ipv4'] is defined %}
ip address {{ host['bp_interface']['ipv4'] }}
{% endif %}
{% if host['bp_interface']['ipv6'] is defined %}
ipv6 enable
ipv6 address {{ host['bp_interface']['ipv6'] }}
ipv6 nd ra suppress
{% endif %}
no shutdown
!
{% for podset in range(0, props.podset_number) %}
{% if range(0, 1000)|random() >= props.failure_rate %}
{% for tor in range(0, props.tor_number) %}
{% set leafasn = props.leaf_asn_start + podset %}
{% set torasn = props.tor_asn_start + tor %}
route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) }}
match ip address prefix-list test_ipv4_{{ podset }}_{{ tor }}
{% if podset == 0 %}
set as-path prepend {{ torasn }}
{% else %}
set as-path prepend {{ props.spine_asn }} {{ leafasn }} {{ torasn }}
{% endif %}
!
route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) + 1 }}
match ipv6 address prefix-list test_ipv6_{{ podset }}_{{ tor }}
{% if podset == 0 %}
set as-path prepend {{ torasn }}
{% else %}
set as-path prepend {{ props.spine_asn }} {{ leafasn }} {{ torasn }}
{% endif %}
!
{% endfor %}
{% endif %}
{% endfor %}
!
router bgp {{ host['bgp']['asn'] }}
router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }}
!
{% for asn, remote_ips in host['bgp']['peers'].items() %}
{% for remote_ip in remote_ips %}
neighbor {{ remote_ip }} remote-as {{ asn }}
neighbor {{ remote_ip }} description {{ asn }}
neighbor {{ remote_ip }} default-originate route-map DEFAULT_ROUTES
{% if remote_ip | ipv6 %}
address-family ipv6
neighbor {{ remote_ip }} activate
exit
{% endif %}
{% endfor %}
{% endfor %}
!
{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %}
{% if iface['ipv4'] is defined %}
network {{ iface['ipv4'] }}
{% endif %}
{% if iface['ipv6'] is defined %}
network {{ iface['ipv6'] }}
{% endif %}
{% endfor %}
redistribute static route-map PREPENDAS
!
management api http-commands
no protocol https
protocol http
no shutdown
!
end
22 changes: 11 additions & 11 deletions ansible/roles/test/vars/testcases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ testcases:

bgp_fact:
filename: bgp_fact.yml
topologies: [t0, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]


bgp_multipath_relax:
Expand All @@ -26,7 +26,7 @@ testcases:

bgp_speaker:
filename: bgp_speaker.yml
topologies: [t0, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:
testbed_type:
Expand All @@ -51,7 +51,7 @@ testcases:

dhcp_relay:
filename: dhcp_relay.yml
topologies: [t0, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:

Expand All @@ -75,21 +75,21 @@ testcases:

fib:
filename: fib.yml
topologies: [t0, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
required_vars:
ptf_host:
testbed_type:

fdb:
filename: fdb.yml
topologies: [t0, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:
testbed_type:

dir_bcast:
filename: dir_bcast.yml
topologies: [t0, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:
testbed_type:
Expand All @@ -103,15 +103,15 @@ testcases:

lldp:
filename: lldp.yml
topologies: [t0, t0-64, t0-116, t0-64-32, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-64, t0-116, t0-64-32, t1, t1-lag, t1-64-lag]

link_flap:
filename: link_flap.yml
topologies: [t0, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]

mem_check:
filename: mem_check.yml
topologies: [t0, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]

mtu:
filename: mtu.yml
Expand Down Expand Up @@ -160,7 +160,7 @@ testcases:

restart_swss_service:
filename: restart_swss.yml
topologies: [t0, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]
topologies: [t0, t0-16, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]

restart_syncd:
filename: restart_syncd.yml
Expand All @@ -184,7 +184,7 @@ testcases:

vlan:
filename: vlantb.yml
topologies: [t0, t0-116]
topologies: [t0, t0-16, t0-116]
required_vars:
ptf_host:
testbed_type:
Expand Down
Loading