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