diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0A.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0A.cfg new file mode 100644 index 00000000000..db8c0dad4b6 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0A.cfg @@ -0,0 +1,62 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF0A +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF0B_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF0B_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF0B_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.0/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF0 + local-interface Vlan4094 + peer-address 10.10.255.1 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0B.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0B.cfg new file mode 100644 index 00000000000..4201c2c2360 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF0B.cfg @@ -0,0 +1,106 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF0B +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF0A_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Port-Channel27 + description SL-LEAF1_Po27 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk +! +interface Port-Channel41 + description SL-LEAF2_Po41 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF0A_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF0A_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Ethernet27 + description SL-LEAF1A_Ethernet27 + no shutdown + channel-group 27 mode active +! +interface Ethernet28 + description SL-LEAF1B_Ethernet27 + no shutdown + channel-group 27 mode active +! +interface Ethernet41 + description SL-LEAF2A_Ethernet41 + no shutdown + channel-group 41 mode active +! +interface Ethernet42 + description SL-LEAF2A_Ethernet42 + no shutdown + channel-group 41 mode active +! +interface Ethernet43 + description SL-LEAF2B_Ethernet41 + no shutdown + channel-group 41 mode active +! +interface Ethernet44 + description SL-LEAF2B_Ethernet42 + no shutdown + channel-group 41 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.1/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF0 + local-interface Vlan4094 + peer-address 10.10.255.0 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1A.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1A.cfg new file mode 100644 index 00000000000..add306fd871 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1A.cfg @@ -0,0 +1,87 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF1A +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF1B_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Port-Channel27 + description SL-LEAF0_Po27 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk + mlag 27 +! +interface Port-Channel28 + description SL-MLEAF1_Po16 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF1B_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF1B_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Ethernet27 + description SL-LEAF0B_Ethernet27 + no shutdown + channel-group 27 mode active +! +interface Ethernet28 + description SL-MLEAF1_Ethernet16 + no shutdown + channel-group 28 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.4/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF1 + local-interface Vlan4094 + peer-address 10.10.255.5 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1B.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1B.cfg new file mode 100644 index 00000000000..8013e2aa089 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF1B.cfg @@ -0,0 +1,75 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF1B +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF1A_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Port-Channel27 + description SL-LEAF0_Po27 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk + mlag 27 +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF1A_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF1A_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Ethernet27 + description SL-LEAF0B_Ethernet28 + no shutdown + channel-group 27 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.5/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF1 + local-interface Vlan4094 + peer-address 10.10.255.4 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2A.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2A.cfg new file mode 100644 index 00000000000..958ad1a120f --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2A.cfg @@ -0,0 +1,80 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF2A +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF2B_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Port-Channel41 + description SL-LEAF0_Po41 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk + mlag 41 +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF2B_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF2B_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Ethernet41 + description SL-LEAF0B_Ethernet41 + no shutdown + channel-group 41 mode active +! +interface Ethernet42 + description SL-LEAF0B_Ethernet42 + no shutdown + channel-group 41 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.10/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF2 + local-interface Vlan4094 + peer-address 10.10.255.11 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2B.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2B.cfg new file mode 100644 index 00000000000..2124a7d0458 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-LEAF2B.cfg @@ -0,0 +1,80 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-LEAF2B +! +no spanning-tree vlan-id 4094 +! +no enable password +no aaa root +! +vlan 4094 + name MLAG_PEER + trunk group MLAG +! +vrf instance MGMT +! +interface Port-Channel25 + description MLAG_PEER_SL-LEAF2A_Po25 + no shutdown + switchport + switchport mode trunk + switchport trunk group MLAG +! +interface Port-Channel41 + description SL-LEAF0_Po41 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk + mlag 41 +! +interface Ethernet25 + description MLAG_PEER_SL-LEAF2A_Ethernet25 + no shutdown + channel-group 25 mode active +! +interface Ethernet26 + description MLAG_PEER_SL-LEAF2A_Ethernet26 + no shutdown + channel-group 25 mode active +! +interface Ethernet41 + description SL-LEAF0B_Ethernet43 + no shutdown + channel-group 41 mode active +! +interface Ethernet42 + description SL-LEAF0B_Ethernet44 + no shutdown + channel-group 41 mode active +! +interface Vlan4094 + description MLAG_PEER + no shutdown + mtu 9214 + no autostate + ip address 10.10.255.11/31 +no ip routing vrf MGMT +! +mlag configuration + domain-id SL-LEAF2 + local-interface Vlan4094 + peer-address 10.10.255.10 + peer-link Port-Channel25 + reload-delay mlag 300 + reload-delay non-mlag 330 +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-MLEAF1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-MLEAF1.cfg new file mode 100644 index 00000000000..a30f6bb8282 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/SL-MLEAF1.cfg @@ -0,0 +1,36 @@ +!RANCID-CONTENT-TYPE: arista +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname SL-MLEAF1 +! +no enable password +no aaa root +! +vrf instance MGMT +! +interface Port-Channel16 + description SL-LEAF1_Po28 + no shutdown + switchport + switchport trunk allowed vlan none + switchport mode trunk +! +interface Ethernet16 + description SL-LEAF1A_Ethernet28 + no shutdown + channel-group 16 mode active +no ip routing vrf MGMT +! +management api http-commands + protocol https + no shutdown + ! + vrf MGMT + no shutdown +! +end diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0A.yml new file mode 100644 index 00000000000..99faed99418 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0A.yml @@ -0,0 +1,70 @@ +hostname: SL-LEAF0A +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.0/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF0B_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF0B + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF0B_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF0B + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF0B_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +mlag_configuration: + domain_id: SL-LEAF0 + local_interface: Vlan4094 + peer_address: 10.10.255.1 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0B.yml new file mode 100644 index 00000000000..6fe45e3f7cf --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF0B.yml @@ -0,0 +1,142 @@ +hostname: SL-LEAF0B +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.1/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF0A_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +- name: Port-Channel27 + description: SL-LEAF1_Po27 + type: switched + shutdown: false + mode: trunk + vlans: none +- name: Port-Channel41 + description: SL-LEAF2_Po41 + type: switched + shutdown: false + mode: trunk + vlans: none +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF0A + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF0A_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF0A + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF0A_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet27 + peer: SL-LEAF1A + peer_interface: Ethernet27 + peer_type: leaf + description: SL-LEAF1A_Ethernet27 + shutdown: false + type: port-channel-member + channel_group: + id: 27 + mode: active +- name: Ethernet28 + peer: SL-LEAF1B + peer_interface: Ethernet27 + peer_type: leaf + description: SL-LEAF1B_Ethernet27 + shutdown: false + type: port-channel-member + channel_group: + id: 27 + mode: active +- name: Ethernet41 + peer: SL-LEAF2A + peer_interface: Ethernet41 + peer_type: leaf + description: SL-LEAF2A_Ethernet41 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +- name: Ethernet42 + peer: SL-LEAF2A + peer_interface: Ethernet42 + peer_type: leaf + description: SL-LEAF2A_Ethernet42 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +- name: Ethernet43 + peer: SL-LEAF2B + peer_interface: Ethernet41 + peer_type: leaf + description: SL-LEAF2B_Ethernet41 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +- name: Ethernet44 + peer: SL-LEAF2B + peer_interface: Ethernet42 + peer_type: leaf + description: SL-LEAF2B_Ethernet42 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +mlag_configuration: + domain_id: SL-LEAF0 + local_interface: Vlan4094 + peer_address: 10.10.255.0 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1A.yml new file mode 100644 index 00000000000..e1144ea9969 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1A.yml @@ -0,0 +1,103 @@ +hostname: SL-LEAF1A +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.4/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF1B_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +- name: Port-Channel27 + description: SL-LEAF0_Po27 + type: switched + shutdown: false + mode: trunk + vlans: none + mlag: 27 +- name: Port-Channel28 + description: SL-MLEAF1_Po16 + type: switched + shutdown: false + mode: trunk + vlans: none +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF1B + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF1B_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF1B + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF1B_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet27 + peer: SL-LEAF0B + peer_interface: Ethernet27 + peer_type: leaf + description: SL-LEAF0B_Ethernet27 + shutdown: false + type: port-channel-member + channel_group: + id: 27 + mode: active +- name: Ethernet28 + peer: SL-MLEAF1 + peer_interface: Ethernet16 + peer_type: leaf + description: SL-MLEAF1_Ethernet16 + shutdown: false + type: port-channel-member + channel_group: + id: 28 + mode: active +mlag_configuration: + domain_id: SL-LEAF1 + local_interface: Vlan4094 + peer_address: 10.10.255.5 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1B.yml new file mode 100644 index 00000000000..2a66ed4dec1 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF1B.yml @@ -0,0 +1,87 @@ +hostname: SL-LEAF1B +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.5/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF1A_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +- name: Port-Channel27 + description: SL-LEAF0_Po27 + type: switched + shutdown: false + mode: trunk + vlans: none + mlag: 27 +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF1A + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF1A_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF1A + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF1A_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet27 + peer: SL-LEAF0B + peer_interface: Ethernet28 + peer_type: leaf + description: SL-LEAF0B_Ethernet28 + shutdown: false + type: port-channel-member + channel_group: + id: 27 + mode: active +mlag_configuration: + domain_id: SL-LEAF1 + local_interface: Vlan4094 + peer_address: 10.10.255.4 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2A.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2A.yml new file mode 100644 index 00000000000..d59e59c4883 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2A.yml @@ -0,0 +1,97 @@ +hostname: SL-LEAF2A +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.10/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF2B_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +- name: Port-Channel41 + description: SL-LEAF0_Po41 + type: switched + shutdown: false + mode: trunk + vlans: none + mlag: 41 +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF2B + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF2B_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF2B + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF2B_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet41 + peer: SL-LEAF0B + peer_interface: Ethernet41 + peer_type: leaf + description: SL-LEAF0B_Ethernet41 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +- name: Ethernet42 + peer: SL-LEAF0B + peer_interface: Ethernet42 + peer_type: leaf + description: SL-LEAF0B_Ethernet42 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +mlag_configuration: + domain_id: SL-LEAF2 + local_interface: Vlan4094 + peer_address: 10.10.255.11 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2B.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2B.yml new file mode 100644 index 00000000000..760332b50b6 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-LEAF2B.yml @@ -0,0 +1,97 @@ +hostname: SL-LEAF2B +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +spanning_tree: + no_spanning_tree_vlan: '4094' +vlans: +- id: 4094 + tenant: system + name: MLAG_PEER + trunk_groups: + - MLAG +vlan_interfaces: +- name: Vlan4094 + description: MLAG_PEER + shutdown: false + ip_address: 10.10.255.11/31 + no_autostate: true + mtu: 9214 +port_channel_interfaces: +- name: Port-Channel25 + description: MLAG_PEER_SL-LEAF2A_Po25 + type: switched + shutdown: false + mode: trunk + trunk_groups: + - MLAG +- name: Port-Channel41 + description: SL-LEAF0_Po41 + type: switched + shutdown: false + mode: trunk + vlans: none + mlag: 41 +ethernet_interfaces: +- name: Ethernet25 + peer: SL-LEAF2A + peer_interface: Ethernet25 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF2A_Ethernet25 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet26 + peer: SL-LEAF2A + peer_interface: Ethernet26 + peer_type: mlag_peer + description: MLAG_PEER_SL-LEAF2A_Ethernet26 + type: port-channel-member + shutdown: false + channel_group: + id: 25 + mode: active +- name: Ethernet41 + peer: SL-LEAF0B + peer_interface: Ethernet43 + peer_type: leaf + description: SL-LEAF0B_Ethernet43 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +- name: Ethernet42 + peer: SL-LEAF0B + peer_interface: Ethernet44 + peer_type: leaf + description: SL-LEAF0B_Ethernet44 + shutdown: false + type: port-channel-member + channel_group: + id: 41 + mode: active +mlag_configuration: + domain_id: SL-LEAF2 + local_interface: Vlan4094 + peer_address: 10.10.255.10 + peer_link: Port-Channel25 + reload_delay_mlag: '300' + reload_delay_non_mlag: '330' +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-MLEAF1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-MLEAF1.yml new file mode 100644 index 00000000000..6570ad7050c --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/SL-MLEAF1.yml @@ -0,0 +1,37 @@ +hostname: SL-MLEAF1 +is_deployed: true +service_routing_protocols_model: multi-agent +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +management_api_http: + enable_vrfs: + - name: MGMT + enable_https: true +ethernet_interfaces: +- name: Ethernet16 + peer: SL-LEAF1A + peer_interface: Ethernet28 + peer_type: leaf + description: SL-LEAF1A_Ethernet28 + shutdown: false + type: port-channel-member + channel_group: + id: 16 + mode: active +port_channel_interfaces: +- name: Port-Channel16 + description: SL-LEAF1_Po28 + type: switched + shutdown: false + mode: trunk + vlans: none +ip_igmp_snooping: + globally_enabled: true +metadata: + platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/SINGLE_LINK_TO_MLAG_PAIR.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/SINGLE_LINK_TO_MLAG_PAIR.yml new file mode 100644 index 00000000000..2149866893d --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/SINGLE_LINK_TO_MLAG_PAIR.yml @@ -0,0 +1,49 @@ +--- +fabric_name: SINGLE_LINK_TO_MLAG_PAIR + +design: + type: l2ls + +type: leaf + +mlag_on_orphan_port_channel_downlink: false + +leaf: + defaults: + mlag_peer_ipv4_pool: 10.10.255.0/24 + platform: vEOS-LAB + mlag_interfaces: [Ethernet25, Ethernet26] + node_groups: + - group: SL-LEAF0 + nodes: + - name: SL-LEAF0A + id: 1 + - name: SL-LEAF0B + id: 2 + - group: SL-LEAF1 + uplink_interfaces: ['Ethernet27'] + uplink_switches: ['SL-LEAF0B'] + nodes: + - name: SL-LEAF1A + id: 3 + uplink_switch_interfaces: ['Ethernet27'] + - name: SL-LEAF1B + id: 4 + uplink_switch_interfaces: ['Ethernet28'] + - group: SL-MLEAF1 + nodes: + - name: SL-MLEAF1 + id: 5 + uplink_interfaces: ['Ethernet16'] + uplink_switches: ['SL-LEAF1A'] + uplink_switch_interfaces: ['Ethernet28'] + - group: SL-LEAF2 + uplink_interfaces: [Ethernet41, Ethernet42] + uplink_switches: [SL-LEAF0B, SL-LEAF0B] + nodes: + - name: SL-LEAF2A + id: 6 + uplink_switch_interfaces: [Ethernet41, Ethernet42] + - name: SL-LEAF2B + id: 7 + uplink_switch_interfaces: [Ethernet43, Ethernet44] diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml index 5f1e69199bf..22d5fa797c5 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml @@ -317,6 +317,15 @@ all: hosts: new_network_services_bgp_vrf_config_true: new_network_services_bgp_vrf_config_false: + SINGLE_LINK_TO_MLAG_PAIR: + hosts: + SL-LEAF0A: + SL-LEAF0B: + SL-LEAF1A: + SL-LEAF1B: + SL-MLEAF1: + SL-LEAF2A: + SL-LEAF2B: AVD_LAB: children: DC1_FABRIC: diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/uplinks.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/uplinks.py index 2c98aebc79f..0b0bad8d935 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/uplinks.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/uplinks.py @@ -286,10 +286,18 @@ def _get_port_channel_uplink(self: EosDesignsFacts, uplink_index: int, uplink_in # Override our description on port-channel to be peer's group name if they are mlag pair or A/A #} uplink["channel_description"] = uplink_switch_facts.shared_utils.group + # Used to determine whether or not port-channel should have an mlag id configure on the uplink_switch + unique_uplink_switches = set(self.shared_utils.uplink_switches) if self.shared_utils.mlag is True: # Override the peer's description on port-channel to be our group name if we are mlag pair #} uplink["peer_channel_description"] = self.shared_utils.group + # Updating unique_uplink_switches with our mlag peer's uplink switches + unique_uplink_switches.update(self.shared_utils.mlag_peer_facts.shared_utils.uplink_switches) + + # Only enable mlag for this port-channel on the uplink switch if there are multiple unique uplink switches + uplink["peer_mlag"] = len(unique_uplink_switches) > 1 + uplink["channel_group_id"] = str(self._uplink_port_channel_id) uplink["peer_channel_group_id"] = str(self._uplink_switch_port_channel_id) diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-settings.md index cadc21f1590..173063d6949 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-settings.md @@ -8,6 +8,7 @@ | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [enable_trunk_groups](## "enable_trunk_groups") | Boolean | | `False` | | Enable Trunk Group support across eos_designs.
Warning: Because of the nature of the EOS Trunk Group feature, enabling this is "all or nothing".
*All* vlans and *all* trunks towards connected endpoints must be using trunk groups as well.
If trunk groups are not assigned to a trunk, no vlans will be enabled on that trunk.
See "Details on enable_trunk_groups" below before enabling this feature.
| + | [mlag_on_orphan_port_channel_downlink](## "mlag_on_orphan_port_channel_downlink") | Boolean | | `True` | | If `true` (default) an MLAG ID will always be configured on a Port-Channel downlink even if the downlink is only on one node in the MLAG pair.
If `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed to two MLAG switches.
Note the default value will change to `false` in AVD version 5.0 | | [only_local_vlan_trunk_groups](## "only_local_vlan_trunk_groups") | Boolean | | `False` | | A vlan can have many trunk_groups assigned.
To avoid unneeded configuration changes on all leaf switches when a new trunk group is added,
this feature will only configure the vlan trunk groups matched with local connected_endpoints.
See "Details on only_local_vlan_trunk_groups" below.
Requires "enable_trunk_groups: true".
| | [p2p_uplinks_mtu](## "p2p_uplinks_mtu") | Integer | | `9214` | Min: 68
Max: 65535 | Point to Point Links MTU. | | [p2p_uplinks_qos_profile](## "p2p_uplinks_qos_profile") | String | | | | QOS Profile assigned on all infrastructure links. | @@ -49,6 +50,11 @@ # See "Details on enable_trunk_groups" below before enabling this feature. enable_trunk_groups: + # If `true` (default) an MLAG ID will always be configured on a Port-Channel downlink even if the downlink is only on one node in the MLAG pair. + # If `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed to two MLAG switches. + # Note the default value will change to `false` in AVD version 5.0 + mlag_on_orphan_port_channel_downlink: + # A vlan can have many trunk_groups assigned. # To avoid unneeded configuration changes on all leaf switches when a new trunk group is added, # this feature will only configure the vlan trunk groups matched with local connected_endpoints. diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/port_channel_interfaces.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/port_channel_interfaces.py index 829b5ef7069..6dfe2e361a7 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/port_channel_interfaces.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/port_channel_interfaces.py @@ -63,7 +63,8 @@ def port_channel_interfaces(self) -> list | None: elif (vlans := link.get("vlans")) is not None: port_channel_interface["vlans"] = vlans - if self.shared_utils.mlag is True: + # Configure MLAG on MLAG switches if either 'mlag_on_orphan_port_channel_downlink' or 'link.mlag' is True + if self.shared_utils.mlag is True and any([get(self._hostvars, "mlag_on_orphan_port_channel_downlink", default=True), link.get("mlag", True)]): port_channel_interface["mlag"] = int(link.get("channel_group_id")) if (short_esi := link.get("short_esi")) is not None: diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py index a95beabb85a..b1a3fc3fedd 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py @@ -79,6 +79,7 @@ def _underlay_links(self) -> list: "ptp": get(uplink, "ptp"), "mac_security": get(uplink, "mac_security"), "short_esi": get(uplink, "peer_short_esi"), + "mlag": get(uplink, "peer_mlag"), "underlay_multicast": get(uplink, "underlay_multicast"), "ipv6_enable": get(uplink, "ipv6_enable"), "sflow": {"enable": self.shared_utils.fabric_sflow_downlinks}, diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json index 4cb29375d5a..da8cd77d721 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json @@ -8270,6 +8270,12 @@ }, "title": "MLAG Ibgp Peering VRFs" }, + "mlag_on_orphan_port_channel_downlink": { + "type": "boolean", + "description": "If `true` (default) an MLAG ID will always be configured on a Port-Channel downlink even if the downlink is only on one node in the MLAG pair.\nIf `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed to two MLAG switches.\nNote the default value will change to `false` in AVD version 5.0", + "default": true, + "title": "MLAG On Orphan Port Channel Downlink" + }, "name_servers": { "type": "array", "description": "List of DNS servers. The VRF is set to < mgmt_interface_vrf >.", diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml index c7f8d8193bf..673f18bfcf9 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml @@ -1480,6 +1480,18 @@ keys: min: 1 max: 4093 default: 3000 + mlag_on_orphan_port_channel_downlink: + type: bool + documentation_options: + table: fabric-settings + description: 'If `true` (default) an MLAG ID will always be configured on a Port-Channel + downlink even if the downlink is only on one node in the MLAG pair. + + If `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed + to two MLAG switches. + + Note the default value will change to `false` in AVD version 5.0' + default: true name_servers: documentation_options: table: management-settings diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/mlag_on_orphan_port_channel_downlink.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/mlag_on_orphan_port_channel_downlink.schema.yml new file mode 100644 index 00000000000..4d6322c0e6a --- /dev/null +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/mlag_on_orphan_port_channel_downlink.schema.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2024 Arista Networks, Inc. +# Use of this source code is governed by the Apache License 2.0 +# that can be found in the LICENSE file. +# yaml-language-server: $schema=../../../../plugins/plugin_utils/schema/avd_meta_schema.json +# Line above is used by RedHat's YAML Schema vscode extension +# Use Ctrl + Space to get suggestions for every field. Autocomplete will pop up after typing 2 letters. +type: dict +keys: + mlag_on_orphan_port_channel_downlink: + type: bool + documentation_options: + table: fabric-settings + description: |- + If `true` (default) an MLAG ID will always be configured on a Port-Channel downlink even if the downlink is only on one node in the MLAG pair. + If `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed to two MLAG switches. + Note the default value will change to `false` in AVD version 5.0 + # TODO: AVD5.0 change default to false and remove the note from the description. + default: true