diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_l3_interfaces.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-interfaces.cfg similarity index 96% rename from ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_l3_interfaces.cfg rename to ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-interfaces.cfg index 4988ce94ae0..803863dc99c 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_l3_interfaces.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/node-type-l3-interfaces.cfg @@ -6,7 +6,7 @@ transceiver qsfp default-mode 4x10G ! service routing protocols model multi-agent ! -hostname l3_edge_l3_interfaces +hostname node-type-l3-interfaces ! spanning-tree mode none ! @@ -18,6 +18,7 @@ vrf instance MGMT interface Ethernet1 description peer1_eth1 no shutdown + speed forced 10000full no switchport ip address 192.168.1.2/31 service-policy type qos input TEST_POLICY diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-edge.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-edge.yml index 379a0f688a7..43a38a439a8 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-edge.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-edge.yml @@ -62,6 +62,13 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: dhcp + shutdown: false + type: routed + dhcp_client_accept_default_route: true loopback_interfaces: - name: Loopback0 description: Router_ID @@ -131,13 +138,6 @@ stun: ip_address: 10.7.7.7 - name: INET-autovpn-rr2-Ethernet1 ip_address: 10.8.8.8 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: dhcp - shutdown: false - type: routed - dhcp_client_accept_default_route: true dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr1.yml index 697488a8261..797e7164442 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr1.yml @@ -79,6 +79,13 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: dhcp + shutdown: false + type: routed + dhcp_client_accept_default_route: true loopback_interfaces: - name: Loopback0 description: Router_ID @@ -134,13 +141,6 @@ stun: server: local_interfaces: - Ethernet1 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: dhcp - shutdown: false - type: routed - dhcp_client_accept_default_route: true dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr2.yml index 3a76de8ae87..646328bb0c2 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/autovpn-rr2.yml @@ -79,11 +79,20 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: 10.8.8.8/31 + shutdown: false + type: routed loopback_interfaces: - name: Loopback0 description: Router_ID shutdown: false ip_address: 192.168.31.2/32 +static_routes: +- destination_address_prefix: 0.0.0.0/0 + gateway: 10.8.8.9 ip_security: ike_policies: - name: AUTOVPN-IKE @@ -134,15 +143,6 @@ stun: server: local_interfaces: - Ethernet1 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: 10.8.8.8/31 - shutdown: false - type: routed -static_routes: -- destination_address_prefix: 0.0.0.0/0 - gateway: 10.8.8.9 dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml index 3b3decc3bb5..87d15969a98 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-edge.yml @@ -69,6 +69,22 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: dhcp + shutdown: false + type: routed + dhcp_client_accept_default_route: true + flow_tracker: + hardware: WAN-FLOW-TRACKER +- name: Ethernet2 + peer_type: l3_interface + ip_address: 172.15.5.5/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER loopback_interfaces: - name: Loopback0 description: Router_ID @@ -178,22 +194,6 @@ stun: ip_address: 10.7.7.7 - name: INET-cv-pathfinder-pathfinder-Ethernet3 ip_address: 10.9.9.9 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: dhcp - shutdown: false - type: routed - dhcp_client_accept_default_route: true - flow_tracker: - hardware: WAN-FLOW-TRACKER -- name: Ethernet2 - peer_type: l3_interface - ip_address: 172.15.5.5/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml index f529577fe8b..760db54b905 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder.yml @@ -78,11 +78,36 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: 10.7.7.7/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER +- name: Ethernet2 + peer_type: l3_interface + ip_address: 172.16.0.1/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER +- name: Ethernet3 + peer_type: l3_interface + ip_address: 10.9.9.9/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER loopback_interfaces: - name: Loopback0 description: Router_ID shutdown: false ip_address: 192.168.44.1/32 +static_routes: +- destination_address_prefix: 0.0.0.0/0 + gateway: 10.7.7.6 flow_tracking: hardware: trackers: @@ -163,31 +188,6 @@ stun: - Ethernet1 - Ethernet2 - Ethernet3 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: 10.7.7.7/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER -- name: Ethernet2 - peer_type: l3_interface - ip_address: 172.16.0.1/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER -- name: Ethernet3 - peer_type: l3_interface - ip_address: 10.9.9.9/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER -static_routes: -- destination_address_prefix: 0.0.0.0/0 - gateway: 10.7.7.6 dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml index ce3c0baaf05..06b6b0b9de7 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder1.yml @@ -104,6 +104,14 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: 10.8.8.8/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER loopback_interfaces: - name: Loopback0 description: Router_ID @@ -190,14 +198,6 @@ stun: server: local_interfaces: - Ethernet1 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: 10.8.8.8/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml index f26e574f422..1eee5cd3489 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-pathfinder2.yml @@ -104,6 +104,21 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: 10.9.9.9/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER +- name: Ethernet2 + peer_type: l3_interface + ip_address: 172.19.9.9/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER loopback_interfaces: - name: Loopback0 description: Router_ID @@ -201,21 +216,6 @@ stun: local_interfaces: - Ethernet1 - Ethernet2 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: 10.9.9.9/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER -- name: Ethernet2 - peer_type: l3_interface - ip_address: 172.19.9.9/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit.yml index 2dfaa7a835d..28215c556ce 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/cv-pathfinder-transit.yml @@ -69,6 +69,22 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ethernet_interfaces: +- name: Ethernet1 + peer_type: l3_interface + ip_address: dhcp + shutdown: false + type: routed + dhcp_client_accept_default_route: true + flow_tracker: + hardware: WAN-FLOW-TRACKER +- name: Ethernet2 + peer_type: l3_interface + ip_address: 172.16.6.6/31 + shutdown: false + type: routed + flow_tracker: + hardware: WAN-FLOW-TRACKER loopback_interfaces: - name: Loopback0 description: Router_ID @@ -188,22 +204,6 @@ stun: ip_address: 10.9.9.9 - name: MPLS-cv-pathfinder-pathfinder-Ethernet2 ip_address: 172.16.0.1 -ethernet_interfaces: -- name: Ethernet1 - peer_type: l3_interface - ip_address: dhcp - shutdown: false - type: routed - dhcp_client_accept_default_route: true - flow_tracker: - hardware: WAN-FLOW-TRACKER -- name: Ethernet2 - peer_type: l3_interface - ip_address: 172.16.6.6/31 - shutdown: false - type: routed - flow_tracker: - hardware: WAN-FLOW-TRACKER dps_interfaces: - name: Dps1 description: DPS Interface diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_l3_interfaces.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-interfaces.yml similarity index 97% rename from ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_l3_interfaces.yml rename to ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-interfaces.yml index 9bf5c1114eb..78decbf3d75 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_l3_interfaces.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/node-type-l3-interfaces.yml @@ -1,4 +1,4 @@ -hostname: l3_edge_l3_interfaces +hostname: node-type-l3-interfaces is_deployed: true router_bgp: as: '65000' @@ -39,23 +39,6 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true -loopback_interfaces: -- name: Loopback0 - description: EVPN_Overlay_Peering - shutdown: false - ip_address: 1.2.3.1/32 -prefix_lists: -- name: PL-LOOPBACKS-EVPN-OVERLAY - sequence_numbers: - - sequence: 10 - action: permit 1.2.3.4/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 ethernet_interfaces: - name: Ethernet1 peer_type: l3_interface @@ -65,6 +48,7 @@ ethernet_interfaces: shutdown: false type: routed description: peer1_eth1 + speed: forced 10000full service_profile: TEST-QOS-PROFILE eos_cli: '! TEST RAW_EOS_CLI @@ -92,6 +76,23 @@ ethernet_interfaces: ip_address: 192.168.42.42/24 shutdown: true type: routed +loopback_interfaces: +- name: Loopback0 + description: EVPN_Overlay_Peering + shutdown: false + ip_address: 1.2.3.1/32 +prefix_lists: +- name: PL-LOOPBACKS-EVPN-OVERLAY + sequence_numbers: + - sequence: 10 + action: permit 1.2.3.4/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 static_routes: - destination_address_prefix: 0.0.0.0/0 gateway: 192.168.1.3 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/AUTOVPN_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/AUTOVPN_TESTS.yml index 16d6f90582f..55c1eb1bf06 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/AUTOVPN_TESTS.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/AUTOVPN_TESTS.yml @@ -41,6 +41,12 @@ wan_edge: nodes: - name: autovpn-edge id: 1 + l3_interfaces: + - name: Ethernet1 + wan_carrier: Comcast + wan_circuit_id: 666 + ip: dhcp + set_default_route: true wan_rr: defaults: @@ -48,8 +54,21 @@ wan_rr: nodes: - name: autovpn-rr1 id: 1 + l3_interfaces: + - name: Ethernet1 + wan_carrier: ATT + wan_circuit_id: 777 + ip: dhcp + set_default_route: true - name: autovpn-rr2 id: 2 + l3_interfaces: + - name: Ethernet1 + wan_carrier: ATT + wan_circuit_id: 888 + ip: 10.8.8.8/31 + set_default_route: true + peer_ip: 10.8.8.9 wan_path_groups: - name: MPLS @@ -65,25 +84,3 @@ wan_carriers: path_group: INET - name: ATT path_group: INET - -l3_edge: - l3_interfaces: - - node: autovpn-edge - interface: Ethernet1 - wan_carrier: Comcast - wan_circuit_id: 666 - ip: dhcp - set_default_route: true - - node: autovpn-rr1 - interface: Ethernet1 - wan_carrier: ATT - wan_circuit_id: 777 - ip: dhcp - set_default_route: true - - node: autovpn-rr2 - interface: Ethernet1 - wan_carrier: ATT - wan_circuit_id: 888 - ip: 10.8.8.8/31 - set_default_route: true - peer_ip: 10.8.8.9 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CV_PATHFINDER_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CV_PATHFINDER_TESTS.yml index 0aeca6b4d97..b5e131305ce 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CV_PATHFINDER_TESTS.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CV_PATHFINDER_TESTS.yml @@ -54,6 +54,17 @@ wan_edge: cv_pathfinder_region: AVD_Land_East cv_pathfinder_site: Site511 id: 1 + l3_interfaces: + - name: Ethernet1 + wan_carrier: ATT + wan_circuit_id: 666 + set_default_route: true + ip: dhcp + - name: Ethernet2 + wan_carrier: Colt + wan_circuit_id: 10555 + ip: 172.15.5.5/31 + connected_to_pathfinder: False wan_transit: defaults: @@ -63,6 +74,16 @@ wan_transit: cv_pathfinder_region: AVD_Land_West cv_pathfinder_site: Site422 id: 1 + l3_interfaces: + - name: Ethernet1 + wan_carrier: Comcast + wan_circuit_id: 667 + set_default_route: true + ip: dhcp + - name: Ethernet2 + wan_carrier: Colt + wan_circuit_id: 10666 + ip: 172.16.6.6/31 wan_rr: defaults: @@ -70,10 +91,39 @@ wan_rr: nodes: - name: cv-pathfinder-pathfinder id: 1 + l3_interfaces: + - name: Ethernet1 + wan_carrier: Bouygues_Telecom + wan_circuit_id: 777 + set_default_route: true + ip: 10.7.7.7/31 + peer_ip: 10.7.7.6 + - name: Ethernet2 + wan_carrier: Colt + wan_circuit_id: 10000 + ip: 172.16.0.1/31 + - name: Ethernet3 + wan_carrier: Another-ISP + wan_circuit_id: 999 + ip: 10.9.9.9/31 - name: cv-pathfinder-pathfinder1 id: 2 + l3_interfaces: + - name: Ethernet1 + wan_carrier: Orange + wan_circuit_id: 888 + ip: 10.8.8.8/31 - name: cv-pathfinder-pathfinder2 id: 3 + l3_interfaces: + - name: Ethernet1 + wan_carrier: SFR + wan_circuit_id: 999 + ip: 10.9.9.9/31 + - name: Ethernet2 + wan_carrier: ATT-MPLS + wan_circuit_id: 10999 + ip: 172.19.9.9/31 wan_path_groups: - name: MPLS @@ -102,61 +152,3 @@ wan_carriers: path_group: MPLS - name: ATT-MPLS path_group: MPLS - -l3_edge: - l3_interfaces: - - node: cv-pathfinder-edge - interface: Ethernet1 - wan_carrier: ATT - wan_circuit_id: 666 - set_default_route: true - ip: dhcp - - node: cv-pathfinder-edge - interface: Ethernet2 - wan_carrier: Colt - wan_circuit_id: 10555 - ip: 172.15.5.5/31 - connected_to_pathfinder: False - - node: cv-pathfinder-transit - interface: Ethernet1 - wan_carrier: Comcast - wan_circuit_id: 667 - set_default_route: true - ip: dhcp - - node: cv-pathfinder-transit - interface: Ethernet2 - wan_carrier: Colt - wan_circuit_id: 10666 - ip: 172.16.6.6/31 - - node: cv-pathfinder-pathfinder - interface: Ethernet1 - wan_carrier: Bouygues_Telecom - wan_circuit_id: 777 - set_default_route: true - ip: 10.7.7.7/31 - peer_ip: 10.7.7.6 - - node: cv-pathfinder-pathfinder - interface: Ethernet2 - wan_carrier: Colt - wan_circuit_id: 10000 - ip: 172.16.0.1/31 - - node: cv-pathfinder-pathfinder - interface: Ethernet3 - wan_carrier: Another-ISP - wan_circuit_id: 999 - ip: 10.9.9.9/31 - - node: cv-pathfinder-pathfinder1 - interface: Ethernet1 - wan_carrier: Orange - wan_circuit_id: 888 - ip: 10.8.8.8/31 - - node: cv-pathfinder-pathfinder2 - interface: Ethernet1 - wan_carrier: SFR - wan_circuit_id: 999 - ip: 10.9.9.9/31 - - node: cv-pathfinder-pathfinder2 - interface: Ethernet2 - wan_carrier: ATT-MPLS - wan_circuit_id: 10999 - ip: 172.19.9.9/31 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_l3_interfaces.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_l3_interfaces.yml deleted file mode 100644 index 1e70cd5d658..00000000000 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_l3_interfaces.yml +++ /dev/null @@ -1,48 +0,0 @@ -type: spine -spine: - nodes: - - name: l3_edge_l3_interfaces - id: 1 - evpn_role: "none" - loopback_ipv4_pool: 1.2.3.4/24 - bgp_as: 65000 - -l3_edge: - l3_interfaces_profiles: - - profile: profile1 - speed: "forced 10000full" - qos_profile: TEST-QOS-PROFILE - structured_config: - service_policy: - qos: - input: TEST_POLICY - raw_eos_cli: | - ! TEST RAW_EOS_CLI - l3_interfaces: - # Settings set via profile - - node: l3_edge_l3_interfaces - interface: Ethernet1 - ip: 192.168.1.2/31 - set_default_route: true - peer: peer1 - peer_interface: eth1 - peer_ip: 192.168.1.3 - profile: profile1 - # DHCP default route - - node: l3_edge_l3_interfaces - peer: peer2 - interface: Ethernet2/2 - ip: dhcp - set_default_route: true - # custom descriptipon - - node: l3_edge_l3_interfaces - peer: peer3 - interface: Ethernet42 - enabled: false - description: This is a custom description - ip: dhcp - # empty description - - node: l3_edge_l3_interfaces - interface: Ethernet43 - enabled: false - ip: 192.168.42.42/24 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-interfaces.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-interfaces.yml new file mode 100644 index 00000000000..9019126bd8c --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/node-type-l3-interfaces.yml @@ -0,0 +1,44 @@ +type: spine +spine: + nodes: + - name: node-type-l3-interfaces + id: 1 + evpn_role: "none" + loopback_ipv4_pool: 1.2.3.4/24 + bgp_as: 65000 + l3_interfaces: + - # Settings set via profile + name: Ethernet1 + ip: 192.168.1.2/31 + set_default_route: true + peer: peer1 + peer_interface: eth1 + peer_ip: 192.168.1.3 + profile: profile1 + - # DHCP default route + peer: peer2 + name: Ethernet2/2 + ip: dhcp + set_default_route: true + - # custom description + peer: peer3 + name: Ethernet42 + enabled: false + description: This is a custom description + ip: dhcp + - # empty description + name: Ethernet43 + enabled: false + ip: 192.168.42.42/24 + + +l3_interface_profiles: + - profile: profile1 + speed: "forced 10000full" + qos_profile: TEST-QOS-PROFILE + structured_config: + service_policy: + qos: + input: TEST_POLICY + raw_eos_cli: | + ! TEST RAW_EOS_CLI diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml index d26f928dcb2..0da42327fa2 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/hosts.yml @@ -32,6 +32,7 @@ all: evpn-to-ipvpn-gateway: vrfs_rd_rt_override: spanning-tree-mode-rapid-pvst: + node-type-l3-interfaces: OVERRIDE_UPLINK_TYPE: hosts: override_uplink_type-d: @@ -267,7 +268,6 @@ all: l3_edge_bgp: l3_edge_ospf: l3_edge_isis: - l3_edge_l3_interfaces: UPLINK_NATIVE_VLAN_TESTS: hosts: uplink-native-vlan-grandparent: diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/wan.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/wan.py index 9243170870e..94270c7df44 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/wan.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_facts/wan.py @@ -26,7 +26,7 @@ def wan_path_groups(self: EosDesignsFacts) -> list | None: Return the list of WAN path_groups directly connected to this router, with a list of dictionaries containing the (interface, ip_address) in the path_group. """ - if not self.shared_utils.wan_mode: + if self.shared_utils.wan_role != "server": return None return self.shared_utils.wan_local_path_groups diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_edge_l3_interfaces.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_edge_l3_interfaces.py deleted file mode 100644 index a51b14804d2..00000000000 --- a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_edge_l3_interfaces.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (c) 2023-2024 Arista Networks, Inc. -# Use of this source code is governed by the Apache License 2.0 -# that can be found in the LICENSE file. -from __future__ import annotations - -from functools import cached_property -from typing import TYPE_CHECKING - -from ansible_collections.arista.avd.plugins.plugin_utils.merge import merge -from ansible_collections.arista.avd.plugins.plugin_utils.utils import get, get_item - -if TYPE_CHECKING: - from .shared_utils import SharedUtils - - -# TODO only handle l3_edge for now need to look at core_interfaces too -class L3EdgeMixin: - """ - Mixin Class providing a subset of SharedUtils - Class should only be used as Mixin to the SharedUtils class - Using type-hint on self to get proper type-hints on attributes across all Mixins. - """ - - def _apply_profile(self: SharedUtils, target_dict: dict) -> dict: - """ - Apply a profile to a p2p_link or a l3_interface - """ - if "profile" not in target_dict: - # Nothing to do - return target_dict - - profiles = get(self.hostvars, "l3_edge.l3_interfaces_profiles", default=[]) - profile = get_item(profiles, "profile", target_dict["profile"], default={}) - - target_dict = merge(profile, target_dict, list_merge="replace", destructive_merge=False) - - target_dict.pop("profile", None) - - return target_dict - - @cached_property - def filtered_l3_interfaces(self: SharedUtils) -> list: - """ - Returns a filtered list of l3_interfaces, which only contains interfaces with our hostname. - For each interface any referenced profiles are applied. - """ - if not (l3_interfaces := get(self.hostvars, "l3_edge.l3_interfaces", default=[])): - return [] - - l3_interfaces = [self._apply_profile(l3_interface) for l3_interface in l3_interfaces] - - # Filter to only include l3_interfaces with our hostname as node - return [l3_interface for l3_interface in l3_interfaces if self.hostname == get(l3_interface, "node")] diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_interfaces.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_interfaces.py new file mode 100644 index 00000000000..bcd9061c373 --- /dev/null +++ b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/l3_interfaces.py @@ -0,0 +1,57 @@ +# Copyright (c) 2023-2024 Arista Networks, Inc. +# Use of this source code is governed by the Apache License 2.0 +# that can be found in the LICENSE file. +from __future__ import annotations + +from functools import cached_property +from typing import TYPE_CHECKING + +from ansible_collections.arista.avd.plugins.plugin_utils.merge import merge +from ansible_collections.arista.avd.plugins.plugin_utils.utils import get, get_item + +if TYPE_CHECKING: + from .shared_utils import SharedUtils + + +class L3InterfacesMixin: + """ + Mixin Class providing a subset of SharedUtils + Class should only be used as Mixin to the SharedUtils class + Using type-hint on self to get proper type-hints on attributes across all Mixins. + """ + + def apply_l3_interfaces_profile(self: SharedUtils, l3_interface: dict) -> dict: + """ + Apply a profile to an l3_interface + """ + if "profile" not in l3_interface: + # Nothing to do + return l3_interface + + profile = get_item(self.l3_interface_profiles, "profile", l3_interface["profile"], default={}) + merged_dict: dict = merge(profile, l3_interface, list_merge="replace", destructive_merge=False) + merged_dict.pop("profile", None) + return merged_dict + + @cached_property + def l3_interface_profiles(self: SharedUtils) -> list: + return get(self.hostvars, "l3_interface_profiles", default=[]) + + # TODO: Add sflow knob under fabric_sflow to cover l3_interfaces defined under the node_types. + # @cached_property + # def _l3_interfaces_sflow(self) -> bool | None: + # return get(self._hostvars, f"fabric_sflow.{self.data_model}") + + @cached_property + def l3_interfaces(self: SharedUtils) -> list: + """ + Returns the list of l3_interfaces, where any referenced profiles are applied. + """ + if not (l3_interfaces := get(self.switch_data_combined, "l3_interfaces")): + return [] + + # Apply l3_interfaces._profile if set. Silently ignoring missing profile. + if self.l3_interface_profiles: + l3_interfaces = [self.apply_l3_interfaces_profile(l3_interface) for l3_interface in l3_interfaces] + + return l3_interfaces diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/shared_utils.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/shared_utils.py index 9c01bb90ed1..acac51a2974 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/shared_utils.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/shared_utils.py @@ -7,7 +7,7 @@ from .inband_management import InbandManagementMixin from .interface_descriptions import InterfaceDescriptionsMixin from .ip_addressing import IpAddressingMixin -from .l3_edge_l3_interfaces import L3EdgeMixin +from .l3_interfaces import L3InterfacesMixin from .link_tracking_groups import LinkTrackingGroupsMixin from .mgmt import MgmtMixin from .misc import MiscMixin @@ -31,7 +31,7 @@ class SharedUtils( InterfaceDescriptionsMixin, IpAddressingMixin, LinkTrackingGroupsMixin, - L3EdgeMixin, + L3InterfacesMixin, CvTopology, MgmtMixin, MlagMixin, diff --git a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/wan.py b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/wan.py index 70bd2676d7e..5b11eed8c29 100644 --- a/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/wan.py +++ b/ansible_collections/arista/avd/plugins/plugin_utils/eos_designs_shared_utils/wan.py @@ -21,7 +21,7 @@ class WanMixin: """ @cached_property - def wan_mode(self: SharedUtils) -> str | None: + def wan_mode(self: SharedUtils) -> str: return get(self.hostvars, "wan_mode", default="cv-pathfinder") @cached_property @@ -60,11 +60,11 @@ def wan_interfaces(self: SharedUtils) -> list: This may need to be made wider. This also may require a different format for the dictionaries inside the list. """ - if self.wan_mode is None: + if self.wan_role is None: return [] wan_interfaces = [] - for interface in self.filtered_l3_interfaces: + for interface in self.l3_interfaces: if get(interface, "wan_carrier") is not None: wan_interfaces.append(interface) @@ -84,44 +84,27 @@ def wan_local_carriers(self: SharedUtils) -> list: local_carriers_dict = {} global_carriers = get(self.hostvars, "wan_carriers", required=True) for interface in self.wan_interfaces: - iface_carrier = interface.get("wan_carrier") - carrier = get_item( - global_carriers, - "name", - iface_carrier, - required=True, - custom_error_msg=f"WAN carrier {iface_carrier} is not in the available carriers defined in `wan_carriers`", - ) - - local_carriers_dict.setdefault(carrier["name"], carrier | {"interfaces": []})["interfaces"].append( - {"name": get(interface, "interface", required=True), "ip_address": get(interface, "ip", required=True)} + interface_carrier = interface["wan_carrier"] + if interface_carrier not in local_carriers_dict: + local_carriers_dict[interface_carrier] = get_item( + global_carriers, + "name", + interface["wan_carrier"], + required=True, + custom_error_msg=f"WAN carrier {interface['wan_carrier']} is not in the available carriers defined in `wan_carriers`", + ).copy() + local_carriers_dict[interface_carrier]["interfaces"] = [] + + local_carriers_dict[interface_carrier]["interfaces"].append( + { + "name": get(interface, "name", required=True), + "ip_address": get(interface, "ip", required=True), + "connected_to_pathfinder": get(interface, "connected_to_pathfinder", default=True), + } ) return list(local_carriers_dict.values()) - def get_carrier_path_group(self: SharedUtils, carrier: str) -> dict: - """ - Returns the path_group dict from `wan_path_groups` associated to a carrier name as defined in `wan_carriers`. - """ - global_carriers = get(self.hostvars, "wan_carriers", required=True) - global_path_groups = get(self.hostvars, "wan_path_groups", required=True) - - path_group_name = get_item( - global_carriers, - "name", - carrier, - required=True, - custom_error_msg=f"WAN carrier {carrier} is not in the available carriers defined in `wan_carriers`", - )["path_group"] - - return get_item( - global_path_groups, - "name", - path_group_name, - required=True, - custom_error_msg=f"WAN path_group {path_group_name} defined for a WAN carrier is not in the available path_groups defined in `wan_path_groups`", - ) - @cached_property def wan_local_path_groups(self: SharedUtils) -> list: """ @@ -131,12 +114,25 @@ def wan_local_path_groups(self: SharedUtils) -> list: - name: ... ip: ... """ - if self.wan_mode is None: + if self.wan_role is None: return [] local_path_groups_dict = {} + global_path_groups = get(self.hostvars, "wan_path_groups", required=True) for carrier in self.wan_local_carriers: - path_group = self.get_carrier_path_group(carrier["name"]) - local_path_groups_dict.setdefault(path_group["name"], path_group | {"interfaces": []})["interfaces"].extend(carrier.get("interfaces", [])) + path_group_name = get(carrier, "path_group", required=True) + if path_group_name not in local_path_groups_dict: + local_path_groups_dict[path_group_name] = get_item( + global_path_groups, + "name", + path_group_name, + required=True, + custom_error_msg=( + f"WAN path_group {path_group_name} defined for a WAN carrier is not in the available path_groups defined in `wan_path_groups`" + ), + ).copy() + local_path_groups_dict[path_group_name]["interfaces"] = [] + + local_path_groups_dict[path_group_name]["interfaces"].extend(carrier["interfaces"]) return list(local_path_groups_dict.values()) diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md index ac3b34b8e97..7c59f2feeb3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md @@ -92,35 +92,6 @@ | [              - <str>](## "core_interfaces.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces.[]") | String | | | | | | [      raw_eos_cli](## "core_interfaces.p2p_links.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | | [      structured_config](## "core_interfaces.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | - | [  l3_interfaces_profiles](## "core_interfaces.l3_interfaces_profiles") | List, items: Dictionary | | | | | - | [    - profile](## "core_interfaces.l3_interfaces_profiles.[].profile") | String | Required, Unique | | | L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. | - | [      interface](## "core_interfaces.l3_interfaces_profiles.[].interface") | String | | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | - | [      description](## "core_interfaces.l3_interfaces_profiles.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | - | [      ip](## "core_interfaces.l3_interfaces_profiles.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | - | [      set_default_route](## "core_interfaces.l3_interfaces_profiles.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | - | [      enabled](## "core_interfaces.l3_interfaces_profiles.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | - | [      speed](## "core_interfaces.l3_interfaces_profiles.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [      peer](## "core_interfaces.l3_interfaces_profiles.[].peer") | String | | | | The peer device name. Used for description and documentation | - | [      peer_interface](## "core_interfaces.l3_interfaces_profiles.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | - | [      peer_ip](## "core_interfaces.l3_interfaces_profiles.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | - | [      qos_profile](## "core_interfaces.l3_interfaces_profiles.[].qos_profile") | String | | | | QOS service profile. | - | [      raw_eos_cli](## "core_interfaces.l3_interfaces_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | - | [      structured_config](## "core_interfaces.l3_interfaces_profiles.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | - | [  l3_interfaces](## "core_interfaces.l3_interfaces") | List, items: Dictionary | | | | | - | [    - node](## "core_interfaces.l3_interfaces.[].node") | String | Required | | | Device on which the interface should be configured. | - | [      profile](## "core_interfaces.l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under l3_interfaces_profiles. | - | [      interface](## "core_interfaces.l3_interfaces.[].interface") | String | | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | - | [      description](## "core_interfaces.l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | - | [      ip](## "core_interfaces.l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | - | [      set_default_route](## "core_interfaces.l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | - | [      enabled](## "core_interfaces.l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | - | [      speed](## "core_interfaces.l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [      peer](## "core_interfaces.l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | - | [      peer_interface](## "core_interfaces.l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | - | [      peer_ip](## "core_interfaces.l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | - | [      qos_profile](## "core_interfaces.l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | - | [      raw_eos_cli](## "core_interfaces.l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | - | [      structured_config](## "core_interfaces.l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | === "YAML" @@ -346,95 +317,4 @@ # Custom structured config for interfaces # Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. structured_config: - l3_interfaces_profiles: - - # L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. - - profile: - - # Ethernet interface name like 'Ethernet2'. - interface: - - # Interface description. - # If not set a default description will be configured with '[[ ]]' - description: - - # Node IPv4 address/Mask or 'dhcp'. - ip: - - # Insert a default route to the `peer_ip` if `ip` is an ip address - # or configure to accept a default route from DHCP if `ip` is `dhcp`. - - # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. - set_default_route: - - # Enable or Shutdown the interface. - enabled: - - # Speed should be set in the format `` or `forced ` or `auto `. - speed: - - # The peer device name. Used for description and documentation - peer: - - # The peer device interface. Used for description and documentation - peer_interface: - - # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. - peer_ip: - - # QOS service profile. - qos_profile: - - # EOS CLI rendered directly on the interface in the final EOS configuration. - raw_eos_cli: - - # Custom structured config for the Ethernet interface. - structured_config: - l3_interfaces: - - # Device on which the interface should be configured. - - node: - - # L3 interface profile name. Profile defined under l3_interfaces_profiles. - profile: - - # Ethernet interface name like 'Ethernet2'. - interface: - - # Interface description. - # If not set a default description will be configured with '[[ ]]' - description: - - # Node IPv4 address/Mask or 'dhcp'. - ip: - - # Insert a default route to the `peer_ip` if `ip` is an ip address - # or configure to accept a default route from DHCP if `ip` is `dhcp`. - - # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. - set_default_route: - - # Enable or Shutdown the interface. - enabled: - - # Speed should be set in the format `` or `forced ` or `auto `. - speed: - - # The peer device name. Used for description and documentation - peer: - - # The peer device interface. Used for description and documentation - peer_interface: - - # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. - peer_ip: - - # QOS service profile. - qos_profile: - - # EOS CLI rendered directly on the interface in the final EOS configuration. - raw_eos_cli: - - # Custom structured config for the Ethernet interface. - structured_config: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md index bc036e24ade..fe5836e37cc 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md @@ -92,35 +92,6 @@ | [              - <str>](## "l3_edge.p2p_links.[].port_channel.nodes_child_interfaces.[].interfaces.[]") | String | | | | | | [      raw_eos_cli](## "l3_edge.p2p_links.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the point-to-point interface in the final EOS configuration. | | [      structured_config](## "l3_edge.p2p_links.[].structured_config") | Dictionary | | | | Custom structured config for interfaces
Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. | - | [  l3_interfaces_profiles](## "l3_edge.l3_interfaces_profiles") | List, items: Dictionary | | | | | - | [    - profile](## "l3_edge.l3_interfaces_profiles.[].profile") | String | Required, Unique | | | L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. | - | [      interface](## "l3_edge.l3_interfaces_profiles.[].interface") | String | | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | - | [      description](## "l3_edge.l3_interfaces_profiles.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | - | [      ip](## "l3_edge.l3_interfaces_profiles.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | - | [      set_default_route](## "l3_edge.l3_interfaces_profiles.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | - | [      enabled](## "l3_edge.l3_interfaces_profiles.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | - | [      speed](## "l3_edge.l3_interfaces_profiles.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [      peer](## "l3_edge.l3_interfaces_profiles.[].peer") | String | | | | The peer device name. Used for description and documentation | - | [      peer_interface](## "l3_edge.l3_interfaces_profiles.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | - | [      peer_ip](## "l3_edge.l3_interfaces_profiles.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | - | [      qos_profile](## "l3_edge.l3_interfaces_profiles.[].qos_profile") | String | | | | QOS service profile. | - | [      raw_eos_cli](## "l3_edge.l3_interfaces_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | - | [      structured_config](## "l3_edge.l3_interfaces_profiles.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | - | [  l3_interfaces](## "l3_edge.l3_interfaces") | List, items: Dictionary | | | | | - | [    - node](## "l3_edge.l3_interfaces.[].node") | String | Required | | | Device on which the interface should be configured. | - | [      profile](## "l3_edge.l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under l3_interfaces_profiles. | - | [      interface](## "l3_edge.l3_interfaces.[].interface") | String | | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | - | [      description](## "l3_edge.l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | - | [      ip](## "l3_edge.l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | - | [      set_default_route](## "l3_edge.l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | - | [      enabled](## "l3_edge.l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | - | [      speed](## "l3_edge.l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | - | [      peer](## "l3_edge.l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | - | [      peer_interface](## "l3_edge.l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | - | [      peer_ip](## "l3_edge.l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | - | [      qos_profile](## "l3_edge.l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | - | [      raw_eos_cli](## "l3_edge.l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | - | [      structured_config](## "l3_edge.l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | === "YAML" @@ -346,95 +317,4 @@ # Custom structured config for interfaces # Note! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces. structured_config: - l3_interfaces_profiles: - - # L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. - - profile: - - # Ethernet interface name like 'Ethernet2'. - interface: - - # Interface description. - # If not set a default description will be configured with '[[ ]]' - description: - - # Node IPv4 address/Mask or 'dhcp'. - ip: - - # Insert a default route to the `peer_ip` if `ip` is an ip address - # or configure to accept a default route from DHCP if `ip` is `dhcp`. - - # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. - set_default_route: - - # Enable or Shutdown the interface. - enabled: - - # Speed should be set in the format `` or `forced ` or `auto `. - speed: - - # The peer device name. Used for description and documentation - peer: - - # The peer device interface. Used for description and documentation - peer_interface: - - # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. - peer_ip: - - # QOS service profile. - qos_profile: - - # EOS CLI rendered directly on the interface in the final EOS configuration. - raw_eos_cli: - - # Custom structured config for the Ethernet interface. - structured_config: - l3_interfaces: - - # Device on which the interface should be configured. - - node: - - # L3 interface profile name. Profile defined under l3_interfaces_profiles. - profile: - - # Ethernet interface name like 'Ethernet2'. - interface: - - # Interface description. - # If not set a default description will be configured with '[[ ]]' - description: - - # Node IPv4 address/Mask or 'dhcp'. - ip: - - # Insert a default route to the `peer_ip` if `ip` is an ip address - # or configure to accept a default route from DHCP if `ip` is `dhcp`. - - # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. - set_default_route: - - # Enable or Shutdown the interface. - enabled: - - # Speed should be set in the format `` or `forced ` or `auto `. - speed: - - # The peer device name. Used for description and documentation - peer: - - # The peer device interface. Used for description and documentation - peer_interface: - - # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. - peer_ip: - - # QOS service profile. - qos_profile: - - # EOS CLI rendered directly on the interface in the final EOS configuration. - raw_eos_cli: - - # Custom structured config for the Ethernet interface. - structured_config: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-interfaces-settings.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-interfaces-settings.md index 5358738808e..0b12c697e28 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-interfaces-settings.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-interfaces-settings.md @@ -7,112 +7,420 @@ | Variable | Type | Required | Default | Value Restrictions | Description | | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [core_interfaces](## "core_interfaces") | Dictionary | | | | | - | [  l3_interfaces_profiles](## "core_interfaces.l3_interfaces_profiles") | List, items: Dictionary | | | | | - | [    - profile](## "core_interfaces.l3_interfaces_profiles.[].profile") | String | Required, Unique | | | L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. | - | [      wan_carrier](## "core_interfaces.l3_interfaces_profiles.[].wan_carrier") | String | | | | PREVIEW: This key is currently not supported

The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | - | [      wan_circuit_id](## "core_interfaces.l3_interfaces_profiles.[].wan_circuit_id") | String | | | | PREVIEW: This key is currently not supported

The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | - | [      connected_to_pathfinder](## "core_interfaces.l3_interfaces_profiles.[].connected_to_pathfinder") | Boolean | | | | PREVIEW: This key is currently not supported

For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.
Default True. | - | [  l3_interfaces](## "core_interfaces.l3_interfaces") | List, items: Dictionary | | | | | - | [      wan_carrier](## "core_interfaces.l3_interfaces.[].wan_carrier") | String | | | | PREVIEW: This key is currently not supported

The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | - | [      wan_circuit_id](## "core_interfaces.l3_interfaces.[].wan_circuit_id") | String | | | | PREVIEW: This key is currently not supported

The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | - | [      connected_to_pathfinder](## "core_interfaces.l3_interfaces.[].connected_to_pathfinder") | Boolean | | | | PREVIEW: This key is currently not supported

For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.
Default True. | - | [l3_edge](## "l3_edge") | Dictionary | | | | | - | [  l3_interfaces_profiles](## "l3_edge.l3_interfaces_profiles") | List, items: Dictionary | | | | | - | [    - profile](## "l3_edge.l3_interfaces_profiles.[].profile") | String | Required, Unique | | | L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. | - | [      wan_carrier](## "l3_edge.l3_interfaces_profiles.[].wan_carrier") | String | | | | PREVIEW: This key is currently not supported

The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | - | [      wan_circuit_id](## "l3_edge.l3_interfaces_profiles.[].wan_circuit_id") | String | | | | PREVIEW: This key is currently not supported

The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | - | [      connected_to_pathfinder](## "l3_edge.l3_interfaces_profiles.[].connected_to_pathfinder") | Boolean | | | | PREVIEW: This key is currently not supported

For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.
Default True. | - | [  l3_interfaces](## "l3_edge.l3_interfaces") | List, items: Dictionary | | | | | - | [      wan_carrier](## "l3_edge.l3_interfaces.[].wan_carrier") | String | | | | PREVIEW: This key is currently not supported

The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | - | [      wan_circuit_id](## "l3_edge.l3_interfaces.[].wan_circuit_id") | String | | | | PREVIEW: This key is currently not supported

The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | - | [      connected_to_pathfinder](## "l3_edge.l3_interfaces.[].connected_to_pathfinder") | Boolean | | | | PREVIEW: This key is currently not supported

For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.
Default True. | + | [<node_type_keys.key>](## "") | Dictionary | | | | | + | [  defaults](## ".defaults") | Dictionary | | | | Define variables for all nodes of this type. | + | [    l3_interfaces](## ".defaults.l3_interfaces") | List, items: Dictionary | | | | PREVIEW: This key is currently not supported

L3 Interfaces currently only use for WAN interfaces. | + | [      - profile](## ".defaults.l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
| + | [        name](## ".defaults.l3_interfaces.[].name") | String | Required, Unique | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | + | [        description](## ".defaults.l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | + | [        ip](## ".defaults.l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | + | [        set_default_route](## ".defaults.l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | + | [        enabled](## ".defaults.l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | + | [        speed](## ".defaults.l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | + | [        peer](## ".defaults.l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | + | [        peer_interface](## ".defaults.l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | + | [        peer_ip](## ".defaults.l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | + | [        qos_profile](## ".defaults.l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | + | [        wan_carrier](## ".defaults.l3_interfaces.[].wan_carrier") | String | | | | The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | + | [        wan_circuit_id](## ".defaults.l3_interfaces.[].wan_circuit_id") | String | | | | The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | + | [        connected_to_pathfinder](## ".defaults.l3_interfaces.[].connected_to_pathfinder") | Boolean | | `True` | | For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. | + | [        raw_eos_cli](## ".defaults.l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | + | [        structured_config](## ".defaults.l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | + | [  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". | + | [          l3_interfaces](## ".node_groups.[].nodes.[].l3_interfaces") | List, items: Dictionary | | | | PREVIEW: This key is currently not supported

L3 Interfaces currently only use for WAN interfaces. | + | [            - profile](## ".node_groups.[].nodes.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
| + | [              name](## ".node_groups.[].nodes.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | + | [              description](## ".node_groups.[].nodes.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | + | [              ip](## ".node_groups.[].nodes.[].l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | + | [              set_default_route](## ".node_groups.[].nodes.[].l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | + | [              enabled](## ".node_groups.[].nodes.[].l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | + | [              speed](## ".node_groups.[].nodes.[].l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | + | [              peer](## ".node_groups.[].nodes.[].l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | + | [              peer_interface](## ".node_groups.[].nodes.[].l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | + | [              peer_ip](## ".node_groups.[].nodes.[].l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | + | [              qos_profile](## ".node_groups.[].nodes.[].l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | + | [              wan_carrier](## ".node_groups.[].nodes.[].l3_interfaces.[].wan_carrier") | String | | | | The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | + | [              wan_circuit_id](## ".node_groups.[].nodes.[].l3_interfaces.[].wan_circuit_id") | String | | | | The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | + | [              connected_to_pathfinder](## ".node_groups.[].nodes.[].l3_interfaces.[].connected_to_pathfinder") | Boolean | | `True` | | For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. | + | [              raw_eos_cli](## ".node_groups.[].nodes.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | + | [              structured_config](## ".node_groups.[].nodes.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | + | [      l3_interfaces](## ".node_groups.[].l3_interfaces") | List, items: Dictionary | | | | PREVIEW: This key is currently not supported

L3 Interfaces currently only use for WAN interfaces. | + | [        - profile](## ".node_groups.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
| + | [          name](## ".node_groups.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | + | [          description](## ".node_groups.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | + | [          ip](## ".node_groups.[].l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | + | [          set_default_route](## ".node_groups.[].l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | + | [          enabled](## ".node_groups.[].l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | + | [          speed](## ".node_groups.[].l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | + | [          peer](## ".node_groups.[].l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | + | [          peer_interface](## ".node_groups.[].l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | + | [          peer_ip](## ".node_groups.[].l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | + | [          qos_profile](## ".node_groups.[].l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | + | [          wan_carrier](## ".node_groups.[].l3_interfaces.[].wan_carrier") | String | | | | The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | + | [          wan_circuit_id](## ".node_groups.[].l3_interfaces.[].wan_circuit_id") | String | | | | The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | + | [          connected_to_pathfinder](## ".node_groups.[].l3_interfaces.[].connected_to_pathfinder") | Boolean | | `True` | | For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. | + | [          raw_eos_cli](## ".node_groups.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | + | [          structured_config](## ".node_groups.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | + | [  nodes](## ".nodes") | List, items: Dictionary | | | | Define variables per node. | + | [    - name](## ".nodes.[].name") | String | Required, Unique | | | The Node Name is used as "hostname". | + | [      l3_interfaces](## ".nodes.[].l3_interfaces") | List, items: Dictionary | | | | PREVIEW: This key is currently not supported

L3 Interfaces currently only use for WAN interfaces. | + | [        - profile](## ".nodes.[].l3_interfaces.[].profile") | String | | | | L3 interface profile name. Profile defined under `l3_interface_profiles`.
| + | [          name](## ".nodes.[].l3_interfaces.[].name") | String | Required, Unique | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | + | [          description](## ".nodes.[].l3_interfaces.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | + | [          ip](## ".nodes.[].l3_interfaces.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | + | [          set_default_route](## ".nodes.[].l3_interfaces.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | + | [          enabled](## ".nodes.[].l3_interfaces.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | + | [          speed](## ".nodes.[].l3_interfaces.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | + | [          peer](## ".nodes.[].l3_interfaces.[].peer") | String | | | | The peer device name. Used for description and documentation | + | [          peer_interface](## ".nodes.[].l3_interfaces.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | + | [          peer_ip](## ".nodes.[].l3_interfaces.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | + | [          qos_profile](## ".nodes.[].l3_interfaces.[].qos_profile") | String | | | | QOS service profile. | + | [          wan_carrier](## ".nodes.[].l3_interfaces.[].wan_carrier") | String | | | | The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | + | [          wan_circuit_id](## ".nodes.[].l3_interfaces.[].wan_circuit_id") | String | | | | The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | + | [          connected_to_pathfinder](## ".nodes.[].l3_interfaces.[].connected_to_pathfinder") | Boolean | | `True` | | For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. | + | [          raw_eos_cli](## ".nodes.[].l3_interfaces.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | + | [          structured_config](## ".nodes.[].l3_interfaces.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | + | [l3_interface_profiles](## "l3_interface_profiles") | List, items: Dictionary | | | | PREVIEW: This key is currently not supported

Profiles to inherit common settings for l3_interfaces defined under the node type key.
These profiles will *not* work for `l3_interfaces` defined under `vrfs`. | + | [  - profile](## "l3_interface_profiles.[].profile") | String | Required, Unique | | | L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. | + | [    name](## "l3_interface_profiles.[].name") | String | | | Pattern: Ethernet[\d/]+ | Ethernet interface name like 'Ethernet2'. | + | [    description](## "l3_interface_profiles.[].description") | String | | | | Interface description.
If not set a default description will be configured with '[[ ]]' | + | [    ip](## "l3_interface_profiles.[].ip") | String | | | | Node IPv4 address/Mask or 'dhcp'. | + | [    set_default_route](## "l3_interface_profiles.[].set_default_route") | Boolean | | `False` | | Insert a default route to the `peer_ip` if `ip` is an ip address
or configure to accept a default route from DHCP if `ip` is `dhcp`.

AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. | + | [    enabled](## "l3_interface_profiles.[].enabled") | Boolean | | `True` | | Enable or Shutdown the interface. | + | [    speed](## "l3_interface_profiles.[].speed") | String | | | | Speed should be set in the format `` or `forced ` or `auto `. | + | [    peer](## "l3_interface_profiles.[].peer") | String | | | | The peer device name. Used for description and documentation | + | [    peer_interface](## "l3_interface_profiles.[].peer_interface") | String | | | | The peer device interface. Used for description and documentation | + | [    peer_ip](## "l3_interface_profiles.[].peer_ip") | String | | | | The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. | + | [    qos_profile](## "l3_interface_profiles.[].qos_profile") | String | | | | QOS service profile. | + | [    wan_carrier](## "l3_interface_profiles.[].wan_carrier") | String | | | | The WAN Carrier this interface is connected to.
This is used to infer the path-groups in which this interface should be configured. | + | [    wan_circuit_id](## "l3_interface_profiles.[].wan_circuit_id") | String | | | | The WAN Circuit ID for this interface.
This is not rendered in the configuration but used for WAN designs. | + | [    connected_to_pathfinder](## "l3_interface_profiles.[].connected_to_pathfinder") | Boolean | | `True` | | For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. | + | [    raw_eos_cli](## "l3_interface_profiles.[].raw_eos_cli") | String | | | | EOS CLI rendered directly on the interface in the final EOS configuration. | + | [    structured_config](## "l3_interface_profiles.[].structured_config") | Dictionary | | | | Custom structured config for the Ethernet interface. | === "YAML" ```yaml - core_interfaces: - l3_interfaces_profiles: + : - # L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. - - profile: + # Define variables for all nodes of this type. + defaults: - # PREVIEW: This key is currently not supported + # PREVIEW: This key is currently not supported - # The WAN Carrier this interface is connected to. - # This is used to infer the path-groups in which this interface should be configured. - wan_carrier: + # L3 Interfaces currently only use for WAN interfaces. + l3_interfaces: - # PREVIEW: This key is currently not supported + # L3 interface profile name. Profile defined under `l3_interface_profiles`. + - profile: - # The WAN Circuit ID for this interface. - # This is not rendered in the configuration but used for WAN designs. - wan_circuit_id: + # Ethernet interface name like 'Ethernet2'. + name: - # PREVIEW: This key is currently not supported + # Interface description. + # If not set a default description will be configured with '[[ ]]' + description: - # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. - # Default True. - connected_to_pathfinder: - l3_interfaces: + # Node IPv4 address/Mask or 'dhcp'. + ip: - # PREVIEW: This key is currently not supported + # Insert a default route to the `peer_ip` if `ip` is an ip address + # or configure to accept a default route from DHCP if `ip` is `dhcp`. - # The WAN Carrier this interface is connected to. - # This is used to infer the path-groups in which this interface should be configured. - wan_carrier: + # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. + set_default_route: - # PREVIEW: This key is currently not supported + # Enable or Shutdown the interface. + enabled: - # The WAN Circuit ID for this interface. - # This is not rendered in the configuration but used for WAN designs. - wan_circuit_id: + # Speed should be set in the format `` or `forced ` or `auto `. + speed: - # PREVIEW: This key is currently not supported + # The peer device name. Used for description and documentation + peer: - # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. - # Default True. - connected_to_pathfinder: - l3_edge: - l3_interfaces_profiles: + # The peer device interface. Used for description and documentation + peer_interface: - # L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. - - profile: + # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. + peer_ip: - # PREVIEW: This key is currently not supported + # QOS service profile. + qos_profile: - # The WAN Carrier this interface is connected to. - # This is used to infer the path-groups in which this interface should be configured. - wan_carrier: + # The WAN Carrier this interface is connected to. + # This is used to infer the path-groups in which this interface should be configured. + wan_carrier: - # PREVIEW: This key is currently not supported + # The WAN Circuit ID for this interface. + # This is not rendered in the configuration but used for WAN designs. + wan_circuit_id: - # The WAN Circuit ID for this interface. - # This is not rendered in the configuration but used for WAN designs. - wan_circuit_id: + # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. + connected_to_pathfinder: - # PREVIEW: This key is currently not supported + # EOS CLI rendered directly on the interface in the final EOS configuration. + raw_eos_cli: - # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. - # Default True. - connected_to_pathfinder: - l3_interfaces: + # Custom structured config for the Ethernet interface. + structured_config: - # PREVIEW: This key is currently not supported + # Define variables related to all nodes part of this group. + node_groups: + + # 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. + - group: + + # Define variables per node. + nodes: + + # The Node Name is used as "hostname". + - name: + + # PREVIEW: This key is currently not supported + + # L3 Interfaces currently only use for WAN interfaces. + l3_interfaces: + + # L3 interface profile name. Profile defined under `l3_interface_profiles`. + - profile: + + # Ethernet interface name like 'Ethernet2'. + name: + + # Interface description. + # If not set a default description will be configured with '[[ ]]' + description: + + # Node IPv4 address/Mask or 'dhcp'. + ip: + + # Insert a default route to the `peer_ip` if `ip` is an ip address + # or configure to accept a default route from DHCP if `ip` is `dhcp`. + + # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. + set_default_route: + + # Enable or Shutdown the interface. + enabled: - # The WAN Carrier this interface is connected to. - # This is used to infer the path-groups in which this interface should be configured. - wan_carrier: + # Speed should be set in the format `` or `forced ` or `auto `. + speed: + + # The peer device name. Used for description and documentation + peer: + + # The peer device interface. Used for description and documentation + peer_interface: + + # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. + peer_ip: + + # QOS service profile. + qos_profile: + + # The WAN Carrier this interface is connected to. + # This is used to infer the path-groups in which this interface should be configured. + wan_carrier: + + # The WAN Circuit ID for this interface. + # This is not rendered in the configuration but used for WAN designs. + wan_circuit_id: + + # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. + connected_to_pathfinder: + + # EOS CLI rendered directly on the interface in the final EOS configuration. + raw_eos_cli: + + # Custom structured config for the Ethernet interface. + structured_config: # PREVIEW: This key is currently not supported - # The WAN Circuit ID for this interface. - # This is not rendered in the configuration but used for WAN designs. - wan_circuit_id: + # L3 Interfaces currently only use for WAN interfaces. + l3_interfaces: + + # L3 interface profile name. Profile defined under `l3_interface_profiles`. + - profile: + + # Ethernet interface name like 'Ethernet2'. + name: + + # Interface description. + # If not set a default description will be configured with '[[ ]]' + description: + + # Node IPv4 address/Mask or 'dhcp'. + ip: + + # Insert a default route to the `peer_ip` if `ip` is an ip address + # or configure to accept a default route from DHCP if `ip` is `dhcp`. + + # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. + set_default_route: + + # Enable or Shutdown the interface. + enabled: + + # Speed should be set in the format `` or `forced ` or `auto `. + speed: + + # The peer device name. Used for description and documentation + peer: + + # The peer device interface. Used for description and documentation + peer_interface: + + # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. + peer_ip: + + # QOS service profile. + qos_profile: + + # The WAN Carrier this interface is connected to. + # This is used to infer the path-groups in which this interface should be configured. + wan_carrier: + + # The WAN Circuit ID for this interface. + # This is not rendered in the configuration but used for WAN designs. + wan_circuit_id: + + # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. + connected_to_pathfinder: + + # EOS CLI rendered directly on the interface in the final EOS configuration. + raw_eos_cli: + + # Custom structured config for the Ethernet interface. + structured_config: + + # Define variables per node. + nodes: + + # The Node Name is used as "hostname". + - name: # PREVIEW: This key is currently not supported - # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. - # Default True. - connected_to_pathfinder: + # L3 Interfaces currently only use for WAN interfaces. + l3_interfaces: + + # L3 interface profile name. Profile defined under `l3_interface_profiles`. + - profile: + + # Ethernet interface name like 'Ethernet2'. + name: + + # Interface description. + # If not set a default description will be configured with '[[ ]]' + description: + + # Node IPv4 address/Mask or 'dhcp'. + ip: + + # Insert a default route to the `peer_ip` if `ip` is an ip address + # or configure to accept a default route from DHCP if `ip` is `dhcp`. + + # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. + set_default_route: + + # Enable or Shutdown the interface. + enabled: + + # Speed should be set in the format `` or `forced ` or `auto `. + speed: + + # The peer device name. Used for description and documentation + peer: + + # The peer device interface. Used for description and documentation + peer_interface: + + # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. + peer_ip: + + # QOS service profile. + qos_profile: + + # The WAN Carrier this interface is connected to. + # This is used to infer the path-groups in which this interface should be configured. + wan_carrier: + + # The WAN Circuit ID for this interface. + # This is not rendered in the configuration but used for WAN designs. + wan_circuit_id: + + # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. + connected_to_pathfinder: + + # EOS CLI rendered directly on the interface in the final EOS configuration. + raw_eos_cli: + + # Custom structured config for the Ethernet interface. + structured_config: + + # PREVIEW: This key is currently not supported + + # Profiles to inherit common settings for l3_interfaces defined under the node type key. + # These profiles will *not* work for `l3_interfaces` defined under `vrfs`. + l3_interface_profiles: + + # L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. + - profile: + + # Ethernet interface name like 'Ethernet2'. + name: + + # Interface description. + # If not set a default description will be configured with '[[ ]]' + description: + + # Node IPv4 address/Mask or 'dhcp'. + ip: + + # Insert a default route to the `peer_ip` if `ip` is an ip address + # or configure to accept a default route from DHCP if `ip` is `dhcp`. + + # AVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing. + set_default_route: + + # Enable or Shutdown the interface. + enabled: + + # Speed should be set in the format `` or `forced ` or `auto `. + speed: + + # The peer device name. Used for description and documentation + peer: + + # The peer device interface. Used for description and documentation + peer_interface: + + # The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address. + peer_ip: + + # QOS service profile. + qos_profile: + + # The WAN Carrier this interface is connected to. + # This is used to infer the path-groups in which this interface should be configured. + wan_carrier: + + # The WAN Circuit ID for this interface. + # This is not rendered in the configuration but used for WAN designs. + wan_circuit_id: + + # For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. + connected_to_pathfinder: + + # EOS CLI rendered directly on the interface in the final EOS configuration. + raw_eos_cli: + + # Custom structured config for the Ethernet interface. + structured_config: ``` diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/wan-preview.md b/ansible_collections/arista/avd/roles/eos_designs/docs/wan-preview.md index a316327fd1f..7dddca63e6d 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/wan-preview.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/wan-preview.md @@ -122,10 +122,6 @@ roles/eos_designs/docs/tables/wan-cv-pathfinder-regions.md #### WAN interfaces -!!! note - - The current code implements only `l3_edge.l3_interfaces` and not `core_interfaces.l3_interfaces` - --8<-- roles/eos_designs/docs/tables/wan-interfaces-settings.md --8<-- diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/avdstructuredconfig.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/avdstructuredconfig.py index 964f447174e..2572bce4987 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/avdstructuredconfig.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/avdstructuredconfig.py @@ -7,7 +7,6 @@ from .port_channel_interfaces import PortChannelInterfacesMixin from .router_bgp import RouterBgpMixin from .router_ospf import RouterOspfMixin -from .static_routes import StaticRoutesMixin DATA_MODELS = ["core_interfaces", "l3_edge"] @@ -18,7 +17,6 @@ class AvdStructuredConfigCoreInterfacesAndL3Edge( PortChannelInterfacesMixin, RouterBgpMixin, RouterOspfMixin, - StaticRoutesMixin, ): """ The AvdStructuredConfig Class is imported by "get_structured_config" to render parts of the structured config. diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/ethernet_interfaces.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/ethernet_interfaces.py index 6068521dea0..783b4c2b574 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/ethernet_interfaces.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/ethernet_interfaces.py @@ -56,18 +56,6 @@ def ethernet_interfaces(self) -> list | None: context_keys=["name", "peer", "peer_interface"], ) - for l3_interface in self._filtered_l3_interfaces: - # Ethernet interface - ethernet_interface = self._get_l3_interface_cfg(l3_interface) - - append_if_not_duplicate( - list_of_dicts=ethernet_interfaces, - primary_key="name", - new_dict=ethernet_interface, - context=f"Ethernet Interfaces defined under {self.data_model} l3_interfaces", - context_keys=["name", "peer", "peer_interface"], - ) - if ethernet_interfaces: return ethernet_interfaces diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/utils.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/utils.py index ad9eaf1a0a0..a149d97557e 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/utils.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/utils.py @@ -4,6 +4,7 @@ from __future__ import annotations import re +from copy import deepcopy from functools import cached_property from ipaddress import ip_network from itertools import islice @@ -12,7 +13,6 @@ from ansible_collections.arista.avd.plugins.plugin_utils.eos_designs_shared_utils import SharedUtils from ansible_collections.arista.avd.plugins.plugin_utils.errors import AristaAvdMissingVariableError from ansible_collections.arista.avd.plugins.plugin_utils.merge import merge -from ansible_collections.arista.avd.plugins.plugin_utils.strip_empties import strip_empties_from_dict from ansible_collections.arista.avd.plugins.plugin_utils.utils import default, get, get_item @@ -55,7 +55,7 @@ def _filtered_p2p_links(self) -> list: # Apply p2p_profiles if set. Silently ignoring missing profile. if self._p2p_links_profiles: - p2p_links = [self._apply_profile("p2p_links", p2p_link) for p2p_link in p2p_links] + p2p_links = [self._apply_p2p_links_profile(p2p_link) for p2p_link in p2p_links] # Filter to only include p2p_links with our hostname under "nodes" p2p_links = [p2p_link for p2p_link in p2p_links if self.shared_utils.hostname in p2p_link.get("nodes", [])] @@ -70,27 +70,18 @@ def _filtered_p2p_links(self) -> list: return p2p_links - def _apply_profile(self, type: str, target_dict: dict) -> dict: + def _apply_p2p_links_profile(self, target_dict: dict) -> dict: """ - Apply a profile to a p2p_link or a l3_interface + Apply a profile to a p2p_link """ if "profile" not in target_dict: # Nothing to do return target_dict - # Silently ignoring missing profile and wrong types. - if type == "l3_interfaces": - profile = get_item(self._l3_interfaces_profiles, "profile", target_dict["profile"], default={}) - target_dict.pop("profile", None) - elif type == "p2p_links": - profile = get_item(self._p2p_links_profiles, "name", target_dict["profile"], default={}) - target_dict.pop("name", None) - else: - return target_dict - - target_dict = merge(profile, target_dict, list_merge="replace", destructive_merge=False) - - return target_dict + profile = deepcopy(get_item(self._p2p_links_profiles, "name", target_dict["profile"], default={})) + merged_dict: dict = merge(profile, target_dict, list_merge="replace", destructive_merge=False) + merged_dict.pop("name", None) + return merged_dict def _resolve_p2p_ips(self, p2p_link: dict) -> dict: if "ip" in p2p_link: @@ -331,77 +322,3 @@ def _get_port_channel_member_cfg(self, p2p_link: dict, member: dict) -> dict: "mode": get(p2p_link, "port_channel.mode", default="active"), }, } - - # l3_interfaces here - @cached_property - def _l3_interfaces_profiles(self) -> list: - return get(self._hostvars, f"{self.data_model}.l3_interfaces_profiles", default=[]) - - @cached_property - def _l3_interfaces(self) -> list: - return get(self._hostvars, f"{self.data_model}.l3_interfaces", default=[]) - - @cached_property - def _l3_interfaces_sflow(self) -> bool | None: - return get(self._hostvars, f"fabric_sflow.{self.data_model}") - - @cached_property - def _filtered_l3_interfaces(self) -> list: - """ - Returns a filtered list of l3_interfaces, which only contains interfaces with our hostname. - For each interface any referenced profiles are applied. - """ - if not (l3_interfaces := self._l3_interfaces): - return [] - - # Apply l3_interfaces._profile if set. Silently ignoring missing profile. - if self._l3_interfaces_profiles: - l3_interfaces = [self._apply_profile("l3_interfaces", l3_interface) for l3_interface in l3_interfaces] - - # Filter to only include l3_interfaces with our hostname as node - l3_interfaces = [l3_interface for l3_interface in l3_interfaces if self.shared_utils.hostname == get(l3_interface, "node", required=True)] - if not l3_interfaces: - return [] - - return l3_interfaces - - def _get_l3_interface_cfg(self, l3_interface: dict) -> dict | None: - """ - Returns structured_configuration for one L3 Physical interface - """ - if l3_interface["node"] != self.shared_utils.hostname: - return None - - interface_name = l3_interface["interface"] - - # TODO move this to description module? - interface_description = ( - l3_interface.get("description") - or "_".join([elem for elem in [l3_interface.get("peer"), l3_interface.get("peer_interface")] if elem is not None]) - or None - ) - - # TODO catch if ip_address is not valid or not dhcp - ip_address = get(l3_interface, "ip", required=True) - - interface = { - "name": interface_name, - "peer_type": "l3_interface", - "peer": l3_interface.get("peer"), - "peer_interface": l3_interface.get("peer_interface"), - "ip_address": ip_address, - "shutdown": not l3_interface.get("enabled", True), - "type": "routed", - "description": interface_description, - "service_profile": l3_interface.get("qos_profile"), - "eos_cli": l3_interface.get("raw_eos_cli"), - "struct_cfg": l3_interface.get("structured_config"), - } - - if ip_address == "dhcp" and l3_interface.get("set_default_route", False): - interface["dhcp_client_accept_default_route"] = True - - if self.shared_utils.cv_pathfinder_role: - interface["flow_tracker"] = {"hardware": "WAN-FLOW-TRACKER"} - - return strip_empties_from_dict(interface) diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/stun.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/stun.py index 895c6536e49..f1738db7e69 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/stun.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/stun.py @@ -26,7 +26,7 @@ def stun(self) -> dict | None: stun = {} if self.shared_utils.wan_role == "server": - local_interfaces = [wan_interface.get("interface") for wan_interface in self.shared_utils.wan_interfaces] + local_interfaces = [wan_interface["name"] for wan_interface in self.shared_utils.wan_interfaces] stun["server"] = {"local_interfaces": local_interfaces} if self.shared_utils.wan_role == "client": diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/utils.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/utils.py index bbc19ac0a59..0fd72889f81 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/utils.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/overlay/utils.py @@ -427,13 +427,8 @@ def _should_connect_to_wan_rs(self, path_groups: list) -> bool: `connected_to_pathfinder` is not False. """ return any( - self.shared_utils.get_carrier_path_group(wan_interface["wan_carrier"])["name"] in path_groups - and get( - wan_interface, - "connected_to_pathfinder", - default=True, - ) - for wan_interface in self.shared_utils.wan_interfaces + local_path_group["name"] in path_groups and any(wan_interface["connected_to_pathfinder"] for wan_interface in local_path_group["interfaces"]) + for local_path_group in self.shared_utils.wan_local_path_groups ) @cached_property diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/avdstructuredconfig.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/avdstructuredconfig.py index ef4e7ea1a1f..282fb13017a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/avdstructuredconfig.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/avdstructuredconfig.py @@ -15,6 +15,7 @@ from .router_ospf import RouterOspfMixin from .router_pim_sparse_mode import RouterPimSparseModeMixin from .standard_access_lists import StandardAccessListsMixin +from .static_routes import StaticRoutesMixin from .vlans import VlansMixin @@ -32,6 +33,7 @@ class AvdStructuredConfigUnderlay( RouterMsdpMixin, RouterPimSparseModeMixin, StandardAccessListsMixin, + StaticRoutesMixin, MplsMixin, ): """ diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/ethernet_interfaces.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/ethernet_interfaces.py index 5fe1001533c..338b12673d3 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/ethernet_interfaces.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/ethernet_interfaces.py @@ -144,6 +144,18 @@ def ethernet_interfaces(self) -> list | None: context_keys=["name", "peer", "peer_interface"], ) + for l3_interface in self.shared_utils.l3_interfaces: + # Ethernet interface + ethernet_interface = self._get_l3_interface_cfg(l3_interface) + + append_if_not_duplicate( + list_of_dicts=ethernet_interfaces, + primary_key="name", + new_dict=ethernet_interface, + context=f"L3 Interfaces defined under {self.shared_utils.node_type_key_data['key']} l3_interfaces", + context_keys=["name", "peer", "peer_interface"], + ) + if ethernet_interfaces: return ethernet_interfaces diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/static_routes.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/static_routes.py similarity index 70% rename from ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/static_routes.py rename to ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/static_routes.py index 6d9b2dc1c4b..d24b9fffc7d 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/core_interfaces_and_l3_edge/static_routes.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/static_routes.py @@ -22,14 +22,20 @@ def static_routes(self) -> list[dict] | None: Returns structured config for static_routes Consist of - - default route injected for l3_edge.l3interfaces when `set_default_route` is True + - default route injected for l3interfaces when `set_default_route` is True note that only VRF default is supported today. """ static_routes = [] - for l3_interface in self._filtered_l3_interfaces: - ip_address = get(l3_interface, "ip", required=True) + for l3_interface in self.shared_utils.l3_interfaces: + interface_name = get(l3_interface, "name", required=True, org_key=f"...[node={self.shared_utils.hostname}].l3_interfaces[].name]") + ip_address = get( + l3_interface, + "ip", + required=True, + org_key=f"{self.shared_utils.node_type_key_data['key']}.nodes[name={self.shared_utils.hostname}].l3_interfaces[name={interface_name}.ip]", + ) # 'dhcp' is handled at the interface level if ip_address == "dhcp": @@ -43,7 +49,7 @@ def static_routes(self) -> list[dict] | None: l3_interface, "peer_ip", required=True, - org_key=f"Cannot set a default route for interface {l3_interface['interface']} because 'peer_ip' is missing", + org_key=f"Cannot set a default route for interface {interface_name} because 'peer_ip' is missing", ) static_route = { diff --git a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py index 6f28a798ddb..6cf2edc0786 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py +++ b/ansible_collections/arista/avd/roles/eos_designs/python_modules/underlay/utils.py @@ -120,3 +120,47 @@ def _underlay_vlan_trunk_groups(self) -> list: @cached_property def _uplinks(self) -> list: return get(self._hostvars, "switch.uplinks") + + def _get_l3_interface_cfg(self, l3_interface: dict) -> dict | None: + """ + Returns structured_configuration for one L3 interface + """ + interface_name = get(l3_interface, "name", required=True, org_key=f"...[node={self.shared_utils.hostname}].l3_interfaces[].name]") + + # TODO move this to description module? + interface_description = ( + l3_interface.get("description") + or "_".join([elem for elem in [l3_interface.get("peer"), l3_interface.get("peer_interface")] if elem is not None]) + or None + ) + + # TODO catch if ip_address is not valid or not dhcp + ip_address = get( + l3_interface, + "ip", + required=True, + org_key=f"{self.shared_utils.node_type_key_data['key']}.nodes[name={self.shared_utils.hostname}].l3_interfaces[name={interface_name}.ip]", + ) + + interface = { + "name": interface_name, + "peer_type": "l3_interface", + "peer": l3_interface.get("peer"), + "peer_interface": l3_interface.get("peer_interface"), + "ip_address": ip_address, + "shutdown": not l3_interface.get("enabled", True), + "type": "routed", + "description": interface_description, + "speed": l3_interface.get("speed"), + "service_profile": l3_interface.get("qos_profile"), + "eos_cli": l3_interface.get("raw_eos_cli"), + "struct_cfg": l3_interface.get("structured_config"), + } + + if ip_address == "dhcp" and l3_interface.get("set_default_route", False): + interface["dhcp_client_accept_default_route"] = True + + if self.shared_utils.cv_pathfinder_role: + interface["flow_tracker"] = {"hardware": "WAN-FLOW-TRACKER"} + + return strip_empties_from_dict(interface) diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json index 41ca044e709..584b335e69e 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json @@ -3501,9420 +3501,1394 @@ } }, "title": "P2P Links" - }, - "l3_interfaces_profiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "description": "L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile.", - "title": "Profile" - }, - "interface": { - "type": "string", - "description": "Ethernet interface name like 'Ethernet2'.", - "pattern": "Ethernet[\\d/]+", - "title": "Interface" - }, - "description": { - "type": "string", - "description": "Interface description.\nIf not set a default description will be configured with '[[ ]]'", - "title": "Description" - }, - "ip": { - "type": "string", - "description": "Node IPv4 address/Mask or 'dhcp'.", - "title": "IP" - }, - "set_default_route": { - "type": "boolean", - "default": false, - "description": "Insert a default route to the `peer_ip` if `ip` is an ip address\nor configure to accept a default route from DHCP if `ip` is `dhcp`.\n\nAVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing.", - "title": "Set Default Route" - }, - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable or Shutdown the interface.", - "title": "Enabled" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "peer": { - "type": "string", - "description": "The peer device name. Used for description and documentation", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "The peer device interface. Used for description and documentation", - "title": "Peer Interface" - }, - "peer_ip": { - "type": "string", - "description": "The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address.", - "title": "Peer IP" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "wan_carrier": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Carrier this interface is connected to.\nThis is used to infer the path-groups in which this interface should be configured.", - "title": "Wan Carrier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Core Interfaces" + }, + "custom_structured_configuration_list_merge": { + "type": "string", + "description": "The List-merge strategy used when merging custom structured configurations.\n\nThis applies to all vars prefixed by prefixes in `custom_structured_configuration_prefix`\nand all data under the various `structured_config` options.\n\nThe available list merge strategies:\n- `replace`:\n - Any list will be replaced with the list defined in custom structured configurations.\n- `append`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be appended to the existing list (including duplicates).\n- `keep`:\n - Only set list if there is no existing list or existing list is `None`.\n- `prepend`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be prepended to the existing list (including duplicates).\n- `append_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list.\n- `prepend_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be prepended to the existing list.\n", + "enum": [ + "replace", + "append", + "keep", + "prepend", + "append_rp", + "prepend_rp" + ], + "default": "append_rp", + "title": "Custom Structured Configuration List Merge" + }, + "custom_structured_configuration_prefix": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Custom EOS Structured Configuration keys can be set on any group or host_var level using the name\nof the corresponding `eos_cli_config_gen` key prefixed with content of `custom_structured_configuration_prefix`.\n\nThe content of Custom Structured Configuration variables will be merged with the structured config generated by the eos_designs role.\n\nThe merge is done recursively, so it is possible to update a sub-key of a variable set by `eos_designs` role already.\n\nThe merge follow these recursive merge strategies:\n- New keys will be added for all types.\n- Existing keys of type \"List\" with a \"Primary key\" set in the schema:\n - Strategy can be changed with `custom_structured_configuration_list_merge`. Default strategy:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list\n- Other keys of type \"List\" will have new unique items appended the the existing list.\n- Existing keys of type \"Dictionary\" will recursively merge\n- Other existing keys will be replaced.\n", + "default": [ + "custom_structured_configuration_" + ], + "title": "Custom Structured Configuration Prefix" + }, + "cv_pathfinder_regions": { + "description": "PREVIEW: This key is currently not supported\nDefine the SDWAN hierarchy for the device.", + "type": "array", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "title": "Description" + }, + "id": { + "type": "integer", + "description": "The region ID must be unique for the whole WAN deployment.", + "minimum": 1, + "maximum": 255, + "title": "ID" + }, + "sites": { + "type": "array", + "description": "All sites are placed in a default zone called DEFAULT-ZONE with ID 1.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "title": "Description" + }, + "id": { + "type": "integer", + "description": "The site ID must be unique within a zone.\nGiven that all the sites are placed in the DEFAULT-ZONE, the site ID must be unique within a region.", + "minimum": 1, + "maximum": 10000, + "title": "ID" + }, + "location": { + "type": "string", + "description": "Will be interpreted", + "title": "Location" + }, + "site_contact": { + "type": "string", + "title": "Site Contact" + }, + "site_after_hours_contact": { + "type": "string", + "title": "Site After Hours Contact" + }, + "name": { + "type": "string", + "title": "Name" + } }, - "wan_circuit_id": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Circuit ID for this interface.\nThis is not rendered in the configuration but used for WAN designs.", - "title": "Wan Circuit ID" + "required": [ + "id", + "name" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "connected_to_pathfinder": { - "type": "boolean", - "description": "PREVIEW: This key is currently not supported\n\nFor a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.\nDefault True.", - "title": "Connected To Pathfinder" + "description": "Site name and ID." + }, + "title": "Sites" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "required": [ + "id", + "name" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "description": "Region name and ID." + }, + "title": "Cv Pathfinder Regions" + }, + "cv_topology": { + "type": "array", + "description": "Generate AVD configurations directly from the given CloudVision topology.\nActivate this feature by setting `use_cv_topology` to `true`.\nRequires `default_interfaces` to be set for the relevant platforms and node types to detect the proper interface roles automatically.\nNeighbor hostnames must match the inventory hostnames of the AVD inventory to be taken into consideration.", + "items": { + "type": "object", + "properties": { + "hostname": { + "type": "string", + "title": "Hostname" + }, + "platform": { + "type": "string", + "title": "Platform" + }, + "interfaces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "neighbor": { + "type": "string", + "title": "Neighbor" + }, + "neighbor_interface": { + "type": "string", + "title": "Neighbor Interface" + } }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "structured_config": { - "type": "object", - "description": "Custom structured config for the Ethernet interface.", - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "description": { - "type": "string", - "title": "Description" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - }, - "load_interval": { - "type": "integer", - "minimum": 0, - "maximum": 600, - "description": "Interval in seconds for updating interface counters\"", - "title": "Load Interval" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" - }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", - "title": "L2 MTU" - }, - "l2_mru": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mru\" should only be defined for platforms supporting the \"l2 mru\" CLI\n", - "title": "L2 MRU" - }, - "vlans": { - "type": "string", - "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", - "title": "VLANs" - }, - "native_vlan": { - "type": "integer", - "title": "Native VLAN" - }, - "native_vlan_tag": { - "type": "boolean", - "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", - "title": "Native VLAN Tag" - }, - "mode": { - "type": "string", - "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" - ], - "title": "Mode" - }, - "phone": { - "type": "object", - "properties": { - "trunk": { - "type": "string", - "enum": [ - "tagged", - "tagged phone", - "untagged", - "untagged phone" - ], - "title": "Trunk" - }, - "vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Phone" - }, - "l2_protocol": { - "type": "object", - "properties": { - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "Vlan tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "forwarding_profile": { - "type": "string", - "description": "L2 protocol forwarding profile", - "title": "Forwarding Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "L2 Protocol" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Trunk Groups" - }, - "type": { - "type": "string", - "enum": [ - "routed", - "switched", - "l3dot1q", - "l2dot1q", - "port-channel-member" - ], - "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", - "title": "Type" - }, - "snmp_trap_link_change": { - "type": "boolean", - "title": "Snmp Trap Link Change" - }, - "address_locking": { - "type": "object", - "properties": { - "ipv4": { - "type": "boolean", - "description": "Enable address locking for IPv4", - "title": "IPv4" - }, - "ipv6": { - "type": "boolean", - "description": "Enable address locking for IPv6", - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Address Locking" - }, - "flowcontrol": { - "type": "object", - "properties": { - "received": { - "type": "string", - "enum": [ - "desired", - "on", - "off" - ], - "title": "Received" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flowcontrol" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - }, - "flow_tracker": { - "type": "object", - "properties": { - "sampled": { - "type": "string", - "description": "Sampled flow tracker name.", - "title": "Sampled" - }, - "hardware": { - "type": "string", - "description": "Hardware flow tracker name.", - "title": "Hardware" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flow Tracker" - }, - "error_correction_encoding": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "fire_code": { - "type": "boolean", - "title": "Fire Code" - }, - "reed_solomon": { - "type": "boolean", - "title": "Reed Solomon" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Error Correction Encoding" - }, - "link_tracking_groups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Group name", - "title": "Name" - }, - "direction": { - "type": "string", - "enum": [ - "upstream", - "downstream" - ], - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Link Tracking Groups" - }, - "evpn_ethernet_segment": { - "type": "object", - "properties": { - "identifier": { - "type": "string", - "description": "EVPN Ethernet Segment Identifier (Type 1 format)", - "title": "Identifier" - }, - "redundancy": { - "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "title": "Redundancy" - }, - "designated_forwarder_election": { - "type": "object", - "properties": { - "algorithm": { - "type": "string", - "enum": [ - "modulus", - "preference" - ], - "title": "Algorithm" - }, - "preference_value": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "description": "Preference_value is only used when \"algorithm\" is \"preference\"", - "title": "Preference Value" - }, - "dont_preempt": { - "type": "boolean", - "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", - "title": "Dont Preempt" - }, - "hold_time": { - "type": "integer", - "title": "Hold Time" - }, - "subsequent_hold_time": { - "type": "integer", - "title": "Subsequent Hold Time" - }, - "candidate_reachability_required": { - "type": "boolean", - "title": "Candidate Reachability Required" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Designated Forwarder Election" - }, - "mpls": { - "type": "object", - "properties": { - "shared_index": { - "type": "integer", - "minimum": 1, - "maximum": 1024, - "title": "Shared Index" - }, - "tunnel_flood_filter_time": { - "type": "integer", - "title": "Tunnel Flood Filter Time" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "route_target": { - "type": "string", - "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", - "title": "Route Target" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Ethernet Segment" - }, - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "VLAN tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "encapsulation_vlan": { - "type": "object", - "properties": { - "client": { - "type": "object", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Client VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Client Outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Client Inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "unmatched": { - "type": "boolean", - "title": "Unmatched" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Client" - }, - "network": { - "type": "object", - "description": "Network encapsulations are all optional and skipped if using client unmatched", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Network VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Network outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Network inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "client": { - "type": "boolean", - "title": "Client" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Network" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Encapsulation VLAN" - }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN ID" - }, - "ip_address": { - "type": "string", - "description": "IPv4 address/mask or \"dhcp\"", - "title": "IP Address" - }, - "ip_address_secondaries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "IP Address Secondaries" - }, - "dhcp_client_accept_default_route": { - "type": "boolean", - "description": "Install default-route obtained via DHCP", - "title": "DHCP Client Accept Default Route" - }, - "dhcp_server_ipv4": { - "type": "boolean", - "description": "Enable IPv4 DHCP server.", - "title": "DHCP Server IPv4" - }, - "dhcp_server_ipv6": { - "type": "boolean", - "description": "Enable IPv6 DHCP server.", - "title": "DHCP Server IPv6" - }, - "ip_helpers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip_helper": { - "type": "string", - "title": "IP Helper" - }, - "source_interface": { - "type": "string", - "description": "Source interface name", - "title": "Source Interface" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" - }, - "ip_nat": { - "type": "object", - "properties": { - "service_profile": { - "type": "string", - "description": "NAT interface profile.", - "title": "Service Profile" - }, - "destination": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "pool_name": { - "type": "string", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "pool_name", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Destination" - }, - "source": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "nat_type": { - "type": "string", - "enum": [ - "overload", - "pool", - "pool-address-only", - "pool-full-cone" - ], - "title": "Nat Type" - }, - "pool_name": { - "type": "string", - "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "nat_type", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Source" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IP Nat" - }, - "ipv6_enable": { - "type": "boolean", - "title": "IPv6 Enable" - }, - "ipv6_address": { - "type": "string", - "title": "IPv6 Address" - }, - "ipv6_address_link_local": { - "type": "string", - "description": "Link local IPv6 address/mask", - "title": "IPv6 Address Link Local" - }, - "ipv6_nd_ra_disabled": { - "type": "boolean", - "title": "IPv6 ND RA Disabled" - }, - "ipv6_nd_managed_config_flag": { - "type": "boolean", - "title": "IPv6 ND Managed Config Flag" - }, - "ipv6_nd_prefixes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ipv6_prefix": { - "type": "string", - "title": "IPv6 Prefix" - }, - "valid_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Valid Lifetime" - }, - "preferred_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Preferred Lifetime" - }, - "no_autoconfig_flag": { - "type": "boolean", - "title": "No Autoconfig Flag" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ipv6_prefix" - ] - }, - "title": "IPv6 ND Prefixes" - }, - "ipv6_dhcp_relay_destinations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "DHCP server's IPv6 address", - "title": "Address" - }, - "vrf": { - "type": "string", - "title": "VRF" - }, - "local_interface": { - "type": "string", - "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", - "title": "Local Interface" - }, - "source_address": { - "type": "string", - "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", - "title": "Source Address" - }, - "link_address": { - "type": "string", - "description": "Override the default link address specified in the relayed DHCP packet", - "title": "Link Address" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "address" - ] - }, - "title": "IPv6 DHCP Relay Destinations" - }, - "access_group_in": { - "type": "string", - "description": "Access list name", - "title": "Access Group In" - }, - "access_group_out": { - "type": "string", - "description": "Access list name", - "title": "Access Group Out" - }, - "ipv6_access_group_in": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group In" - }, - "ipv6_access_group_out": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group Out" - }, - "mac_access_group_in": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group In" - }, - "mac_access_group_out": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group Out" - }, - "multicast": { - "type": "object", - "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - }, - "out": { - "type": "boolean", - "title": "Out" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "ospf_network_point_to_point": { - "type": "boolean", - "title": "OSPF Network Point To Point" - }, - "ospf_area": { - "type": "string", - "title": "OSPF Area" - }, - "ospf_cost": { - "type": "integer", - "title": "OSPF Cost" - }, - "ospf_authentication": { - "type": "string", - "enum": [ - "none", - "simple", - "message-digest" - ], - "title": "OSPF Authentication" - }, - "ospf_authentication_key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "OSPF Authentication Key" - }, - "ospf_message_digest_keys": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "hash_algorithm": { - "type": "string", - "enum": [ - "md5", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "title": "Hash Algorithm" - }, - "key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "Key" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "OSPF Message Digest Keys" - }, - "pim": { - "type": "object", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "dr_priority": { - "type": "integer", - "minimum": 0, - "maximum": 429467295, - "title": "DR Priority" - }, - "sparse_mode": { - "type": "boolean", - "title": "Sparse Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PIM" - }, - "mac_security": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "title": "Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Security" - }, - "channel_group": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "mode": { - "type": "string", - "enum": [ - "on", - "active", - "passive" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Channel Group" - }, - "isis_enable": { - "type": "string", - "description": "ISIS instance", - "title": "ISIS Enable" - }, - "isis_passive": { - "type": "boolean", - "title": "ISIS Passive" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_network_point_to_point": { - "type": "boolean", - "title": "ISIS Network Point To Point" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_hello_padding": { - "type": "boolean", - "title": "ISIS Hello Padding" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "text", - "md5" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password", - "title": "ISIS Authentication Key" - }, - "poe": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" - }, - "priority": { - "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { - "type": "string", - "title": "Watts" - }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Limit" - }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" - }, - "legacy_detect": { - "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PoE" - }, - "ptp": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "announce": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - }, - "timeout": { - "type": "integer", - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Announce" - }, - "delay_req": { - "type": "integer", - "title": "Delay Req" - }, - "delay_mechanism": { - "type": "string", - "enum": [ - "e2e", - "p2p" - ], - "title": "Delay Mechanism" - }, - "sync_message": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sync Message" - }, - "role": { - "type": "string", - "enum": [ - "master", - "dynamic" - ], - "title": "Role" - }, - "vlan": { - "type": "string", - "description": "VLAN can be 'all' or list of vlans as string", - "title": "VLAN" - }, - "transport": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "layer2" - ], - "title": "Transport" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "profile": { - "type": "string", - "description": "Interface profile", - "title": "Profile" - }, - "storm_control": { - "type": "object", - "properties": { - "all": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Broadcast" - }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unknown Unicast" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Storm Control" - }, - "logging": { - "type": "object", - "properties": { - "event": { - "type": "object", - "properties": { - "link_status": { - "type": "boolean", - "title": "Link Status" - }, - "congestion_drops": { - "type": "boolean", - "title": "Congestion Drops" - }, - "spanning_tree": { - "type": "boolean", - "title": "Spanning Tree" - }, - "storm_control_discards": { - "type": "boolean", - "title": "Storm Control Discards" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Event" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Logging" - }, - "lldp": { - "type": "object", - "properties": { - "transmit": { - "type": "boolean", - "title": "Transmit" - }, - "receive": { - "type": "boolean", - "title": "Receive" - }, - "ztp_vlan": { - "type": "integer", - "description": "ZTP vlan number", - "title": "ZTP VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LLDP" - }, - "trunk_private_vlan_secondary": { - "type": "boolean", - "title": "Trunk Private VLAN Secondary" - }, - "pvlan_mapping": { - "type": "string", - "description": "List of vlans as string", - "title": "PVLAN Mapping" - }, - "vlan_translations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "List of vlans as string (only one vlan if direction is \"both\")", - "title": "From" - }, - "to": { - "type": "integer", - "description": "VLAN ID", - "title": "To" - }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "both" - ], - "default": "both", - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "VLAN Translations" - }, - "dot1x": { - "type": "object", - "properties": { - "port_control": { - "type": "string", - "enum": [ - "auto", - "force-authorized", - "force-unauthorized" - ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" - }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" - }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" - }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Value can be 60-4294967295 or 'server'", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - }, - "unauthorized": { - "type": "object", - "properties": { - "access_vlan_membership_egress": { - "type": "boolean", - "title": "Access VLAN Membership Egress" - }, - "native_vlan_membership_egress": { - "type": "boolean", - "title": "Native VLAN Membership Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unauthorized" - }, - "eapol": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "title": "Disabled" - }, - "authentication_failure_fallback_mba": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "timeout": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure Fallback Mba" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Eapol" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "dot1x" - }, - "service_profile": { - "type": "string", - "description": "QOS profile", - "title": "Service Profile" - }, - "shape": { - "type": "object", - "properties": { - "rate": { - "type": "string", - "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", - "title": "Rate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shape" - }, - "qos": { - "type": "object", - "properties": { - "trust": { - "type": "string", - "enum": [ - "dscp", - "cos", - "disabled" - ], - "title": "Trust" - }, - "dscp": { - "type": "integer", - "description": "DSCP value", - "title": "DSCP" - }, - "cos": { - "type": "integer", - "description": "COS value", - "title": "COS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" - }, - "spanning_tree_bpduguard": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpduguard" - }, - "spanning_tree_guard": { - "type": "string", - "enum": [ - "loop", - "root", - "disabled" - ], - "title": "Spanning Tree Guard" - }, - "spanning_tree_portfast": { - "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" - }, - "vmtracer": { - "type": "boolean", - "title": "VMTracer" - }, - "priority_flow_control": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "priorities": { - "type": "array", - "items": { - "type": "object", - "properties": { - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 7, - "title": "Priority" - }, - "no_drop": { - "type": "boolean", - "title": "No Drop" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "priority" - ] - }, - "title": "Priorities" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Priority Flow Control" - }, - "bfd": { - "type": "object", - "properties": { - "echo": { - "type": "boolean", - "title": "Echo" - }, - "interval": { - "type": "integer", - "description": "Interval in milliseconds", - "title": "Interval" - }, - "min_rx": { - "type": "integer", - "description": "Rate in milliseconds", - "title": "Min RX" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 50, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BFD" - }, - "service_policy": { - "type": "object", - "properties": { - "pbr": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Policy Based Routing Policy-map name", - "title": "Input" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PBR" - }, - "qos": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Quality of Service Policy-map name", - "title": "Input" - } - }, - "required": [ - "input" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Service Policy" - }, - "mpls": { - "type": "object", - "properties": { - "ip": { - "type": "boolean", - "title": "IP" - }, - "ldp": { - "type": "object", - "properties": { - "interface": { - "type": "boolean", - "title": "Interface" - }, - "igp_sync": { - "type": "boolean", - "title": "IGP Sync" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LDP" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "lacp_timer": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "fast", - "normal" - ], - "title": "Mode" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 3000, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Timer" - }, - "lacp_port_priority": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "LACP Port Priority" - }, - "transceiver": { - "type": "object", - "properties": { - "media": { - "type": "object", - "properties": { - "override": { - "type": "string", - "description": "Transceiver type", - "title": "Override" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Media" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Transceiver" - }, - "ip_proxy_arp": { - "type": "boolean", - "title": "IP Proxy ARP" - }, - "traffic_policy": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Ingress traffic policy", - "title": "Input" - }, - "output": { - "type": "string", - "description": "Egress traffic policy", - "title": "Output" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Traffic Policy" - }, - "bgp": { - "type": "object", - "properties": { - "session_tracker": { - "type": "string", - "description": "Name of session tracker", - "title": "Session Tracker" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BGP" - }, - "peer": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Interface" - }, - "peer_type": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Type" - }, - "sflow": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "egress": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "unmodified_enable": { - "type": "boolean", - "title": "Unmodified Enable" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sflow" - }, - "port_profile": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Port Profile" - }, - "uc_tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "min", - "max" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } - }, - "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Uc TX Queues" - }, - "tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "max", - "max_probability" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } - }, - "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "TX Queues" - }, - "vrrp_ids": { - "type": "array", - "description": "VRRP model.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "VRID", - "title": "ID" - }, - "priority_level": { - "type": "integer", - "description": "Instance priority", - "minimum": 1, - "maximum": 254, - "title": "Priority Level" - }, - "advertisement": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "description": "Interval in seconds", - "minimum": 1, - "maximum": 255, - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Advertisement" - }, - "preempt": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "delay": { - "type": "object", - "properties": { - "minimum": { - "type": "integer", - "description": "Minimum preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Minimum" - }, - "reload": { - "type": "integer", - "description": "Reload preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "required": [ - "enabled" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Preempt" - }, - "timers": { - "type": "object", - "properties": { - "delay": { - "type": "object", - "properties": { - "reload": { - "type": "integer", - "description": "Delay after reload in seconds.", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timers" - }, - "tracked_object": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Tracked object name", - "title": "Name" - }, - "decrement": { - "type": "integer", - "minimum": 1, - "maximum": 254, - "description": "Decrement VRRP priority by 1-254", - "title": "Decrement" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Tracked Object" - }, - "ipv4": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv4 address", - "title": "Address" - }, - "version": { - "type": "integer", - "enum": [ - 2, - 3 - ], - "title": "Version" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv6 address", - "title": "Address" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "VRRP IDs" - }, - "eos_cli": { - "type": "string", - "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", - "title": "EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "profile" - ] - }, - "title": "L3 Interfaces Profiles" - }, - "l3_interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "description": "Device on which the interface should be configured.", - "title": "Node" - }, - "profile": { - "type": "string", - "description": "L3 interface profile name. Profile defined under l3_interfaces_profiles.", - "title": "Profile" - }, - "interface": { - "type": "string", - "description": "Ethernet interface name like 'Ethernet2'.", - "pattern": "Ethernet[\\d/]+", - "title": "Interface" - }, - "description": { - "type": "string", - "description": "Interface description.\nIf not set a default description will be configured with '[[ ]]'", - "title": "Description" - }, - "ip": { - "type": "string", - "description": "Node IPv4 address/Mask or 'dhcp'.", - "title": "IP" - }, - "set_default_route": { - "type": "boolean", - "default": false, - "description": "Insert a default route to the `peer_ip` if `ip` is an ip address\nor configure to accept a default route from DHCP if `ip` is `dhcp`.\n\nAVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing.", - "title": "Set Default Route" - }, - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable or Shutdown the interface.", - "title": "Enabled" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "peer": { - "type": "string", - "description": "The peer device name. Used for description and documentation", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "The peer device interface. Used for description and documentation", - "title": "Peer Interface" - }, - "peer_ip": { - "type": "string", - "description": "The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address.", - "title": "Peer IP" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "wan_carrier": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Carrier this interface is connected to.\nThis is used to infer the path-groups in which this interface should be configured.", - "title": "Wan Carrier" - }, - "wan_circuit_id": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Circuit ID for this interface.\nThis is not rendered in the configuration but used for WAN designs.", - "title": "Wan Circuit ID" - }, - "connected_to_pathfinder": { - "type": "boolean", - "description": "PREVIEW: This key is currently not supported\n\nFor a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.\nDefault True.", - "title": "Connected To Pathfinder" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the interface in the final EOS configuration.", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config for the Ethernet interface.", - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "description": { - "type": "string", - "title": "Description" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - }, - "load_interval": { - "type": "integer", - "minimum": 0, - "maximum": 600, - "description": "Interval in seconds for updating interface counters\"", - "title": "Load Interval" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" - }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", - "title": "L2 MTU" - }, - "l2_mru": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mru\" should only be defined for platforms supporting the \"l2 mru\" CLI\n", - "title": "L2 MRU" - }, - "vlans": { - "type": "string", - "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", - "title": "VLANs" - }, - "native_vlan": { - "type": "integer", - "title": "Native VLAN" - }, - "native_vlan_tag": { - "type": "boolean", - "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", - "title": "Native VLAN Tag" - }, - "mode": { - "type": "string", - "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" - ], - "title": "Mode" - }, - "phone": { - "type": "object", - "properties": { - "trunk": { - "type": "string", - "enum": [ - "tagged", - "tagged phone", - "untagged", - "untagged phone" - ], - "title": "Trunk" - }, - "vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Phone" - }, - "l2_protocol": { - "type": "object", - "properties": { - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "Vlan tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "forwarding_profile": { - "type": "string", - "description": "L2 protocol forwarding profile", - "title": "Forwarding Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "L2 Protocol" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Trunk Groups" - }, - "type": { - "type": "string", - "enum": [ - "routed", - "switched", - "l3dot1q", - "l2dot1q", - "port-channel-member" - ], - "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", - "title": "Type" - }, - "snmp_trap_link_change": { - "type": "boolean", - "title": "Snmp Trap Link Change" - }, - "address_locking": { - "type": "object", - "properties": { - "ipv4": { - "type": "boolean", - "description": "Enable address locking for IPv4", - "title": "IPv4" - }, - "ipv6": { - "type": "boolean", - "description": "Enable address locking for IPv6", - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Address Locking" - }, - "flowcontrol": { - "type": "object", - "properties": { - "received": { - "type": "string", - "enum": [ - "desired", - "on", - "off" - ], - "title": "Received" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flowcontrol" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - }, - "flow_tracker": { - "type": "object", - "properties": { - "sampled": { - "type": "string", - "description": "Sampled flow tracker name.", - "title": "Sampled" - }, - "hardware": { - "type": "string", - "description": "Hardware flow tracker name.", - "title": "Hardware" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flow Tracker" - }, - "error_correction_encoding": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "fire_code": { - "type": "boolean", - "title": "Fire Code" - }, - "reed_solomon": { - "type": "boolean", - "title": "Reed Solomon" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Error Correction Encoding" - }, - "link_tracking_groups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Group name", - "title": "Name" - }, - "direction": { - "type": "string", - "enum": [ - "upstream", - "downstream" - ], - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Link Tracking Groups" - }, - "evpn_ethernet_segment": { - "type": "object", - "properties": { - "identifier": { - "type": "string", - "description": "EVPN Ethernet Segment Identifier (Type 1 format)", - "title": "Identifier" - }, - "redundancy": { - "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "title": "Redundancy" - }, - "designated_forwarder_election": { - "type": "object", - "properties": { - "algorithm": { - "type": "string", - "enum": [ - "modulus", - "preference" - ], - "title": "Algorithm" - }, - "preference_value": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "description": "Preference_value is only used when \"algorithm\" is \"preference\"", - "title": "Preference Value" - }, - "dont_preempt": { - "type": "boolean", - "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", - "title": "Dont Preempt" - }, - "hold_time": { - "type": "integer", - "title": "Hold Time" - }, - "subsequent_hold_time": { - "type": "integer", - "title": "Subsequent Hold Time" - }, - "candidate_reachability_required": { - "type": "boolean", - "title": "Candidate Reachability Required" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Designated Forwarder Election" - }, - "mpls": { - "type": "object", - "properties": { - "shared_index": { - "type": "integer", - "minimum": 1, - "maximum": 1024, - "title": "Shared Index" - }, - "tunnel_flood_filter_time": { - "type": "integer", - "title": "Tunnel Flood Filter Time" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "route_target": { - "type": "string", - "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", - "title": "Route Target" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Ethernet Segment" - }, - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "VLAN tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "encapsulation_vlan": { - "type": "object", - "properties": { - "client": { - "type": "object", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Client VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Client Outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Client Inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "unmatched": { - "type": "boolean", - "title": "Unmatched" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Client" - }, - "network": { - "type": "object", - "description": "Network encapsulations are all optional and skipped if using client unmatched", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Network VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Network outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Network inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "client": { - "type": "boolean", - "title": "Client" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Network" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Encapsulation VLAN" - }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN ID" - }, - "ip_address": { - "type": "string", - "description": "IPv4 address/mask or \"dhcp\"", - "title": "IP Address" - }, - "ip_address_secondaries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "IP Address Secondaries" - }, - "dhcp_client_accept_default_route": { - "type": "boolean", - "description": "Install default-route obtained via DHCP", - "title": "DHCP Client Accept Default Route" - }, - "dhcp_server_ipv4": { - "type": "boolean", - "description": "Enable IPv4 DHCP server.", - "title": "DHCP Server IPv4" - }, - "dhcp_server_ipv6": { - "type": "boolean", - "description": "Enable IPv6 DHCP server.", - "title": "DHCP Server IPv6" - }, - "ip_helpers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip_helper": { - "type": "string", - "title": "IP Helper" - }, - "source_interface": { - "type": "string", - "description": "Source interface name", - "title": "Source Interface" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" - }, - "ip_nat": { - "type": "object", - "properties": { - "service_profile": { - "type": "string", - "description": "NAT interface profile.", - "title": "Service Profile" - }, - "destination": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "pool_name": { - "type": "string", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "pool_name", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Destination" - }, - "source": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "nat_type": { - "type": "string", - "enum": [ - "overload", - "pool", - "pool-address-only", - "pool-full-cone" - ], - "title": "Nat Type" - }, - "pool_name": { - "type": "string", - "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "nat_type", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Source" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IP Nat" - }, - "ipv6_enable": { - "type": "boolean", - "title": "IPv6 Enable" - }, - "ipv6_address": { - "type": "string", - "title": "IPv6 Address" - }, - "ipv6_address_link_local": { - "type": "string", - "description": "Link local IPv6 address/mask", - "title": "IPv6 Address Link Local" - }, - "ipv6_nd_ra_disabled": { - "type": "boolean", - "title": "IPv6 ND RA Disabled" - }, - "ipv6_nd_managed_config_flag": { - "type": "boolean", - "title": "IPv6 ND Managed Config Flag" - }, - "ipv6_nd_prefixes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ipv6_prefix": { - "type": "string", - "title": "IPv6 Prefix" - }, - "valid_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Valid Lifetime" - }, - "preferred_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Preferred Lifetime" - }, - "no_autoconfig_flag": { - "type": "boolean", - "title": "No Autoconfig Flag" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ipv6_prefix" - ] - }, - "title": "IPv6 ND Prefixes" - }, - "ipv6_dhcp_relay_destinations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "DHCP server's IPv6 address", - "title": "Address" - }, - "vrf": { - "type": "string", - "title": "VRF" - }, - "local_interface": { - "type": "string", - "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", - "title": "Local Interface" - }, - "source_address": { - "type": "string", - "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", - "title": "Source Address" - }, - "link_address": { - "type": "string", - "description": "Override the default link address specified in the relayed DHCP packet", - "title": "Link Address" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "address" - ] - }, - "title": "IPv6 DHCP Relay Destinations" - }, - "access_group_in": { - "type": "string", - "description": "Access list name", - "title": "Access Group In" - }, - "access_group_out": { - "type": "string", - "description": "Access list name", - "title": "Access Group Out" - }, - "ipv6_access_group_in": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group In" - }, - "ipv6_access_group_out": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group Out" - }, - "mac_access_group_in": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group In" - }, - "mac_access_group_out": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group Out" - }, - "multicast": { - "type": "object", - "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - }, - "out": { - "type": "boolean", - "title": "Out" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "ospf_network_point_to_point": { - "type": "boolean", - "title": "OSPF Network Point To Point" - }, - "ospf_area": { - "type": "string", - "title": "OSPF Area" - }, - "ospf_cost": { - "type": "integer", - "title": "OSPF Cost" - }, - "ospf_authentication": { - "type": "string", - "enum": [ - "none", - "simple", - "message-digest" - ], - "title": "OSPF Authentication" - }, - "ospf_authentication_key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "OSPF Authentication Key" - }, - "ospf_message_digest_keys": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "hash_algorithm": { - "type": "string", - "enum": [ - "md5", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "title": "Hash Algorithm" - }, - "key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "Key" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "OSPF Message Digest Keys" - }, - "pim": { - "type": "object", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "dr_priority": { - "type": "integer", - "minimum": 0, - "maximum": 429467295, - "title": "DR Priority" - }, - "sparse_mode": { - "type": "boolean", - "title": "Sparse Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PIM" - }, - "mac_security": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "title": "Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Security" - }, - "channel_group": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "mode": { - "type": "string", - "enum": [ - "on", - "active", - "passive" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Channel Group" - }, - "isis_enable": { - "type": "string", - "description": "ISIS instance", - "title": "ISIS Enable" - }, - "isis_passive": { - "type": "boolean", - "title": "ISIS Passive" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_network_point_to_point": { - "type": "boolean", - "title": "ISIS Network Point To Point" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_hello_padding": { - "type": "boolean", - "title": "ISIS Hello Padding" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "text", - "md5" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password", - "title": "ISIS Authentication Key" - }, - "poe": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" - }, - "priority": { - "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { - "type": "string", - "title": "Watts" - }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Limit" - }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" - }, - "legacy_detect": { - "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PoE" - }, - "ptp": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "announce": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - }, - "timeout": { - "type": "integer", - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Announce" - }, - "delay_req": { - "type": "integer", - "title": "Delay Req" - }, - "delay_mechanism": { - "type": "string", - "enum": [ - "e2e", - "p2p" - ], - "title": "Delay Mechanism" - }, - "sync_message": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sync Message" - }, - "role": { - "type": "string", - "enum": [ - "master", - "dynamic" - ], - "title": "Role" - }, - "vlan": { - "type": "string", - "description": "VLAN can be 'all' or list of vlans as string", - "title": "VLAN" - }, - "transport": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "layer2" - ], - "title": "Transport" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "profile": { - "type": "string", - "description": "Interface profile", - "title": "Profile" - }, - "storm_control": { - "type": "object", - "properties": { - "all": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Broadcast" - }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unknown Unicast" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Storm Control" - }, - "logging": { - "type": "object", - "properties": { - "event": { - "type": "object", - "properties": { - "link_status": { - "type": "boolean", - "title": "Link Status" - }, - "congestion_drops": { - "type": "boolean", - "title": "Congestion Drops" - }, - "spanning_tree": { - "type": "boolean", - "title": "Spanning Tree" - }, - "storm_control_discards": { - "type": "boolean", - "title": "Storm Control Discards" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Event" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Logging" - }, - "lldp": { - "type": "object", - "properties": { - "transmit": { - "type": "boolean", - "title": "Transmit" - }, - "receive": { - "type": "boolean", - "title": "Receive" - }, - "ztp_vlan": { - "type": "integer", - "description": "ZTP vlan number", - "title": "ZTP VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LLDP" - }, - "trunk_private_vlan_secondary": { - "type": "boolean", - "title": "Trunk Private VLAN Secondary" - }, - "pvlan_mapping": { - "type": "string", - "description": "List of vlans as string", - "title": "PVLAN Mapping" - }, - "vlan_translations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "List of vlans as string (only one vlan if direction is \"both\")", - "title": "From" - }, - "to": { - "type": "integer", - "description": "VLAN ID", - "title": "To" - }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "both" - ], - "default": "both", - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "VLAN Translations" - }, - "dot1x": { - "type": "object", - "properties": { - "port_control": { - "type": "string", - "enum": [ - "auto", - "force-authorized", - "force-unauthorized" - ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" - }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" - }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" - }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Value can be 60-4294967295 or 'server'", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - }, - "unauthorized": { - "type": "object", - "properties": { - "access_vlan_membership_egress": { - "type": "boolean", - "title": "Access VLAN Membership Egress" - }, - "native_vlan_membership_egress": { - "type": "boolean", - "title": "Native VLAN Membership Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unauthorized" - }, - "eapol": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "title": "Disabled" - }, - "authentication_failure_fallback_mba": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "timeout": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure Fallback Mba" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Eapol" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "dot1x" - }, - "service_profile": { - "type": "string", - "description": "QOS profile", - "title": "Service Profile" - }, - "shape": { - "type": "object", - "properties": { - "rate": { - "type": "string", - "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", - "title": "Rate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shape" - }, - "qos": { - "type": "object", - "properties": { - "trust": { - "type": "string", - "enum": [ - "dscp", - "cos", - "disabled" - ], - "title": "Trust" - }, - "dscp": { - "type": "integer", - "description": "DSCP value", - "title": "DSCP" - }, - "cos": { - "type": "integer", - "description": "COS value", - "title": "COS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" - }, - "spanning_tree_bpduguard": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpduguard" - }, - "spanning_tree_guard": { - "type": "string", - "enum": [ - "loop", - "root", - "disabled" - ], - "title": "Spanning Tree Guard" - }, - "spanning_tree_portfast": { - "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" - }, - "vmtracer": { - "type": "boolean", - "title": "VMTracer" - }, - "priority_flow_control": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "priorities": { - "type": "array", - "items": { - "type": "object", - "properties": { - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 7, - "title": "Priority" - }, - "no_drop": { - "type": "boolean", - "title": "No Drop" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "priority" - ] - }, - "title": "Priorities" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Priority Flow Control" - }, - "bfd": { - "type": "object", - "properties": { - "echo": { - "type": "boolean", - "title": "Echo" - }, - "interval": { - "type": "integer", - "description": "Interval in milliseconds", - "title": "Interval" - }, - "min_rx": { - "type": "integer", - "description": "Rate in milliseconds", - "title": "Min RX" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 50, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BFD" - }, - "service_policy": { - "type": "object", - "properties": { - "pbr": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Policy Based Routing Policy-map name", - "title": "Input" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PBR" - }, - "qos": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Quality of Service Policy-map name", - "title": "Input" - } - }, - "required": [ - "input" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Service Policy" - }, - "mpls": { - "type": "object", - "properties": { - "ip": { - "type": "boolean", - "title": "IP" - }, - "ldp": { - "type": "object", - "properties": { - "interface": { - "type": "boolean", - "title": "Interface" - }, - "igp_sync": { - "type": "boolean", - "title": "IGP Sync" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LDP" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "lacp_timer": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "fast", - "normal" - ], - "title": "Mode" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 3000, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Timer" - }, - "lacp_port_priority": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "LACP Port Priority" - }, - "transceiver": { - "type": "object", - "properties": { - "media": { - "type": "object", - "properties": { - "override": { - "type": "string", - "description": "Transceiver type", - "title": "Override" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Media" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Transceiver" - }, - "ip_proxy_arp": { - "type": "boolean", - "title": "IP Proxy ARP" - }, - "traffic_policy": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Ingress traffic policy", - "title": "Input" - }, - "output": { - "type": "string", - "description": "Egress traffic policy", - "title": "Output" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Traffic Policy" - }, - "bgp": { - "type": "object", - "properties": { - "session_tracker": { - "type": "string", - "description": "Name of session tracker", - "title": "Session Tracker" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BGP" - }, - "peer": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Interface" - }, - "peer_type": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Type" - }, - "sflow": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "egress": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "unmodified_enable": { - "type": "boolean", - "title": "Unmodified Enable" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sflow" - }, - "port_profile": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Port Profile" - }, - "uc_tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "min", - "max" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } - }, - "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Uc TX Queues" - }, - "tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "max", - "max_probability" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } - }, - "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "TX Queues" - }, - "vrrp_ids": { - "type": "array", - "description": "VRRP model.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "VRID", - "title": "ID" - }, - "priority_level": { - "type": "integer", - "description": "Instance priority", - "minimum": 1, - "maximum": 254, - "title": "Priority Level" - }, - "advertisement": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "description": "Interval in seconds", - "minimum": 1, - "maximum": 255, - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Advertisement" - }, - "preempt": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "delay": { - "type": "object", - "properties": { - "minimum": { - "type": "integer", - "description": "Minimum preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Minimum" - }, - "reload": { - "type": "integer", - "description": "Reload preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "required": [ - "enabled" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Preempt" - }, - "timers": { - "type": "object", - "properties": { - "delay": { - "type": "object", - "properties": { - "reload": { - "type": "integer", - "description": "Delay after reload in seconds.", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timers" - }, - "tracked_object": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Tracked object name", - "title": "Name" - }, - "decrement": { - "type": "integer", - "minimum": 1, - "maximum": 254, - "description": "Decrement VRRP priority by 1-254", - "title": "Decrement" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Tracked Object" - }, - "ipv4": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv4 address", - "title": "Address" - }, - "version": { - "type": "integer", - "enum": [ - 2, - 3 - ], - "title": "Version" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv6 address", - "title": "Address" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "VRRP IDs" - }, - "eos_cli": { - "type": "string", - "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", - "title": "EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Structured Config" - } - }, - "required": [ - "node" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "L3 Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Core Interfaces" - }, - "custom_structured_configuration_list_merge": { - "type": "string", - "description": "The List-merge strategy used when merging custom structured configurations.\n\nThis applies to all vars prefixed by prefixes in `custom_structured_configuration_prefix`\nand all data under the various `structured_config` options.\n\nThe available list merge strategies:\n- `replace`:\n - Any list will be replaced with the list defined in custom structured configurations.\n- `append`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be appended to the existing list (including duplicates).\n- `keep`:\n - Only set list if there is no existing list or existing list is `None`.\n- `prepend`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New items will be prepended to the existing list (including duplicates).\n- `append_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list.\n- `prepend_rp`:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be prepended to the existing list.\n", - "enum": [ - "replace", - "append", - "keep", - "prepend", - "append_rp", - "prepend_rp" - ], - "default": "append_rp", - "title": "Custom Structured Configuration List Merge" - }, - "custom_structured_configuration_prefix": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Custom EOS Structured Configuration keys can be set on any group or host_var level using the name\nof the corresponding `eos_cli_config_gen` key prefixed with content of `custom_structured_configuration_prefix`.\n\nThe content of Custom Structured Configuration variables will be merged with the structured config generated by the eos_designs role.\n\nThe merge is done recursively, so it is possible to update a sub-key of a variable set by `eos_designs` role already.\n\nThe merge follow these recursive merge strategies:\n- New keys will be added for all types.\n- Existing keys of type \"List\" with a \"Primary key\" set in the schema:\n - Strategy can be changed with `custom_structured_configuration_list_merge`. Default strategy:\n - Existing list items with the same \"Primary key\"-value will be updated.\n - New unique items will be appended to the existing list\n- Other keys of type \"List\" will have new unique items appended the the existing list.\n- Existing keys of type \"Dictionary\" will recursively merge\n- Other existing keys will be replaced.\n", - "default": [ - "custom_structured_configuration_" - ], - "title": "Custom Structured Configuration Prefix" - }, - "cv_pathfinder_regions": { - "description": "PREVIEW: This key is currently not supported\nDefine the SDWAN hierarchy for the device.", - "type": "array", - "items": { - "type": "object", - "properties": { - "description": { - "type": "string", - "title": "Description" - }, - "id": { - "type": "integer", - "description": "The region ID must be unique for the whole WAN deployment.", - "minimum": 1, - "maximum": 255, - "title": "ID" - }, - "sites": { - "type": "array", - "description": "All sites are placed in a default zone called DEFAULT-ZONE with ID 1.", - "items": { - "type": "object", - "properties": { - "description": { - "type": "string", - "title": "Description" - }, - "id": { - "type": "integer", - "description": "The site ID must be unique within a zone.\nGiven that all the sites are placed in the DEFAULT-ZONE, the site ID must be unique within a region.", - "minimum": 1, - "maximum": 10000, - "title": "ID" - }, - "location": { - "type": "string", - "description": "Will be interpreted", - "title": "Location" - }, - "site_contact": { - "type": "string", - "title": "Site Contact" - }, - "site_after_hours_contact": { - "type": "string", - "title": "Site After Hours Contact" - }, - "name": { - "type": "string", - "title": "Name" - } - }, - "required": [ - "id", - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "description": "Site name and ID." - }, - "title": "Sites" - }, - "name": { - "type": "string", - "title": "Name" - } - }, - "required": [ - "id", - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "description": "Region name and ID." - }, - "title": "Cv Pathfinder Regions" - }, - "cv_topology": { - "type": "array", - "description": "Generate AVD configurations directly from the given CloudVision topology.\nActivate this feature by setting `use_cv_topology` to `true`.\nRequires `default_interfaces` to be set for the relevant platforms and node types to detect the proper interface roles automatically.\nNeighbor hostnames must match the inventory hostnames of the AVD inventory to be taken into consideration.", - "items": { - "type": "object", - "properties": { - "hostname": { - "type": "string", - "title": "Hostname" - }, - "platform": { - "type": "string", - "title": "Platform" - }, - "interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "neighbor": { - "type": "string", - "title": "Neighbor" - }, - "neighbor_interface": { - "type": "string", - "title": "Neighbor Interface" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Interfaces" - } - }, - "required": [ - "platform", - "interfaces", - "hostname" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Cv Topology" - }, - "cvp_ingestauth_key": { - "type": "string", - "description": "On-premise CVP ingest auth key. If set, TerminAttr will be configured with key-based authentication for on-premise CVP.\nIf not set, TerminAttr will be configured with certificate based authentication:\n- On-premise using token onboarding. Default token path is '/tmp/token'.\n- CVaaS using token-secure onboarding. Default token path is '/tmp/cv-onboarding-token'.\nToken must be copied to the device first.", - "title": "CVP Ingestauth Key" - }, - "cvp_instance_ip": { - "type": "string", - "description": "IPv4 address or DNS name for CloudVision.\nThis variable only supports an on-premise single-node cluster or the DNS name of a CloudVision as a Service instance.\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use cvp_instance_ips instead.", - "deprecated": true, - "title": "CVP Instance IP" - }, - "cvp_instance_ips": { - "type": "array", - "description": "List of IPv4 addresses or DNS names for CloudVision.\nFor on-premise CloudVision enter all the nodes of the cluster.\nFor CloudVision as a Service enter the DNS name of the instance.\n`eos_designs` only supports one CloudVision cluster.\n", - "items": { - "type": "string", - "description": "IPv4 address or DNS name for CloudVision" - }, - "title": "CVP Instance Ips" - }, - "cvp_token_file": { - "type": "string", - "description": "cvp_token_file is the path to the token file on the switch.\nIf not set the default locations for on-premise or CVaaS will be used.\nSee cvp_ingestauth_key for details.", - "title": "CVP Token File" - }, - "dc_name": { - "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- HER Overlay DC scoped flood lists: `overlay_her_flood_list_scope: dc` (Required)\n", - "type": "string", - "title": "DC Name" - }, - "default_igmp_snooping_enabled": { - "description": "When set to false, disables IGMP snooping at fabric level and overrides per vlan settings.\n", - "type": "boolean", - "default": true, - "title": "Default IGMP Snooping Enabled" - }, - "default_interfaces": { - "type": "array", - "description": "Default uplink, downlink, and MLAG interfaces, which will be used if these interfaces are not defined on a device (either directly or through inheritance).\n", - "items": { - "type": "object", - "properties": { - "types": { - "type": "array", - "description": "List of node type keys.", - "items": { - "type": "string" - }, - "title": "Types" - }, - "platforms": { - "type": "array", - "description": "List of platform families.\nThis is defined as a Python regular expression that matches the full platform type.\n", - "items": { - "type": "string", - "description": "Arista platform family regular expression." - }, - "title": "Platforms" - }, - "uplink_interfaces": { - "type": "array", - "description": "List of uplink interfaces or uplink interface ranges.", - "items": { - "type": "string", - "description": "Interface range or interface." - }, - "title": "Uplink Interfaces" - }, - "mlag_interfaces": { - "type": "array", - "description": "List of MLAG interfaces or MLAG interface ranges.", - "items": { - "type": "string", - "description": "Interface range or interface." - }, - "title": "MLAG Interfaces" - }, - "downlink_interfaces": { - "type": "array", - "description": "List of downlink interfaces or downlink interface ranges.", - "items": { - "type": "string", - "description": "Interface range or interface." - }, - "title": "Downlink Interfaces" - } - }, - "required": [ - "types", - "platforms" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Default Interfaces" - }, - "default_mgmt_method": { - "type": "string", - "description": "`default_mgmt_method` controls the default VRF and source interface used for the following management and monitoring protocols configured with `eos_designs`:\n - `cv_settings`\n - `dns_settings`\n - `ntp_settings`\n - `sflow_settings`\n\n`oob` means the protocols will be configured with the VRF set by `mgmt_interface_vrf` and `mgmt_interface` as the source interface.\n`inband` means the protocols will be configured with the VRF set by `inband_mgmt_vrf` and `inband_mgmt_interface` as the source interface.\n`none` means the VRF and or interface must be manually set for each protocol.\nThis can be overridden under the settings for each protocol.\n", - "enum": [ - "oob", - "inband", - "none" - ], - "default": "oob", - "title": "Default Management Method" - }, - "default_node_types": { - "type": "array", - "description": "Uses hostname matches against a regular expression to determine the node type.", - "items": { - "type": "object", - "properties": { - "node_type": { - "type": "string", - "description": "Resulting node type when regex matches.", - "title": "Node Type" - }, - "match_hostnames": { - "type": "array", - "description": "Regular expressions to match against hostnames.", - "items": { - "type": "string", - "description": "Regex needs to match full hostname (i.e. is bounded by ^ and $ elements)." - }, - "title": "Match Hostnames" - } - }, - "required": [ - "match_hostnames", - "node_type" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Default Node Types" - }, - "design": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "By setting the design.type variable, the default node-types and templates described in these documents will be used.\n", - "enum": [ - "l3ls-evpn", - "mpls", - "l2ls" - ], - "default": "l3ls-evpn", - "title": "Type" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Design" - }, - "enable_trunk_groups": { - "type": "boolean", - "description": "Enable Trunk Group support across eos_designs.\nWarning: Because of the nature of the EOS Trunk Group feature, enabling this is \"all or nothing\".\n*All* vlans and *all* trunks towards connected endpoints must be using trunk groups as well.\nIf trunk groups are not assigned to a trunk, no vlans will be enabled on that trunk.\nSee \"Details on enable_trunk_groups\" below before enabling this feature.\n", - "default": false, - "title": "Enable Trunk Groups" - }, - "eos_designs_custom_templates": { - "type": "array", - "items": { - "type": "object", - "properties": { - "template": { - "type": "string", - "description": "Template file.", - "title": "Template" - }, - "options": { - "description": "Template options.", - "type": "object", - "properties": { - "list_merge": { - "type": "string", - "description": "Merge strategy for lists.", - "default": "append_rp", - "title": "List Merge" - }, - "strip_empty_keys": { - "type": "boolean", - "description": "Filter out keys from the generated output if value is null/none/undefined.", - "default": true, - "title": "Strip Empty Keys" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Options" - } - }, - "required": [ - "template" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "EOS Designs Custom Templates" - }, - "eos_designs_documentation": { - "description": "Control fabric documentation generation.\n", - "type": "object", - "properties": { - "connected_endpoints": { - "description": "Generate fabric-wide documentation for connected endpoints.\n", - "type": "boolean", - "default": false, - "title": "Connected Endpoints" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EOS Designs Documentation" - }, - "event_handlers": { - "type": "array", - "description": "Gives the ability to monitor and react to Syslog messages.\nEvent Handlers provide a powerful and flexible tool that can be used to apply self-healing actions,\ncustomize the system behavior, and implement workarounds to problems discovered in the field.\n", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Event Handler Name", - "title": "Name" - }, - "action_type": { - "type": "string", - "enum": [ - "bash", - "increment", - "log" - ], - "title": "Action Type" - }, - "action": { - "type": "string", - "description": "Command to execute\n", - "title": "Action" - }, - "delay": { - "type": "integer", - "description": "Event-handler delay in seconds\n", - "title": "Delay" - }, - "trigger": { - "type": "string", - "description": "Configure event trigger condition.\n", - "enum": [ - "on-boot", - "on-logging", - "on-startup-config" - ], - "title": "Trigger" - }, - "regex": { - "type": "string", - "description": "Regular expression to use for searching log messages. Required for on-logging trigger\n", - "title": "Regex" - }, - "asynchronous": { - "type": "boolean", - "default": false, - "description": "Set the action to be non-blocking.", - "title": "Asynchronous" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Event Handlers" - }, - "evpn_ebgp_gateway_inter_domain": { - "type": "boolean", - "title": "EVPN Ebgp Gateway Inter Domain" - }, - "evpn_ebgp_gateway_multihop": { - "description": "Default of 15, considering a large value to avoid BGP reachability issues in very complex DCI networks.\nAdapt the value for your specific topology.\n", - "type": "integer", - "default": 15, - "title": "EVPN Ebgp Gateway Multihop" - }, - "evpn_ebgp_multihop": { - "description": "Default of 3, the recommended value for a 3 stage spine and leaf topology.\nSet to a higher value to allow for very large and complex topologies.\n", - "type": "integer", - "default": 3, - "title": "EVPN Ebgp Multihop" - }, - "evpn_hostflap_detection": { - "type": "object", - "properties": { - "enabled": { - "description": "If set to false it will disable EVPN host-flap detection.", - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "threshold": { - "description": "Minimum number of MAC moves that indicate a MAC duplication issue.", - "type": "integer", - "default": 5, - "title": "Threshold" - }, - "window": { - "description": "Time (in seconds) to detect a MAC duplication issue.", - "type": "integer", - "default": 180, - "title": "Window" - }, - "expiry_timeout": { - "description": "Time (in seconds) to purge a MAC duplication issue.", - "type": "integer", - "title": "Expiry Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Hostflap Detection" - }, - "evpn_import_pruning": { - "description": "Enable VPN import pruning (Min. EOS 4.24.2F).\nThe Route Target extended communities carried by incoming VPN paths will be examined.\nIf none of those Route Targets have been configured for import, the path will be immediately discarded.\n", - "type": "boolean", - "default": false, - "title": "EVPN Import Pruning" - }, - "evpn_multicast": { - "type": "boolean", - "description": "General Configuration required for EVPN Multicast. \"evpn_l2_multicast\" or \"evpn_l3_multicast\" must also be configured under the Network Services (tenants).\nRequires \"underlay_multicast: true\" and IGMP snooping enabled globally (default).\nFor MLAG devices Route Distinguisher must be unique since this feature will create multi-vtep configuration.\nWarning !!! For Trident3 based platforms i.e 7050X3, 7300X3, 720XP and 722XP\n The Following default platform setting will be configured: \"platform trident forwarding-table partition flexible exact-match 16384 l2-shared 98304 l3-shared 131072\"\n All forwarding agents will be restarted when this configuration is applied.\n You can tune the settings by overriding the default variable: \"platform_settings[platforms].trident_forwarding_table_partition:\"\n Please contact an Arista representative for help with determining the appropriate values for your environment.\n", - "default": false, - "title": "EVPN Multicast" - }, - "evpn_overlay_bgp_rtc": { - "description": "Enable Route Target Membership Constraint Address Family on EVPN overlay BGP peerings (Min. EOS 4.25.1F).\nRequires use eBGP as overlay protocol.\n", - "type": "boolean", - "default": false, - "title": "EVPN Overlay BGP Rtc" - }, - "evpn_prevent_readvertise_to_server": { - "description": "Configure route-map on eBGP sessions towards route-servers, where prefixes with the peer's ASN in the AS Path are filtered away.\nThis is very useful in large-scale networks, where convergence will be quicker by not returning all updates received\nfrom Route-server-1 to Router-server-2 just for Route-server-2 to throw them away because of AS Path loop detection.\n", - "type": "boolean", - "default": false, - "title": "EVPN Prevent Readvertise To Server" - }, - "evpn_short_esi_prefix": { - "description": "Configure prefix for \"short_esi\" values.", - "type": "string", - "default": "0000:0000:", - "title": "EVPN Short Esi Prefix" - }, - "evpn_vlan_aware_bundles": { - "description": "Enable vlan aware bundles for EVPN MAC-VRF.", - "type": "boolean", - "default": false, - "title": "EVPN VLAN Aware Bundles" - }, - "evpn_vlan_bundles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Specify an EVPN vlan-aware-bundle name.\nEVPN vlan-aware-bundles group L2 VLANs and define common settings.\n", - "title": "Name" - }, - "id": { - "type": "integer", - "description": "\"id\" may be used for vlan-aware-bundle RD/RT ID so it should not overlap with l2vlan IDs which are not part of this bundle.\nSee \"overlay_rd_type\" and \"overlay_rt_type\" for details.\n", - "title": "ID" - }, - "rt_override": { - "type": "string", - "description": "By default the MAC VRF bundle RT will be derived from mac_vrf_id_base + bundle_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", - "title": "Rt Override" - }, - "rd_override": { - "type": "string", - "description": "By default the MAC VRF bundle RD will be derived from mac_vrf_id_base + bundle_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", - "title": "Rd Override" - }, - "evpn_l2_multi_domain": { - "type": "boolean", - "description": "Explicitly extend VLAN-Aware Bundle to remote EVPN domains.\nOverrides `.[].evpn_l2_multi_domain`.\n", - "title": "EVPN L2 Multi Domain" - }, - "bgp": { - "type": "object", - "properties": { - "raw_eos_cli": { - "type": "string", - "description": "EOS cli commands rendered on router_bgp.vlans-aware-bundle.", - "title": "Raw EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BGP" - } - }, - "required": [ - "id", - "name" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "EVPN VLAN Bundles" - }, - "fabric_evpn_encapsulation": { - "description": "Should be set to mpls for evpn-mpls scenario.", - "enum": [ - "vxlan", - "mpls" - ], - "default": "vxlan", - "type": "string", - "title": "Fabric EVPN Encapsulation" - }, - "fabric_ip_addressing": { - "type": "object", - "properties": { - "mlag": { - "type": "object", - "properties": { - "algorithm": { - "type": "string", - "default": "first_id", - "description": "This variable defines the Multi-chassis Link Aggregation (MLAG) algorithm used.\nEach MLAG link will have a /31* subnet with each subnet allocated from the relevant MLAG pool via a calculated offset.\nThe offset is calculated using one of the following algorithms:\n - first_id: `(mlag_primary_id - 1) * 2` where `mlag_primary_id` is the ID of the first node defined under the node_group.\n This allocation method will skip every other /31* subnet making it less space efficient than `odd_id`.\n - odd_id: `(odd_id - 1) / 2`. Requires the node_group to have a node with an odd ID and a node with an even ID.\n - same_subnet: the offset will always be zero.\n This allocation method will cause every MLAG link to be addressed with the same /31* subnet.\n\\* - The prefix length is configurable with a default of /31.", - "enum": [ - "first_id", - "odd_id", - "same_subnet" - ], - "title": "Algorithm" - }, - "ipv4_prefix_length": { - "type": "integer", - "default": 31, - "minimum": 1, - "maximum": 31, - "description": "IPv4 prefix length used for MLAG peer-vlan and L3 point-to-point SVIs over the MLAG peer-link.", - "title": "IPv4 Prefix Length" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MLAG" - }, - "p2p_uplinks": { - "type": "object", - "properties": { - "ipv4_prefix_length": { - "type": "integer", - "default": 31, - "minimum": 1, - "maximum": 31, - "description": "IPv4 prefix length used for L3 point-to-point uplinks.", - "title": "IPv4 Prefix Length" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "P2P Uplinks" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Fabric IP Addressing" - }, - "fabric_name": { - "description": "Fabric Name, required to match Ansible Group name covering all devices in the Fabric, **must** be an inventory group name.", - "type": "string", - "title": "Fabric Name" - }, - "hardware_counters": { - "type": "object", - "properties": { - "features": { - "type": "array", - "description": "This data model allows to configure the list of hardware counters feature\navailable on Arista platforms.\n\nThe `name` key accepts a list of valid_values which MUST be updated to support\nnew feature as they are released in EOS.\n\nThe available values of the different keys like 'direction' or 'address_type'\nare feature and hardware dependent and this model DOES NOT validate that the\ncombinations are valid. It is the responsability of the user of this data model\nto make sure that the rendered CLI is accepted by the targeted device.\n\nExamples:\n\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: ip\n direction: out\n layer3: true\n units_packets: true\n ```\n\n to render:\n ```eos\n hardware counter feature ip out layer3 units packets\n ```\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: route\n address_type: ipv4\n vrf: test\n prefix: 192.168.0.0/24\n ```\n\n to render:\n ```eos\n hardware counter feature route ipv4 vrf test 192.168.0.0/24\n ```\n", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "enum": [ - "acl", - "decap-group", - "directflow", - "ecn", - "flow-spec", - "gre tunnel interface", - "ip", - "mpls interface", - "mpls lfib", - "mpls tunnel", - "multicast", - "nexthop", - "pbr", - "pdp", - "policing interface", - "qos", - "qos dual-rate-policer", - "route", - "routed-port", - "subinterface", - "tapagg", - "traffic-class", - "traffic-policy", - "vlan", - "vlan-interface", - "vni decap", - "vni encap", - "vtep decap", - "vtep encap" - ], - "title": "Name" - }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "cpu" - ], - "description": "Most features support only 'in' and 'out'. Some like traffic-policy support 'cpu'.\nSome features DO NOT have any direction.\nThis validation IS NOT made by the schemas.\n", - "title": "Direction" - }, - "address_type": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "mac" - ], - "description": "Supported only for the following features:\n- acl: [ipv4, ipv6, mac] if direction is 'out'\n- multicast: [ipv4, ipv6]\n- route: [ipv4, ipv6]\nThis validation IS NOT made by the schemas.\n", - "title": "Address Type" - }, - "layer3": { - "type": "boolean", - "description": "Supported only for the 'ip' feature\n", - "title": "Layer3" - }, - "vrf": { - "type": "string", - "description": "Supported only for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", - "title": "VRF" - }, - "prefix": { - "type": "string", - "description": "Supported only for the 'route' feature.\nMandatory for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", - "title": "Prefix" - }, - "units_packets": { - "type": "boolean", - "title": "Units Packets" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Features" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Hardware Counters" - }, - "internal_vlan_order": { - "type": "object", - "description": "Internal vlan allocation order and range.", - "properties": { - "allocation": { - "type": "string", - "enum": [ - "ascending", - "descending" - ], - "title": "Allocation" - }, - "range": { - "type": "object", - "properties": { - "beginning": { - "type": "integer", - "description": "First VLAN ID.", - "minimum": 2, - "maximum": 4094, - "title": "Beginning" - }, - "ending": { - "type": "integer", - "description": "Last VLAN ID.", - "minimum": 2, - "maximum": 4094, - "title": "Ending" - } - }, - "required": [ - "beginning", - "ending" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Range" - } - }, - "required": [ - "allocation" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "default": { - "allocation": "ascending", - "range": { - "beginning": 1006, - "ending": 1199 - } - }, - "title": "Internal VLAN Order" - }, - "ipv6_mgmt_destination_networks": { - "description": "List of IPv6 prefixes to configure as static routes towards the OOB IPv6 Management interface gateway.\nReplaces the default route.\n", - "type": "array", - "items": { - "type": "string", - "description": "IPv6_network/Mask." - }, - "title": "IPv6 Management Destination Networks" - }, - "ipv6_mgmt_gateway": { - "type": "string", - "format": "ipv6", - "description": "OOB Management interface gateway in IPv6 format.\nUsed as next-hop for default gateway or static routes defined under 'ipv6_mgmt_destination_networks'.", - "title": "IPv6 Management Gateway" - }, - "is_deployed": { - "description": "If the device is already deployed in the fabric.\nWhen set to false, interfaces toward this device may be shutdown depending on the `shutdown_interfaces_towards_undeployed_peers` setting.\nFurthermore `eos_config_deploy_cvp` will not attempt to move or apply configurations to the device.\n", - "type": "boolean", - "default": true, - "title": "Is Deployed" - }, - "isis_advertise_passive_only": { - "type": "boolean", - "default": false, - "title": "ISIS Advertise Passive Only" - }, - "isis_area_id": { - "type": "string", - "default": "49.0001", - "title": "ISIS Area ID" - }, - "isis_default_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "default": "level-2", - "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden on link profile or link level.", - "title": "ISIS Default Circuit Type" - }, - "isis_default_is_type": { - "title": "ISIS Default IS Type", - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "default": "level-2" - }, - "isis_default_metric": { - "type": "integer", - "default": 50, - "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden at link profile or link level.", - "title": "ISIS Default Metric" - }, - "isis_maximum_paths": { - "description": "Number of path to configure in ECMP for ISIS.", - "type": "integer", - "title": "ISIS Maximum Paths" - }, - "isis_ti_lfa": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "title": "Enabled" - }, - "protection": { - "type": "string", - "enum": [ - "link", - "node" - ], - "title": "Protection" - }, - "local_convergence_delay": { - "description": "Local convergence delay in milliseconds.", - "type": "integer", - "default": 10000, - "title": "Local Convergence Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "ISIS TI LFA" - }, - "l3_edge": { - "type": "object", - "properties": { - "p2p_links_ip_pools": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "P2P pool name.", - "title": "Name" - }, - "ipv4_pool": { - "type": "string", - "description": "IPv4 address/Mask.", - "title": "IPv4 Pool" - }, - "prefix_size": { - "type": "integer", - "description": "Subnet mask size.", - "default": 31, - "minimum": 8, - "maximum": 31, - "title": "Prefix Size" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "P2P Links IP Pools" - }, - "p2p_links_profiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "P2P profile name. Any variable supported under `p2p_links` can be inherited from a profile.", - "title": "Name" - }, - "id": { - "type": "integer", - "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", - "title": "ID" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "ip_pool": { - "type": "string", - "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", - "title": "IP Pool" - }, - "subnet": { - "type": "string", - "description": "IPv4 address/Mask. Subnet used on this P2P link.", - "title": "Subnet" - }, - "ip": { - "type": "array", - "description": "Specific IP addresses used on this P2P link.", - "items": { - "type": "string", - "description": "Node IPv4 address/Mask." - }, - "title": "IP" - }, - "ipv6_enable": { - "type": "boolean", - "default": false, - "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", - "title": "IPv6 Enable" - }, - "nodes": { - "type": "array", - "description": "Nodes where this link should be configured.", - "items": { - "type": "string", - "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" - }, - "title": "Nodes" - }, - "interfaces": { - "type": "array", - "description": "Interfaces where this link should be configured and Required unless using port-channels.", - "items": { - "type": "string", - "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" - }, - "title": "Interfaces" - }, - "as": { - "type": "array", - "description": "AS numbers for BGP.\nRequired with bgp peering.\n", - "items": { - "type": "string", - "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." - }, - "title": "As" - }, - "descriptions": { - "type": "array", - "description": "Interface description.", - "items": { - "type": "string" - }, - "title": "Descriptions" - }, - "include_in_underlay_protocol": { - "type": "boolean", - "default": true, - "description": "Add this interface to underlay routing protocol.", - "title": "Include In Underlay Protocol" - }, - "isis_hello_padding": { - "type": "boolean", - "default": false, - "title": "ISIS Hello Padding" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1", - "level-2", - "level-1-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "md5", - "text" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password.", - "title": "ISIS Authentication Key" - }, - "mpls_ip": { - "type": "boolean", - "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", - "title": "MPLS IP" - }, - "mpls_ldp": { - "type": "boolean", - "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", - "title": "MPLS LDP" - }, - "mtu": { - "type": "integer", - "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", - "title": "MTU" - }, - "bfd": { - "type": "boolean", - "default": false, - "description": "Enable BFD (only considered for BGP).", - "title": "BFD" - }, - "ptp": { - "description": "PTP parameters.", - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "description": "Enable PTP.", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "sflow": { - "type": "boolean", - "description": "Enable sFlow. Overrides `fabric_sflow` setting.", - "title": "Sflow" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "macsec_profile": { - "type": "string", - "description": "MAC security profile.", - "title": "Macsec Profile" - }, - "port_channel": { - "description": "Port-channel parameters.", - "type": "object", - "properties": { - "mode": { - "type": "string", - "default": "active", - "title": "Mode" - }, - "nodes_child_interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "title": "Node" - }, - "interfaces": { - "type": "array", - "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", - "items": { - "type": "string" - }, - "title": "Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "node" - ] - }, - "title": "Nodes Child Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Port Channel" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", - "title": "Structured Config" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "P2P Links Profiles" - }, - "p2p_links": { - "type": "array", - "items": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "description": "Nodes where this link should be configured.", - "items": { - "type": "string", - "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" - }, - "title": "Nodes" - }, - "profile": { - "type": "string", - "description": "P2P profile name. Profile defined under p2p_profiles.", - "title": "Profile" - }, - "id": { - "type": "integer", - "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", - "title": "ID" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "ip_pool": { - "type": "string", - "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", - "title": "IP Pool" - }, - "subnet": { - "type": "string", - "description": "IPv4 address/Mask. Subnet used on this P2P link.", - "title": "Subnet" - }, - "ip": { - "type": "array", - "description": "Specific IP addresses used on this P2P link.", - "items": { - "type": "string", - "description": "Node IPv4 address/Mask." - }, - "title": "IP" - }, - "ipv6_enable": { - "type": "boolean", - "default": false, - "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", - "title": "IPv6 Enable" - }, - "interfaces": { - "type": "array", - "description": "Interfaces where this link should be configured and Required unless using port-channels.", - "items": { - "type": "string", - "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" - }, - "title": "Interfaces" - }, - "as": { - "type": "array", - "description": "AS numbers for BGP.\nRequired with bgp peering.\n", - "items": { - "type": "string", - "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." - }, - "title": "As" - }, - "descriptions": { - "type": "array", - "description": "Interface description.", - "items": { - "type": "string" - }, - "title": "Descriptions" - }, - "include_in_underlay_protocol": { - "type": "boolean", - "default": true, - "description": "Add this interface to underlay routing protocol.", - "title": "Include In Underlay Protocol" - }, - "isis_hello_padding": { - "type": "boolean", - "default": false, - "title": "ISIS Hello Padding" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1", - "level-2", - "level-1-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "md5", - "text" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password.", - "title": "ISIS Authentication Key" - }, - "mpls_ip": { - "type": "boolean", - "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", - "title": "MPLS IP" - }, - "mpls_ldp": { - "type": "boolean", - "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", - "title": "MPLS LDP" - }, - "mtu": { - "type": "integer", - "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", - "title": "MTU" - }, - "bfd": { - "type": "boolean", - "default": false, - "description": "Enable BFD (only considered for BGP).", - "title": "BFD" - }, - "ptp": { - "description": "PTP parameters.", - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": false, - "description": "Enable PTP.", - "title": "Enabled" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "sflow": { - "type": "boolean", - "description": "Enable sFlow. Overrides `fabric_sflow` setting.", - "title": "Sflow" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "macsec_profile": { - "type": "string", - "description": "MAC security profile.", - "title": "Macsec Profile" - }, - "port_channel": { - "description": "Port-channel parameters.", - "type": "object", - "properties": { - "mode": { - "type": "string", - "default": "active", - "title": "Mode" - }, - "nodes_child_interfaces": { - "type": "array", - "items": { - "type": "object", - "properties": { - "node": { - "type": "string", - "title": "Node" - }, - "interfaces": { - "type": "array", - "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", - "items": { - "type": "string" - }, - "title": "Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "node" - ] - }, - "title": "Nodes Child Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Port Channel" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", - "title": "Structured Config" - } - }, - "required": [ - "nodes" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "P2P Links" - }, - "l3_interfaces_profiles": { - "type": "array", - "items": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "description": "L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile.", - "title": "Profile" - }, - "interface": { - "type": "string", - "description": "Ethernet interface name like 'Ethernet2'.", - "pattern": "Ethernet[\\d/]+", - "title": "Interface" - }, - "description": { - "type": "string", - "description": "Interface description.\nIf not set a default description will be configured with '[[ ]]'", - "title": "Description" - }, - "ip": { - "type": "string", - "description": "Node IPv4 address/Mask or 'dhcp'.", - "title": "IP" - }, - "set_default_route": { - "type": "boolean", - "default": false, - "description": "Insert a default route to the `peer_ip` if `ip` is an ip address\nor configure to accept a default route from DHCP if `ip` is `dhcp`.\n\nAVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing.", - "title": "Set Default Route" - }, - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable or Shutdown the interface.", - "title": "Enabled" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "peer": { - "type": "string", - "description": "The peer device name. Used for description and documentation", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "The peer device interface. Used for description and documentation", - "title": "Peer Interface" - }, - "peer_ip": { - "type": "string", - "description": "The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address.", - "title": "Peer IP" - }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" - }, - "wan_carrier": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Carrier this interface is connected to.\nThis is used to infer the path-groups in which this interface should be configured.", - "title": "Wan Carrier" - }, - "wan_circuit_id": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Circuit ID for this interface.\nThis is not rendered in the configuration but used for WAN designs.", - "title": "Wan Circuit ID" - }, - "connected_to_pathfinder": { - "type": "boolean", - "description": "PREVIEW: This key is currently not supported\n\nFor a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.\nDefault True.", - "title": "Connected To Pathfinder" - }, - "raw_eos_cli": { - "type": "string", - "description": "EOS CLI rendered directly on the interface in the final EOS configuration.", - "title": "Raw EOS CLI" - }, - "structured_config": { - "type": "object", - "description": "Custom structured config for the Ethernet interface.", - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "description": { - "type": "string", - "title": "Description" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - }, - "load_interval": { - "type": "integer", - "minimum": 0, - "maximum": 600, - "description": "Interval in seconds for updating interface counters\"", - "title": "Load Interval" - }, - "speed": { - "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" - }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" - }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", - "title": "L2 MTU" - }, - "l2_mru": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mru\" should only be defined for platforms supporting the \"l2 mru\" CLI\n", - "title": "L2 MRU" - }, - "vlans": { - "type": "string", - "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", - "title": "VLANs" - }, - "native_vlan": { - "type": "integer", - "title": "Native VLAN" - }, - "native_vlan_tag": { - "type": "boolean", - "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", - "title": "Native VLAN Tag" - }, - "mode": { - "type": "string", - "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" - ], - "title": "Mode" - }, - "phone": { - "type": "object", - "properties": { - "trunk": { - "type": "string", - "enum": [ - "tagged", - "tagged phone", - "untagged", - "untagged phone" - ], - "title": "Trunk" - }, - "vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Phone" - }, - "l2_protocol": { - "type": "object", - "properties": { - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "Vlan tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "forwarding_profile": { - "type": "string", - "description": "L2 protocol forwarding profile", - "title": "Forwarding Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "L2 Protocol" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Trunk Groups" - }, - "type": { - "type": "string", - "enum": [ - "routed", - "switched", - "l3dot1q", - "l2dot1q", - "port-channel-member" - ], - "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", - "title": "Type" - }, - "snmp_trap_link_change": { - "type": "boolean", - "title": "Snmp Trap Link Change" - }, - "address_locking": { - "type": "object", - "properties": { - "ipv4": { - "type": "boolean", - "description": "Enable address locking for IPv4", - "title": "IPv4" - }, - "ipv6": { - "type": "boolean", - "description": "Enable address locking for IPv6", - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Address Locking" - }, - "flowcontrol": { - "type": "object", - "properties": { - "received": { - "type": "string", - "enum": [ - "desired", - "on", - "off" - ], - "title": "Received" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flowcontrol" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - }, - "flow_tracker": { - "type": "object", - "properties": { - "sampled": { - "type": "string", - "description": "Sampled flow tracker name.", - "title": "Sampled" - }, - "hardware": { - "type": "string", - "description": "Hardware flow tracker name.", - "title": "Hardware" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flow Tracker" - }, - "error_correction_encoding": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "fire_code": { - "type": "boolean", - "title": "Fire Code" - }, - "reed_solomon": { - "type": "boolean", - "title": "Reed Solomon" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Error Correction Encoding" - }, - "link_tracking_groups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Group name", - "title": "Name" - }, - "direction": { - "type": "string", - "enum": [ - "upstream", - "downstream" - ], - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Link Tracking Groups" - }, - "evpn_ethernet_segment": { - "type": "object", - "properties": { - "identifier": { - "type": "string", - "description": "EVPN Ethernet Segment Identifier (Type 1 format)", - "title": "Identifier" - }, - "redundancy": { - "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "title": "Redundancy" - }, - "designated_forwarder_election": { - "type": "object", - "properties": { - "algorithm": { - "type": "string", - "enum": [ - "modulus", - "preference" - ], - "title": "Algorithm" - }, - "preference_value": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "description": "Preference_value is only used when \"algorithm\" is \"preference\"", - "title": "Preference Value" - }, - "dont_preempt": { - "type": "boolean", - "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", - "title": "Dont Preempt" - }, - "hold_time": { - "type": "integer", - "title": "Hold Time" - }, - "subsequent_hold_time": { - "type": "integer", - "title": "Subsequent Hold Time" - }, - "candidate_reachability_required": { - "type": "boolean", - "title": "Candidate Reachability Required" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Designated Forwarder Election" - }, - "mpls": { - "type": "object", - "properties": { - "shared_index": { - "type": "integer", - "minimum": 1, - "maximum": 1024, - "title": "Shared Index" - }, - "tunnel_flood_filter_time": { - "type": "integer", - "title": "Tunnel Flood Filter Time" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "route_target": { - "type": "string", - "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", - "title": "Route Target" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "EVPN Ethernet Segment" - }, - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "VLAN tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" - }, - "encapsulation_vlan": { - "type": "object", - "properties": { - "client": { - "type": "object", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Client VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Client Outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Client Inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "unmatched": { - "type": "boolean", - "title": "Unmatched" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Client" - }, - "network": { - "type": "object", - "description": "Network encapsulations are all optional and skipped if using client unmatched", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Network VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Network outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Network inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" - }, - "client": { - "type": "boolean", - "title": "Client" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Network" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Encapsulation VLAN" - }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN ID" - }, - "ip_address": { - "type": "string", - "description": "IPv4 address/mask or \"dhcp\"", - "title": "IP Address" - }, - "ip_address_secondaries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "IP Address Secondaries" - }, - "dhcp_client_accept_default_route": { - "type": "boolean", - "description": "Install default-route obtained via DHCP", - "title": "DHCP Client Accept Default Route" - }, - "dhcp_server_ipv4": { - "type": "boolean", - "description": "Enable IPv4 DHCP server.", - "title": "DHCP Server IPv4" - }, - "dhcp_server_ipv6": { - "type": "boolean", - "description": "Enable IPv6 DHCP server.", - "title": "DHCP Server IPv6" - }, - "ip_helpers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip_helper": { - "type": "string", - "title": "IP Helper" - }, - "source_interface": { - "type": "string", - "description": "Source interface name", - "title": "Source Interface" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" - }, - "ip_nat": { - "type": "object", - "properties": { - "service_profile": { - "type": "string", - "description": "NAT interface profile.", - "title": "Service Profile" - }, - "destination": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "pool_name": { - "type": "string", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "pool_name", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Destination" - }, - "source": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "nat_type": { - "type": "string", - "enum": [ - "overload", - "pool", - "pool-address-only", - "pool-full-cone" - ], - "title": "Nat Type" - }, - "pool_name": { - "type": "string", - "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "nat_type", - "access_list" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Source" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IP Nat" - }, - "ipv6_enable": { - "type": "boolean", - "title": "IPv6 Enable" - }, - "ipv6_address": { - "type": "string", - "title": "IPv6 Address" - }, - "ipv6_address_link_local": { - "type": "string", - "description": "Link local IPv6 address/mask", - "title": "IPv6 Address Link Local" - }, - "ipv6_nd_ra_disabled": { - "type": "boolean", - "title": "IPv6 ND RA Disabled" - }, - "ipv6_nd_managed_config_flag": { - "type": "boolean", - "title": "IPv6 ND Managed Config Flag" - }, - "ipv6_nd_prefixes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ipv6_prefix": { - "type": "string", - "title": "IPv6 Prefix" - }, - "valid_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Valid Lifetime" - }, - "preferred_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Preferred Lifetime" - }, - "no_autoconfig_flag": { - "type": "boolean", - "title": "No Autoconfig Flag" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ipv6_prefix" - ] - }, - "title": "IPv6 ND Prefixes" - }, - "ipv6_dhcp_relay_destinations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "DHCP server's IPv6 address", - "title": "Address" - }, - "vrf": { - "type": "string", - "title": "VRF" - }, - "local_interface": { - "type": "string", - "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", - "title": "Local Interface" - }, - "source_address": { - "type": "string", - "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", - "title": "Source Address" - }, - "link_address": { - "type": "string", - "description": "Override the default link address specified in the relayed DHCP packet", - "title": "Link Address" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "address" - ] - }, - "title": "IPv6 DHCP Relay Destinations" - }, - "access_group_in": { - "type": "string", - "description": "Access list name", - "title": "Access Group In" - }, - "access_group_out": { - "type": "string", - "description": "Access list name", - "title": "Access Group Out" - }, - "ipv6_access_group_in": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group In" - }, - "ipv6_access_group_out": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group Out" - }, - "mac_access_group_in": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group In" - }, - "mac_access_group_out": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group Out" - }, - "multicast": { - "type": "object", - "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - }, - "out": { - "type": "boolean", - "title": "Out" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" - }, - "static": { - "type": "boolean", - "title": "Static" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "ospf_network_point_to_point": { - "type": "boolean", - "title": "OSPF Network Point To Point" - }, - "ospf_area": { - "type": "string", - "title": "OSPF Area" - }, - "ospf_cost": { - "type": "integer", - "title": "OSPF Cost" - }, - "ospf_authentication": { - "type": "string", - "enum": [ - "none", - "simple", - "message-digest" - ], - "title": "OSPF Authentication" - }, - "ospf_authentication_key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "OSPF Authentication Key" - }, - "ospf_message_digest_keys": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "hash_algorithm": { - "type": "string", - "enum": [ - "md5", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "title": "Hash Algorithm" - }, - "key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "Key" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "OSPF Message Digest Keys" - }, - "pim": { - "type": "object", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "dr_priority": { - "type": "integer", - "minimum": 0, - "maximum": 429467295, - "title": "DR Priority" - }, - "sparse_mode": { - "type": "boolean", - "title": "Sparse Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PIM" - }, - "mac_security": { - "type": "object", - "properties": { - "profile": { - "type": "string", - "title": "Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Security" - }, - "channel_group": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "mode": { - "type": "string", - "enum": [ - "on", - "active", - "passive" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Channel Group" - }, - "isis_enable": { - "type": "string", - "description": "ISIS instance", - "title": "ISIS Enable" - }, - "isis_passive": { - "type": "boolean", - "title": "ISIS Passive" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_network_point_to_point": { - "type": "boolean", - "title": "ISIS Network Point To Point" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_hello_padding": { - "type": "boolean", - "title": "ISIS Hello Padding" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "text", - "md5" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password", - "title": "ISIS Authentication Key" - }, - "poe": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" - }, - "priority": { - "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { - "type": "string", - "title": "Watts" - }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Limit" - }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" - }, - "legacy_detect": { - "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PoE" - }, - "ptp": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "announce": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - }, - "timeout": { - "type": "integer", - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Announce" - }, - "delay_req": { - "type": "integer", - "title": "Delay Req" - }, - "delay_mechanism": { - "type": "string", - "enum": [ - "e2e", - "p2p" - ], - "title": "Delay Mechanism" - }, - "sync_message": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sync Message" - }, - "role": { - "type": "string", - "enum": [ - "master", - "dynamic" - ], - "title": "Role" - }, - "vlan": { - "type": "string", - "description": "VLAN can be 'all' or list of vlans as string", - "title": "VLAN" - }, - "transport": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "layer2" - ], - "title": "Transport" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PTP" - }, - "profile": { - "type": "string", - "description": "Interface profile", - "title": "Profile" - }, - "storm_control": { - "type": "object", - "properties": { - "all": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Broadcast" - }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" - }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unknown Unicast" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Storm Control" - }, - "logging": { - "type": "object", - "properties": { - "event": { - "type": "object", - "properties": { - "link_status": { - "type": "boolean", - "title": "Link Status" - }, - "congestion_drops": { - "type": "boolean", - "title": "Congestion Drops" - }, - "spanning_tree": { - "type": "boolean", - "title": "Spanning Tree" - }, - "storm_control_discards": { - "type": "boolean", - "title": "Storm Control Discards" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Event" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Logging" - }, - "lldp": { - "type": "object", - "properties": { - "transmit": { - "type": "boolean", - "title": "Transmit" - }, - "receive": { - "type": "boolean", - "title": "Receive" - }, - "ztp_vlan": { - "type": "integer", - "description": "ZTP vlan number", - "title": "ZTP VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LLDP" - }, - "trunk_private_vlan_secondary": { - "type": "boolean", - "title": "Trunk Private VLAN Secondary" - }, - "pvlan_mapping": { - "type": "string", - "description": "List of vlans as string", - "title": "PVLAN Mapping" - }, - "vlan_translations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "List of vlans as string (only one vlan if direction is \"both\")", - "title": "From" - }, - "to": { - "type": "integer", - "description": "VLAN ID", - "title": "To" - }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "both" - ], - "default": "both", - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "VLAN Translations" - }, - "dot1x": { - "type": "object", - "properties": { - "port_control": { - "type": "string", - "enum": [ - "auto", - "force-authorized", - "force-unauthorized" - ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" - }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" - }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" - }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Value can be 60-4294967295 or 'server'", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - }, - "unauthorized": { - "type": "object", - "properties": { - "access_vlan_membership_egress": { - "type": "boolean", - "title": "Access VLAN Membership Egress" - }, - "native_vlan_membership_egress": { - "type": "boolean", - "title": "Native VLAN Membership Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unauthorized" - }, - "eapol": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "title": "Disabled" - }, - "authentication_failure_fallback_mba": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "timeout": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure Fallback Mba" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Eapol" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "dot1x" - }, - "service_profile": { - "type": "string", - "description": "QOS profile", - "title": "Service Profile" - }, - "shape": { - "type": "object", - "properties": { - "rate": { - "type": "string", - "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", - "title": "Rate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shape" - }, - "qos": { - "type": "object", - "properties": { - "trust": { - "type": "string", - "enum": [ - "dscp", - "cos", - "disabled" - ], - "title": "Trust" - }, - "dscp": { - "type": "integer", - "description": "DSCP value", - "title": "DSCP" - }, - "cos": { - "type": "integer", - "description": "COS value", - "title": "COS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" - }, - "spanning_tree_bpduguard": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpduguard" - }, - "spanning_tree_guard": { - "type": "string", - "enum": [ - "loop", - "root", - "disabled" - ], - "title": "Spanning Tree Guard" - }, - "spanning_tree_portfast": { - "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" - }, - "vmtracer": { - "type": "boolean", - "title": "VMTracer" - }, - "priority_flow_control": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "priorities": { - "type": "array", - "items": { - "type": "object", - "properties": { - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 7, - "title": "Priority" - }, - "no_drop": { - "type": "boolean", - "title": "No Drop" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "priority" - ] - }, - "title": "Priorities" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Priority Flow Control" - }, - "bfd": { - "type": "object", - "properties": { - "echo": { - "type": "boolean", - "title": "Echo" - }, - "interval": { - "type": "integer", - "description": "Interval in milliseconds", - "title": "Interval" - }, - "min_rx": { - "type": "integer", - "description": "Rate in milliseconds", - "title": "Min RX" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 50, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BFD" - }, - "service_policy": { - "type": "object", - "properties": { - "pbr": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Policy Based Routing Policy-map name", - "title": "Input" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PBR" - }, - "qos": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Quality of Service Policy-map name", - "title": "Input" - } - }, - "required": [ - "input" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Service Policy" - }, - "mpls": { - "type": "object", - "properties": { - "ip": { - "type": "boolean", - "title": "IP" - }, - "ldp": { - "type": "object", - "properties": { - "interface": { - "type": "boolean", - "title": "Interface" - }, - "igp_sync": { - "type": "boolean", - "title": "IGP Sync" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LDP" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MPLS" - }, - "lacp_timer": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "fast", - "normal" - ], - "title": "Mode" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 3000, - "title": "Multiplier" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "LACP Timer" - }, - "lacp_port_priority": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "LACP Port Priority" - }, - "transceiver": { - "type": "object", - "properties": { - "media": { - "type": "object", - "properties": { - "override": { - "type": "string", - "description": "Transceiver type", - "title": "Override" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Media" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Transceiver" - }, - "ip_proxy_arp": { - "type": "boolean", - "title": "IP Proxy ARP" - }, - "traffic_policy": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Ingress traffic policy", - "title": "Input" - }, - "output": { - "type": "string", - "description": "Egress traffic policy", - "title": "Output" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Traffic Policy" - }, - "bgp": { - "type": "object", - "properties": { - "session_tracker": { - "type": "string", - "description": "Name of session tracker", - "title": "Session Tracker" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "BGP" - }, - "peer": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Interface" - }, - "peer_type": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Type" - }, - "sflow": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "egress": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "unmodified_enable": { - "type": "boolean", - "title": "Unmodified Enable" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sflow" - }, - "port_profile": { + "required": [ + "name" + ] + }, + "title": "Interfaces" + } + }, + "required": [ + "platform", + "interfaces", + "hostname" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Cv Topology" + }, + "cvp_ingestauth_key": { + "type": "string", + "description": "On-premise CVP ingest auth key. If set, TerminAttr will be configured with key-based authentication for on-premise CVP.\nIf not set, TerminAttr will be configured with certificate based authentication:\n- On-premise using token onboarding. Default token path is '/tmp/token'.\n- CVaaS using token-secure onboarding. Default token path is '/tmp/cv-onboarding-token'.\nToken must be copied to the device first.", + "title": "CVP Ingestauth Key" + }, + "cvp_instance_ip": { + "type": "string", + "description": "IPv4 address or DNS name for CloudVision.\nThis variable only supports an on-premise single-node cluster or the DNS name of a CloudVision as a Service instance.\nThis key is deprecated. Support will be removed in AVD version 5.0.0. Use cvp_instance_ips instead.", + "deprecated": true, + "title": "CVP Instance IP" + }, + "cvp_instance_ips": { + "type": "array", + "description": "List of IPv4 addresses or DNS names for CloudVision.\nFor on-premise CloudVision enter all the nodes of the cluster.\nFor CloudVision as a Service enter the DNS name of the instance.\n`eos_designs` only supports one CloudVision cluster.\n", + "items": { + "type": "string", + "description": "IPv4 address or DNS name for CloudVision" + }, + "title": "CVP Instance Ips" + }, + "cvp_token_file": { + "type": "string", + "description": "cvp_token_file is the path to the token file on the switch.\nIf not set the default locations for on-premise or CVaaS will be used.\nSee cvp_ingestauth_key for details.", + "title": "CVP Token File" + }, + "dc_name": { + "description": "POD Name is used in:\n- Fabric Documentation (Optional, falls back to fabric_name)\n- SNMP Location: `snmp_settings.location` (Optional)\n- HER Overlay DC scoped flood lists: `overlay_her_flood_list_scope: dc` (Required)\n", + "type": "string", + "title": "DC Name" + }, + "default_igmp_snooping_enabled": { + "description": "When set to false, disables IGMP snooping at fabric level and overrides per vlan settings.\n", + "type": "boolean", + "default": true, + "title": "Default IGMP Snooping Enabled" + }, + "default_interfaces": { + "type": "array", + "description": "Default uplink, downlink, and MLAG interfaces, which will be used if these interfaces are not defined on a device (either directly or through inheritance).\n", + "items": { + "type": "object", + "properties": { + "types": { + "type": "array", + "description": "List of node type keys.", + "items": { + "type": "string" + }, + "title": "Types" + }, + "platforms": { + "type": "array", + "description": "List of platform families.\nThis is defined as a Python regular expression that matches the full platform type.\n", + "items": { + "type": "string", + "description": "Arista platform family regular expression." + }, + "title": "Platforms" + }, + "uplink_interfaces": { + "type": "array", + "description": "List of uplink interfaces or uplink interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "Uplink Interfaces" + }, + "mlag_interfaces": { + "type": "array", + "description": "List of MLAG interfaces or MLAG interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "MLAG Interfaces" + }, + "downlink_interfaces": { + "type": "array", + "description": "List of downlink interfaces or downlink interface ranges.", + "items": { + "type": "string", + "description": "Interface range or interface." + }, + "title": "Downlink Interfaces" + } + }, + "required": [ + "types", + "platforms" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Default Interfaces" + }, + "default_mgmt_method": { + "type": "string", + "description": "`default_mgmt_method` controls the default VRF and source interface used for the following management and monitoring protocols configured with `eos_designs`:\n - `cv_settings`\n - `dns_settings`\n - `ntp_settings`\n - `sflow_settings`\n\n`oob` means the protocols will be configured with the VRF set by `mgmt_interface_vrf` and `mgmt_interface` as the source interface.\n`inband` means the protocols will be configured with the VRF set by `inband_mgmt_vrf` and `inband_mgmt_interface` as the source interface.\n`none` means the VRF and or interface must be manually set for each protocol.\nThis can be overridden under the settings for each protocol.\n", + "enum": [ + "oob", + "inband", + "none" + ], + "default": "oob", + "title": "Default Management Method" + }, + "default_node_types": { + "type": "array", + "description": "Uses hostname matches against a regular expression to determine the node type.", + "items": { + "type": "object", + "properties": { + "node_type": { + "type": "string", + "description": "Resulting node type when regex matches.", + "title": "Node Type" + }, + "match_hostnames": { + "type": "array", + "description": "Regular expressions to match against hostnames.", + "items": { + "type": "string", + "description": "Regex needs to match full hostname (i.e. is bounded by ^ and $ elements)." + }, + "title": "Match Hostnames" + } + }, + "required": [ + "match_hostnames", + "node_type" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Default Node Types" + }, + "design": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "By setting the design.type variable, the default node-types and templates described in these documents will be used.\n", + "enum": [ + "l3ls-evpn", + "mpls", + "l2ls" + ], + "default": "l3ls-evpn", + "title": "Type" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Design" + }, + "enable_trunk_groups": { + "type": "boolean", + "description": "Enable Trunk Group support across eos_designs.\nWarning: Because of the nature of the EOS Trunk Group feature, enabling this is \"all or nothing\".\n*All* vlans and *all* trunks towards connected endpoints must be using trunk groups as well.\nIf trunk groups are not assigned to a trunk, no vlans will be enabled on that trunk.\nSee \"Details on enable_trunk_groups\" below before enabling this feature.\n", + "default": false, + "title": "Enable Trunk Groups" + }, + "eos_designs_custom_templates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "template": { + "type": "string", + "description": "Template file.", + "title": "Template" + }, + "options": { + "description": "Template options.", + "type": "object", + "properties": { + "list_merge": { + "type": "string", + "description": "Merge strategy for lists.", + "default": "append_rp", + "title": "List Merge" + }, + "strip_empty_keys": { + "type": "boolean", + "description": "Filter out keys from the generated output if value is null/none/undefined.", + "default": true, + "title": "Strip Empty Keys" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Options" + } + }, + "required": [ + "template" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "EOS Designs Custom Templates" + }, + "eos_designs_documentation": { + "description": "Control fabric documentation generation.\n", + "type": "object", + "properties": { + "connected_endpoints": { + "description": "Generate fabric-wide documentation for connected endpoints.\n", + "type": "boolean", + "default": false, + "title": "Connected Endpoints" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EOS Designs Documentation" + }, + "event_handlers": { + "type": "array", + "description": "Gives the ability to monitor and react to Syslog messages.\nEvent Handlers provide a powerful and flexible tool that can be used to apply self-healing actions,\ncustomize the system behavior, and implement workarounds to problems discovered in the field.\n", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Event Handler Name", + "title": "Name" + }, + "action_type": { + "type": "string", + "enum": [ + "bash", + "increment", + "log" + ], + "title": "Action Type" + }, + "action": { + "type": "string", + "description": "Command to execute\n", + "title": "Action" + }, + "delay": { + "type": "integer", + "description": "Event-handler delay in seconds\n", + "title": "Delay" + }, + "trigger": { + "type": "string", + "description": "Configure event trigger condition.\n", + "enum": [ + "on-boot", + "on-logging", + "on-startup-config" + ], + "title": "Trigger" + }, + "regex": { + "type": "string", + "description": "Regular expression to use for searching log messages. Required for on-logging trigger\n", + "title": "Regex" + }, + "asynchronous": { + "type": "boolean", + "default": false, + "description": "Set the action to be non-blocking.", + "title": "Asynchronous" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Event Handlers" + }, + "evpn_ebgp_gateway_inter_domain": { + "type": "boolean", + "title": "EVPN Ebgp Gateway Inter Domain" + }, + "evpn_ebgp_gateway_multihop": { + "description": "Default of 15, considering a large value to avoid BGP reachability issues in very complex DCI networks.\nAdapt the value for your specific topology.\n", + "type": "integer", + "default": 15, + "title": "EVPN Ebgp Gateway Multihop" + }, + "evpn_ebgp_multihop": { + "description": "Default of 3, the recommended value for a 3 stage spine and leaf topology.\nSet to a higher value to allow for very large and complex topologies.\n", + "type": "integer", + "default": 3, + "title": "EVPN Ebgp Multihop" + }, + "evpn_hostflap_detection": { + "type": "object", + "properties": { + "enabled": { + "description": "If set to false it will disable EVPN host-flap detection.", + "type": "boolean", + "default": true, + "title": "Enabled" + }, + "threshold": { + "description": "Minimum number of MAC moves that indicate a MAC duplication issue.", + "type": "integer", + "default": 5, + "title": "Threshold" + }, + "window": { + "description": "Time (in seconds) to detect a MAC duplication issue.", + "type": "integer", + "default": 180, + "title": "Window" + }, + "expiry_timeout": { + "description": "Time (in seconds) to purge a MAC duplication issue.", + "type": "integer", + "title": "Expiry Timeout" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Hostflap Detection" + }, + "evpn_import_pruning": { + "description": "Enable VPN import pruning (Min. EOS 4.24.2F).\nThe Route Target extended communities carried by incoming VPN paths will be examined.\nIf none of those Route Targets have been configured for import, the path will be immediately discarded.\n", + "type": "boolean", + "default": false, + "title": "EVPN Import Pruning" + }, + "evpn_multicast": { + "type": "boolean", + "description": "General Configuration required for EVPN Multicast. \"evpn_l2_multicast\" or \"evpn_l3_multicast\" must also be configured under the Network Services (tenants).\nRequires \"underlay_multicast: true\" and IGMP snooping enabled globally (default).\nFor MLAG devices Route Distinguisher must be unique since this feature will create multi-vtep configuration.\nWarning !!! For Trident3 based platforms i.e 7050X3, 7300X3, 720XP and 722XP\n The Following default platform setting will be configured: \"platform trident forwarding-table partition flexible exact-match 16384 l2-shared 98304 l3-shared 131072\"\n All forwarding agents will be restarted when this configuration is applied.\n You can tune the settings by overriding the default variable: \"platform_settings[platforms].trident_forwarding_table_partition:\"\n Please contact an Arista representative for help with determining the appropriate values for your environment.\n", + "default": false, + "title": "EVPN Multicast" + }, + "evpn_overlay_bgp_rtc": { + "description": "Enable Route Target Membership Constraint Address Family on EVPN overlay BGP peerings (Min. EOS 4.25.1F).\nRequires use eBGP as overlay protocol.\n", + "type": "boolean", + "default": false, + "title": "EVPN Overlay BGP Rtc" + }, + "evpn_prevent_readvertise_to_server": { + "description": "Configure route-map on eBGP sessions towards route-servers, where prefixes with the peer's ASN in the AS Path are filtered away.\nThis is very useful in large-scale networks, where convergence will be quicker by not returning all updates received\nfrom Route-server-1 to Router-server-2 just for Route-server-2 to throw them away because of AS Path loop detection.\n", + "type": "boolean", + "default": false, + "title": "EVPN Prevent Readvertise To Server" + }, + "evpn_short_esi_prefix": { + "description": "Configure prefix for \"short_esi\" values.", + "type": "string", + "default": "0000:0000:", + "title": "EVPN Short Esi Prefix" + }, + "evpn_vlan_aware_bundles": { + "description": "Enable vlan aware bundles for EVPN MAC-VRF.", + "type": "boolean", + "default": false, + "title": "EVPN VLAN Aware Bundles" + }, + "evpn_vlan_bundles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Specify an EVPN vlan-aware-bundle name.\nEVPN vlan-aware-bundles group L2 VLANs and define common settings.\n", + "title": "Name" + }, + "id": { + "type": "integer", + "description": "\"id\" may be used for vlan-aware-bundle RD/RT ID so it should not overlap with l2vlan IDs which are not part of this bundle.\nSee \"overlay_rd_type\" and \"overlay_rt_type\" for details.\n", + "title": "ID" + }, + "rt_override": { + "type": "string", + "description": "By default the MAC VRF bundle RT will be derived from mac_vrf_id_base + bundle_id.\nThe rt_override allows us to override this value and statically define it.\nrt_override will default to vni_override if set.\n\nrt_override supports two formats:\n - A single number which will be used in the RT fields instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rt_type' for details).\n - A full RT string with colon seperator which will override the full RT.\n", + "title": "Rt Override" + }, + "rd_override": { + "type": "string", + "description": "By default the MAC VRF bundle RD will be derived from mac_vrf_id_base + bundle_id.\nThe rt_override allows us to override this value and statically define it.\nrd_override will default to rt_override or vni_override if set.\n\nrd_override supports two formats:\n - A single number which will be used in the RD assigned number field instead of mac_vrf_id/mac_vrf_vni (see 'overlay_rd_type' for details).\n - A full RD string with colon seperator which will override the full RD.\n", + "title": "Rd Override" + }, + "evpn_l2_multi_domain": { + "type": "boolean", + "description": "Explicitly extend VLAN-Aware Bundle to remote EVPN domains.\nOverrides `.[].evpn_l2_multi_domain`.\n", + "title": "EVPN L2 Multi Domain" + }, + "bgp": { + "type": "object", + "properties": { + "raw_eos_cli": { + "type": "string", + "description": "EOS cli commands rendered on router_bgp.vlans-aware-bundle.", + "title": "Raw EOS CLI" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + } + }, + "required": [ + "id", + "name" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "EVPN VLAN Bundles" + }, + "fabric_evpn_encapsulation": { + "description": "Should be set to mpls for evpn-mpls scenario.", + "enum": [ + "vxlan", + "mpls" + ], + "default": "vxlan", + "type": "string", + "title": "Fabric EVPN Encapsulation" + }, + "fabric_ip_addressing": { + "type": "object", + "properties": { + "mlag": { + "type": "object", + "properties": { + "algorithm": { + "type": "string", + "default": "first_id", + "description": "This variable defines the Multi-chassis Link Aggregation (MLAG) algorithm used.\nEach MLAG link will have a /31* subnet with each subnet allocated from the relevant MLAG pool via a calculated offset.\nThe offset is calculated using one of the following algorithms:\n - first_id: `(mlag_primary_id - 1) * 2` where `mlag_primary_id` is the ID of the first node defined under the node_group.\n This allocation method will skip every other /31* subnet making it less space efficient than `odd_id`.\n - odd_id: `(odd_id - 1) / 2`. Requires the node_group to have a node with an odd ID and a node with an even ID.\n - same_subnet: the offset will always be zero.\n This allocation method will cause every MLAG link to be addressed with the same /31* subnet.\n\\* - The prefix length is configurable with a default of /31.", + "enum": [ + "first_id", + "odd_id", + "same_subnet" + ], + "title": "Algorithm" + }, + "ipv4_prefix_length": { + "type": "integer", + "default": 31, + "minimum": 1, + "maximum": 31, + "description": "IPv4 prefix length used for MLAG peer-vlan and L3 point-to-point SVIs over the MLAG peer-link.", + "title": "IPv4 Prefix Length" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MLAG" + }, + "p2p_uplinks": { + "type": "object", + "properties": { + "ipv4_prefix_length": { + "type": "integer", + "default": 31, + "minimum": 1, + "maximum": 31, + "description": "IPv4 prefix length used for L3 point-to-point uplinks.", + "title": "IPv4 Prefix Length" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "P2P Uplinks" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Fabric IP Addressing" + }, + "fabric_name": { + "description": "Fabric Name, required to match Ansible Group name covering all devices in the Fabric, **must** be an inventory group name.", + "type": "string", + "title": "Fabric Name" + }, + "hardware_counters": { + "type": "object", + "properties": { + "features": { + "type": "array", + "description": "This data model allows to configure the list of hardware counters feature\navailable on Arista platforms.\n\nThe `name` key accepts a list of valid_values which MUST be updated to support\nnew feature as they are released in EOS.\n\nThe available values of the different keys like 'direction' or 'address_type'\nare feature and hardware dependent and this model DOES NOT validate that the\ncombinations are valid. It is the responsability of the user of this data model\nto make sure that the rendered CLI is accepted by the targeted device.\n\nExamples:\n\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: ip\n direction: out\n layer3: true\n units_packets: true\n ```\n\n to render:\n ```eos\n hardware counter feature ip out layer3 units packets\n ```\n * Use:\n ```yaml\n hardware_counters:\n features:\n - name: route\n address_type: ipv4\n vrf: test\n prefix: 192.168.0.0/24\n ```\n\n to render:\n ```eos\n hardware counter feature route ipv4 vrf test 192.168.0.0/24\n ```\n", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "enum": [ + "acl", + "decap-group", + "directflow", + "ecn", + "flow-spec", + "gre tunnel interface", + "ip", + "mpls interface", + "mpls lfib", + "mpls tunnel", + "multicast", + "nexthop", + "pbr", + "pdp", + "policing interface", + "qos", + "qos dual-rate-policer", + "route", + "routed-port", + "subinterface", + "tapagg", + "traffic-class", + "traffic-policy", + "vlan", + "vlan-interface", + "vni decap", + "vni encap", + "vtep decap", + "vtep encap" + ], + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "cpu" + ], + "description": "Most features support only 'in' and 'out'. Some like traffic-policy support 'cpu'.\nSome features DO NOT have any direction.\nThis validation IS NOT made by the schemas.\n", + "title": "Direction" + }, + "address_type": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "mac" + ], + "description": "Supported only for the following features:\n- acl: [ipv4, ipv6, mac] if direction is 'out'\n- multicast: [ipv4, ipv6]\n- route: [ipv4, ipv6]\nThis validation IS NOT made by the schemas.\n", + "title": "Address Type" + }, + "layer3": { + "type": "boolean", + "description": "Supported only for the 'ip' feature\n", + "title": "Layer3" + }, + "vrf": { + "type": "string", + "description": "Supported only for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", + "title": "VRF" + }, + "prefix": { + "type": "string", + "description": "Supported only for the 'route' feature.\nMandatory for the 'route' feature.\nThis validation IS NOT made by the schemas.\n", + "title": "Prefix" + }, + "units_packets": { + "type": "boolean", + "title": "Units Packets" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Features" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Hardware Counters" + }, + "internal_vlan_order": { + "type": "object", + "description": "Internal vlan allocation order and range.", + "properties": { + "allocation": { + "type": "string", + "enum": [ + "ascending", + "descending" + ], + "title": "Allocation" + }, + "range": { + "type": "object", + "properties": { + "beginning": { + "type": "integer", + "description": "First VLAN ID.", + "minimum": 2, + "maximum": 4094, + "title": "Beginning" + }, + "ending": { + "type": "integer", + "description": "Last VLAN ID.", + "minimum": 2, + "maximum": 4094, + "title": "Ending" + } + }, + "required": [ + "beginning", + "ending" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Range" + } + }, + "required": [ + "allocation" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "default": { + "allocation": "ascending", + "range": { + "beginning": 1006, + "ending": 1199 + } + }, + "title": "Internal VLAN Order" + }, + "ipv6_mgmt_destination_networks": { + "description": "List of IPv6 prefixes to configure as static routes towards the OOB IPv6 Management interface gateway.\nReplaces the default route.\n", + "type": "array", + "items": { + "type": "string", + "description": "IPv6_network/Mask." + }, + "title": "IPv6 Management Destination Networks" + }, + "ipv6_mgmt_gateway": { + "type": "string", + "format": "ipv6", + "description": "OOB Management interface gateway in IPv6 format.\nUsed as next-hop for default gateway or static routes defined under 'ipv6_mgmt_destination_networks'.", + "title": "IPv6 Management Gateway" + }, + "is_deployed": { + "description": "If the device is already deployed in the fabric.\nWhen set to false, interfaces toward this device may be shutdown depending on the `shutdown_interfaces_towards_undeployed_peers` setting.\nFurthermore `eos_config_deploy_cvp` will not attempt to move or apply configurations to the device.\n", + "type": "boolean", + "default": true, + "title": "Is Deployed" + }, + "isis_advertise_passive_only": { + "type": "boolean", + "default": false, + "title": "ISIS Advertise Passive Only" + }, + "isis_area_id": { + "type": "string", + "default": "49.0001", + "title": "ISIS Area ID" + }, + "isis_default_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "default": "level-2", + "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden on link profile or link level.", + "title": "ISIS Default Circuit Type" + }, + "isis_default_is_type": { + "title": "ISIS Default IS Type", + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "default": "level-2" + }, + "isis_default_metric": { + "type": "integer", + "default": 50, + "description": "These fabric level parameters can be used with core_interfaces running ISIS, and may be overridden at link profile or link level.", + "title": "ISIS Default Metric" + }, + "isis_maximum_paths": { + "description": "Number of path to configure in ECMP for ISIS.", + "type": "integer", + "title": "ISIS Maximum Paths" + }, + "isis_ti_lfa": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "title": "Enabled" + }, + "protection": { + "type": "string", + "enum": [ + "link", + "node" + ], + "title": "Protection" + }, + "local_convergence_delay": { + "description": "Local convergence delay in milliseconds.", + "type": "integer", + "default": 10000, + "title": "Local Convergence Delay" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "ISIS TI LFA" + }, + "l3_edge": { + "type": "object", + "properties": { + "p2p_links_ip_pools": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "P2P pool name.", + "title": "Name" + }, + "ipv4_pool": { + "type": "string", + "description": "IPv4 address/Mask.", + "title": "IPv4 Pool" + }, + "prefix_size": { + "type": "integer", + "description": "Subnet mask size.", + "default": 31, + "minimum": 8, + "maximum": 31, + "title": "Prefix Size" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "P2P Links IP Pools" + }, + "p2p_links_profiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "P2P profile name. Any variable supported under `p2p_links` can be inherited from a profile.", + "title": "Name" + }, + "id": { + "type": "integer", + "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", + "title": "ID" + }, + "speed": { + "type": "string", + "description": "Speed should be set in the format `` or `forced ` or `auto `.", + "title": "Speed" + }, + "ip_pool": { + "type": "string", + "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", + "title": "IP Pool" + }, + "subnet": { + "type": "string", + "description": "IPv4 address/Mask. Subnet used on this P2P link.", + "title": "Subnet" + }, + "ip": { + "type": "array", + "description": "Specific IP addresses used on this P2P link.", + "items": { + "type": "string", + "description": "Node IPv4 address/Mask." + }, + "title": "IP" + }, + "ipv6_enable": { + "type": "boolean", + "default": false, + "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", + "title": "IPv6 Enable" + }, + "nodes": { + "type": "array", + "description": "Nodes where this link should be configured.", + "items": { + "type": "string", + "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + }, + "title": "Nodes" + }, + "interfaces": { + "type": "array", + "description": "Interfaces where this link should be configured and Required unless using port-channels.", + "items": { + "type": "string", + "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + }, + "title": "Interfaces" + }, + "as": { + "type": "array", + "description": "AS numbers for BGP.\nRequired with bgp peering.\n", + "items": { + "type": "string", + "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." + }, + "title": "As" + }, + "descriptions": { + "type": "array", + "description": "Interface description.", + "items": { + "type": "string" + }, + "title": "Descriptions" + }, + "include_in_underlay_protocol": { + "type": "boolean", + "default": true, + "description": "Add this interface to underlay routing protocol.", + "title": "Include In Underlay Protocol" + }, + "isis_hello_padding": { + "type": "boolean", + "default": false, + "title": "ISIS Hello Padding" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1", + "level-2", + "level-1-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "md5", + "text" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password.", + "title": "ISIS Authentication Key" + }, + "mpls_ip": { + "type": "boolean", + "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", + "title": "MPLS IP" + }, + "mpls_ldp": { + "type": "boolean", + "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", + "title": "MPLS LDP" + }, + "mtu": { + "type": "integer", + "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", + "title": "MTU" + }, + "bfd": { + "type": "boolean", + "default": false, + "description": "Enable BFD (only considered for BGP).", + "title": "BFD" + }, + "ptp": { + "description": "PTP parameters.", + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "description": "Enable PTP.", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "sflow": { + "type": "boolean", + "description": "Enable sFlow. Overrides `fabric_sflow` setting.", + "title": "Sflow" + }, + "qos_profile": { + "type": "string", + "description": "QOS service profile.", + "title": "QOS Profile" + }, + "macsec_profile": { + "type": "string", + "description": "MAC security profile.", + "title": "Macsec Profile" + }, + "port_channel": { + "description": "Port-channel parameters.", + "type": "object", + "properties": { + "mode": { "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Port Profile" + "default": "active", + "title": "Mode" }, - "uc_tx_queues": { + "nodes_child_interfaces": { "type": "array", "items": { "type": "object", "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" + "node": { + "type": "string", + "title": "Node" }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "min", - "max" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "interfaces": { + "type": "array", + "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", + "items": { + "type": "string" }, - "title": "Random Detect" + "title": "Interfaces" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } - }, - "title": "Uc TX Queues" - }, - "tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "max", - "max_probability" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } }, "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "node" + ] }, - "title": "TX Queues" + "title": "Nodes Child Interfaces" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Port Channel" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "P2P Links Profiles" + }, + "p2p_links": { + "type": "array", + "items": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "description": "Nodes where this link should be configured.", + "items": { + "type": "string", + "description": "The values can be < node_a >, < node_b >.\nex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].\n" + }, + "title": "Nodes" + }, + "profile": { + "type": "string", + "description": "P2P profile name. Profile defined under p2p_profiles.", + "title": "Profile" + }, + "id": { + "type": "integer", + "description": "Unique id per subnet_summary. Used to calculate ip addresses.\nRequired with ip_pool. ID starting from 1.\n", + "title": "ID" + }, + "speed": { + "type": "string", + "description": "Speed should be set in the format `` or `forced ` or `auto `.", + "title": "Speed" + }, + "ip_pool": { + "type": "string", + "description": "P2P pool name. IP Pool defined under p2p_links_ip_pools. A /31 will be taken from the pool per P2P link.", + "title": "IP Pool" + }, + "subnet": { + "type": "string", + "description": "IPv4 address/Mask. Subnet used on this P2P link.", + "title": "Subnet" + }, + "ip": { + "type": "array", + "description": "Specific IP addresses used on this P2P link.", + "items": { + "type": "string", + "description": "Node IPv4 address/Mask." + }, + "title": "IP" + }, + "ipv6_enable": { + "type": "boolean", + "default": false, + "description": "Allows turning on ipv6 for the link or profile (also autodetected based on underlay_rfc5549 and include_in_underlay_protocol).", + "title": "IPv6 Enable" + }, + "interfaces": { + "type": "array", + "description": "Interfaces where this link should be configured and Required unless using port-channels.", + "items": { + "type": "string", + "description": "The value can be like < node_a_interface >, < node_b_interface >.\nex. - [ Ethernet2, Ethernet2 ].\n" + }, + "title": "Interfaces" + }, + "as": { + "type": "array", + "description": "AS numbers for BGP.\nRequired with bgp peering.\n", + "items": { + "type": "string", + "description": "The values can be like [\"node_a_as\", \"node_b_as\"]." + }, + "title": "As" + }, + "descriptions": { + "type": "array", + "description": "Interface description.", + "items": { + "type": "string" + }, + "title": "Descriptions" + }, + "include_in_underlay_protocol": { + "type": "boolean", + "default": true, + "description": "Add this interface to underlay routing protocol.", + "title": "Include In Underlay Protocol" + }, + "isis_hello_padding": { + "type": "boolean", + "default": false, + "title": "ISIS Hello Padding" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1", + "level-2", + "level-1-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "md5", + "text" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password.", + "title": "ISIS Authentication Key" + }, + "mpls_ip": { + "type": "boolean", + "description": "MPLS parameters. Default value is true if switch.mpls_lsr is true.", + "title": "MPLS IP" + }, + "mpls_ldp": { + "type": "boolean", + "description": "MPLS parameters. Default value is true for ldp underlay variants, otherwise false.", + "title": "MPLS LDP" + }, + "mtu": { + "type": "integer", + "description": "MTU for this P2P link. Default value same as p2p_uplinks_mtu.", + "title": "MTU" + }, + "bfd": { + "type": "boolean", + "default": false, + "description": "Enable BFD (only considered for BGP).", + "title": "BFD" + }, + "ptp": { + "description": "PTP parameters.", + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "description": "Enable PTP.", + "title": "Enabled" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "sflow": { + "type": "boolean", + "description": "Enable sFlow. Overrides `fabric_sflow` setting.", + "title": "Sflow" + }, + "qos_profile": { + "type": "string", + "description": "QOS service profile.", + "title": "QOS Profile" + }, + "macsec_profile": { + "type": "string", + "description": "MAC security profile.", + "title": "Macsec Profile" + }, + "port_channel": { + "description": "Port-channel parameters.", + "type": "object", + "properties": { + "mode": { + "type": "string", + "default": "active", + "title": "Mode" }, - "vrrp_ids": { + "nodes_child_interfaces": { "type": "array", - "description": "VRRP model.", "items": { "type": "object", "properties": { - "id": { - "type": "integer", - "description": "VRID", - "title": "ID" - }, - "priority_level": { - "type": "integer", - "description": "Instance priority", - "minimum": 1, - "maximum": 254, - "title": "Priority Level" - }, - "advertisement": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "description": "Interval in seconds", - "minimum": 1, - "maximum": 255, - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Advertisement" - }, - "preempt": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "delay": { - "type": "object", - "properties": { - "minimum": { - "type": "integer", - "description": "Minimum preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Minimum" - }, - "reload": { - "type": "integer", - "description": "Reload preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "required": [ - "enabled" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Preempt" - }, - "timers": { - "type": "object", - "properties": { - "delay": { - "type": "object", - "properties": { - "reload": { - "type": "integer", - "description": "Delay after reload in seconds.", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timers" + "node": { + "type": "string", + "title": "Node" }, - "tracked_object": { + "interfaces": { "type": "array", + "description": "List of node interfaces. Ex.- [ 'node1 interface1', 'node1 interface2' ].", "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Tracked object name", - "title": "Name" - }, - "decrement": { - "type": "integer", - "minimum": 1, - "maximum": 254, - "description": "Decrement VRRP priority by 1-254", - "title": "Decrement" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Tracked Object" - }, - "ipv4": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv4 address", - "title": "Address" - }, - "version": { - "type": "integer", - "enum": [ - 2, - 3 - ], - "title": "Version" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" - }, - "ipv6": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "Virtual IPv6 address", - "title": "Address" - } - }, - "required": [ - "address" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "type": "string" }, - "title": "IPv6" + "title": "Interfaces" } }, "additionalProperties": false, @@ -12922,2717 +4896,2719 @@ "^_.+$": {} }, "required": [ - "id" + "node" ] }, - "title": "VRRP IDs" - }, - "eos_cli": { - "type": "string", - "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", - "title": "EOS CLI" + "title": "Nodes Child Interfaces" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, + "title": "Port Channel" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the point-to-point interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { + "type": "object", + "description": "Custom structured config for interfaces\nNote! The content of this dictionary is _not_ validated by the schema, since it can be either ethernet_interfaces or port_channel_interfaces.", "title": "Structured Config" } }, + "required": [ + "nodes" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - }, - "required": [ - "profile" - ] + } + }, + "title": "P2P Links" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L3 Edge" + }, + "l3_interface_profiles": { + "type": "array", + "description": "PREVIEW: This key is currently not supported\n\nProfiles to inherit common settings for l3_interfaces defined under the node type key.\nThese profiles will *not* work for `l3_interfaces` defined under `vrfs`.", + "items": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "description": "L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile.", + "title": "Profile" + }, + "name": { + "type": "string", + "description": "Ethernet interface name like 'Ethernet2'.", + "pattern": "Ethernet[\\d/]+", + "title": "Name" + }, + "description": { + "type": "string", + "description": "Interface description.\nIf not set a default description will be configured with '[[ ]]'", + "title": "Description" + }, + "ip": { + "type": "string", + "description": "Node IPv4 address/Mask or 'dhcp'.", + "title": "IP" + }, + "set_default_route": { + "type": "boolean", + "default": false, + "description": "Insert a default route to the `peer_ip` if `ip` is an ip address\nor configure to accept a default route from DHCP if `ip` is `dhcp`.\n\nAVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing.", + "title": "Set Default Route" + }, + "enabled": { + "type": "boolean", + "default": true, + "description": "Enable or Shutdown the interface.", + "title": "Enabled" }, - "title": "L3 Interfaces Profiles" - }, - "l3_interfaces": { - "type": "array", - "items": { + "speed": { + "type": "string", + "description": "Speed should be set in the format `` or `forced ` or `auto `.", + "title": "Speed" + }, + "peer": { + "type": "string", + "description": "The peer device name. Used for description and documentation", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "The peer device interface. Used for description and documentation", + "title": "Peer Interface" + }, + "peer_ip": { + "type": "string", + "description": "The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address.", + "title": "Peer IP" + }, + "qos_profile": { + "type": "string", + "description": "QOS service profile.", + "title": "QOS Profile" + }, + "wan_carrier": { + "type": "string", + "description": "The WAN Carrier this interface is connected to.\nThis is used to infer the path-groups in which this interface should be configured.", + "title": "Wan Carrier" + }, + "wan_circuit_id": { + "type": "string", + "description": "The WAN Circuit ID for this interface.\nThis is not rendered in the configuration but used for WAN designs.", + "title": "Wan Circuit ID" + }, + "connected_to_pathfinder": { + "type": "boolean", + "default": true, + "description": "For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.", + "title": "Connected To Pathfinder" + }, + "raw_eos_cli": { + "type": "string", + "description": "EOS CLI rendered directly on the interface in the final EOS configuration.", + "title": "Raw EOS CLI" + }, + "structured_config": { "type": "object", + "description": "Custom structured config for the Ethernet interface.", "properties": { - "node": { - "type": "string", - "description": "Device on which the interface should be configured.", - "title": "Node" - }, - "profile": { - "type": "string", - "description": "L3 interface profile name. Profile defined under l3_interfaces_profiles.", - "title": "Profile" - }, - "interface": { + "name": { "type": "string", - "description": "Ethernet interface name like 'Ethernet2'.", - "pattern": "Ethernet[\\d/]+", - "title": "Interface" + "title": "Name" }, "description": { "type": "string", - "description": "Interface description.\nIf not set a default description will be configured with '[[ ]]'", "title": "Description" }, - "ip": { - "type": "string", - "description": "Node IPv4 address/Mask or 'dhcp'.", - "title": "IP" - }, - "set_default_route": { + "shutdown": { "type": "boolean", - "default": false, - "description": "Insert a default route to the `peer_ip` if `ip` is an ip address\nor configure to accept a default route from DHCP if `ip` is `dhcp`.\n\nAVD will error out if set to true, `ip` is an ip address and `peer_ip` is missing.", - "title": "Set Default Route" + "title": "Shutdown" }, - "enabled": { - "type": "boolean", - "default": true, - "description": "Enable or Shutdown the interface.", - "title": "Enabled" + "load_interval": { + "type": "integer", + "minimum": 0, + "maximum": 600, + "description": "Interval in seconds for updating interface counters\"", + "title": "Load Interval" }, "speed": { "type": "string", "description": "Speed should be set in the format `` or `forced ` or `auto `.", "title": "Speed" }, - "peer": { - "type": "string", - "description": "The peer device name. Used for description and documentation", - "title": "Peer" - }, - "peer_interface": { - "type": "string", - "description": "The peer device interface. Used for description and documentation", - "title": "Peer Interface" + "mtu": { + "type": "integer", + "minimum": 68, + "maximum": 65535, + "title": "MTU" }, - "peer_ip": { - "type": "string", - "description": "The peer device IPv4 address (no mask). Used as default route gateway if `set_default_route` is true and `ip` is an IP address.", - "title": "Peer IP" + "l2_mtu": { + "type": "integer", + "minimum": 68, + "maximum": 65535, + "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", + "title": "L2 MTU" }, - "qos_profile": { - "type": "string", - "description": "QOS service profile.", - "title": "QOS Profile" + "l2_mru": { + "type": "integer", + "minimum": 68, + "maximum": 65535, + "description": "\"l2_mru\" should only be defined for platforms supporting the \"l2 mru\" CLI\n", + "title": "L2 MRU" }, - "wan_carrier": { + "vlans": { "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Carrier this interface is connected to.\nThis is used to infer the path-groups in which this interface should be configured.", - "title": "Wan Carrier" + "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", + "title": "VLANs" }, - "wan_circuit_id": { - "type": "string", - "description": "PREVIEW: This key is currently not supported\n\nThe WAN Circuit ID for this interface.\nThis is not rendered in the configuration but used for WAN designs.", - "title": "Wan Circuit ID" + "native_vlan": { + "type": "integer", + "title": "Native VLAN" }, - "connected_to_pathfinder": { + "native_vlan_tag": { "type": "boolean", - "description": "PREVIEW: This key is currently not supported\n\nFor a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders.\nDefault True.", - "title": "Connected To Pathfinder" + "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", + "title": "Native VLAN Tag" }, - "raw_eos_cli": { + "mode": { "type": "string", - "description": "EOS CLI rendered directly on the interface in the final EOS configuration.", - "title": "Raw EOS CLI" + "enum": [ + "access", + "dot1q-tunnel", + "trunk", + "trunk phone" + ], + "title": "Mode" }, - "structured_config": { + "phone": { "type": "object", - "description": "Custom structured config for the Ethernet interface.", "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "description": { + "trunk": { "type": "string", - "title": "Description" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" + "enum": [ + "tagged", + "tagged phone", + "untagged", + "untagged phone" + ], + "title": "Trunk" }, - "load_interval": { + "vlan": { "type": "integer", - "minimum": 0, - "maximum": 600, - "description": "Interval in seconds for updating interface counters\"", - "title": "Load Interval" + "minimum": 1, + "maximum": 4094, + "title": "VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Phone" + }, + "l2_protocol": { + "type": "object", + "properties": { + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "Vlan tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" }, - "speed": { + "forwarding_profile": { "type": "string", - "description": "Speed should be set in the format `` or `forced ` or `auto `.", - "title": "Speed" + "description": "L2 protocol forwarding profile", + "title": "Forwarding Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "L2 Protocol" + }, + "trunk_groups": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Trunk Groups" + }, + "type": { + "type": "string", + "enum": [ + "routed", + "switched", + "l3dot1q", + "l2dot1q", + "port-channel-member" + ], + "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", + "title": "Type" + }, + "snmp_trap_link_change": { + "type": "boolean", + "title": "Snmp Trap Link Change" + }, + "address_locking": { + "type": "object", + "properties": { + "ipv4": { + "type": "boolean", + "description": "Enable address locking for IPv4", + "title": "IPv4" }, - "mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "title": "MTU" + "ipv6": { + "type": "boolean", + "description": "Enable address locking for IPv6", + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Address Locking" + }, + "flowcontrol": { + "type": "object", + "properties": { + "received": { + "type": "string", + "enum": [ + "desired", + "on", + "off" + ], + "title": "Received" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flowcontrol" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + }, + "flow_tracker": { + "type": "object", + "properties": { + "sampled": { + "type": "string", + "description": "Sampled flow tracker name.", + "title": "Sampled" }, - "l2_mtu": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mtu\" should only be defined for platforms supporting the \"l2 mtu\" CLI\n", - "title": "L2 MTU" + "hardware": { + "type": "string", + "description": "Hardware flow tracker name.", + "title": "Hardware" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Flow Tracker" + }, + "error_correction_encoding": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true, + "title": "Enabled" }, - "l2_mru": { - "type": "integer", - "minimum": 68, - "maximum": 65535, - "description": "\"l2_mru\" should only be defined for platforms supporting the \"l2 mru\" CLI\n", - "title": "L2 MRU" + "fire_code": { + "type": "boolean", + "title": "Fire Code" }, - "vlans": { - "type": "string", - "description": "List of switchport vlans as string\nFor a trunk port this would be a range like \"1-200,300\"\nFor an access port this would be a single vlan \"123\"\n", - "title": "VLANs" + "reed_solomon": { + "type": "boolean", + "title": "Reed Solomon" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Error Correction Encoding" + }, + "link_tracking_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Group name", + "title": "Name" + }, + "direction": { + "type": "string", + "enum": [ + "upstream", + "downstream" + ], + "title": "Direction" + } }, - "native_vlan": { - "type": "integer", - "title": "Native VLAN" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "native_vlan_tag": { - "type": "boolean", - "description": "If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence", - "title": "Native VLAN Tag" + "required": [ + "name" + ] + }, + "title": "Link Tracking Groups" + }, + "evpn_ethernet_segment": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "EVPN Ethernet Segment Identifier (Type 1 format)", + "title": "Identifier" }, - "mode": { + "redundancy": { "type": "string", "enum": [ - "access", - "dot1q-tunnel", - "trunk", - "trunk phone" + "all-active", + "single-active" ], - "title": "Mode" + "title": "Redundancy" }, - "phone": { + "designated_forwarder_election": { "type": "object", "properties": { - "trunk": { + "algorithm": { "type": "string", "enum": [ - "tagged", - "tagged phone", - "untagged", - "untagged phone" + "modulus", + "preference" ], - "title": "Trunk" + "title": "Algorithm" }, - "vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Phone" - }, - "l2_protocol": { - "type": "object", - "properties": { - "encapsulation_dot1q_vlan": { + "preference_value": { "type": "integer", - "description": "Vlan tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" + "minimum": 0, + "maximum": 65535, + "description": "Preference_value is only used when \"algorithm\" is \"preference\"", + "title": "Preference Value" }, - "forwarding_profile": { - "type": "string", - "description": "L2 protocol forwarding profile", - "title": "Forwarding Profile" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "L2 Protocol" - }, - "trunk_groups": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Trunk Groups" - }, - "type": { - "type": "string", - "enum": [ - "routed", - "switched", - "l3dot1q", - "l2dot1q", - "port-channel-member" - ], - "description": "l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.\nInterface will not be listed in device documentation, unless \"type\" is set.\n", - "title": "Type" - }, - "snmp_trap_link_change": { - "type": "boolean", - "title": "Snmp Trap Link Change" - }, - "address_locking": { - "type": "object", - "properties": { - "ipv4": { + "dont_preempt": { "type": "boolean", - "description": "Enable address locking for IPv4", - "title": "IPv4" + "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", + "title": "Dont Preempt" }, - "ipv6": { - "type": "boolean", - "description": "Enable address locking for IPv6", - "title": "IPv6" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Address Locking" - }, - "flowcontrol": { - "type": "object", - "properties": { - "received": { - "type": "string", - "enum": [ - "desired", - "on", - "off" - ], - "title": "Received" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Flowcontrol" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - }, - "flow_tracker": { - "type": "object", - "properties": { - "sampled": { - "type": "string", - "description": "Sampled flow tracker name.", - "title": "Sampled" + "hold_time": { + "type": "integer", + "title": "Hold Time" }, - "hardware": { - "type": "string", - "description": "Hardware flow tracker name.", - "title": "Hardware" + "subsequent_hold_time": { + "type": "integer", + "title": "Subsequent Hold Time" + }, + "candidate_reachability_required": { + "type": "boolean", + "title": "Candidate Reachability Required" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Flow Tracker" + "title": "Designated Forwarder Election" }, - "error_correction_encoding": { + "mpls": { "type": "object", "properties": { - "enabled": { - "type": "boolean", - "default": true, - "title": "Enabled" - }, - "fire_code": { - "type": "boolean", - "title": "Fire Code" + "shared_index": { + "type": "integer", + "minimum": 1, + "maximum": 1024, + "title": "Shared Index" }, - "reed_solomon": { - "type": "boolean", - "title": "Reed Solomon" + "tunnel_flood_filter_time": { + "type": "integer", + "title": "Tunnel Flood Filter Time" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Error Correction Encoding" - }, - "link_tracking_groups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Group name", - "title": "Name" - }, - "direction": { - "type": "string", - "enum": [ - "upstream", - "downstream" - ], - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Link Tracking Groups" + "title": "MPLS" }, - "evpn_ethernet_segment": { + "route_target": { + "type": "string", + "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", + "title": "Route Target" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "EVPN Ethernet Segment" + }, + "encapsulation_dot1q_vlan": { + "type": "integer", + "description": "VLAN tag to configure on sub-interface", + "title": "Encapsulation Dot1Q VLAN" + }, + "encapsulation_vlan": { + "type": "object", + "properties": { + "client": { "type": "object", "properties": { - "identifier": { - "type": "string", - "description": "EVPN Ethernet Segment Identifier (Type 1 format)", - "title": "Identifier" - }, - "redundancy": { - "type": "string", - "enum": [ - "all-active", - "single-active" - ], - "title": "Redundancy" - }, - "designated_forwarder_election": { + "dot1q": { "type": "object", "properties": { - "algorithm": { - "type": "string", - "enum": [ - "modulus", - "preference" - ], - "title": "Algorithm" - }, - "preference_value": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "description": "Preference_value is only used when \"algorithm\" is \"preference\"", - "title": "Preference Value" - }, - "dont_preempt": { - "type": "boolean", - "description": "Dont_preempt is only used when \"algorithm\" is \"preference\"", - "title": "Dont Preempt" - }, - "hold_time": { - "type": "integer", - "title": "Hold Time" - }, - "subsequent_hold_time": { + "vlan": { "type": "integer", - "title": "Subsequent Hold Time" + "description": "Client VLAN ID", + "title": "VLAN" }, - "candidate_reachability_required": { - "type": "boolean", - "title": "Candidate Reachability Required" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Designated Forwarder Election" - }, - "mpls": { - "type": "object", - "properties": { - "shared_index": { + "outer": { "type": "integer", - "minimum": 1, - "maximum": 1024, - "title": "Shared Index" + "description": "Client Outer VLAN ID", + "title": "Outer" }, - "tunnel_flood_filter_time": { + "inner": { "type": "integer", - "title": "Tunnel Flood Filter Time" + "description": "Client Inner VLAN ID", + "title": "Inner" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "MPLS" + "title": "Dot1Q" }, - "route_target": { - "type": "string", - "description": "EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx", - "title": "Route Target" + "unmatched": { + "type": "boolean", + "title": "Unmatched" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "EVPN Ethernet Segment" - }, - "encapsulation_dot1q_vlan": { - "type": "integer", - "description": "VLAN tag to configure on sub-interface", - "title": "Encapsulation Dot1Q VLAN" + "title": "Client" }, - "encapsulation_vlan": { + "network": { "type": "object", + "description": "Network encapsulations are all optional and skipped if using client unmatched", "properties": { - "client": { + "dot1q": { "type": "object", "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Client VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Client Outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Client Inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" + "vlan": { + "type": "integer", + "description": "Network VLAN ID", + "title": "VLAN" }, - "unmatched": { - "type": "boolean", - "title": "Unmatched" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Client" - }, - "network": { - "type": "object", - "description": "Network encapsulations are all optional and skipped if using client unmatched", - "properties": { - "dot1q": { - "type": "object", - "properties": { - "vlan": { - "type": "integer", - "description": "Network VLAN ID", - "title": "VLAN" - }, - "outer": { - "type": "integer", - "description": "Network outer VLAN ID", - "title": "Outer" - }, - "inner": { - "type": "integer", - "description": "Network inner VLAN ID", - "title": "Inner" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Dot1Q" + "outer": { + "type": "integer", + "description": "Network outer VLAN ID", + "title": "Outer" }, - "client": { - "type": "boolean", - "title": "Client" + "inner": { + "type": "integer", + "description": "Network inner VLAN ID", + "title": "Inner" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Network" + "title": "Dot1Q" + }, + "client": { + "type": "boolean", + "title": "Client" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Encapsulation VLAN" - }, - "vlan_id": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "VLAN ID" - }, - "ip_address": { - "type": "string", - "description": "IPv4 address/mask or \"dhcp\"", - "title": "IP Address" - }, - "ip_address_secondaries": { - "type": "array", - "items": { - "type": "string" + "title": "Network" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Encapsulation VLAN" + }, + "vlan_id": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "VLAN ID" + }, + "ip_address": { + "type": "string", + "description": "IPv4 address/mask or \"dhcp\"", + "title": "IP Address" + }, + "ip_address_secondaries": { + "type": "array", + "items": { + "type": "string" + }, + "title": "IP Address Secondaries" + }, + "dhcp_client_accept_default_route": { + "type": "boolean", + "description": "Install default-route obtained via DHCP", + "title": "DHCP Client Accept Default Route" + }, + "dhcp_server_ipv4": { + "type": "boolean", + "description": "Enable IPv4 DHCP server.", + "title": "DHCP Server IPv4" + }, + "dhcp_server_ipv6": { + "type": "boolean", + "description": "Enable IPv6 DHCP server.", + "title": "DHCP Server IPv6" + }, + "ip_helpers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ip_helper": { + "type": "string", + "title": "IP Helper" }, - "title": "IP Address Secondaries" - }, - "dhcp_client_accept_default_route": { - "type": "boolean", - "description": "Install default-route obtained via DHCP", - "title": "DHCP Client Accept Default Route" - }, - "dhcp_server_ipv4": { - "type": "boolean", - "description": "Enable IPv4 DHCP server.", - "title": "DHCP Server IPv4" + "source_interface": { + "type": "string", + "description": "Source interface name", + "title": "Source Interface" + }, + "vrf": { + "type": "string", + "description": "VRF name", + "title": "VRF" + } }, - "dhcp_server_ipv6": { - "type": "boolean", - "description": "Enable IPv6 DHCP server.", - "title": "DHCP Server IPv6" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "ip_helpers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip_helper": { - "type": "string", - "title": "IP Helper" - }, - "source_interface": { - "type": "string", - "description": "Source interface name", - "title": "Source Interface" - }, - "vrf": { - "type": "string", - "description": "VRF name", - "title": "VRF" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ip_helper" - ] - }, - "title": "IP Helpers" + "required": [ + "ip_helper" + ] + }, + "title": "IP Helpers" + }, + "ip_nat": { + "type": "object", + "properties": { + "service_profile": { + "type": "string", + "description": "NAT interface profile.", + "title": "Service Profile" }, - "ip_nat": { + "destination": { "type": "object", "properties": { - "service_profile": { - "type": "string", - "description": "NAT interface profile.", - "title": "Service Profile" + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "pool_name": { + "type": "string", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "pool_name", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Dynamic" }, - "destination": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "pool_name": { - "type": "string", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "pool_name", - "access_list" + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" }, - "title": "Dynamic" + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" + ], + "title": "Protocol" + }, + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Destination" + }, + "source": { + "type": "object", + "properties": { + "dynamic": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "nat_type": { + "type": "string", + "enum": [ + "overload", + "pool", + "pool-address-only", + "pool-full-cone" ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "title": "Nat Type" }, - "title": "Static" + "pool_name": { + "type": "string", + "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", + "title": "Pool Name" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + } + }, + "required": [ + "nat_type", + "access_list" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} } }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Destination" + "title": "Dynamic" }, - "source": { - "type": "object", - "properties": { - "dynamic": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "nat_type": { - "type": "string", - "enum": [ - "overload", - "pool", - "pool-address-only", - "pool-full-cone" - ], - "title": "Nat Type" - }, - "pool_name": { - "type": "string", - "description": "required if 'nat_type' is pool, pool-address-only or pool-full-cone\nignored if 'nat_type' is overload\n", - "title": "Pool Name" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - } - }, - "required": [ - "nat_type", - "access_list" + "static": { + "type": "array", + "items": { + "type": "object", + "properties": { + "access_list": { + "type": "string", + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Access List" + }, + "comment": { + "type": "string", + "title": "Comment" + }, + "direction": { + "type": "string", + "enum": [ + "egress", + "ingress" ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", + "title": "Direction" }, - "title": "Dynamic" - }, - "static": { - "type": "array", - "items": { - "type": "object", - "properties": { - "access_list": { - "type": "string", - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Access List" - }, - "comment": { - "type": "string", - "title": "Comment" - }, - "direction": { - "type": "string", - "enum": [ - "egress", - "ingress" - ], - "description": "Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.\nEOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.\n", - "title": "Direction" - }, - "group": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "'access_list' and 'group' are mutual exclusive", - "title": "Group" - }, - "original_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Original IP" - }, - "original_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Original Port" - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295, - "title": "Priority" - }, - "protocol": { - "type": "string", - "enum": [ - "udp", - "tcp" - ], - "title": "Protocol" - }, - "translated_ip": { - "type": "string", - "description": "IPv4 address", - "title": "Translated IP" - }, - "translated_port": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "description": "requires 'original_port'", - "title": "Translated Port" - } - }, - "required": [ - "translated_ip", - "original_ip" + "group": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "'access_list' and 'group' are mutual exclusive", + "title": "Group" + }, + "original_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Original IP" + }, + "original_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "title": "Original Port" + }, + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "title": "Priority" + }, + "protocol": { + "type": "string", + "enum": [ + "udp", + "tcp" ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "title": "Protocol" }, - "title": "Static" + "translated_ip": { + "type": "string", + "description": "IPv4 address", + "title": "Translated IP" + }, + "translated_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "description": "requires 'original_port'", + "title": "Translated Port" + } + }, + "required": [ + "translated_ip", + "original_ip" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} } }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Source" + "title": "Static" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "IP Nat" - }, - "ipv6_enable": { - "type": "boolean", - "title": "IPv6 Enable" - }, - "ipv6_address": { - "type": "string", - "title": "IPv6 Address" - }, - "ipv6_address_link_local": { - "type": "string", - "description": "Link local IPv6 address/mask", - "title": "IPv6 Address Link Local" - }, - "ipv6_nd_ra_disabled": { - "type": "boolean", - "title": "IPv6 ND RA Disabled" - }, - "ipv6_nd_managed_config_flag": { - "type": "boolean", - "title": "IPv6 ND Managed Config Flag" - }, - "ipv6_nd_prefixes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ipv6_prefix": { - "type": "string", - "title": "IPv6 Prefix" - }, - "valid_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Valid Lifetime" - }, - "preferred_lifetime": { - "type": "string", - "description": "Infinite or lifetime in seconds", - "title": "Preferred Lifetime" - }, - "no_autoconfig_flag": { - "type": "boolean", - "title": "No Autoconfig Flag" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "ipv6_prefix" - ] + "title": "Source" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IP Nat" + }, + "ipv6_enable": { + "type": "boolean", + "title": "IPv6 Enable" + }, + "ipv6_address": { + "type": "string", + "title": "IPv6 Address" + }, + "ipv6_address_link_local": { + "type": "string", + "description": "Link local IPv6 address/mask", + "title": "IPv6 Address Link Local" + }, + "ipv6_nd_ra_disabled": { + "type": "boolean", + "title": "IPv6 ND RA Disabled" + }, + "ipv6_nd_managed_config_flag": { + "type": "boolean", + "title": "IPv6 ND Managed Config Flag" + }, + "ipv6_nd_prefixes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ipv6_prefix": { + "type": "string", + "title": "IPv6 Prefix" }, - "title": "IPv6 ND Prefixes" - }, - "ipv6_dhcp_relay_destinations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "address": { - "type": "string", - "description": "DHCP server's IPv6 address", - "title": "Address" - }, - "vrf": { - "type": "string", - "title": "VRF" - }, - "local_interface": { - "type": "string", - "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", - "title": "Local Interface" - }, - "source_address": { - "type": "string", - "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", - "title": "Source Address" - }, - "link_address": { - "type": "string", - "description": "Override the default link address specified in the relayed DHCP packet", - "title": "Link Address" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "address" - ] + "valid_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Valid Lifetime" }, - "title": "IPv6 DHCP Relay Destinations" - }, - "access_group_in": { - "type": "string", - "description": "Access list name", - "title": "Access Group In" - }, - "access_group_out": { - "type": "string", - "description": "Access list name", - "title": "Access Group Out" - }, - "ipv6_access_group_in": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group In" + "preferred_lifetime": { + "type": "string", + "description": "Infinite or lifetime in seconds", + "title": "Preferred Lifetime" + }, + "no_autoconfig_flag": { + "type": "boolean", + "title": "No Autoconfig Flag" + } }, - "ipv6_access_group_out": { - "type": "string", - "description": "IPv6 access list name", - "title": "IPv6 Access Group Out" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "mac_access_group_in": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group In" + "required": [ + "ipv6_prefix" + ] + }, + "title": "IPv6 ND Prefixes" + }, + "ipv6_dhcp_relay_destinations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "DHCP server's IPv6 address", + "title": "Address" + }, + "vrf": { + "type": "string", + "title": "VRF" + }, + "local_interface": { + "type": "string", + "description": "Local interface to communicate with DHCP server - mutually exclusive to source_address", + "title": "Local Interface" + }, + "source_address": { + "type": "string", + "description": "Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface", + "title": "Source Address" + }, + "link_address": { + "type": "string", + "description": "Override the default link address specified in the relayed DHCP packet", + "title": "Link Address" + } }, - "mac_access_group_out": { - "type": "string", - "description": "MAC access list name", - "title": "MAC Access Group Out" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} }, - "multicast": { - "type": "object", - "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", - "properties": { - "ipv4": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - }, - "out": { - "type": "boolean", - "title": "Out" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "required": [ + "address" + ] + }, + "title": "IPv6 DHCP Relay Destinations" + }, + "access_group_in": { + "type": "string", + "description": "Access list name", + "title": "Access Group In" + }, + "access_group_out": { + "type": "string", + "description": "Access list name", + "title": "Access Group Out" + }, + "ipv6_access_group_in": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group In" + }, + "ipv6_access_group_out": { + "type": "string", + "description": "IPv6 access list name", + "title": "IPv6 Access Group Out" + }, + "mac_access_group_in": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group In" + }, + "mac_access_group_out": { + "type": "string", + "description": "MAC access list name", + "title": "MAC Access Group Out" + }, + "multicast": { + "type": "object", + "description": "Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" }, - "title": "Boundaries" + "out": { + "type": "boolean", + "title": "Out" + } }, - "static": { - "type": "boolean", - "title": "Static" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} } }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" + "title": "Boundaries" }, - "ipv6": { - "type": "object", - "properties": { - "boundaries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "boundary": { - "type": "string", - "description": "ACL name or multicast IP subnet", - "title": "Boundary" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } - }, - "title": "Boundaries" + "static": { + "type": "boolean", + "title": "Static" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + }, + "ipv6": { + "type": "object", + "properties": { + "boundaries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "boundary": { + "type": "string", + "description": "ACL name or multicast IP subnet", + "title": "Boundary" + } }, - "static": { - "type": "boolean", - "title": "Static" + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} } }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv6" + "title": "Boundaries" + }, + "static": { + "type": "boolean", + "title": "Static" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Multicast" + "title": "IPv6" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Multicast" + }, + "ospf_network_point_to_point": { + "type": "boolean", + "title": "OSPF Network Point To Point" + }, + "ospf_area": { + "type": "string", + "title": "OSPF Area" + }, + "ospf_cost": { + "type": "integer", + "title": "OSPF Cost" + }, + "ospf_authentication": { + "type": "string", + "enum": [ + "none", + "simple", + "message-digest" + ], + "title": "OSPF Authentication" + }, + "ospf_authentication_key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "OSPF Authentication Key" + }, + "ospf_message_digest_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "hash_algorithm": { + "type": "string", + "enum": [ + "md5", + "sha1", + "sha256", + "sha384", + "sha512" + ], + "title": "Hash Algorithm" + }, + "key": { + "type": "string", + "description": "Encrypted password - only type 7 supported", + "title": "Key" + } }, - "ospf_network_point_to_point": { + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] + }, + "title": "OSPF Message Digest Keys" + }, + "pim": { + "type": "object", + "properties": { + "ipv4": { + "type": "object", + "properties": { + "dr_priority": { + "type": "integer", + "minimum": 0, + "maximum": 429467295, + "title": "DR Priority" + }, + "sparse_mode": { + "type": "boolean", + "title": "Sparse Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PIM" + }, + "mac_security": { + "type": "object", + "properties": { + "profile": { + "type": "string", + "title": "Profile" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MAC Security" + }, + "channel_group": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "title": "ID" + }, + "mode": { + "type": "string", + "enum": [ + "on", + "active", + "passive" + ], + "title": "Mode" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Channel Group" + }, + "isis_enable": { + "type": "string", + "description": "ISIS instance", + "title": "ISIS Enable" + }, + "isis_passive": { + "type": "boolean", + "title": "ISIS Passive" + }, + "isis_metric": { + "type": "integer", + "title": "ISIS Metric" + }, + "isis_network_point_to_point": { + "type": "boolean", + "title": "ISIS Network Point To Point" + }, + "isis_circuit_type": { + "type": "string", + "enum": [ + "level-1-2", + "level-1", + "level-2" + ], + "title": "ISIS Circuit Type" + }, + "isis_hello_padding": { + "type": "boolean", + "title": "ISIS Hello Padding" + }, + "isis_authentication_mode": { + "type": "string", + "enum": [ + "text", + "md5" + ], + "title": "ISIS Authentication Mode" + }, + "isis_authentication_key": { + "type": "string", + "description": "Type-7 encrypted password", + "title": "ISIS Authentication Key" + }, + "poe": { + "type": "object", + "properties": { + "disabled": { "type": "boolean", - "title": "OSPF Network Point To Point" - }, - "ospf_area": { - "type": "string", - "title": "OSPF Area" - }, - "ospf_cost": { - "type": "integer", - "title": "OSPF Cost" + "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", + "default": false, + "title": "Disabled" }, - "ospf_authentication": { + "priority": { "type": "string", "enum": [ - "none", - "simple", - "message-digest" + "critical", + "high", + "medium", + "low" ], - "title": "OSPF Authentication" - }, - "ospf_authentication_key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "OSPF Authentication Key" - }, - "ospf_message_digest_keys": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "hash_algorithm": { - "type": "string", - "enum": [ - "md5", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "title": "Hash Algorithm" - }, - "key": { - "type": "string", - "description": "Encrypted password - only type 7 supported", - "title": "Key" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "id" - ] - }, - "title": "OSPF Message Digest Keys" + "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", + "title": "Priority" }, - "pim": { + "reboot": { + "description": "Set the PoE power behavior for a PoE port when the system is rebooted", "type": "object", "properties": { - "ipv4": { - "type": "object", - "properties": { - "dr_priority": { - "type": "integer", - "minimum": 0, - "maximum": 429467295, - "title": "DR Priority" - }, - "sparse_mode": { - "type": "boolean", - "title": "Sparse Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "IPv4" + "action": { + "type": "string", + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "PIM" + "title": "Reboot" }, - "mac_security": { + "link_down": { + "description": "Set the PoE power behavior for a PoE port when the port goes down", "type": "object", "properties": { - "profile": { + "action": { "type": "string", - "title": "Profile" + "enum": [ + "maintain", + "power-off" + ], + "description": "PoE action for interface", + "title": "Action" + }, + "power_off_delay": { + "type": "integer", + "minimum": 1, + "maximum": 86400, + "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", + "title": "Power Off Delay" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "MAC Security" + "title": "Link Down" }, - "channel_group": { + "shutdown": { + "description": "Set the PoE power behavior for a PoE port when the port is admin down", "type": "object", "properties": { - "id": { - "type": "integer", - "title": "ID" - }, - "mode": { + "action": { "type": "string", "enum": [ - "on", - "active", - "passive" + "maintain", + "power-off" ], - "title": "Mode" + "description": "PoE action for interface", + "title": "Action" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Channel Group" - }, - "isis_enable": { - "type": "string", - "description": "ISIS instance", - "title": "ISIS Enable" - }, - "isis_passive": { - "type": "boolean", - "title": "ISIS Passive" - }, - "isis_metric": { - "type": "integer", - "title": "ISIS Metric" - }, - "isis_network_point_to_point": { - "type": "boolean", - "title": "ISIS Network Point To Point" - }, - "isis_circuit_type": { - "type": "string", - "enum": [ - "level-1-2", - "level-1", - "level-2" - ], - "title": "ISIS Circuit Type" - }, - "isis_hello_padding": { - "type": "boolean", - "title": "ISIS Hello Padding" - }, - "isis_authentication_mode": { - "type": "string", - "enum": [ - "text", - "md5" - ], - "title": "ISIS Authentication Mode" - }, - "isis_authentication_key": { - "type": "string", - "description": "Type-7 encrypted password", - "title": "ISIS Authentication Key" + "title": "Shutdown" }, - "poe": { + "limit": { "type": "object", + "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", "properties": { - "disabled": { - "type": "boolean", - "description": "Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS.", - "default": false, - "title": "Disabled" - }, - "priority": { - "type": "string", - "enum": [ - "critical", - "high", - "medium", - "low" - ], - "description": "Prioritize a port's power in the event that one of the switch's power supplies loses power", - "title": "Priority" - }, - "reboot": { - "description": "Set the PoE power behavior for a PoE port when the system is rebooted", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Reboot" - }, - "link_down": { - "description": "Set the PoE power behavior for a PoE port when the port goes down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - }, - "power_off_delay": { - "type": "integer", - "minimum": 1, - "maximum": 86400, - "description": "Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS.", - "title": "Power Off Delay" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Link Down" - }, - "shutdown": { - "description": "Set the PoE power behavior for a PoE port when the port is admin down", - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "maintain", - "power-off" - ], - "description": "PoE action for interface", - "title": "Action" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Shutdown" - }, - "limit": { - "type": "object", - "description": "Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class.", - "properties": { - "class": { - "type": "integer", - "minimum": 0, - "maximum": 8, - "title": "Class" - }, - "watts": { - "type": "string", - "title": "Watts" - }, - "fixed": { - "type": "boolean", - "description": "Set to ignore hardware classification", - "title": "Fixed" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Limit" + "class": { + "type": "integer", + "minimum": 0, + "maximum": 8, + "title": "Class" }, - "negotiation_lldp": { - "type": "boolean", - "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", - "title": "Negotiation LLDP" + "watts": { + "type": "string", + "title": "Watts" }, - "legacy_detect": { + "fixed": { "type": "boolean", - "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", - "title": "Legacy Detect" + "description": "Set to ignore hardware classification", + "title": "Fixed" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "PoE" + "title": "Limit" }, - "ptp": { + "negotiation_lldp": { + "type": "boolean", + "description": "Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS.", + "title": "Negotiation LLDP" + }, + "legacy_detect": { + "type": "boolean", + "description": "Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections.", + "title": "Legacy Detect" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PoE" + }, + "ptp": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "announce": { "type": "object", "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "announce": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - }, - "timeout": { - "type": "integer", - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Announce" - }, - "delay_req": { + "interval": { "type": "integer", - "title": "Delay Req" - }, - "delay_mechanism": { - "type": "string", - "enum": [ - "e2e", - "p2p" - ], - "title": "Delay Mechanism" - }, - "sync_message": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Sync Message" - }, - "role": { - "type": "string", - "enum": [ - "master", - "dynamic" - ], - "title": "Role" - }, - "vlan": { - "type": "string", - "description": "VLAN can be 'all' or list of vlans as string", - "title": "VLAN" + "title": "Interval" }, - "transport": { - "type": "string", - "enum": [ - "ipv4", - "ipv6", - "layer2" - ], - "title": "Transport" + "timeout": { + "type": "integer", + "title": "Timeout" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "PTP" + "title": "Announce" }, - "profile": { + "delay_req": { + "type": "integer", + "title": "Delay Req" + }, + "delay_mechanism": { "type": "string", - "description": "Interface profile", - "title": "Profile" + "enum": [ + "e2e", + "p2p" + ], + "title": "Delay Mechanism" }, - "storm_control": { + "sync_message": { "type": "object", "properties": { - "all": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "All" - }, - "broadcast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Broadcast" + "interval": { + "type": "integer", + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sync Message" + }, + "role": { + "type": "string", + "enum": [ + "master", + "dynamic" + ], + "title": "Role" + }, + "vlan": { + "type": "string", + "description": "VLAN can be 'all' or list of vlans as string", + "title": "VLAN" + }, + "transport": { + "type": "string", + "enum": [ + "ipv4", + "ipv6", + "layer2" + ], + "title": "Transport" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "PTP" + }, + "profile": { + "type": "string", + "description": "Interface profile", + "title": "Profile" + }, + "storm_control": { + "type": "object", + "properties": { + "all": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" }, - "multicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Multicast" + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependent", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "All" + }, + "broadcast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" }, - "unknown_unicast": { - "type": "object", - "properties": { - "level": { - "type": "string", - "description": "Configure maximum storm-control level", - "title": "Level" - }, - "unit": { - "type": "string", - "default": "percent", - "enum": [ - "percent", - "pps" - ], - "description": "Optional field and is hardware dependent", - "title": "Unit" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unknown Unicast" + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependent", + "title": "Unit" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Storm Control" + "title": "Broadcast" }, - "logging": { + "multicast": { "type": "object", "properties": { - "event": { - "type": "object", - "properties": { - "link_status": { - "type": "boolean", - "title": "Link Status" - }, - "congestion_drops": { - "type": "boolean", - "title": "Congestion Drops" - }, - "spanning_tree": { - "type": "boolean", - "title": "Spanning Tree" - }, - "storm_control_discards": { - "type": "boolean", - "title": "Storm Control Discards" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Event" + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependent", + "title": "Unit" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Logging" + "title": "Multicast" }, - "lldp": { + "unknown_unicast": { + "type": "object", + "properties": { + "level": { + "type": "string", + "description": "Configure maximum storm-control level", + "title": "Level" + }, + "unit": { + "type": "string", + "default": "percent", + "enum": [ + "percent", + "pps" + ], + "description": "Optional field and is hardware dependent", + "title": "Unit" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Unknown Unicast" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Storm Control" + }, + "logging": { + "type": "object", + "properties": { + "event": { "type": "object", "properties": { - "transmit": { + "link_status": { + "type": "boolean", + "title": "Link Status" + }, + "congestion_drops": { "type": "boolean", - "title": "Transmit" + "title": "Congestion Drops" }, - "receive": { + "spanning_tree": { "type": "boolean", - "title": "Receive" + "title": "Spanning Tree" }, - "ztp_vlan": { - "type": "integer", - "description": "ZTP vlan number", - "title": "ZTP VLAN" + "storm_control_discards": { + "type": "boolean", + "title": "Storm Control Discards" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "LLDP" - }, - "trunk_private_vlan_secondary": { + "title": "Event" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Logging" + }, + "lldp": { + "type": "object", + "properties": { + "transmit": { "type": "boolean", - "title": "Trunk Private VLAN Secondary" + "title": "Transmit" }, - "pvlan_mapping": { - "type": "string", - "description": "List of vlans as string", - "title": "PVLAN Mapping" + "receive": { + "type": "boolean", + "title": "Receive" }, - "vlan_translations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "List of vlans as string (only one vlan if direction is \"both\")", - "title": "From" - }, - "to": { - "type": "integer", - "description": "VLAN ID", - "title": "To" - }, - "direction": { - "type": "string", - "enum": [ - "in", - "out", - "both" - ], - "default": "both", - "title": "Direction" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "ztp_vlan": { + "type": "integer", + "description": "ZTP vlan number", + "title": "ZTP VLAN" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LLDP" + }, + "trunk_private_vlan_secondary": { + "type": "boolean", + "title": "Trunk Private VLAN Secondary" + }, + "pvlan_mapping": { + "type": "string", + "description": "List of vlans as string", + "title": "PVLAN Mapping" + }, + "vlan_translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "List of vlans as string (only one vlan if direction is \"both\")", + "title": "From" }, - "title": "VLAN Translations" + "to": { + "type": "integer", + "description": "VLAN ID", + "title": "To" + }, + "direction": { + "type": "string", + "enum": [ + "in", + "out", + "both" + ], + "default": "both", + "title": "Direction" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "VLAN Translations" + }, + "dot1x": { + "type": "object", + "properties": { + "port_control": { + "type": "string", + "enum": [ + "auto", + "force-authorized", + "force-unauthorized" + ], + "title": "Port Control" }, - "dot1x": { + "port_control_force_authorized_phone": { + "type": "boolean", + "title": "Port Control Force Authorized Phone" + }, + "reauthentication": { + "type": "boolean", + "title": "Reauthentication" + }, + "pae": { "type": "object", "properties": { - "port_control": { + "mode": { "type": "string", "enum": [ - "auto", - "force-authorized", - "force-unauthorized" + "authenticator" ], - "title": "Port Control" - }, - "port_control_force_authorized_phone": { - "type": "boolean", - "title": "Port Control Force Authorized Phone" - }, - "reauthentication": { - "type": "boolean", - "title": "Reauthentication" - }, - "pae": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "authenticator" - ], - "title": "Mode" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PAE" - }, - "authentication_failure": { - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "allow", - "drop" - ], - "title": "Action" - }, - "allow_vlan": { - "type": "integer", - "minimum": 1, - "maximum": 4094, - "title": "Allow VLAN" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure" - }, - "host_mode": { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "multi-host", - "single-host" - ], - "title": "Mode" - }, - "multi_host_authenticated": { - "type": "boolean", - "title": "Multi Host Authenticated" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Host Mode" - }, - "mac_based_authentication": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "always": { - "type": "boolean", - "title": "Always" - }, - "host_mode_common": { - "type": "boolean", - "title": "Host Mode Common" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "MAC Based Authentication" - }, - "timeout": { - "type": "object", - "properties": { - "idle_host": { - "type": "integer", - "minimum": 10, - "maximum": 65535, - "title": "Idle Host" - }, - "quiet_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "Quiet Period" - }, - "reauth_period": { - "type": "string", - "description": "Value can be 60-4294967295 or 'server'", - "title": "Reauth Period" - }, - "reauth_timeout_ignore": { - "type": "boolean", - "title": "Reauth Timeout Ignore" - }, - "tx_period": { - "type": "integer", - "minimum": 1, - "maximum": 65535, - "title": "TX Period" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Timeout" - }, - "reauthorization_request_limit": { - "type": "integer", - "minimum": 1, - "maximum": 10, - "title": "Reauthorization Request Limit" - }, - "unauthorized": { - "type": "object", - "properties": { - "access_vlan_membership_egress": { - "type": "boolean", - "title": "Access VLAN Membership Egress" - }, - "native_vlan_membership_egress": { - "type": "boolean", - "title": "Native VLAN Membership Egress" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Unauthorized" - }, - "eapol": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "title": "Disabled" - }, - "authentication_failure_fallback_mba": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "timeout": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "Timeout" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Authentication Failure Fallback Mba" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Eapol" + "title": "Mode" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "dot1x" - }, - "service_profile": { - "type": "string", - "description": "QOS profile", - "title": "Service Profile" + "title": "PAE" }, - "shape": { + "authentication_failure": { "type": "object", "properties": { - "rate": { + "action": { "type": "string", - "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", - "title": "Rate" + "enum": [ + "allow", + "drop" + ], + "title": "Action" + }, + "allow_vlan": { + "type": "integer", + "minimum": 1, + "maximum": 4094, + "title": "Allow VLAN" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Shape" + "title": "Authentication Failure" }, - "qos": { + "host_mode": { "type": "object", "properties": { - "trust": { + "mode": { "type": "string", "enum": [ - "dscp", - "cos", - "disabled" + "multi-host", + "single-host" ], - "title": "Trust" - }, - "dscp": { - "type": "integer", - "description": "DSCP value", - "title": "DSCP" + "title": "Mode" }, - "cos": { - "type": "integer", - "description": "COS value", - "title": "COS" + "multi_host_authenticated": { + "type": "boolean", + "title": "Multi Host Authenticated" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "QOS" - }, - "spanning_tree_bpdufilter": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpdufilter" - }, - "spanning_tree_bpduguard": { - "type": "string", - "enum": [ - "enabled", - "disabled", - "True", - "False", - "true", - "false" - ], - "title": "Spanning Tree Bpduguard" - }, - "spanning_tree_guard": { - "type": "string", - "enum": [ - "loop", - "root", - "disabled" - ], - "title": "Spanning Tree Guard" - }, - "spanning_tree_portfast": { - "type": "string", - "enum": [ - "edge", - "network" - ], - "title": "Spanning Tree Portfast" - }, - "vmtracer": { - "type": "boolean", - "title": "VMTracer" + "title": "Host Mode" }, - "priority_flow_control": { + "mac_based_authentication": { "type": "object", "properties": { - "enabled": { - "type": "boolean", - "title": "Enabled" - }, - "priorities": { - "type": "array", - "items": { - "type": "object", - "properties": { - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 7, - "title": "Priority" - }, - "no_drop": { - "type": "boolean", - "title": "No Drop" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "priority" - ] - }, - "title": "Priorities" + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "always": { + "type": "boolean", + "title": "Always" + }, + "host_mode_common": { + "type": "boolean", + "title": "Host Mode Common" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Priority Flow Control" + "title": "MAC Based Authentication" }, - "bfd": { + "timeout": { "type": "object", "properties": { - "echo": { - "type": "boolean", - "title": "Echo" - }, - "interval": { + "idle_host": { "type": "integer", - "description": "Interval in milliseconds", - "title": "Interval" + "minimum": 10, + "maximum": 65535, + "title": "Idle Host" }, - "min_rx": { + "quiet_period": { "type": "integer", - "description": "Rate in milliseconds", - "title": "Min RX" + "minimum": 1, + "maximum": 65535, + "title": "Quiet Period" }, - "multiplier": { + "reauth_period": { + "type": "string", + "description": "Value can be 60-4294967295 or 'server'", + "title": "Reauth Period" + }, + "reauth_timeout_ignore": { + "type": "boolean", + "title": "Reauth Timeout Ignore" + }, + "tx_period": { "type": "integer", - "minimum": 3, - "maximum": 50, - "title": "Multiplier" + "minimum": 1, + "maximum": 65535, + "title": "TX Period" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "BFD" + "title": "Timeout" }, - "service_policy": { + "reauthorization_request_limit": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "title": "Reauthorization Request Limit" + }, + "unauthorized": { "type": "object", "properties": { - "pbr": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Policy Based Routing Policy-map name", - "title": "Input" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "PBR" + "access_vlan_membership_egress": { + "type": "boolean", + "title": "Access VLAN Membership Egress" }, - "qos": { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "Quality of Service Policy-map name", - "title": "Input" - } - }, - "required": [ - "input" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "QOS" + "native_vlan_membership_egress": { + "type": "boolean", + "title": "Native VLAN Membership Egress" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Service Policy" + "title": "Unauthorized" }, - "mpls": { + "eapol": { "type": "object", "properties": { - "ip": { + "disabled": { "type": "boolean", - "title": "IP" + "title": "Disabled" }, - "ldp": { + "authentication_failure_fallback_mba": { "type": "object", "properties": { - "interface": { + "enabled": { "type": "boolean", - "title": "Interface" + "title": "Enabled" }, - "igp_sync": { - "type": "boolean", - "title": "IGP Sync" + "timeout": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "Timeout" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "LDP" + "title": "Authentication Failure Fallback Mba" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "MPLS" + "title": "Eapol" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "dot1x" + }, + "service_profile": { + "type": "string", + "description": "QOS profile", + "title": "Service Profile" + }, + "shape": { + "type": "object", + "properties": { + "rate": { + "type": "string", + "description": "Rate in kbps, pps or percent\nSupported options are platform dependent\nExamples:\n- \"5000 kbps\"\n- \"1000 pps\"\n- \"20 percent\"\n", + "title": "Rate" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Shape" + }, + "qos": { + "type": "object", + "properties": { + "trust": { + "type": "string", + "enum": [ + "dscp", + "cos", + "disabled" + ], + "title": "Trust" + }, + "dscp": { + "type": "integer", + "description": "DSCP value", + "title": "DSCP" + }, + "cos": { + "type": "integer", + "description": "COS value", + "title": "COS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "QOS" + }, + "spanning_tree_bpdufilter": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpdufilter" + }, + "spanning_tree_bpduguard": { + "type": "string", + "enum": [ + "enabled", + "disabled", + "True", + "False", + "true", + "false" + ], + "title": "Spanning Tree Bpduguard" + }, + "spanning_tree_guard": { + "type": "string", + "enum": [ + "loop", + "root", + "disabled" + ], + "title": "Spanning Tree Guard" + }, + "spanning_tree_portfast": { + "type": "string", + "enum": [ + "edge", + "network" + ], + "title": "Spanning Tree Portfast" + }, + "vmtracer": { + "type": "boolean", + "title": "VMTracer" + }, + "priority_flow_control": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" + }, + "priorities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "priority": { + "type": "integer", + "minimum": 0, + "maximum": 7, + "title": "Priority" + }, + "no_drop": { + "type": "boolean", + "title": "No Drop" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "priority" + ] + }, + "title": "Priorities" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Priority Flow Control" + }, + "bfd": { + "type": "object", + "properties": { + "echo": { + "type": "boolean", + "title": "Echo" + }, + "interval": { + "type": "integer", + "description": "Interval in milliseconds", + "title": "Interval" + }, + "min_rx": { + "type": "integer", + "description": "Rate in milliseconds", + "title": "Min RX" }, - "lacp_timer": { + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 50, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BFD" + }, + "service_policy": { + "type": "object", + "properties": { + "pbr": { "type": "object", "properties": { - "mode": { + "input": { "type": "string", - "enum": [ - "fast", - "normal" - ], - "title": "Mode" - }, - "multiplier": { - "type": "integer", - "minimum": 3, - "maximum": 3000, - "title": "Multiplier" + "description": "Policy Based Routing Policy-map name", + "title": "Input" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "LACP Timer" - }, - "lacp_port_priority": { - "type": "integer", - "minimum": 0, - "maximum": 65535, - "title": "LACP Port Priority" + "title": "PBR" }, - "transceiver": { + "qos": { "type": "object", "properties": { - "media": { - "type": "object", - "properties": { - "override": { - "type": "string", - "description": "Transceiver type", - "title": "Override" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Media" + "input": { + "type": "string", + "description": "Quality of Service Policy-map name", + "title": "Input" } }, + "required": [ + "input" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Transceiver" - }, - "ip_proxy_arp": { + "title": "QOS" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Service Policy" + }, + "mpls": { + "type": "object", + "properties": { + "ip": { "type": "boolean", - "title": "IP Proxy ARP" + "title": "IP" }, - "traffic_policy": { + "ldp": { "type": "object", "properties": { - "input": { - "type": "string", - "description": "Ingress traffic policy", - "title": "Input" + "interface": { + "type": "boolean", + "title": "Interface" }, - "output": { - "type": "string", - "description": "Egress traffic policy", - "title": "Output" + "igp_sync": { + "type": "boolean", + "title": "IGP Sync" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Traffic Policy" + "title": "LDP" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "MPLS" + }, + "lacp_timer": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "enum": [ + "fast", + "normal" + ], + "title": "Mode" }, - "bgp": { + "multiplier": { + "type": "integer", + "minimum": 3, + "maximum": 3000, + "title": "Multiplier" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "LACP Timer" + }, + "lacp_port_priority": { + "type": "integer", + "minimum": 0, + "maximum": 65535, + "title": "LACP Port Priority" + }, + "transceiver": { + "type": "object", + "properties": { + "media": { "type": "object", "properties": { - "session_tracker": { + "override": { "type": "string", - "description": "Name of session tracker", - "title": "Session Tracker" + "description": "Transceiver type", + "title": "Override" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "BGP" - }, - "peer": { + "title": "Media" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Transceiver" + }, + "ip_proxy_arp": { + "type": "boolean", + "title": "IP Proxy ARP" + }, + "traffic_policy": { + "type": "object", + "properties": { + "input": { "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer" + "description": "Ingress traffic policy", + "title": "Input" }, - "peer_interface": { + "output": { "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Interface" - }, - "peer_type": { + "description": "Egress traffic policy", + "title": "Output" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Traffic Policy" + }, + "bgp": { + "type": "object", + "properties": { + "session_tracker": { "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Peer Type" - }, - "sflow": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "egress": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "unmodified_enable": { - "type": "boolean", - "title": "Unmodified Enable" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Egress" + "description": "Name of session tracker", + "title": "Session Tracker" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, + "peer": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer" + }, + "peer_interface": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Interface" + }, + "peer_type": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Peer Type" + }, + "sflow": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "egress": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "unmodified_enable": { + "type": "boolean", + "title": "Unmodified Enable" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Sflow" - }, - "port_profile": { - "type": "string", - "description": "Key only used for documentation or validation purposes", - "title": "Port Profile" - }, - "uc_tx_queues": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { - "type": "object", - "properties": { - "ecn": { - "description": "Explicit Congestion Notification", - "type": "object", - "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "min", - "max" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Ecn" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Random Detect" - } - }, - "required": [ - "id" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - } + "title": "Egress" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Sflow" + }, + "port_profile": { + "type": "string", + "description": "Key only used for documentation or validation purposes", + "title": "Port Profile" + }, + "uc_tx_queues": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "TX-Queue ID", + "title": "ID" }, - "title": "Uc TX Queues" - }, - "tx_queues": { - "type": "array", - "items": { + "random_detect": { "type": "object", "properties": { - "id": { - "type": "integer", - "description": "TX-Queue ID", - "title": "ID" - }, - "random_detect": { + "ecn": { + "description": "Explicit Congestion Notification", "type": "object", "properties": { - "ecn": { - "description": "Explicit Congestion Notification", + "count": { + "type": "boolean", + "description": "Enable counter for random-detect ECNs", + "title": "Count" + }, + "threshold": { "type": "object", "properties": { - "count": { - "type": "boolean", - "description": "Enable counter for random-detect ECNs", - "title": "Count" - }, - "threshold": { - "type": "object", - "properties": { - "units": { - "type": "string", - "enum": [ - "segments", - "bytes", - "kbytes", - "mbytes", - "milliseconds" - ], - "description": "Indicate the units to be used for the threshold values", - "title": "Units" - }, - "min": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN minimum-threshold", - "title": "Min" - }, - "max": { - "type": "integer", - "minimum": 1, - "maximum": 256000000, - "description": "Set the random-detect ECN maximum-threshold", - "title": "Max" - }, - "max_probability": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Set the random-detect ECN max-mark-probability", - "title": "Max Probability" - }, - "weight": { - "type": "integer", - "minimum": 0, - "maximum": 15, - "description": "Set the random-detect ECN weight", - "title": "Weight" - } - }, - "required": [ - "units", - "max", - "max_probability" + "units": { + "type": "string", + "enum": [ + "segments", + "bytes", + "kbytes", + "mbytes", + "milliseconds" ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Threshold" + "description": "Indicate the units to be used for the threshold values", + "title": "Units" + }, + "min": { + "type": "integer", + "minimum": 1, + "maximum": 256000000, + "description": "Set the random-detect ECN minimum-threshold", + "title": "Min" + }, + "max": { + "type": "integer", + "minimum": 1, + "maximum": 256000000, + "description": "Set the random-detect ECN maximum-threshold", + "title": "Max" + }, + "max_probability": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Set the random-detect ECN max-mark-probability", + "title": "Max Probability" + }, + "weight": { + "type": "integer", + "minimum": 0, + "maximum": 15, + "description": "Set the random-detect ECN weight", + "title": "Weight" } }, + "required": [ + "units", + "min", + "max" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Ecn" + "title": "Threshold" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Random Detect" + "title": "Ecn" } }, - "required": [ - "id" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } - }, - "title": "TX Queues" + }, + "title": "Random Detect" + } }, - "vrrp_ids": { - "type": "array", - "description": "VRRP model.", - "items": { + "required": [ + "id" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "Uc TX Queues" + }, + "tx_queues": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "TX-Queue ID", + "title": "ID" + }, + "random_detect": { "type": "object", "properties": { - "id": { - "type": "integer", - "description": "VRID", - "title": "ID" - }, - "priority_level": { - "type": "integer", - "description": "Instance priority", - "minimum": 1, - "maximum": 254, - "title": "Priority Level" - }, - "advertisement": { - "type": "object", - "properties": { - "interval": { - "type": "integer", - "description": "Interval in seconds", - "minimum": 1, - "maximum": 255, - "title": "Interval" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Advertisement" - }, - "preempt": { + "ecn": { + "description": "Explicit Congestion Notification", "type": "object", "properties": { - "enabled": { + "count": { "type": "boolean", - "title": "Enabled" + "description": "Enable counter for random-detect ECNs", + "title": "Count" }, - "delay": { + "threshold": { "type": "object", "properties": { - "minimum": { + "units": { + "type": "string", + "enum": [ + "segments", + "bytes", + "kbytes", + "mbytes", + "milliseconds" + ], + "description": "Indicate the units to be used for the threshold values", + "title": "Units" + }, + "min": { "type": "integer", - "description": "Minimum preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Minimum" + "minimum": 1, + "maximum": 256000000, + "description": "Set the random-detect ECN minimum-threshold", + "title": "Min" }, - "reload": { + "max": { "type": "integer", - "description": "Reload preempt delay in seconds", - "minimum": 0, - "maximum": 3600, - "title": "Reload" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Delay" - } - }, - "required": [ - "enabled" - ], - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "title": "Preempt" - }, - "timers": { - "type": "object", - "properties": { - "delay": { - "type": "object", - "properties": { - "reload": { + "minimum": 1, + "maximum": 256000000, + "description": "Set the random-detect ECN maximum-threshold", + "title": "Max" + }, + "max_probability": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "Set the random-detect ECN max-mark-probability", + "title": "Max Probability" + }, + "weight": { "type": "integer", - "description": "Delay after reload in seconds.", "minimum": 0, - "maximum": 3600, - "title": "Reload" + "maximum": 15, + "description": "Set the random-detect ECN weight", + "title": "Weight" } }, + "required": [ + "units", + "max", + "max_probability" + ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Delay" + "title": "Threshold" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "Timers" - }, - "tracked_object": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Tracked object name", - "title": "Name" - }, - "decrement": { - "type": "integer", - "minimum": 1, - "maximum": 254, - "description": "Decrement VRRP priority by 1-254", - "title": "Decrement" - }, - "shutdown": { - "type": "boolean", - "title": "Shutdown" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} - }, - "required": [ - "name" - ] - }, - "title": "Tracked Object" + "title": "Ecn" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Random Detect" + } + }, + "required": [ + "id" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + } + }, + "title": "TX Queues" + }, + "vrrp_ids": { + "type": "array", + "description": "VRRP model.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "VRID", + "title": "ID" + }, + "priority_level": { + "type": "integer", + "description": "Instance priority", + "minimum": 1, + "maximum": 254, + "title": "Priority Level" + }, + "advertisement": { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "description": "Interval in seconds", + "minimum": 1, + "maximum": 255, + "title": "Interval" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Advertisement" + }, + "preempt": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enabled" }, - "ipv4": { + "delay": { "type": "object", "properties": { - "address": { - "type": "string", - "description": "Virtual IPv4 address", - "title": "Address" + "minimum": { + "type": "integer", + "description": "Minimum preempt delay in seconds", + "minimum": 0, + "maximum": 3600, + "title": "Minimum" }, - "version": { + "reload": { "type": "integer", - "enum": [ - 2, - 3 - ], - "title": "Version" + "description": "Reload preempt delay in seconds", + "minimum": 0, + "maximum": 3600, + "title": "Reload" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "IPv4" - }, - "ipv6": { + "title": "Delay" + } + }, + "required": [ + "enabled" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "Preempt" + }, + "timers": { + "type": "object", + "properties": { + "delay": { "type": "object", "properties": { - "address": { - "type": "string", - "description": "Virtual IPv6 address", - "title": "Address" + "reload": { + "type": "integer", + "description": "Delay after reload in seconds.", + "minimum": 0, + "maximum": 3600, + "title": "Reload" } }, - "required": [ - "address" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} }, - "title": "IPv6" + "title": "Delay" } }, "additionalProperties": false, "patternProperties": { "^_.+$": {} }, + "title": "Timers" + }, + "tracked_object": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Tracked object name", + "title": "Name" + }, + "decrement": { + "type": "integer", + "minimum": 1, + "maximum": 254, + "description": "Decrement VRRP priority by 1-254", + "title": "Decrement" + }, + "shutdown": { + "type": "boolean", + "title": "Shutdown" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "name" + ] + }, + "title": "Tracked Object" + }, + "ipv4": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv4 address", + "title": "Address" + }, + "version": { + "type": "integer", + "enum": [ + 2, + 3 + ], + "title": "Version" + } + }, "required": [ - "id" - ] + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv4" }, - "title": "VRRP IDs" + "ipv6": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Virtual IPv6 address", + "title": "Address" + } + }, + "required": [ + "address" + ], + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "IPv6" + } }, - "eos_cli": { - "type": "string", - "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", - "title": "EOS CLI" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "id" + ] }, - "title": "Structured Config" + "title": "VRRP IDs" + }, + "eos_cli": { + "type": "string", + "description": "Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration", + "title": "EOS CLI" } }, - "required": [ - "node" - ], "additionalProperties": false, "patternProperties": { "^_.+$": {} - } - }, - "title": "L3 Interfaces" - } - }, - "additionalProperties": false, - "patternProperties": { - "^_.+$": {} + }, + "title": "Structured Config" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "required": [ + "profile" + ] }, - "title": "L3 Edge" + "title": "L3 Interface Profiles" }, "local_users": { "type": "array", diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml index f24afcc9aae..fc15f4a66f7 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.schema.yml @@ -1238,6 +1238,26 @@ keys: l3_edge: type: dict $ref: eos_designs#/$defs/l3_edge + l3_interface_profiles: + type: list + documentation_options: + table: wan-interfaces-settings + description: 'PREVIEW: This key is currently not supported + + + Profiles to inherit common settings for l3_interfaces defined under the node + type key. + + These profiles will *not* work for `l3_interfaces` defined under `vrfs`.' + primary_key: profile + $ref: eos_designs#/$defs/node_type_l3_interfaces + items: + type: dict + keys: + profile: + type: str + description: L3 interface profile name. Any variable supported under `l3_interfaces` + can be inherited from a profile. local_users: documentation_options: table: management-settings @@ -4192,124 +4212,6 @@ $defs: profile: type: str description: P2P profile name. Profile defined under p2p_profiles. - l3_interfaces_profiles: - type: list - convert_types: - - dict - primary_key: profile - $ref: eos_designs#/$defs/l3_edge_l3_interfaces - items: - type: dict - keys: - profile: - type: str - description: L3 interface profile name. Any variable supported under - `l3_interfaces` can be inherited from a profile. - l3_interfaces: - type: list - $ref: eos_designs#/$defs/l3_edge_l3_interfaces - items: - type: dict - keys: - node: - type: str - description: Device on which the interface should be configured. - required: true - profile: - type: str - description: L3 interface profile name. Profile defined under l3_interfaces_profiles. - l3_edge_l3_interfaces: - type: list - items: - type: dict - keys: - interface: - type: str - description: Ethernet interface name like 'Ethernet2'. - pattern: Ethernet[\d/]+ - description: - type: str - description: 'Interface description. - - If not set a default description will be configured with ''[[ ]]''' - ip: - type: str - description: Node IPv4 address/Mask or 'dhcp'. - set_default_route: - type: bool - default: false - description: 'Insert a default route to the `peer_ip` if `ip` is an ip address - - or configure to accept a default route from DHCP if `ip` is `dhcp`. - - - AVD will error out if set to true, `ip` is an ip address and `peer_ip` - is missing.' - enabled: - type: bool - default: true - description: Enable or Shutdown the interface. - speed: - type: str - description: Speed should be set in the format `` or `forced - ` or `auto `. - peer: - type: str - description: The peer device name. Used for description and documentation - peer_interface: - type: str - description: The peer device interface. Used for description and documentation - peer_ip: - type: str - description: The peer device IPv4 address (no mask). Used as default route - gateway if `set_default_route` is true and `ip` is an IP address. - qos_profile: - type: str - description: QOS service profile. - wan_carrier: - type: str - documentation_options: - table: wan-interfaces-settings - description: 'PREVIEW: This key is currently not supported - - - The WAN Carrier this interface is connected to. - - This is used to infer the path-groups in which this interface should be - configured.' - wan_circuit_id: - type: str - documentation_options: - table: wan-interfaces-settings - convert_types: - - int - description: 'PREVIEW: This key is currently not supported - - - The WAN Circuit ID for this interface. - - This is not rendered in the configuration but used for WAN designs.' - connected_to_pathfinder: - type: bool - documentation_options: - table: wan-interfaces-settings - description: 'PREVIEW: This key is currently not supported - - - For a WAN interface (`wan_path_group` is set), allow to disable the static - tunnel towards Pathfinders. - - Default True.' - raw_eos_cli: - type: str - description: EOS CLI rendered directly on the interface in the final EOS - configuration. - structured_config: - type: dict - documentation_options: - hide_keys: true - description: Custom structured config for the Ethernet interface. - $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/ network_services: documentation_options: table: network-services-common-settings @@ -7188,6 +7090,23 @@ $defs: If not set, and the device is WAN device, a default value of 1000 is used.' + l3_interfaces: + type: list + $ref: eos_designs#/$defs/node_type_l3_interfaces + documentation_options: + table: wan-interfaces-settings + description: 'PREVIEW: This key is currently not supported + + + L3 Interfaces currently only use for WAN interfaces.' + items: + type: dict + keys: + profile: + type: str + description: 'L3 interface profile name. Profile defined under `l3_interface_profiles`. + + ' node_groups: type: list description: Define variables related to all nodes part of this group. @@ -7224,6 +7143,83 @@ $defs: name: type: str description: The Node Name is used as "hostname". + node_type_l3_interfaces: + type: list + primary_key: name + items: + type: dict + keys: + name: + type: str + description: Ethernet interface name like 'Ethernet2'. + pattern: Ethernet[\d/]+ + description: + type: str + description: 'Interface description. + + If not set a default description will be configured with ''[[ ]]''' + ip: + type: str + description: Node IPv4 address/Mask or 'dhcp'. + set_default_route: + type: bool + default: false + description: 'Insert a default route to the `peer_ip` if `ip` is an ip address + + or configure to accept a default route from DHCP if `ip` is `dhcp`. + + + AVD will error out if set to true, `ip` is an ip address and `peer_ip` + is missing.' + enabled: + type: bool + default: true + description: Enable or Shutdown the interface. + speed: + type: str + description: Speed should be set in the format `` or `forced + ` or `auto `. + peer: + type: str + description: The peer device name. Used for description and documentation + peer_interface: + type: str + description: The peer device interface. Used for description and documentation + peer_ip: + type: str + description: The peer device IPv4 address (no mask). Used as default route + gateway if `set_default_route` is true and `ip` is an IP address. + qos_profile: + type: str + description: QOS service profile. + wan_carrier: + type: str + description: 'The WAN Carrier this interface is connected to. + + This is used to infer the path-groups in which this interface should be + configured.' + wan_circuit_id: + type: str + convert_types: + - int + description: 'The WAN Circuit ID for this interface. + + This is not rendered in the configuration but used for WAN designs.' + connected_to_pathfinder: + type: bool + default: true + description: For a WAN interface (`wan_path_group` is set), allow to disable + the static tunnel towards Pathfinders. + raw_eos_cli: + type: str + description: EOS CLI rendered directly on the interface in the final EOS + configuration. + structured_config: + type: dict + documentation_options: + hide_keys: true + description: Custom structured config for the Ethernet interface. + $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/ p2p_links: type: list items: diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml index 9fac5120b8d..0709d779d25 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge.schema.yml @@ -56,28 +56,3 @@ $defs: profile: type: str description: P2P profile name. Profile defined under p2p_profiles. - l3_interfaces_profiles: - type: list - convert_types: - - dict - primary_key: profile - $ref: "eos_designs#/$defs/l3_edge_l3_interfaces" - items: - type: dict - keys: - profile: - type: str - description: L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile. - l3_interfaces: - type: list - $ref: "eos_designs#/$defs/l3_edge_l3_interfaces" - items: - type: dict - keys: - node: - type: str - description: Device on which the interface should be configured. - required: true - profile: - type: str - description: L3 interface profile name. Profile defined under l3_interfaces_profiles. diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml index 119c2789802..54f91aea3a4 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type.schema.yml @@ -1159,6 +1159,22 @@ $defs: MSS value for IPv4 the DPS interface. If not set, and the device is WAN device, a default value of 1000 is used. + l3_interfaces: + type: list + $ref: "eos_designs#/$defs/node_type_l3_interfaces" + documentation_options: + table: wan-interfaces-settings + description: |- + PREVIEW: This key is currently not supported + + L3 Interfaces currently only use for WAN interfaces. + items: + type: dict + keys: + profile: + type: str + description: | + L3 interface profile name. Profile defined under `l3_interface_profiles`. node_groups: type: list description: Define variables related to all nodes part of this group. diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge_l3_interfaces.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type_l3_interfaces.schema.yml similarity index 87% rename from ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge_l3_interfaces.schema.yml rename to ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type_l3_interfaces.schema.yml index d1127873367..f138e9a8c0a 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_l3_edge_l3_interfaces.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/defs_node_type_l3_interfaces.schema.yml @@ -6,12 +6,13 @@ # Use Ctrl + Space to get suggestions for every field. Autocomplete will pop up after typing 2 letters. type: dict $defs: - l3_edge_l3_interfaces: + node_type_l3_interfaces: type: list + primary_key: name items: type: dict keys: - interface: + name: type: str description: Ethernet interface name like 'Ethernet2'. pattern: "Ethernet[\\d/]+" @@ -56,33 +57,21 @@ $defs: description: QOS service profile. wan_carrier: type: str - documentation_options: - table: wan-interfaces-settings description: |- - PREVIEW: This key is currently not supported - The WAN Carrier this interface is connected to. This is used to infer the path-groups in which this interface should be configured. wan_circuit_id: type: str - documentation_options: - table: wan-interfaces-settings convert_types: - int description: |- - PREVIEW: This key is currently not supported - The WAN Circuit ID for this interface. This is not rendered in the configuration but used for WAN designs. connected_to_pathfinder: type: bool - documentation_options: - table: wan-interfaces-settings + default: True description: |- - PREVIEW: This key is currently not supported - For a WAN interface (`wan_path_group` is set), allow to disable the static tunnel towards Pathfinders. - Default True. raw_eos_cli: type: str description: EOS CLI rendered directly on the interface in the final EOS configuration. diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/l3_interface_profiles.schema.yml b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/l3_interface_profiles.schema.yml new file mode 100644 index 00000000000..4ba80292fc1 --- /dev/null +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/schema_fragments/l3_interface_profiles.schema.yml @@ -0,0 +1,25 @@ +# Copyright (c) 2023-2024 Arista Networks, Inc. +# Use of this source code is governed by the Apache License 2.0 +# that can be found in the LICENSE file. +# yaml-language-server: $schema=../../../../plugins/plugin_utils/schema/avd_meta_schema.json +# Line above is used by RedHat's YAML Schema vscode extension +# Use Ctrl + Space to get suggestions for every field. Autocomplete will pop up after typing 2 letters. +type: dict +keys: + l3_interface_profiles: + type: list + documentation_options: + table: wan-interfaces-settings + description: |- + PREVIEW: This key is currently not supported + + Profiles to inherit common settings for l3_interfaces defined under the node type key. + These profiles will *not* work for `l3_interfaces` defined under `vrfs`. + primary_key: profile + $ref: "eos_designs#/$defs/node_type_l3_interfaces" + items: + type: dict + keys: + profile: + type: str + description: L3 interface profile name. Any variable supported under `l3_interfaces` can be inherited from a profile.