diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/intended/structured_configs/dc1-spine1.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/intended/structured_configs/dc1-spine1.yml index d527a410367..92e4500f74f 100644 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/intended/structured_configs/dc1-spine1.yml +++ b/ansible_collections/arista/avd/extensions/molecule/anta_runner/intended/structured_configs/dc1-spine1.yml @@ -82,13 +82,6 @@ local_users: privilege: 15 role: network-admin sha512_password: $6$7u4j1rkb3VELgcZE$EJt2Qff8kd/TapRoci0XaIZsL4tFzgq1YZBLD9c6f/knXzvcYY0NcMKndZeCv0T268knGKhOEwZAxqKjlMm920 -logging: - vrfs: - - name: MGMT - source_interface: Management1 - hosts: - - name: graylog-server - protocol: udp loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_L3_LEAVES.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_L3_LEAVES.yml index 0f9f06933a1..cf0240ea936 100644 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_L3_LEAVES.yml +++ b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_L3_LEAVES.yml @@ -15,6 +15,7 @@ l3leaf: virtual_router_mac_address: 00:1c:73:00:00:99 spanning_tree_priority: 4096 spanning_tree_mode: mstp + validation_profile: profile1 node_groups: - group: DC1_L3_LEAF1 diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_SPINES.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_SPINES.yml index 831f83afb9c..df0e0d8429e 100644 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_SPINES.yml +++ b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC1_SPINES.yml @@ -11,6 +11,7 @@ spine: - name: dc1-spine1 id: 1 mgmt_ip: 172.16.1.11/24 + validation_profile: profile2 # Custom BGP configuration for BGP tests structured_config: router_bgp: diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC2_L2_LEAVES.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC2_L2_LEAVES.yml index 29305f8a716..2b007be2555 100644 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC2_L2_LEAVES.yml +++ b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/DC2_L2_LEAVES.yml @@ -5,6 +5,7 @@ l2leaf: defaults: platform: vEOS-lab spanning_tree_mode: mstp + validation_profile: profile1 node_groups: - group: DC2_L2_LEAF1 diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/FABRIC.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/FABRIC.yml index c3a0cec3d6d..f13016e87b8 100644 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/FABRIC.yml +++ b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/group_vars/FABRIC.yml @@ -113,10 +113,16 @@ custom_platform_settings: non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: + +validation_profiles: + - name: profile1 + hardware: min_power_supplies: 2 min_fans: 4 min_supervisors: 0 min_line_cards: 0 transceiver_manufacturers: - Third-party vendor + - name: profile2 + logging: + validate_no_errors_period: 1 diff --git a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/host_vars/dc1-spine1.yml b/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/host_vars/dc1-spine1.yml deleted file mode 100644 index 7ba5b7eb532..00000000000 --- a/ansible_collections/arista/avd/extensions/molecule/anta_runner/inventory/host_vars/dc1-spine1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -logging_settings: - hosts: - - name: graylog-server - validate_no_errors_period: 1 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-parent-profile.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-parent-profile.yml new file mode 100644 index 00000000000..7fedff75592 --- /dev/null +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-parent-profile.yml @@ -0,0 +1,21 @@ +type: l3leaf +l3leaf: + defaults: + platform: vEOS-LAB + loopback_ipv4_pool: 192.168.255.0/24 + vtep_loopback_ipv4_pool: 192.168.254.0/24 + bgp_as: 65101 + nodes: + - name: missing-validation-parent-profile + id: 1 + mgmt_ip: 192.168.200.105/24 + validation_profile: profile1 + +validation_profiles: + - name: profile1 + parent_profile: profile2 + hardware: + min_power_supplies: 2 + +expected_error_message: >- + Parent validation profile 'profile2' referenced by validation profile 'profile1' is not defined under 'validation_profiles'. diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-profile.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-profile.yml new file mode 100644 index 00000000000..e60a9f22b38 --- /dev/null +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/host_vars/missing-validation-profile.yml @@ -0,0 +1,20 @@ +type: l3leaf +l3leaf: + defaults: + platform: vEOS-LAB + loopback_ipv4_pool: 192.168.255.0/24 + vtep_loopback_ipv4_pool: 192.168.254.0/24 + bgp_as: 65101 + nodes: + - name: missing-validation-profile + id: 1 + mgmt_ip: 192.168.200.105/24 + validation_profile: profile1 + +validation_profiles: + - name: profile2 + hardware: + min_power_supplies: 2 + +expected_error_message: >- + Validation profile 'profile1' referenced in node configuration is not defined under 'validation_profiles'. diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml index e7038306ef2..4833ad842a2 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml @@ -414,6 +414,8 @@ all: incorrect-downlink-link-tracking-group: missing-sflow-setting-destination-vrf: missing-cv-settings-for-sflow-export-cloudvision-vrf: + missing-validation-profile: + missing-validation-parent-profile: children: FABRIC_MISSING_IP_ADDRESS_ON_WAN_LAN_HA_UPLINK: diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/configs/validation-profiles.cfg b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/configs/validation-profiles.cfg new file mode 100644 index 00000000000..29de21a8fd4 --- /dev/null +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/configs/validation-profiles.cfg @@ -0,0 +1,72 @@ +! +no enable password +no aaa root +! +vlan internal order ascending range 1006 1199 +! +transceiver qsfp default-mode 4x10G +! +service routing protocols model multi-agent +! +hostname validation-profiles +! +vrf instance MGMT +! +interface Loopback0 + description ROUTER_ID + no shutdown + ip address 192.168.255.1/32 +! +interface Loopback1 + description VXLAN_TUNNEL_SOURCE + no shutdown + ip address 192.168.254.1/32 +! +interface Management1 + description OOB_MANAGEMENT + no shutdown + vrf MGMT + ip address 192.168.200.105/24 +! +interface Vxlan1 + description validation-profiles_VTEP + vxlan source-interface Loopback1 + vxlan udp-port 4789 +! +ip routing +no ip routing vrf MGMT +! +ip prefix-list PL-LOOPBACKS-EVPN-OVERLAY + seq 10 permit 192.168.255.0/24 eq 32 + seq 20 permit 192.168.254.0/24 eq 32 +! +route-map RM-CONN-2-BGP permit 10 + match ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY +! +router bfd + multihop interval 300 min-rx 300 multiplier 3 +! +router bgp 65101 + router-id 192.168.255.1 + update wait-install + no bgp default ipv4-unicast + maximum-paths 4 + neighbor EVPN-OVERLAY-PEERS peer group + neighbor EVPN-OVERLAY-PEERS update-source Loopback0 + neighbor EVPN-OVERLAY-PEERS bfd + neighbor EVPN-OVERLAY-PEERS ebgp-multihop 3 + neighbor EVPN-OVERLAY-PEERS send-community + neighbor EVPN-OVERLAY-PEERS maximum-routes 0 + neighbor IPv4-UNDERLAY-PEERS peer group + neighbor IPv4-UNDERLAY-PEERS send-community + neighbor IPv4-UNDERLAY-PEERS maximum-routes 12000 + redistribute connected route-map RM-CONN-2-BGP + ! + address-family evpn + neighbor EVPN-OVERLAY-PEERS activate + ! + address-family ipv4 + no neighbor EVPN-OVERLAY-PEERS activate + neighbor IPv4-UNDERLAY-PEERS activate +! +end diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF1.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF1.yml index aac3bbfb481..94e1ae78591 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF1.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF1.yml @@ -49,7 +49,6 @@ metadata: platform: 7010TX fabric_name: EOS_DESIGNS_UNIT_TESTS validate_hardware: - enabled: true min_power_supplies: 2 min_fans: 4 min_supervisors: 2 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF2.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF2.yml index a2fde82fe5b..54b1a6b12cb 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF2.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/7010TX-LEAF2.yml @@ -45,7 +45,6 @@ metadata: platform: 7010TX fabric_name: EOS_DESIGNS_UNIT_TESTS validate_hardware: - enabled: true min_power_supplies: 2 min_fans: 4 min_supervisors: 2 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/validation-profiles.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/validation-profiles.yml new file mode 100644 index 00000000000..291198e4613 --- /dev/null +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/intended/structured_configs/validation-profiles.yml @@ -0,0 +1,112 @@ +aaa_root: + disabled: true +config_end: true +enable_password: + disabled: true +hostname: validation-profiles +ip_igmp_snooping: + globally_enabled: true +ip_routing: true +loopback_interfaces: +- name: Loopback0 + description: ROUTER_ID + shutdown: false + ip_address: 192.168.255.1/32 +- name: Loopback1 + description: VXLAN_TUNNEL_SOURCE + shutdown: false + ip_address: 192.168.254.1/32 +management_interfaces: +- name: Management1 + description: OOB_MANAGEMENT + shutdown: false + vrf: MGMT + ip_address: 192.168.200.105/24 + type: oob +metadata: + is_deployed: true + platform: vEOS-LAB + fabric_name: EOS_DESIGNS_UNIT_TESTS + validate_hardware: + min_power_supplies: 2 + min_fans: 4 + min_supervisors: 2 + min_line_cards: 10 + min_fabric_cards: 5 + transceiver_manufacturers: + - Third-party vendor profile1 + validate_no_errors_period: 2 + exclude_as_extra_fabric_validation_target: true +prefix_lists: +- name: PL-LOOPBACKS-EVPN-OVERLAY + sequence_numbers: + - sequence: 10 + action: permit 192.168.255.0/24 eq 32 + - sequence: 20 + action: permit 192.168.254.0/24 eq 32 +route_maps: +- name: RM-CONN-2-BGP + sequence_numbers: + - sequence: 10 + type: permit + match: + - ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY +router_bfd: + multihop: + interval: 300 + min_rx: 300 + multiplier: 3 +router_bgp: + as: '65101' + router_id: 192.168.255.1 + maximum_paths: + paths: 4 + updates: + wait_install: true + bgp: + default: + ipv4_unicast: false + peer_groups: + - name: IPv4-UNDERLAY-PEERS + metadata: + type: ipv4 + send_community: all + maximum_routes: 12000 + - name: EVPN-OVERLAY-PEERS + metadata: + type: evpn + update_source: Loopback0 + bfd: true + ebgp_multihop: 3 + send_community: all + maximum_routes: 0 + redistribute: + connected: + enabled: true + route_map: RM-CONN-2-BGP + address_family_evpn: + peer_groups: + - name: EVPN-OVERLAY-PEERS + activate: true + address_family_ipv4: + peer_groups: + - name: IPv4-UNDERLAY-PEERS + activate: true + - name: EVPN-OVERLAY-PEERS + activate: false +service_routing_protocols_model: multi-agent +transceiver_qsfp_default_mode_4x10: true +vlan_internal_order: + allocation: ascending + range: + beginning: 1006 + ending: 1199 +vrfs: +- name: MGMT + ip_routing: false +vxlan_interface: + vxlan1: + description: validation-profiles_VTEP + vxlan: + source_interface: Loopback1 + udp_port: 4789 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/group_vars/PLATFORM_SETTINGS_TESTS.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/group_vars/PLATFORM_SETTINGS_TESTS.yml index 345131d1cbc..521ccb46d94 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/group_vars/PLATFORM_SETTINGS_TESTS.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/group_vars/PLATFORM_SETTINGS_TESTS.yml @@ -8,21 +8,23 @@ platform_settings: enabled: true description: Structured config for platform matching the regex # Test for validate hardware disabled - validate_hardware: - enabled: false + feature_support: + hardware_validation: false - platforms: - 7010TX feature_support: queue_monitor_length_notify: false per_interface_mtu: false + hardware_validation: true reload_delay: mlag: 300 non_mlag: 330 digital_twin: platform: vEOS-lab - # Test for validate hardware enabled with specific requirements - validate_hardware: - enabled: true # default + +validation_profiles: + - name: profile1 + hardware: min_power_supplies: 2 min_fans: 4 min_supervisors: 2 @@ -40,6 +42,8 @@ l3leaf: loopback_ipv4_offset: 32 vtep_loopback_ipv4_pool: 192.168.254.0/24 mlag_interfaces: [Ethernet5, Ethernet6] + # Test for validate hardware enabled with specific requirements + validation_profile: profile1 node_groups: - group: MLAG_PER_MTU_INTERFACE bgp_as: 923 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/exclude-as-extra-fabric-validation-target.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/exclude-as-extra-fabric-validation-target.yml index 7fb3d2bc112..d2ec81ae3a6 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/exclude-as-extra-fabric-validation-target.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/exclude-as-extra-fabric-validation-target.yml @@ -7,10 +7,14 @@ spine: loopback_ipv4_pool: 10.10.255.0/24 bgp_as: 65000 rack: ABC567 - exclude_as_extra_fabric_validation_target: true + validation_profile: profile1 l3_interfaces: - name: Ethernet11 ip_address: 10.20.30.40/24 description: Test interface peer: Someotherdevice peer_ip: 10.20.30.50/24 + +validation_profiles: + - name: profile1 + exclude_as_extra_fabric_validation_target: true diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/logging_settings.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/logging_settings.yml index 87ac4e649f8..5759841b3b6 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/logging_settings.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/logging_settings.yml @@ -10,6 +10,7 @@ spine: bgp_as: 65000 inband_mgmt_vrf: inband_mgmt_vrf inband_mgmt_interface: Vlan123 + validation_profile: profile1 logging_settings: console: errors @@ -85,4 +86,8 @@ logging_settings: match_lists: - name: molecule action: discard - validate_no_errors_period: 2 + +validation_profiles: + - name: profile1 + logging: + validate_no_errors_period: 2 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/validation-profiles.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/validation-profiles.yml new file mode 100644 index 00000000000..786e6922133 --- /dev/null +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/host_vars/validation-profiles.yml @@ -0,0 +1,32 @@ +type: l3leaf +l3leaf: + defaults: + platform: vEOS-LAB + loopback_ipv4_pool: 192.168.255.0/24 + vtep_loopback_ipv4_pool: 192.168.254.0/24 + bgp_as: 65101 + nodes: + - name: validation-profiles + id: 1 + mgmt_ip: 192.168.200.105/24 + validation_profile: profile1 + +validation_profiles: + - name: profile1 + parent_profile: profile2 + hardware: + min_power_supplies: 2 + transceiver_manufacturers: + - Third-party vendor profile1 + - name: profile2 + hardware: + min_fans: 4 + min_power_supplies: 4 + min_supervisors: 2 + min_line_cards: 10 + min_fabric_cards: 5 + transceiver_manufacturers: + - Third-party vendor profile2 + exclude_as_extra_fabric_validation_target: true + logging: + validate_no_errors_period: 2 diff --git a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/hosts.yml index c244e906d6b..2ecc7f312be 100644 --- a/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/extensions/molecule/eos_designs_unit_tests/inventory/hosts.yml @@ -88,6 +88,7 @@ all: address-locking-4: underlay-ospf-process-id-same-as-ospf-process-id-with-vrf-default: exclude-as-extra-fabric-validation-target: + validation-profiles: DEVICES_TESTS: hosts: devices-leaf1a: diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md b/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md index 8d6d12044cf..9755d67b82b 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md @@ -1596,6 +1596,12 @@ Management interface is modified for specific platforms like modular platforms w ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md --8<-- +## Validation Profiles + +--8<-- +ansible_collections/arista/avd/roles/eos_designs/docs/tables/validation-profiles.md +--8<-- + ## PTP settings See the [Configuring PTP](how-to/ptp.md) how-to for details. diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/devices.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/devices.md index b855fb62404..4d5454a0cda 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/devices.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/devices.md @@ -13,13 +13,11 @@ | [    parent_profile](## "device_profiles.[].parent_profile") | String | | | | Inherit settings from a parent profile defined under `device_profiles`.
Max two levels of profile inheritance: device -> profile -> parent_profile | | [    type](## "device_profiles.[].type") | String | | | | Set the type of the device as defined under `node_type_keys`.
This takes precedence over the global `type` key. | | [    mlag_group](## "device_profiles.[].mlag_group") | String | | | | Name of MLAG group. Exactly two devices must share the same mlag_group.
The group is used for creating MLAG Pairs, for port-channel descriptions on peers and for MLAG domain-id (unless mlag_domain_id is set). | - | [    kernel_ecmp_cli](## "device_profiles.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [devices](## "devices") | List, items: Dictionary | | | | PREVIEW - This datamodel is still under development and may change or get removed at any time. | | [  - profile](## "devices.[].profile") | String | | | | Inherit settings from a profile defined under `device_profiles`.
Max two levels of profile inheritance: device -> profile -> parent_profile
This takes precedence over the global `device_profile` key. | | [    type](## "devices.[].type") | String | | | | Set the type of the device as defined under `node_type_keys`.
This takes precedence over the global `type` key. | | [    mlag_group](## "devices.[].mlag_group") | String | | | | Name of MLAG group. Exactly two devices must share the same mlag_group.
The group is used for creating MLAG Pairs, for port-channel descriptions on peers and for MLAG domain-id (unless mlag_domain_id is set). | | [    name](## "devices.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | - | [    kernel_ecmp_cli](## "devices.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | === "YAML" @@ -48,12 +46,6 @@ # The group is used for creating MLAG Pairs, for port-channel descriptions on peers and for MLAG domain-id (unless mlag_domain_id is set). mlag_group: - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: - # PREVIEW - This datamodel is still under development and may change or get removed at any time. devices: @@ -72,10 +64,4 @@ # The Node Name is used as "hostname". name: - - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-settings.md index d230083ab99..344d8ef9ef0 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-settings.md @@ -217,7 +217,6 @@ | [  level](## "logging_settings.level") | List, items: Dictionary | | | | Configure logging severity. | | [    - facility](## "logging_settings.level.[].facility") | String | Required, Unique | | | | | [      severity](## "logging_settings.level.[].severity") | String | | | Valid Values:
- alerts
- critical
- debugging
- emergencies
- errors
- informational
- notifications
- warnings
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7 | Severity of facility. Below are the supported severities.
emergencies System is unusable (severity=0)
alerts Immediate action needed (severity=1)
critical Critical conditions (severity=2)
errors Error conditions (severity=3)
warnings Warning conditions (severity=4)
notifications Normal but significant conditions (severity=5)
informational Informational messages (severity=6)
debugging Debugging messages (severity=7)
<0-7> Severity level value | - | [  validate_no_errors_period](## "logging_settings.validate_no_errors_period") | Integer | | | | Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during the validation performed by the `anta_runner` role. | | [management_eapi](## "management_eapi") | Dictionary | | | | Default is HTTPS management eAPI enabled.
| | [  enabled](## "management_eapi.enabled") | Boolean | | | | Enable/Disable api http-commands. | | [  enable_http](## "management_eapi.enable_http") | Boolean | | | | | @@ -770,9 +769,6 @@ # <0-7> Severity level value severity: - # Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during the validation performed by the `anta_runner` role. - validate_no_errors_period: - # Default is HTTPS management eAPI enabled. management_eapi: diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-common-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-common-configuration.md index 30979cc5224..ef89e1fbd4c 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-common-configuration.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-common-configuration.md @@ -27,12 +27,13 @@ | [    always_configure_ip_routing](## ".defaults.always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [    raw_eos_cli](## ".defaults.raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [    structured_config](## ".defaults.structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [    exclude_as_extra_fabric_validation_target](## ".defaults.exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [    kernel_ecmp_cli](## ".defaults.kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [    flow_tracker_type](## ".defaults.flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [    campus](## ".defaults.campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_pod](## ".defaults.campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_access_pod](## ".defaults.campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    cv_tags_topology_type](## ".defaults.cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [    validation_profile](## ".defaults.validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | | [  node_groups](## ".node_groups") | List, items: Dictionary | | | | Define variables related to all nodes part of this group. | | [    - group](## ".node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
| | [      nodes](## ".node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. | @@ -55,12 +56,13 @@ | [          always_configure_ip_routing](## ".node_groups.[].nodes.[].always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [          raw_eos_cli](## ".node_groups.[].nodes.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [          structured_config](## ".node_groups.[].nodes.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [          exclude_as_extra_fabric_validation_target](## ".node_groups.[].nodes.[].exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [          kernel_ecmp_cli](## ".node_groups.[].nodes.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [          flow_tracker_type](## ".node_groups.[].nodes.[].flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [          campus](## ".node_groups.[].nodes.[].campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [          campus_pod](## ".node_groups.[].nodes.[].campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [          campus_access_pod](## ".node_groups.[].nodes.[].campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [          cv_tags_topology_type](## ".node_groups.[].nodes.[].cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [          validation_profile](## ".node_groups.[].nodes.[].validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | | [      id](## ".node_groups.[].id") | Integer | | | | Unique identifier used for IP addressing and other algorithms. | | [      platform](## ".node_groups.[].platform") | String | | | | Arista platform family. | | [      mac_address](## ".node_groups.[].mac_address") | String | | | | Leverage to document management interface mac address. | @@ -79,12 +81,13 @@ | [      always_configure_ip_routing](## ".node_groups.[].always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [      raw_eos_cli](## ".node_groups.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [      structured_config](## ".node_groups.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [      exclude_as_extra_fabric_validation_target](## ".node_groups.[].exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [      kernel_ecmp_cli](## ".node_groups.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [      flow_tracker_type](## ".node_groups.[].flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [      campus](## ".node_groups.[].campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      campus_pod](## ".node_groups.[].campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      campus_access_pod](## ".node_groups.[].campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      cv_tags_topology_type](## ".node_groups.[].cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [      validation_profile](## ".node_groups.[].validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | | [  nodes](## ".nodes") | List, items: Dictionary | | | | Define variables per node. | | [    - name](## ".nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | | [      id](## ".nodes.[].id") | Integer | | | | Unique identifier used for IP addressing and other algorithms. | @@ -105,12 +108,13 @@ | [      always_configure_ip_routing](## ".nodes.[].always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [      raw_eos_cli](## ".nodes.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [      structured_config](## ".nodes.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [      exclude_as_extra_fabric_validation_target](## ".nodes.[].exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [      kernel_ecmp_cli](## ".nodes.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [      flow_tracker_type](## ".nodes.[].flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [      campus](## ".nodes.[].campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      campus_pod](## ".nodes.[].campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      campus_access_pod](## ".nodes.[].campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [      cv_tags_topology_type](## ".nodes.[].cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [      validation_profile](## ".nodes.[].validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | | [device_profiles](## "device_profiles") | List, items: Dictionary | | | | PREVIEW - This datamodel is still under development and may change or get removed at any time. | | [  - name](## "device_profiles.[].name") | String | Required, Unique | | | Profile Name | | [    id](## "device_profiles.[].id") | Integer | | | | Unique identifier used for IP addressing and other algorithms. | @@ -131,12 +135,13 @@ | [    always_configure_ip_routing](## "device_profiles.[].always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [    raw_eos_cli](## "device_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [    structured_config](## "device_profiles.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [    exclude_as_extra_fabric_validation_target](## "device_profiles.[].exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [    kernel_ecmp_cli](## "device_profiles.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [    flow_tracker_type](## "device_profiles.[].flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [    campus](## "device_profiles.[].campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_pod](## "device_profiles.[].campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_access_pod](## "device_profiles.[].campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    cv_tags_topology_type](## "device_profiles.[].cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [    validation_profile](## "device_profiles.[].validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | | [devices](## "devices") | List, items: Dictionary | | | | PREVIEW - This datamodel is still under development and may change or get removed at any time. | | [    name](## "devices.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | | [    id](## "devices.[].id") | Integer | | | | Unique identifier used for IP addressing and other algorithms. | @@ -157,12 +162,13 @@ | [    always_configure_ip_routing](## "devices.[].always_configure_ip_routing") | Boolean | | `False` | | Force configuration of "ip routing" even on L2 devices.
Use this to retain behavior of AVD versions below 4.0.0.
| | [    raw_eos_cli](## "devices.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [    structured_config](## "devices.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | - | [    exclude_as_extra_fabric_validation_target](## "devices.[].exclude_as_extra_fabric_validation_target") | Boolean | | | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| + | [    kernel_ecmp_cli](## "devices.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [    flow_tracker_type](## "devices.[].flow_tracker_type") | String | | | Valid Values:
- sampled
- hardware | Set the flow tracker type.
Override the `default_flow_tracker_type`` set at the `node_type_key` level.
`default_flow_tracker_type` default value is `sampled`. | | [    campus](## "devices.[].campus") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_pod](## "devices.[].campus_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    campus_access_pod](## "devices.[].campus_access_pod") | String | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Name of the campus access pod. Used to generate CloudVision device tags with the `generate_cv_tags.campus_fabric` feature. | | [    cv_tags_topology_type](## "devices.[].cv_tags_topology_type") | String | | | | Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". | + | [    validation_profile](## "devices.[].validation_profile") | String | | | | Name of the validation profile to apply to this device.
The profile must be defined under `validation_profiles`.
Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. | === "YAML" @@ -234,8 +240,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -257,6 +266,11 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: + # Define variables related to all nodes part of this group. node_groups: @@ -332,8 +346,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -355,6 +372,11 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: + # Unique identifier used for IP addressing and other algorithms. id: @@ -417,8 +439,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -440,6 +465,11 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: + # Define variables per node. nodes: @@ -508,8 +538,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -531,6 +564,11 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: + # PREVIEW - This datamodel is still under development and may change or get removed at any time. device_profiles: @@ -599,8 +637,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -622,6 +663,11 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: + # PREVIEW - This datamodel is still under development and may change or get removed at any time. devices: @@ -690,8 +736,11 @@ # Custom structured config for eos_cli_config_gen. structured_config: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: + # Use EOS CLI to configure kernel forwarding ECMP programming. + # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. + # - For newer EOS versions (starting 4.33.2) use the proper CLI. + # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. + kernel_ecmp_cli: # Set the flow tracker type. # Override the `default_flow_tracker_type`` set at the `node_type_key` level. @@ -712,4 +761,9 @@ # Device type that CloudVision should use when generating the Topology like "leaf", "spine", "core", "edge" or "member-leaf". cv_tags_topology_type: + + # Name of the validation profile to apply to this device. + # The profile must be defined under `validation_profiles`. + # Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. + validation_profile: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-keys.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-keys.md index 6d59fbf58b0..399ef6515c7 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-keys.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-keys.md @@ -21,7 +21,6 @@ | [    default_evpn_encapsulation](## "custom_node_type_keys.[].default_evpn_encapsulation") | String | | `vxlan` | Value is converted to lower case.
Valid Values:
- mpls
- vxlan | Set the default evpn encapsulation.
| | [    default_wan_role](## "custom_node_type_keys.[].default_wan_role") | String | | | Valid Values:
- client
- server | Set the default WAN role.

This is used both for AutoVPN and Pathfinder designs.
That means if `wan_mode` root key is set to `legacy-autovpn` or `cv-pathfinder`.
`server` indicates that the router is a route-reflector.
| | [    default_flow_tracker_type](## "custom_node_type_keys.[].default_flow_tracker_type") | String | | `sampled` | Valid Values:
- sampled
- hardware | Set the default flow tracker type. | - | [    exclude_as_extra_fabric_validation_target](## "custom_node_type_keys.[].exclude_as_extra_fabric_validation_target") | Boolean | | `False` | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| | [    mlag_support](## "custom_node_type_keys.[].mlag_support") | Boolean | | `False` | | Can this node type support mlag. | | [    network_services](## "custom_node_type_keys.[].network_services") | Dictionary | | | | Will network services be deployed on this node type. | | [      l1](## "custom_node_type_keys.[].network_services.l1") | Boolean | | `False` | | Point-to-point services | @@ -72,7 +71,6 @@ | [    default_evpn_encapsulation](## "node_type_keys.[].default_evpn_encapsulation") | String | | `vxlan` | Value is converted to lower case.
Valid Values:
- mpls
- vxlan | Set the default evpn encapsulation.
| | [    default_wan_role](## "node_type_keys.[].default_wan_role") | String | | | Valid Values:
- client
- server | Set the default WAN role.

This is used both for AutoVPN and Pathfinder designs.
That means if `wan_mode` root key is set to `legacy-autovpn` or `cv-pathfinder`.
`server` indicates that the router is a route-reflector.
| | [    default_flow_tracker_type](## "node_type_keys.[].default_flow_tracker_type") | String | | `sampled` | Valid Values:
- sampled
- hardware | Set the default flow tracker type. | - | [    exclude_as_extra_fabric_validation_target](## "node_type_keys.[].exclude_as_extra_fabric_validation_target") | Boolean | | `False` | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role.
| | [    mlag_support](## "node_type_keys.[].mlag_support") | Boolean | | `False` | | Can this node type support mlag. | | [    network_services](## "node_type_keys.[].network_services") | Dictionary | | | | Will network services be deployed on this node type. | | [      l1](## "node_type_keys.[].network_services.l1") | Boolean | | `False` | | Point-to-point services | @@ -162,9 +160,6 @@ # Set the default flow tracker type. default_flow_tracker_type: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: - # Can this node type support mlag. mlag_support: @@ -337,9 +332,6 @@ # Set the default flow tracker type. default_flow_tracker_type: - # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. - exclude_as_extra_fabric_validation_target: - # Can this node type support mlag. mlag_support: diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-structure.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-structure.md index ae45ac283a7..ce7bbe4ed6a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-structure.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-structure.md @@ -9,16 +9,12 @@ | -------- | ---- | -------- | ------- | ------------------ | ----------- | | [<node_type_keys.key>](## "") | Dictionary | | | | | | [  defaults](## ".defaults") | Dictionary | | | | Define variables for all nodes of this type. | - | [    kernel_ecmp_cli](## ".defaults.kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [  node_groups](## ".node_groups") | List, items: Dictionary | | | | Define variables related to all nodes part of this group. | | [    - group](## ".node_groups.[].group") | String | Required, Unique | | | The Node Group Name is used for MLAG domain unless set with 'mlag_domain_id'.
The Node Group Name is also used for peer description on downstream switches' uplinks.
| | [      nodes](## ".node_groups.[].nodes") | List, items: Dictionary | | | | Define variables per node. | | [        - name](## ".node_groups.[].nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | - | [          kernel_ecmp_cli](## ".node_groups.[].nodes.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | - | [      kernel_ecmp_cli](## ".node_groups.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | | [  nodes](## ".nodes") | List, items: Dictionary | | | | Define variables per node. | | [    - name](## ".nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | - | [      kernel_ecmp_cli](## ".nodes.[].kernel_ecmp_cli") | Boolean | | `True` | | Use EOS CLI to configure kernel forwarding ECMP programming.
For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version.
- For newer EOS versions (starting 4.33.2) use the proper CLI.
- For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. | === "YAML" @@ -28,12 +24,6 @@ # Define variables for all nodes of this type. defaults: - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: - # Define variables related to all nodes part of this group. node_groups: @@ -47,27 +37,9 @@ # The Node Name is used as "hostname". - name: - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: - - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: - # Define variables per node. nodes: # The Node Name is used as "hostname". - name: - - # Use EOS CLI to configure kernel forwarding ECMP programming. - # For EOS kernel forwarding, ECMP programming can be enabled in two different ways, depending on the EOS version. - # - For newer EOS versions (starting 4.33.2) use the proper CLI. - # - For older EOS versions use an agent environment variable. Changing this requires restarting the KernelFib agent. - kernel_ecmp_cli: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md index 06097e5ba96..b1303a1e659 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/platform-settings.md @@ -71,6 +71,7 @@ | [      sflow_subinterfaces](## "custom_platform_settings.[].feature_support.sflow_subinterfaces") | Boolean | | `True` | | Support for sFlow on sub-interfaces.
The feature will be ignored on platforms where this is false. | | [      wan](## "custom_platform_settings.[].feature_support.wan") | Boolean | | `True` | | Support for Arista WAN features.
An error will be raised if the feature is enabled and this is false. | | [      ptp](## "custom_platform_settings.[].feature_support.ptp") | Boolean | | `True` | | Support for Precision Time Protocol (PTP).
The feature will be ignored on platforms where this is false. | + | [      hardware_validation](## "custom_platform_settings.[].feature_support.hardware_validation") | Boolean | | `True` | | Enable hardware validation for the device.
When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` keys defined for the validation profile applied to the device are ignored. | | [    management_interface](## "custom_platform_settings.[].management_interface") | String | | `Management1` | | | | [    security_entropy_sources](## "custom_platform_settings.[].security_entropy_sources") | Dictionary | | | | Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. | | [      hardware](## "custom_platform_settings.[].security_entropy_sources.hardware") | Boolean | | | | Use a hardware based source. | @@ -80,15 +81,6 @@ | [    digital_twin](## "custom_platform_settings.[].digital_twin") | Dictionary | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Digital Twin settings applied when `avd_digital_twin_mode` is `true`. | | [      platform](## "custom_platform_settings.[].digital_twin.platform") | String | | | | Name of an alternate `platform_settings` platform used when running in Digital Twin mode.
The `platform_settings` for the regular `platform` is used if this is not set. | | [      act_node_type](## "custom_platform_settings.[].digital_twin.act_node_type") | String | | | Valid Values:
- cloudeos
- cvp
- generic
- third-party
- tools-server
- veos | ACT node type. | - | [    validate_hardware](## "custom_platform_settings.[].validate_hardware") | Dictionary | | | | Settings for hardware validation performed by the `anta_runner` role.
If `enabled` is set to `false`, all other keys in this dictionary are ignored.

For the `min_*` keys:
- Undefined (Default): Validate that all available slots are populated.
- Positive Integer: Validate that the number of components inserted is at least the specified minimum.
- 0: Skip the validation for this specific component. | - | [      enabled](## "custom_platform_settings.[].validate_hardware.enabled") | Boolean | | `True` | | Enable hardware validation for the device.
If `false`, all hardware tests are skipped, therefore the other keys in `validate_hardware` are ignored. | - | [      min_power_supplies](## "custom_platform_settings.[].validate_hardware.min_power_supplies") | Integer | | | | Minimum number of power supplies required for the device. Set to 0 to skip validation. | - | [      min_fans](## "custom_platform_settings.[].validate_hardware.min_fans") | Integer | | | | Minimum number of fans required for the device. Set to 0 to skip validation. | - | [      min_supervisors](## "custom_platform_settings.[].validate_hardware.min_supervisors") | Integer | | | | Minimum number of supervisor modules required for the device. Set to 0 to skip validation. | - | [      min_line_cards](## "custom_platform_settings.[].validate_hardware.min_line_cards") | Integer | | | | Minimum number of line cards required for the device. Set to 0 to skip validation. | - | [      min_fabric_cards](## "custom_platform_settings.[].validate_hardware.min_fabric_cards") | Integer | | | | Minimum number of fabric cards required for the device. Set to 0 to skip validation. | - | [      transceiver_manufacturers](## "custom_platform_settings.[].validate_hardware.transceiver_manufacturers") | List, items: String | | See (+) on YAML tab | | List of approved transceiver manufacturers for the device. | - | [        - <str>](## "custom_platform_settings.[].validate_hardware.transceiver_manufacturers.[]") | String | | | | | | [    structured_config](## "custom_platform_settings.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | | [    raw_eos_cli](## "custom_platform_settings.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [platform_settings](## "platform_settings") | List, items: Dictionary | | See (+) on YAML tab | | Platform settings. The first entry found where the `platform` node setting is fully matched by any regex in the `platforms` list will be chosen. If no matches are found, the first entry containing a platform `default` will be chosen. The default values will be overridden if `platform_settings` is defined. If you need to replace all the default platforms, it is recommended to copy the defaults and modify them. If you need to add custom platforms, create them under `custom_platform_settings`. Entries under `custom_platform_settings` will be matched before the equivalent entries from `platform_settings`. | @@ -155,6 +147,7 @@ | [      sflow_subinterfaces](## "platform_settings.[].feature_support.sflow_subinterfaces") | Boolean | | `True` | | Support for sFlow on sub-interfaces.
The feature will be ignored on platforms where this is false. | | [      wan](## "platform_settings.[].feature_support.wan") | Boolean | | `True` | | Support for Arista WAN features.
An error will be raised if the feature is enabled and this is false. | | [      ptp](## "platform_settings.[].feature_support.ptp") | Boolean | | `True` | | Support for Precision Time Protocol (PTP).
The feature will be ignored on platforms where this is false. | + | [      hardware_validation](## "platform_settings.[].feature_support.hardware_validation") | Boolean | | `True` | | Enable hardware validation for the device.
When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` keys defined for the validation profile applied to the device are ignored. | | [    management_interface](## "platform_settings.[].management_interface") | String | | `Management1` | | | | [    security_entropy_sources](## "platform_settings.[].security_entropy_sources") | Dictionary | | | | Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. | | [      hardware](## "platform_settings.[].security_entropy_sources.hardware") | Boolean | | | | Use a hardware based source. | @@ -164,15 +157,6 @@ | [    digital_twin](## "platform_settings.[].digital_twin") | Dictionary | | | | PREVIEW: This option is marked as "preview", meaning the data models or generated configuration can change at any time.
Digital Twin settings applied when `avd_digital_twin_mode` is `true`. | | [      platform](## "platform_settings.[].digital_twin.platform") | String | | | | Name of an alternate `platform_settings` platform used when running in Digital Twin mode.
The `platform_settings` for the regular `platform` is used if this is not set. | | [      act_node_type](## "platform_settings.[].digital_twin.act_node_type") | String | | | Valid Values:
- cloudeos
- cvp
- generic
- third-party
- tools-server
- veos | ACT node type. | - | [    validate_hardware](## "platform_settings.[].validate_hardware") | Dictionary | | | | Settings for hardware validation performed by the `anta_runner` role.
If `enabled` is set to `false`, all other keys in this dictionary are ignored.

For the `min_*` keys:
- Undefined (Default): Validate that all available slots are populated.
- Positive Integer: Validate that the number of components inserted is at least the specified minimum.
- 0: Skip the validation for this specific component. | - | [      enabled](## "platform_settings.[].validate_hardware.enabled") | Boolean | | `True` | | Enable hardware validation for the device.
If `false`, all hardware tests are skipped, therefore the other keys in `validate_hardware` are ignored. | - | [      min_power_supplies](## "platform_settings.[].validate_hardware.min_power_supplies") | Integer | | | | Minimum number of power supplies required for the device. Set to 0 to skip validation. | - | [      min_fans](## "platform_settings.[].validate_hardware.min_fans") | Integer | | | | Minimum number of fans required for the device. Set to 0 to skip validation. | - | [      min_supervisors](## "platform_settings.[].validate_hardware.min_supervisors") | Integer | | | | Minimum number of supervisor modules required for the device. Set to 0 to skip validation. | - | [      min_line_cards](## "platform_settings.[].validate_hardware.min_line_cards") | Integer | | | | Minimum number of line cards required for the device. Set to 0 to skip validation. | - | [      min_fabric_cards](## "platform_settings.[].validate_hardware.min_fabric_cards") | Integer | | | | Minimum number of fabric cards required for the device. Set to 0 to skip validation. | - | [      transceiver_manufacturers](## "platform_settings.[].validate_hardware.transceiver_manufacturers") | List, items: String | | See (+) on YAML tab | | List of approved transceiver manufacturers for the device. | - | [        - <str>](## "platform_settings.[].validate_hardware.transceiver_manufacturers.[]") | String | | | | | | [    structured_config](## "platform_settings.[].structured_config") | Dictionary | | | | Custom structured config for eos_cli_config_gen. | | [    raw_eos_cli](## "platform_settings.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the root level of the final EOS configuration. | | [platform_speed_groups](## "platform_speed_groups") | List, items: Dictionary | | | | Set Hardware Speed Groups per Platform. | @@ -331,6 +315,10 @@ # Support for Precision Time Protocol (PTP). # The feature will be ignored on platforms where this is false. ptp: + + # Enable hardware validation for the device. + # When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` keys defined for the validation profile applied to the device are ignored. + hardware_validation: management_interface: # Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. @@ -359,38 +347,6 @@ # ACT node type. act_node_type: - # Settings for hardware validation performed by the `anta_runner` role. - # If `enabled` is set to `false`, all other keys in this dictionary are ignored. - # - # For the `min_*` keys: - # - Undefined (Default): Validate that all available slots are populated. - # - Positive Integer: Validate that the number of components inserted is at least the specified minimum. - # - 0: Skip the validation for this specific component. - validate_hardware: - - # Enable hardware validation for the device. - # If `false`, all hardware tests are skipped, therefore the other keys in `validate_hardware` are ignored. - enabled: - - # Minimum number of power supplies required for the device. Set to 0 to skip validation. - min_power_supplies: - - # Minimum number of fans required for the device. Set to 0 to skip validation. - min_fans: - - # Minimum number of supervisor modules required for the device. Set to 0 to skip validation. - min_supervisors: - - # Minimum number of line cards required for the device. Set to 0 to skip validation. - min_line_cards: - - # Minimum number of fabric cards required for the device. Set to 0 to skip validation. - min_fabric_cards: - - # List of approved transceiver manufacturers for the device. - transceiver_manufacturers: # (1)! - - - # Custom structured config for eos_cli_config_gen. structured_config: @@ -398,7 +354,7 @@ raw_eos_cli: # Platform settings. The first entry found where the `platform` node setting is fully matched by any regex in the `platforms` list will be chosen. If no matches are found, the first entry containing a platform `default` will be chosen. The default values will be overridden if `platform_settings` is defined. If you need to replace all the default platforms, it is recommended to copy the defaults and modify them. If you need to add custom platforms, create them under `custom_platform_settings`. Entries under `custom_platform_settings` will be matched before the equivalent entries from `platform_settings`. - platform_settings: # (2)! + platform_settings: # (1)! - platforms: - @@ -543,6 +499,10 @@ # Support for Precision Time Protocol (PTP). # The feature will be ignored on platforms where this is false. ptp: + + # Enable hardware validation for the device. + # When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` keys defined for the validation profile applied to the device are ignored. + hardware_validation: management_interface: # Entropy source improves the randomness of the numbers used to generate MACsec's cryptographic keys. @@ -571,38 +531,6 @@ # ACT node type. act_node_type: - # Settings for hardware validation performed by the `anta_runner` role. - # If `enabled` is set to `false`, all other keys in this dictionary are ignored. - # - # For the `min_*` keys: - # - Undefined (Default): Validate that all available slots are populated. - # - Positive Integer: Validate that the number of components inserted is at least the specified minimum. - # - 0: Skip the validation for this specific component. - validate_hardware: - - # Enable hardware validation for the device. - # If `false`, all hardware tests are skipped, therefore the other keys in `validate_hardware` are ignored. - enabled: - - # Minimum number of power supplies required for the device. Set to 0 to skip validation. - min_power_supplies: - - # Minimum number of fans required for the device. Set to 0 to skip validation. - min_fans: - - # Minimum number of supervisor modules required for the device. Set to 0 to skip validation. - min_supervisors: - - # Minimum number of line cards required for the device. Set to 0 to skip validation. - min_line_cards: - - # Minimum number of fabric cards required for the device. Set to 0 to skip validation. - min_fabric_cards: - - # List of approved transceiver manufacturers for the device. - transceiver_manufacturers: # (3)! - - - # Custom structured config for eos_cli_config_gen. structured_config: @@ -620,14 +548,6 @@ 1. Default Value - ```yaml - transceiver_manufacturers: - - Arista Networks - - Arastra, Inc. - ``` - - 2. Default Value - ```yaml platform_settings: - platforms: @@ -789,13 +709,12 @@ interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CEOS - cEOS @@ -807,25 +726,23 @@ interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false management_interface: Management0 reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CloudEOS feature_support: bgp_update_wait_install: false interface_storm_control: false queue_monitor_length_notify: false + hardware_validation: false p2p_uplinks_mtu: 9194 digital_twin: act_node_type: cloudeos - validate_hardware: - enabled: false - platforms: - AWE-5310 - AWE-7230R @@ -869,11 +786,3 @@ digital_twin: platform: CloudEOS ``` - - 3. Default Value - - ```yaml - transceiver_manufacturers: - - Arista Networks - - Arastra, Inc. - ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/validation-profiles.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/validation-profiles.md new file mode 100644 index 00000000000..8ff5a998f8d --- /dev/null +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/validation-profiles.md @@ -0,0 +1,75 @@ + +=== "Table" + + | Variable | Type | Required | Default | Value Restrictions | Description | + | -------- | ---- | -------- | ------- | ------------------ | ----------- | + | [validation_profiles](## "validation_profiles") | List, items: Dictionary | | | | List of validation profiles defining hardware, logging, and fabric-related validation rules.
Validation profiles can be referenced from node definitions (for example under `l3leaf.nodes[].validation_profile`) and support single-level inheritance using `parent_profile`. | + | [  - name](## "validation_profiles.[].name") | String | Required, Unique | | | | + | [    parent_profile](## "validation_profiles.[].parent_profile") | String | | | | Inherit settings from a parent profile defined under `validation_profiles`.
Max one level of profile inheritance: profile -> parent_profile | + | [    hardware](## "validation_profiles.[].hardware") | Dictionary | | | | Hardware validation thresholds for the device.
These settings are only applied when `platform_settings/custom_platform_settings[].feature_support.hardware_validation` is set to `true`.
If hardware validation is disabled, all hardware validation checks are skipped and the keys under this section are ignored. | + | [      min_power_supplies](## "validation_profiles.[].hardware.min_power_supplies") | Integer | | | | Minimum number of power supplies required for the device. Set to 0 to skip validation. | + | [      min_fans](## "validation_profiles.[].hardware.min_fans") | Integer | | | | Minimum number of fans required for the device. Set to 0 to skip validation. | + | [      min_supervisors](## "validation_profiles.[].hardware.min_supervisors") | Integer | | | | Minimum number of supervisor modules required for the device. Set to 0 to skip validation. | + | [      min_line_cards](## "validation_profiles.[].hardware.min_line_cards") | Integer | | | | Minimum number of line cards required for the device. Set to 0 to skip validation. | + | [      min_fabric_cards](## "validation_profiles.[].hardware.min_fabric_cards") | Integer | | | | Minimum number of fabric cards required for the device. Set to 0 to skip validation. | + | [      transceiver_manufacturers](## "validation_profiles.[].hardware.transceiver_manufacturers") | List, items: String | | See (+) on YAML tab | | List of approved transceiver manufacturers for the device. | + | [        - <str>](## "validation_profiles.[].hardware.transceiver_manufacturers.[]") | String | | | | | + | [    logging](## "validation_profiles.[].logging") | Dictionary | | | | | + | [      validate_no_errors_period](## "validation_profiles.[].logging.validate_no_errors_period") | Integer | | | | Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during the validation performed by the `anta_runner` role. | + | [    exclude_as_extra_fabric_validation_target](## "validation_profiles.[].exclude_as_extra_fabric_validation_target") | Boolean | | `False` | | Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. | + +=== "YAML" + + ```yaml + # List of validation profiles defining hardware, logging, and fabric-related validation rules. + # Validation profiles can be referenced from node definitions (for example under `l3leaf.nodes[].validation_profile`) and support single-level inheritance using `parent_profile`. + validation_profiles: + - name: + + # Inherit settings from a parent profile defined under `validation_profiles`. + # Max one level of profile inheritance: profile -> parent_profile + parent_profile: + + # Hardware validation thresholds for the device. + # These settings are only applied when `platform_settings/custom_platform_settings[].feature_support.hardware_validation` is set to `true`. + # If hardware validation is disabled, all hardware validation checks are skipped and the keys under this section are ignored. + hardware: + + # Minimum number of power supplies required for the device. Set to 0 to skip validation. + min_power_supplies: + + # Minimum number of fans required for the device. Set to 0 to skip validation. + min_fans: + + # Minimum number of supervisor modules required for the device. Set to 0 to skip validation. + min_supervisors: + + # Minimum number of line cards required for the device. Set to 0 to skip validation. + min_line_cards: + + # Minimum number of fabric cards required for the device. Set to 0 to skip validation. + min_fabric_cards: + + # List of approved transceiver manufacturers for the device. + transceiver_manufacturers: # (1)! + - + logging: + + # Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during the validation performed by the `anta_runner` role. + validate_no_errors_period: + + # Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. + exclude_as_extra_fabric_validation_target: + ``` + + 1. Default Value + + ```yaml + transceiver_manufacturers: + - Arista Networks + - Arastra, Inc. + ``` diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py index 5d483b3a0df..8b33afb8f33 100644 --- a/python-avd/pyavd/_eos_designs/schema/__init__.py +++ b/python-avd/pyavd/_eos_designs/schema/__init__.py @@ -9508,7 +9508,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -9600,6 +9599,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } name: str """Profile Name""" @@ -9832,11 +9832,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -10497,6 +10492,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -10540,7 +10543,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -10632,6 +10634,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ DeviceProfilesItem. @@ -10802,9 +10805,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -11257,6 +11257,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -14559,7 +14565,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -14651,6 +14656,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } profile: str | None """ @@ -14893,11 +14899,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -15558,6 +15559,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -15602,7 +15611,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -15694,6 +15702,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ DevicesItem. @@ -15872,9 +15881,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -16327,6 +16333,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -21731,7 +21743,6 @@ class Vrfs(AvdIndexedList[str, VrfsItem]): "policy": {"type": EosCliConfigGen.Logging.Policy}, "event": {"type": EosCliConfigGen.Logging.Event}, "level": {"type": EosCliConfigGen.Logging.Level}, - "validate_no_errors_period": {"type": int}, } hosts: Hosts """Subclass of AvdList with `HostsItem` items.""" @@ -21753,11 +21764,6 @@ class Vrfs(AvdIndexedList[str, VrfsItem]): event: EosCliConfigGen.Logging.Event level: EosCliConfigGen.Logging.Level """Configure logging severity.""" - validate_no_errors_period: int | None - """ - Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during - the validation performed by the `anta_runner` role. - """ if TYPE_CHECKING: @@ -21777,7 +21783,6 @@ def __init__( policy: EosCliConfigGen.Logging.Policy | UndefinedType = Undefined, event: EosCliConfigGen.Logging.Event | UndefinedType = Undefined, level: EosCliConfigGen.Logging.Level | UndefinedType = Undefined, - validate_no_errors_period: int | None | UndefinedType = Undefined, ) -> None: """ LoggingSettings. @@ -21799,9 +21804,6 @@ def __init__( policy: policy event: event level: Configure logging severity. - validate_no_errors_period: - Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during - the validation performed by the `anta_runner` role. """ @@ -23878,7 +23880,6 @@ def __init__( "default_evpn_encapsulation": {"type": str, "default": "vxlan"}, "default_wan_role": {"type": str}, "default_flow_tracker_type": {"type": str, "default": "sampled"}, - "exclude_as_extra_fabric_validation_target": {"type": bool, "default": False}, "mlag_support": {"type": bool, "default": False}, "network_services": {"type": NetworkServices}, "underlay_router": {"type": bool, "default": True}, @@ -23962,13 +23963,6 @@ def __init__( Default value: `"sampled"` """ - exclude_as_extra_fabric_validation_target: bool - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - - Default value: `False` - """ mlag_support: bool """ Can this node type support mlag. @@ -24064,7 +24058,6 @@ def __init__( default_evpn_encapsulation: DefaultEvpnEncapsulation | UndefinedType = Undefined, default_wan_role: DefaultWanRole | None | UndefinedType = Undefined, default_flow_tracker_type: DefaultFlowTrackerType | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | UndefinedType = Undefined, mlag_support: bool | UndefinedType = Undefined, network_services: NetworkServices | UndefinedType = Undefined, underlay_router: bool | UndefinedType = Undefined, @@ -24113,9 +24106,6 @@ def __init__( `server` indicates that the router is a route-reflector. default_flow_tracker_type: Set the default flow tracker type. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. mlag_support: Can this node type support mlag. network_services: Will network services be deployed on this node type. @@ -24417,7 +24407,6 @@ def __init__( "default_evpn_encapsulation": {"type": str, "default": "vxlan"}, "default_wan_role": {"type": str}, "default_flow_tracker_type": {"type": str, "default": "sampled"}, - "exclude_as_extra_fabric_validation_target": {"type": bool, "default": False}, "mlag_support": {"type": bool, "default": False}, "network_services": {"type": NetworkServices}, "underlay_router": {"type": bool, "default": True}, @@ -24501,13 +24490,6 @@ def __init__( Default value: `"sampled"` """ - exclude_as_extra_fabric_validation_target: bool - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - - Default value: `False` - """ mlag_support: bool """ Can this node type support mlag. @@ -24603,7 +24585,6 @@ def __init__( default_evpn_encapsulation: DefaultEvpnEncapsulation | UndefinedType = Undefined, default_wan_role: DefaultWanRole | None | UndefinedType = Undefined, default_flow_tracker_type: DefaultFlowTrackerType | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | UndefinedType = Undefined, mlag_support: bool | UndefinedType = Undefined, network_services: NetworkServices | UndefinedType = Undefined, underlay_router: bool | UndefinedType = Undefined, @@ -24652,9 +24633,6 @@ def __init__( `server` indicates that the router is a route-reflector. default_flow_tracker_type: Set the default flow tracker type. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. mlag_support: Can this node type support mlag. network_services: Will network services be deployed on this node type. @@ -25494,6 +25472,7 @@ def __init__( "sflow_subinterfaces": {"type": bool, "default": True}, "wan": {"type": bool, "default": True}, "ptp": {"type": bool, "default": True}, + "hardware_validation": {"type": bool, "default": True}, } queue_monitor: bool """ @@ -25656,6 +25635,15 @@ def __init__( The feature will be ignored on platforms where this is false. + Default value: `True` + """ + hardware_validation: bool + """ + Enable hardware validation for the device. + When `false`, all hardware tests are skipped, therefore + the `validation_profiles[].hardware` keys defined for the validation profile applied to the device + are ignored. + Default value: `True` """ @@ -25684,6 +25672,7 @@ def __init__( sflow_subinterfaces: bool | UndefinedType = Undefined, wan: bool | UndefinedType = Undefined, ptp: bool | UndefinedType = Undefined, + hardware_validation: bool | UndefinedType = Undefined, ) -> None: """ FeatureSupport. @@ -25779,6 +25768,11 @@ def __init__( Support for Precision Time Protocol (PTP). The feature will be ignored on platforms where this is false. + hardware_validation: + Enable hardware validation for the device. + When `false`, all hardware tests are skipped, therefore + the `validation_profiles[].hardware` keys defined for the validation profile applied to the device + are ignored. """ @@ -25868,7 +25862,6 @@ def __init__(self, *, platform: str | None | UndefinedType = Undefined, act_node "management_interface": {"type": str, "default": "Management1"}, "security_entropy_sources": {"type": SecurityEntropySources}, "digital_twin": {"type": DigitalTwin}, - "validate_hardware": {"type": EosCliConfigGen.Metadata.ValidateHardware}, "structured_config": {"type": EosCliConfigGen}, "raw_eos_cli": {"type": str}, } @@ -25910,20 +25903,6 @@ def __init__(self, *, platform: str | None | UndefinedType = Undefined, act_node Subclass of AvdModel. """ - validate_hardware: EosCliConfigGen.Metadata.ValidateHardware - """ - Settings for hardware validation performed by the `anta_runner` role. - If `enabled` is set to - `false`, all other keys in this dictionary are ignored. - - For the `min_*` keys: - - Undefined - (Default): Validate that all available slots are populated. - - Positive Integer: Validate that the - number of components inserted is at least the specified minimum. - - 0: Skip the validation for this - specific component. - """ structured_config: EosCliConfigGen """Custom structured config for eos_cli_config_gen.""" raw_eos_cli: str | None @@ -25945,7 +25924,6 @@ def __init__( management_interface: str | UndefinedType = Undefined, security_entropy_sources: SecurityEntropySources | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, - validate_hardware: EosCliConfigGen.Metadata.ValidateHardware | UndefinedType = Undefined, structured_config: EosCliConfigGen | UndefinedType = Undefined, raw_eos_cli: str | None | UndefinedType = Undefined, ) -> None: @@ -25981,18 +25959,6 @@ def __init__( Subclass of AvdModel. - validate_hardware: - Settings for hardware validation performed by the `anta_runner` role. - If `enabled` is set to - `false`, all other keys in this dictionary are ignored. - - For the `min_*` keys: - - Undefined - (Default): Validate that all available slots are populated. - - Positive Integer: Validate that the - number of components inserted is at least the specified minimum. - - 0: Skip the validation for this - specific component. structured_config: Custom structured config for eos_cli_config_gen. raw_eos_cli: EOS CLI rendered directly on the root level of the final EOS configuration. @@ -26263,6 +26229,7 @@ def __init__( "sflow_subinterfaces": {"type": bool, "default": True}, "wan": {"type": bool, "default": True}, "ptp": {"type": bool, "default": True}, + "hardware_validation": {"type": bool, "default": True}, } queue_monitor: bool """ @@ -26425,6 +26392,15 @@ def __init__( The feature will be ignored on platforms where this is false. + Default value: `True` + """ + hardware_validation: bool + """ + Enable hardware validation for the device. + When `false`, all hardware tests are skipped, therefore + the `validation_profiles[].hardware` keys defined for the validation profile applied to the device + are ignored. + Default value: `True` """ @@ -26453,6 +26429,7 @@ def __init__( sflow_subinterfaces: bool | UndefinedType = Undefined, wan: bool | UndefinedType = Undefined, ptp: bool | UndefinedType = Undefined, + hardware_validation: bool | UndefinedType = Undefined, ) -> None: """ FeatureSupport. @@ -26548,6 +26525,11 @@ def __init__( Support for Precision Time Protocol (PTP). The feature will be ignored on platforms where this is false. + hardware_validation: + Enable hardware validation for the device. + When `false`, all hardware tests are skipped, therefore + the `validation_profiles[].hardware` keys defined for the validation profile applied to the device + are ignored. """ @@ -26637,7 +26619,6 @@ def __init__(self, *, platform: str | None | UndefinedType = Undefined, act_node "management_interface": {"type": str, "default": "Management1"}, "security_entropy_sources": {"type": SecurityEntropySources}, "digital_twin": {"type": DigitalTwin}, - "validate_hardware": {"type": EosCliConfigGen.Metadata.ValidateHardware}, "structured_config": {"type": EosCliConfigGen}, "raw_eos_cli": {"type": str}, } @@ -26679,20 +26660,6 @@ def __init__(self, *, platform: str | None | UndefinedType = Undefined, act_node Subclass of AvdModel. """ - validate_hardware: EosCliConfigGen.Metadata.ValidateHardware - """ - Settings for hardware validation performed by the `anta_runner` role. - If `enabled` is set to - `false`, all other keys in this dictionary are ignored. - - For the `min_*` keys: - - Undefined - (Default): Validate that all available slots are populated. - - Positive Integer: Validate that the - number of components inserted is at least the specified minimum. - - 0: Skip the validation for this - specific component. - """ structured_config: EosCliConfigGen """Custom structured config for eos_cli_config_gen.""" raw_eos_cli: str | None @@ -26714,7 +26681,6 @@ def __init__( management_interface: str | UndefinedType = Undefined, security_entropy_sources: SecurityEntropySources | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, - validate_hardware: EosCliConfigGen.Metadata.ValidateHardware | UndefinedType = Undefined, structured_config: EosCliConfigGen | UndefinedType = Undefined, raw_eos_cli: str | None | UndefinedType = Undefined, ) -> None: @@ -26750,18 +26716,6 @@ def __init__( Subclass of AvdModel. - validate_hardware: - Settings for hardware validation performed by the `anta_runner` role. - If `enabled` is set to - `false`, all other keys in this dictionary are ignored. - - For the `min_*` keys: - - Undefined - (Default): Validate that all available slots are populated. - - Positive Integer: Validate that the - number of components inserted is at least the specified minimum. - - 0: Skip the validation for this - specific component. structured_config: Custom structured config for eos_cli_config_gen. raw_eos_cli: EOS CLI rendered directly on the root level of the final EOS configuration. @@ -32317,6 +32271,183 @@ def __init__(self, *, enable: bool | UndefinedType = Undefined) -> None: """ + class ValidationProfilesItem(AvdModel): + """Subclass of AvdModel.""" + + class Hardware(AvdModel): + """Subclass of AvdModel.""" + + class TransceiverManufacturers(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + TransceiverManufacturers._item_type = str + + _fields: ClassVar[dict] = { + "min_power_supplies": {"type": int}, + "min_fans": {"type": int}, + "min_supervisors": {"type": int}, + "min_line_cards": {"type": int}, + "min_fabric_cards": {"type": int}, + "transceiver_manufacturers": { + "type": TransceiverManufacturers, + "default": lambda cls: coerce_type(["Arista Networks", "Arastra, Inc."], target_type=cls), + }, + } + min_power_supplies: int | None + """Minimum number of power supplies required for the device. Set to 0 to skip validation.""" + min_fans: int | None + """Minimum number of fans required for the device. Set to 0 to skip validation.""" + min_supervisors: int | None + """Minimum number of supervisor modules required for the device. Set to 0 to skip validation.""" + min_line_cards: int | None + """Minimum number of line cards required for the device. Set to 0 to skip validation.""" + min_fabric_cards: int | None + """Minimum number of fabric cards required for the device. Set to 0 to skip validation.""" + transceiver_manufacturers: TransceiverManufacturers + """ + List of approved transceiver manufacturers for the device. + + Subclass of AvdList with `str` items. + + Default value: `lambda cls: coerce_type(["Arista Networks", "Arastra, Inc."], target_type=cls)` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + min_power_supplies: int | None | UndefinedType = Undefined, + min_fans: int | None | UndefinedType = Undefined, + min_supervisors: int | None | UndefinedType = Undefined, + min_line_cards: int | None | UndefinedType = Undefined, + min_fabric_cards: int | None | UndefinedType = Undefined, + transceiver_manufacturers: TransceiverManufacturers | UndefinedType = Undefined, + ) -> None: + """ + Hardware. + + + Subclass of AvdModel. + + Args: + min_power_supplies: Minimum number of power supplies required for the device. Set to 0 to skip validation. + min_fans: Minimum number of fans required for the device. Set to 0 to skip validation. + min_supervisors: Minimum number of supervisor modules required for the device. Set to 0 to skip validation. + min_line_cards: Minimum number of line cards required for the device. Set to 0 to skip validation. + min_fabric_cards: Minimum number of fabric cards required for the device. Set to 0 to skip validation. + transceiver_manufacturers: + List of approved transceiver manufacturers for the device. + + Subclass of AvdList with `str` items. + + """ + + class Logging(AvdModel): + """Subclass of AvdModel.""" + + _fields: ClassVar[dict] = {"validate_no_errors_period": {"type": int}} + validate_no_errors_period: int | None + """ + Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during + the validation performed by the `anta_runner` role. + """ + + if TYPE_CHECKING: + + def __init__(self, *, validate_no_errors_period: int | None | UndefinedType = Undefined) -> None: + """ + Logging. + + + Subclass of AvdModel. + + Args: + validate_no_errors_period: + Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during + the validation performed by the `anta_runner` role. + + """ + + _fields: ClassVar[dict] = { + "name": {"type": str}, + "parent_profile": {"type": str}, + "hardware": {"type": Hardware}, + "logging": {"type": Logging}, + "exclude_as_extra_fabric_validation_target": {"type": bool, "default": False}, + } + name: str + parent_profile: str | None + """ + Inherit settings from a parent profile defined under `validation_profiles`. + Max one level of profile + inheritance: profile -> parent_profile + """ + hardware: Hardware + """ + Hardware validation thresholds for the device. + These settings are only applied when + `platform_settings/custom_platform_settings[].feature_support.hardware_validation` is set to `true`. + If hardware validation is disabled, all hardware validation checks are skipped and the keys under + this section are ignored. + + Subclass of AvdModel. + """ + logging: Logging + """Subclass of AvdModel.""" + exclude_as_extra_fabric_validation_target: bool + """ + Exclude this node from being used as a destination target from other fabric devices in the extra + fabric validation tests performed by the `anta_runner` role. + + Default value: `False` + """ + + if TYPE_CHECKING: + + def __init__( + self, + *, + name: str | UndefinedType = Undefined, + parent_profile: str | None | UndefinedType = Undefined, + hardware: Hardware | UndefinedType = Undefined, + logging: Logging | UndefinedType = Undefined, + exclude_as_extra_fabric_validation_target: bool | UndefinedType = Undefined, + ) -> None: + """ + ValidationProfilesItem. + + + Subclass of AvdModel. + + Args: + name: name + parent_profile: + Inherit settings from a parent profile defined under `validation_profiles`. + Max one level of profile + inheritance: profile -> parent_profile + hardware: + Hardware validation thresholds for the device. + These settings are only applied when + `platform_settings/custom_platform_settings[].feature_support.hardware_validation` is set to `true`. + If hardware validation is disabled, all hardware validation checks are skipped and the keys under + this section are ignored. + + Subclass of AvdModel. + logging: Subclass of AvdModel. + exclude_as_extra_fabric_validation_target: + Exclude this node from being used as a destination target from other fabric devices in the extra + fabric validation tests performed by the `anta_runner` role. + + """ + + class ValidationProfiles(AvdIndexedList[str, ValidationProfilesItem]): + """Subclass of AvdIndexedList with `ValidationProfilesItem` items. Primary key is `name` (`str`).""" + + _primary_key: ClassVar[str] = "name" + + ValidationProfiles._item_type = ValidationProfilesItem + class WanCarriersItem(AvdModel): """Subclass of AvdModel.""" @@ -37373,7 +37504,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -37465,6 +37595,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } id: int | None """Unique identifier used for IP addressing and other algorithms.""" @@ -37676,11 +37807,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -38341,6 +38467,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -38380,7 +38514,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -38473,6 +38606,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ Defaults. @@ -38629,9 +38763,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -39084,6 +39215,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -42415,7 +42552,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -42507,6 +42643,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } name: str """The Node Name is used as "hostname".""" @@ -42728,11 +42865,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -43393,6 +43525,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -43434,7 +43574,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -43527,6 +43666,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodesItem. @@ -43690,9 +43830,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -44145,6 +44282,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -47384,7 +47527,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -47476,6 +47618,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } group: str """ @@ -47700,11 +47843,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -48365,6 +48503,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -48406,7 +48552,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -48499,6 +48644,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodeGroupsItem. @@ -48664,9 +48810,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -49119,6 +49262,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -52433,7 +52582,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -52525,6 +52673,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } name: str """The Node Name is used as "hostname".""" @@ -52746,11 +52895,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -53411,6 +53555,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -53452,7 +53604,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -53545,6 +53696,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodesItem. @@ -53708,9 +53860,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -54163,6 +54312,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -69687,7 +69842,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -69779,6 +69933,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } id: int | None """Unique identifier used for IP addressing and other algorithms.""" @@ -69990,11 +70145,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -70655,6 +70805,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -70694,7 +70852,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -70787,6 +70944,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ Defaults. @@ -70943,9 +71101,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -71398,6 +71553,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -74729,7 +74890,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -74821,6 +74981,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } name: str """The Node Name is used as "hostname".""" @@ -75042,11 +75203,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -75707,6 +75863,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -75748,7 +75912,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -75841,6 +76004,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodesItem. @@ -76004,9 +76168,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -76459,6 +76620,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -79698,7 +79865,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -79790,6 +79956,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } group: str """ @@ -80014,11 +80181,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -80679,6 +80841,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -80720,7 +80890,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -80813,6 +80982,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodeGroupsItem. @@ -80978,9 +81148,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -81433,6 +81600,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -84747,7 +84920,6 @@ def __init__( "uplink_macsec": {"type": UplinkMacsec}, "uplink_port_channel_id": {"type": int}, "uplink_switch_port_channel_id": {"type": int}, - "exclude_as_extra_fabric_validation_target": {"type": bool}, "uplink_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, "uplink_port_channel_structured_config": {"type": EosCliConfigGen.PortChannelInterfacesItem}, "uplink_switch_ethernet_structured_config": {"type": EosCliConfigGen.EthernetInterfacesItem}, @@ -84839,6 +85011,7 @@ def __init__( "campus_access_pod": {"type": str}, "cv_tags_topology_type": {"type": str}, "digital_twin": {"type": DigitalTwin}, + "validation_profile": {"type": str}, } name: str """The Node Name is used as "hostname".""" @@ -85060,11 +85233,6 @@ def __init__( Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. """ - exclude_as_extra_fabric_validation_target: bool | None - """ - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. - """ uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem """Custom structured config applied to `uplink_interfaces`.""" uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem @@ -85725,6 +85893,14 @@ def __init__( Subclass of AvdModel. """ + validation_profile: str | None + """ + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. + """ if TYPE_CHECKING: @@ -85766,7 +85942,6 @@ def __init__( uplink_macsec: UplinkMacsec | UndefinedType = Undefined, uplink_port_channel_id: int | None | UndefinedType = Undefined, uplink_switch_port_channel_id: int | None | UndefinedType = Undefined, - exclude_as_extra_fabric_validation_target: bool | None | UndefinedType = Undefined, uplink_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, uplink_port_channel_structured_config: EosCliConfigGen.PortChannelInterfacesItem | UndefinedType = Undefined, uplink_switch_ethernet_structured_config: EosCliConfigGen.EthernetInterfacesItem | UndefinedType = Undefined, @@ -85859,6 +86034,7 @@ def __init__( campus_access_pod: str | None | UndefinedType = Undefined, cv_tags_topology_type: str | None | UndefinedType = Undefined, digital_twin: DigitalTwin | UndefinedType = Undefined, + validation_profile: str | None | UndefinedType = Undefined, ) -> None: """ NodesItem. @@ -86022,9 +86198,6 @@ def __init__( autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - Exclude this node from being used as a destination target from other fabric devices in the extra - fabric validation tests performed by the `anta_runner` role. uplink_ethernet_structured_config: Custom structured config applied to `uplink_interfaces`. uplink_port_channel_structured_config: Custom structured config applied to the uplink Port-Channel when using port-channel uplinks. uplink_switch_ethernet_structured_config: Custom structured config applied to `uplink_switch_interfaces` on the `uplink_switches`. @@ -86477,6 +86650,12 @@ def __init__( associated node(s). Subclass of AvdModel. + validation_profile: + Name of the validation profile to apply to this device. + The profile must be defined under + `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by + the `anta_runner` role during post-deployment validation. """ @@ -87008,10 +87187,10 @@ def __init__( "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True, + "hardware_validation": False, }, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}, - "validate_hardware": {"enabled": False}, }, { "platforms": ["CEOS", "cEOS", "ceos", "cEOSLab"], @@ -87021,18 +87200,22 @@ def __init__( "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True, + "hardware_validation": False, }, "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}, - "validate_hardware": {"enabled": False}, }, { "platforms": ["CloudEOS"], - "feature_support": {"bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, + "feature_support": { + "bgp_update_wait_install": False, + "interface_storm_control": False, + "queue_monitor_length_notify": False, + "hardware_validation": False, + }, "p2p_uplinks_mtu": 9194, "digital_twin": {"act_node_type": "cloudeos"}, - "validate_hardware": {"enabled": False}, }, { "platforms": ["AWE-5310", "AWE-7230R"], @@ -87148,6 +87331,7 @@ def __init__( "uplink_ptp": {"type": UplinkPtp}, "use_cv_topology": {"type": bool}, "use_router_general_for_router_id": {"type": bool, "default": False}, + "validation_profiles": {"type": ValidationProfiles}, "vtep_loopback_description": {"type": str, "default": "VXLAN_TUNNEL_SOURCE"}, "vtep_vvtep_ip": {"type": str}, "wan_carriers": {"type": WanCarriers}, @@ -88605,7 +88789,7 @@ def __init__( Subclass of AvdList with `PlatformSettingsItem` items. - Default value: `lambda cls: coerce_type([{"platforms": ["default"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7050X3"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["720XP"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16000 l2-shared 18000 l3-shared 22000", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["750", "755", "758"], "management_interface": "Management0", "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["720DP", "722XP", "710P"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7010TX"], "feature_support": {"queue_monitor_length_notify": False, "per_interface_mtu": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7280R", "7280R2", "7020R"], "lag_hardware_only": True, "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7280R3"], "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"evpn_gateway_all_active_multihoming": True, "private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7500R", "7500R2"], "lag_hardware_only": True, "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7500R3", "7800R3"], "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"evpn_gateway_all_active_multihoming": True, "private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7358X4"], "management_interface": "Management1/1", "reload_delay": {"mlag": 300, "non_mlag": 330}, "feature_support": {"queue_monitor_length_notify": False, "interface_storm_control": True, "bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7368X4"], "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7300X3"], "management_interface": "Management0", "reload_delay": {"mlag": 1200, "non_mlag": 1320}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["VEOS", "VEOS-LAB", "vEOS", "vEOS-lab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}, "validate_hardware": {"enabled": False}}, {"platforms": ["CEOS", "cEOS", "ceos", "cEOSLab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True}, "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}, "validate_hardware": {"enabled": False}}, {"platforms": ["CloudEOS"], "feature_support": {"bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False}, "p2p_uplinks_mtu": 9194, "digital_twin": {"act_node_type": "cloudeos"}, "validate_hardware": {"enabled": False}}, {"platforms": ["AWE-5310", "AWE-7230R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 6}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}, {"platforms": ["AWE-5510", "AWE-7250R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 16}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}, {"platforms": ["AWE-7220R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "poe": True}, "management_interface": "Management1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}], target_type=cls)` + Default value: `lambda cls: coerce_type([{"platforms": ["default"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7050X3"], "feature_support": {"queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["720XP"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "trident_forwarding_table_partition": "flexible exact-match 16000 l2-shared 18000 l3-shared 22000", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["750", "755", "758"], "management_interface": "Management0", "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["720DP", "722XP", "710P"], "feature_support": {"poe": True, "queue_monitor_length_notify": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7010TX"], "feature_support": {"queue_monitor_length_notify": False, "per_interface_mtu": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7280R", "7280R2", "7020R"], "lag_hardware_only": True, "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7280R3"], "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"evpn_gateway_all_active_multihoming": True, "private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7500R", "7500R2"], "lag_hardware_only": True, "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7500R3", "7800R3"], "management_interface": "Management0", "reload_delay": {"mlag": 900, "non_mlag": 1020}, "tcam_profile": "vxlan-routing", "feature_support": {"evpn_gateway_all_active_multihoming": True, "private_vlan": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7358X4"], "management_interface": "Management1/1", "reload_delay": {"mlag": 300, "non_mlag": 330}, "feature_support": {"queue_monitor_length_notify": False, "interface_storm_control": True, "bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7368X4"], "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["7300X3"], "management_interface": "Management0", "reload_delay": {"mlag": 1200, "non_mlag": 1320}, "trident_forwarding_table_partition": "flexible exact-match 16384 l2-shared 98304 l3-shared 131072", "digital_twin": {"platform": "vEOS-lab"}}, {"platforms": ["VEOS", "VEOS-LAB", "vEOS", "vEOS-lab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True, "hardware_validation": False}, "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}}, {"platforms": ["CEOS", "cEOS", "ceos", "cEOSLab"], "feature_support": {"bgp_update_wait_for_convergence": False, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "evpn_gateway_all_active_multihoming": True, "hardware_validation": False}, "management_interface": "Management0", "reload_delay": {"mlag": 300, "non_mlag": 330}, "digital_twin": {"act_node_type": "veos"}}, {"platforms": ["CloudEOS"], "feature_support": {"bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "hardware_validation": False}, "p2p_uplinks_mtu": 9194, "digital_twin": {"act_node_type": "cloudeos"}}, {"platforms": ["AWE-5310", "AWE-7230R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 6}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}, {"platforms": ["AWE-5510", "AWE-7250R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "platform_sfe_interface_profile": {"supported": True, "max_rx_queues": 16}}, "management_interface": "Management1/1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}, {"platforms": ["AWE-7220R"], "feature_support": {"bgp_update_wait_for_convergence": True, "bgp_update_wait_install": False, "interface_storm_control": False, "queue_monitor_length_notify": False, "poe": True}, "management_interface": "Management1", "p2p_uplinks_mtu": 9194, "digital_twin": {"platform": "CloudEOS"}}], target_type=cls)` """ platform_speed_groups: PlatformSpeedGroups """ @@ -89002,6 +89186,13 @@ def __init__( Default value: `False` """ + validation_profiles: ValidationProfiles + """ + List of validation profiles defining hardware, logging, and fabric-related validation rules. + Validation profiles can be referenced from node definitions (for example under + `l3leaf.nodes[].validation_profile`) and support single-level inheritance using `parent_profile`. + Subclass of AvdIndexedList with `ValidationProfilesItem` items. Primary key is `name` (`str`). + """ vtep_loopback_description: str """ Customize the description on the VTEP interface, typically Loopback1. @@ -89307,6 +89498,7 @@ def __init__( uplink_ptp: UplinkPtp | UndefinedType = Undefined, use_cv_topology: bool | None | UndefinedType = Undefined, use_router_general_for_router_id: bool | UndefinedType = Undefined, + validation_profiles: ValidationProfiles | UndefinedType = Undefined, vtep_loopback_description: str | UndefinedType = Undefined, vtep_vvtep_ip: str | None | UndefinedType = Undefined, wan_carriers: WanCarriers | UndefinedType = Undefined, @@ -90650,6 +90842,11 @@ def __init__( details. Requires both `cv_topology` and `cv_topology_levels` to be set. use_router_general_for_router_id: Use `router general` to set router ID for all routing protocols and VRFs. + validation_profiles: + List of validation profiles defining hardware, logging, and fabric-related validation rules. + Validation profiles can be referenced from node definitions (for example under + `l3leaf.nodes[].validation_profile`) and support single-level inheritance using `parent_profile`. + Subclass of AvdIndexedList with `ValidationProfilesItem` items. Primary key is `name` (`str`). vtep_loopback_description: Customize the description on the VTEP interface, typically Loopback1. vtep_vvtep_ip: IP Address used as Virtual VTEP. Will be configured as secondary IP on Loopback1. diff --git a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml index 75d2a0e6df7..a21916b9a69 100644 --- a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml @@ -3181,9 +3181,6 @@ keys: level: type: list $ref: eos_cli_config_gen#/keys/logging/keys/level - validate_no_errors_period: - type: int - $ref: eos_cli_config_gen#/keys/metadata/keys/validate_no_errors_period mac_address_table: documentation_options: table: system-settings @@ -4332,13 +4329,12 @@ keys: interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CEOS - cEOS @@ -4350,25 +4346,23 @@ keys: interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false management_interface: Management0 reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CloudEOS feature_support: bgp_update_wait_install: false interface_storm_control: false queue_monitor_length_notify: false + hardware_validation: false p2p_uplinks_mtu: 9194 digital_twin: act_node_type: cloudeos - validate_hardware: - enabled: false - platforms: - AWE-5310 - AWE-7230R @@ -5671,6 +5665,89 @@ keys: description: Use `router general` to set router ID for all routing protocols and VRFs. default: false + validation_profiles: + type: list + primary_key: name + description: 'List of validation profiles defining hardware, logging, and fabric-related + validation rules. + + Validation profiles can be referenced from node definitions (for example under + `l3leaf.nodes[].validation_profile`) and support single-level inheritance using + `parent_profile`.' + items: + type: dict + keys: + name: + type: str + parent_profile: + type: str + description: 'Inherit settings from a parent profile defined under `validation_profiles`. + + Max one level of profile inheritance: profile -> parent_profile' + hardware: + type: dict + description: 'Hardware validation thresholds for the device. + + These settings are only applied when `platform_settings/custom_platform_settings[].feature_support.hardware_validation` + is set to `true`. + + If hardware validation is disabled, all hardware validation checks are + skipped and the keys under this section are ignored.' + keys: + min_power_supplies: + type: int + convert_types: + - str + description: Minimum number of power supplies required for the device. + Set to 0 to skip validation. + min_fans: + type: int + convert_types: + - str + description: Minimum number of fans required for the device. Set to + 0 to skip validation. + min_supervisors: + type: int + convert_types: + - str + description: Minimum number of supervisor modules required for the device. + Set to 0 to skip validation. + min_line_cards: + type: int + convert_types: + - str + description: Minimum number of line cards required for the device. Set + to 0 to skip validation. + min_fabric_cards: + type: int + convert_types: + - str + description: Minimum number of fabric cards required for the device. + Set to 0 to skip validation. + transceiver_manufacturers: + type: list + description: List of approved transceiver manufacturers for the device. + items: + type: str + default: + - Arista Networks + - Arastra, Inc. + logging: + type: dict + keys: + validate_no_errors_period: + type: int + convert_types: + - str + description: Threshold (in minutes) defining how far back to check the + logging buffer for error-level logs during the validation performed + by the `anta_runner` role. + exclude_as_extra_fabric_validation_target: + type: bool + description: Exclude this node from being used as a destination target from + other fabric devices in the extra fabric validation tests performed by + the `anta_runner` role. + default: false vtep_loopback_description: documentation_options: table: overlay-settings @@ -9791,11 +9868,6 @@ $defs: not overlap with autogenerated Port-channel IDs in the Network Services.\nNote! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value.\n" - exclude_as_extra_fabric_validation_target: - type: bool - $ref: eos_cli_config_gen#/keys/metadata/keys/exclude_as_extra_fabric_validation_target - documentation_options: - table: node-type-common-configuration uplink_ethernet_structured_config: type: dict $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items @@ -10876,6 +10948,8 @@ $defs: - int description: Set BGP cluster id. kernel_ecmp_cli: + documentation_options: + table: node-type-common-configuration type: bool default: true description: 'Use EOS CLI to configure kernel forwarding ECMP programming. @@ -11408,6 +11482,16 @@ $defs: remove_in_version: 6.0.0 new_key: uplink_port_channel_structured_config or uplink_ethernet_structured_config or uplink_switch_ethernet_structured_config or uplink_switch_port_channel_structured_config + validation_profile: + documentation_options: + table: node-type-common-configuration + type: str + description: 'Name of the validation profile to apply to this device. + + The profile must be defined under `validation_profiles`. + + Validation profiles define requirements (e.g., hardware and logging) + used by the `anta_runner` role during post-deployment validation.' node_groups: type: list description: Define variables related to all nodes part of this group. @@ -11588,10 +11672,6 @@ $defs: - hardware description: Set the default flow tracker type. default: sampled - exclude_as_extra_fabric_validation_target: - type: bool - $ref: eos_cli_config_gen#/keys/metadata/keys/exclude_as_extra_fabric_validation_target - default: false mlag_support: type: bool default: false @@ -12843,6 +12923,14 @@ $defs: The feature will be ignored on platforms where this is false.' default: true + hardware_validation: + type: bool + description: 'Enable hardware validation for the device. + + When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` + keys defined for the validation profile applied to the device are + ignored.' + default: true management_interface: type: str default: Management1 @@ -12887,9 +12975,6 @@ $defs: - third-party - tools-server - veos - validate_hardware: - type: dict - $ref: eos_cli_config_gen#/keys/metadata/keys/validate_hardware structured_config: type: dict relaxed_validation: true diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type.schema.yml index f8b18030caa..4b813a89ef2 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type.schema.yml @@ -369,11 +369,6 @@ $defs: This option overrides the default behavior and statically sets the Port-channel ID on the uplink switch. Note! Make sure the ID is unique and does not overlap with autogenerated Port-channel IDs in the Network Services. Note! For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches must have the same value. - exclude_as_extra_fabric_validation_target: - type: bool - $ref: "eos_cli_config_gen#/keys/metadata/keys/exclude_as_extra_fabric_validation_target" - documentation_options: - table: node-type-common-configuration uplink_ethernet_structured_config: type: dict $ref: "eos_cli_config_gen#/keys/ethernet_interfaces/items" @@ -1219,6 +1214,8 @@ $defs: - "int" description: Set BGP cluster id. kernel_ecmp_cli: + documentation_options: + table: node-type-common-configuration type: bool default: true description: |- @@ -1700,6 +1697,14 @@ $defs: removed: true remove_in_version: 6.0.0 new_key: uplink_port_channel_structured_config or uplink_ethernet_structured_config or uplink_switch_ethernet_structured_config or uplink_switch_port_channel_structured_config + validation_profile: + documentation_options: + table: node-type-common-configuration + type: str + description: |- + Name of the validation profile to apply to this device. + The profile must be defined under `validation_profiles`. + Validation profiles define requirements (e.g., hardware and logging) used by the `anta_runner` role during post-deployment validation. node_groups: type: list description: Define variables related to all nodes part of this group. diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_keys.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_keys.schema.yml index 6593f17b7ea..f47260e5cca 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_keys.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_node_type_keys.schema.yml @@ -107,10 +107,6 @@ $defs: - "hardware" description: Set the default flow tracker type. default: "sampled" - exclude_as_extra_fabric_validation_target: - type: bool - $ref: "eos_cli_config_gen#/keys/metadata/keys/exclude_as_extra_fabric_validation_target" - default: false mlag_support: type: bool default: false diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_platform_settings.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_platform_settings.yml index a3c3dcdaa0c..945cdb9f63d 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_platform_settings.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_platform_settings.yml @@ -286,6 +286,12 @@ $defs: Support for Precision Time Protocol (PTP). The feature will be ignored on platforms where this is false. default: true + hardware_validation: + type: bool + description: |- + Enable hardware validation for the device. + When `false`, all hardware tests are skipped, therefore the `validation_profiles[].hardware` keys defined for the validation profile applied to the device are ignored. + default: true management_interface: type: str default: Management1 @@ -327,9 +333,6 @@ $defs: - third-party - tools-server - veos - validate_hardware: - type: dict - $ref: eos_cli_config_gen#/keys/metadata/keys/validate_hardware structured_config: type: dict relaxed_validation: true diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/logging_settings.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/logging_settings.yml index 6f467cb5b0b..62a16ed3e11 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/logging_settings.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/logging_settings.yml @@ -86,6 +86,3 @@ keys: level: type: list $ref: eos_cli_config_gen#/keys/logging/keys/level - validate_no_errors_period: - type: int - $ref: eos_cli_config_gen#/keys/metadata/keys/validate_no_errors_period diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml index 350e876fb97..2ca995d6e70 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/platform_settings.schema.yml @@ -191,13 +191,12 @@ keys: interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CEOS - cEOS @@ -209,25 +208,23 @@ keys: interface_storm_control: false queue_monitor_length_notify: false evpn_gateway_all_active_multihoming: true + hardware_validation: false management_interface: Management0 reload_delay: mlag: 300 non_mlag: 330 digital_twin: act_node_type: veos - validate_hardware: - enabled: false - platforms: - CloudEOS feature_support: bgp_update_wait_install: false interface_storm_control: false queue_monitor_length_notify: false + hardware_validation: false p2p_uplinks_mtu: 9194 digital_twin: act_node_type: cloudeos - validate_hardware: - enabled: false - platforms: - AWE-5310 - AWE-7230R diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/validation_profiles.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/validation_profiles.schema.yml new file mode 100644 index 00000000000..507fa033ba1 --- /dev/null +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/validation_profiles.schema.yml @@ -0,0 +1,82 @@ +# Copyright (c) 2025-2026 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=../../../_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: + validation_profiles: + type: list + primary_key: name + description: |- + List of validation profiles defining hardware, logging, and fabric-related validation rules. + Validation profiles can be referenced from node definitions (for example under `l3leaf.nodes[].validation_profile`) and support single-level inheritance using `parent_profile`. + items: + type: dict + keys: + name: + type: str + parent_profile: + type: str + description: |- + Inherit settings from a parent profile defined under `validation_profiles`. + Max one level of profile inheritance: profile -> parent_profile + hardware: + type: dict + description: |- + Hardware validation thresholds for the device. + These settings are only applied when `platform_settings/custom_platform_settings[].feature_support.hardware_validation` is set to `true`. + If hardware validation is disabled, all hardware validation checks are skipped and the keys under this section are ignored. + keys: + min_power_supplies: + type: int + convert_types: + - str + description: |- + Minimum number of power supplies required for the device. Set to 0 to skip validation. + min_fans: + type: int + convert_types: + - str + description: |- + Minimum number of fans required for the device. Set to 0 to skip validation. + min_supervisors: + type: int + convert_types: + - str + description: |- + Minimum number of supervisor modules required for the device. Set to 0 to skip validation. + min_line_cards: + type: int + convert_types: + - str + description: |- + Minimum number of line cards required for the device. Set to 0 to skip validation. + min_fabric_cards: + type: int + convert_types: + - str + description: |- + Minimum number of fabric cards required for the device. Set to 0 to skip validation. + transceiver_manufacturers: + type: list + description: |- + List of approved transceiver manufacturers for the device. + items: + type: str + default: + - 'Arista Networks' + - 'Arastra, Inc.' + logging: + type: dict + keys: + validate_no_errors_period: + type: int + convert_types: + - str + description: Threshold (in minutes) defining how far back to check the logging buffer for error-level logs during the validation performed by the `anta_runner` role. + exclude_as_extra_fabric_validation_target: + type: bool + description: Exclude this node from being used as a destination target from other fabric devices in the extra fabric validation tests performed by the `anta_runner` role. + default: false diff --git a/python-avd/pyavd/_eos_designs/structured_config/metadata/__init__.py b/python-avd/pyavd/_eos_designs/structured_config/metadata/__init__.py index 0de8e4b737a..7bdee06f2d4 100644 --- a/python-avd/pyavd/_eos_designs/structured_config/metadata/__init__.py +++ b/python-avd/pyavd/_eos_designs/structured_config/metadata/__init__.py @@ -5,19 +5,20 @@ from typing import Protocol +from pyavd._eos_designs.schema import EosCliConfigGen from pyavd._eos_designs.structured_config.structured_config_generator import ( StructuredConfigGenerator, StructuredConfigGeneratorProtocol, structured_config_contributor, ) -from pyavd._utils import default from .cv_pathfinder import CvPathfinderMixin from .cv_tags import CvTagsMixin from .digital_twin import DigitalTwinMixin +from .utils import UtilsMixin -class AvdStructuredConfigMetadataProtocol(CvTagsMixin, CvPathfinderMixin, DigitalTwinMixin, StructuredConfigGeneratorProtocol, Protocol): +class AvdStructuredConfigMetadataProtocol(CvTagsMixin, CvPathfinderMixin, DigitalTwinMixin, UtilsMixin, StructuredConfigGeneratorProtocol, Protocol): """Protocol for the AvdStructuredConfigMetadata Class.""" @structured_config_contributor @@ -31,19 +32,25 @@ def metadata(self) -> None: dc_name=self.inputs.dc_name, fabric_name=self.shared_utils.fabric_name, serial_number=self.shared_utils.serial_number, - validate_no_errors_period=self.inputs.logging_settings.validate_no_errors_period, ) - exclude_as_extra_fabric_validation_target = default( - self.shared_utils.node_config.exclude_as_extra_fabric_validation_target, - self.shared_utils.node_type_key_data.exclude_as_extra_fabric_validation_target, - ) - if exclude_as_extra_fabric_validation_target: - self.structured_config.metadata.exclude_as_extra_fabric_validation_target = exclude_as_extra_fabric_validation_target self._set_cv_tags() self._set_cv_pathfinder() if self.shared_utils.digital_twin: self._set_digital_twin() - self.structured_config.metadata.validate_hardware = self.shared_utils.platform_settings.validate_hardware + + # Logic for validate hardware + if not self.shared_utils.platform_settings.feature_support.hardware_validation: + self.structured_config.metadata.validate_hardware.enabled = False + if not self.shared_utils.node_config.validation_profile: + return + resolved_profile = self.get_resolved_validation_profile(self.shared_utils.node_config.validation_profile) + if self.shared_utils.platform_settings.feature_support.hardware_validation: + self.structured_config.metadata.validate_hardware = resolved_profile.hardware._cast_as( + EosCliConfigGen.Metadata.ValidateHardware, ignore_extra_keys=True + ) + self.structured_config.metadata.validate_no_errors_period = resolved_profile.logging.validate_no_errors_period + if resolved_profile.exclude_as_extra_fabric_validation_target: + self.structured_config.metadata.exclude_as_extra_fabric_validation_target = resolved_profile.exclude_as_extra_fabric_validation_target class AvdStructuredConfigMetadata(StructuredConfigGenerator, AvdStructuredConfigMetadataProtocol): diff --git a/python-avd/pyavd/_eos_designs/structured_config/metadata/utils.py b/python-avd/pyavd/_eos_designs/structured_config/metadata/utils.py new file mode 100644 index 00000000000..e53225f372c --- /dev/null +++ b/python-avd/pyavd/_eos_designs/structured_config/metadata/utils.py @@ -0,0 +1,64 @@ +# Copyright (c) 2025-2026 Arista Networks, Inc. +# Use of this source code is governed by the Apache License 2.0 +# that can be found in the LICENSE file. +from __future__ import annotations + +from typing import TYPE_CHECKING, Protocol + +from pyavd._errors import AristaAvdInvalidInputsError + +if TYPE_CHECKING: + from pyavd._eos_designs.schema import EosDesigns + + from . import AvdStructuredConfigMetadataProtocol + + +class UtilsMixin(Protocol): + """ + Mixin Class with internal functions. + + Class should only be used as Mixin to a AvdStructuredConfig class or other Mixins. + """ + + def get_resolved_validation_profile(self: AvdStructuredConfigMetadataProtocol, profile_name: str) -> EosDesigns.ValidationProfilesItem: + """ + Return a fully resolved validation profile. + + The validation profile is resolved as follows: + * Verify that the requested validation profile exists. + * If a parent profile is defined, verify that the parent profile exists. + * Deep-inherit the profile from its parent profile. + * Remove the `parent_profile` attribute from the resolved profile to + prevent further inheritance processing. + + Args: + profile_name: Name of the validation profile applied under the node + configuration. + + Returns: + The resolved validation profile with inheritance applied. + + Raises: + AristaAvdInvalidInputsError: If the validation profile or its parent + profile is not defined under `inputs.validation_profiles`. + """ + validation_profiles = self.inputs.validation_profiles + + if profile_name not in validation_profiles: + msg = f"Validation profile '{profile_name}' referenced in node configuration is not defined under 'validation_profiles'." + raise AristaAvdInvalidInputsError(msg) + + validation_profile = validation_profiles[profile_name] + + if (parent_name := validation_profile.parent_profile) is not None: + if parent_name not in validation_profiles: + msg = f"Parent validation profile '{parent_name}' referenced by validation profile '{profile_name}' is not defined under 'validation_profiles'." + raise AristaAvdInvalidInputsError(msg) + + parent_profile = validation_profiles[parent_name] + validation_profile = validation_profile._deepinherited(parent_profile) + + # Remove parent_profile after resolution to avoid re-processing inheritance + delattr(validation_profile, "parent_profile") + + return validation_profile