diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml index e7b55cb73e2..216bf33c707 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD1-LEAF2B.yml @@ -656,9 +656,9 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 11.1.0.38/31 - description: P2P_DC2-POD1-LEAF1A_Ethernet7 ptp: enable: true + description: P2P_DC2-POD1-LEAF1A_Ethernet7 - name: Ethernet16 peer: server-1 peer_interface: Eth2 diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml index a62e1233544..24dbb6ca8fd 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-POD2-SPINE2.yml @@ -170,9 +170,9 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 200.200.200.101/24 - description: P2P_DC2-POD1-SPINE2_Ethernet5 ptp: enable: true + description: P2P_DC2-POD1-SPINE2_Ethernet5 loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml index 4a1e427bae6..bad6a3c60ea 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC1-SUPER-SPINE1.yml @@ -170,11 +170,11 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 11.1.2.0/31 + ptp: + enable: true mac_security: profile: MACSEC_PROFILE description: P2P_DC2-SUPER-SPINE1_Ethernet4 - ptp: - enable: true loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml index ccd6017d426..467398a46d3 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-LEAF1A.yml @@ -272,9 +272,9 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 11.1.0.39/31 - description: P2P_DC1-POD1-LEAF2B_Ethernet7 ptp: enable: true + description: P2P_DC1-POD1-LEAF2B_Ethernet7 port_channel_interfaces: - name: Port-Channel3 description: L2_DC2-POD1-L2LEAF1A_Port-Channel1 diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml index 41e5c6b56db..3b860b45e9d 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-POD1-SPINE2.yml @@ -154,9 +154,9 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 200.200.200.201/24 - description: P2P_DC1-POD2-SPINE2_Ethernet4 ptp: enable: true + description: P2P_DC1-POD2-SPINE2_Ethernet4 loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml index 24fff311dbf..b16baa75a0b 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs-twodc-5stage-clos/intended/structured_configs/DC2-SUPER-SPINE1.yml @@ -219,11 +219,11 @@ ethernet_interfaces: enabled: false shutdown: false ip_address: 11.1.2.1/31 + ptp: + enable: true mac_security: profile: MACSEC_PROFILE description: P2P_DC1-SUPER-SPINE1_Ethernet6 - ptp: - enable: true loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg index 63411758be5..cd8ed9f0f66 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/configs/host1.cfg @@ -19,6 +19,27 @@ management api http-commands vrf MGMT no shutdown ! +interface Port-Channel1 + description SERVER_OLD_SW-1/2_ENDPOINT_PORT_CHANNEL + no shutdown + switchport + ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 +! +interface Ethernet1 + description SERVER_OLD_SW-1/2_Endpoint_port1 + no shutdown + channel-group 1 mode active +! +interface Ethernet2 + description SERVER_OLD_SW-1/2_ENDPOINT_PORT2 + no shutdown + channel-group 1 mode active +! interface Loopback0 description CUSTOM_ROUTER_ID no shutdown diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml index 0e8dc9ceee6..df2428710de 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/intended/structured_configs/host1.yml @@ -100,3 +100,37 @@ vxlan_interface: vxlan: udp_port: 4789 source_interface: Loopback1 +ethernet_interfaces: +- name: Ethernet1 + peer: OLD_SW-1/2 + peer_interface: Endpoint_port1 + peer_type: server + description: SERVER_OLD_SW-1/2_Endpoint_port1 + shutdown: false + channel_group: + id: 1 + mode: active +- name: Ethernet2 + peer: OLD_SW-1/2 + peer_interface: ENDPOINT_PORT2 + peer_type: server + description: SERVER_OLD_SW-1/2_ENDPOINT_PORT2 + shutdown: false + channel_group: + id: 1 + mode: active +port_channel_interfaces: +- name: Port-Channel1 + description: SERVER_OLD_SW-1/2_ENDPOINT_PORT_CHANNEL + shutdown: false + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true + switchport: + enabled: true diff --git a/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml new file mode 100644 index 00000000000..5ba631de111 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_deprecated_vars/inventory/host_vars/host1/connected-endpoints.yml @@ -0,0 +1,14 @@ +--- +# Test deprecated key endpoint_role - bmca +servers: + - name: OLD_SW-1/2 + adapters: + - switches: [host1, host1] + switch_ports: [Ethernet1, Ethernet2] + endpoint_ports: [Endpoint_port1, ENDPOINT_PORT2] + port_channel: + mode: "active" + endpoint_port_channel: ENDPOINT_PORT_CHANNEL + ptp: + enabled: true + endpoint_role: bmca diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml new file mode 100644 index 00000000000..826e6522a09 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/host_vars/failure-p2p-links-ptp-profile-does-not-exist.yml @@ -0,0 +1,29 @@ +--- +type: l3leaf + +ptp_profiles: + - profile: PROFILE-1 + +l3leaf: + defaults: + loopback_ipv4_pool: 10.254.1.0/27 + vtep_loopback_ipv4_pool: 10.254.11.0/27 + nodes: + - name: failure-p2p-links-ptp-profile-does-not-exist + id: 1 + bgp_as: 65101 + mgmt_ip: 192.168.0.101/24 + ptp: + enabled: true + +l3_edge: + p2p_links: + - nodes: [failure-p2p-links-ptp-profile-does-not-exist, not-in-fabric] + interfaces: [Ethernet10, Ethernet11] + ip: [192.168.0.2/31, 192.168.0.3/31] + ptp: + enabled: true + profile: PROFILE DOES NOT EXIST + +expected_error_message: >- + PTP Profile 'PROFILE DOES NOT EXIST' referenced under l3_edge.p2p_links does not exist in `ptp_profiles`. diff --git a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml index 82134b2f75e..9ec68dcf98c 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_negative_unit_tests/inventory/hosts.yml @@ -107,6 +107,7 @@ all: failure-missing-evpn-multicast-peg-rps: failure-missing-evpn-multicast-with-pim: failure-network-port-ptp-profile-does-not-exist: + failure-p2p-links-ptp-profile-does-not-exist: failure-no-local-path-group-in-default-policy: failure-adapter-ptp-profile-does-not-exist: failure-svi-grandparent-profile-does-not-exist: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg index 614d56a116d..94fd990aab6 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-1-isis-sr-ldp.cfg @@ -10,6 +10,19 @@ service routing protocols model multi-agent ! hostname core-1-isis-sr-ldp ! +ptp clock-identity 00:1C:73:7f:00:01 +ptp domain 127 +ptp mode boundary +ptp priority1 127 +ptp priority2 1 +ptp monitor threshold offset-from-master 250 +ptp monitor threshold mean-path-delay 1500 +ptp monitor sequence-id +ptp monitor threshold missing-message sync 3 sequence-ids +ptp monitor threshold missing-message follow-up 3 sequence-ids +ptp monitor threshold missing-message delay-resp 3 sequence-ids +ptp monitor threshold missing-message announce 3 sequence-ids +! spanning-tree mode none ! vrf instance MGMT @@ -67,6 +80,12 @@ interface Port-Channel16 mpls ldp igp sync mpls ldp interface mpls ip + ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 isis enable CORE isis circuit-type level-2 isis metric 60 @@ -194,6 +213,12 @@ interface Ethernet10 mpls ldp igp sync mpls ldp interface mpls ip + ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 isis enable CORE isis circuit-type level-2 isis metric 50 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg index 42812ae570d..661787137a3 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/core-2-ospf-ldp.cfg @@ -10,6 +10,19 @@ service routing protocols model multi-agent ! hostname core-2-ospf-ldp ! +ptp clock-identity 00:1C:73:7f:00:02 +ptp domain 127 +ptp mode boundary +ptp priority1 127 +ptp priority2 2 +ptp monitor threshold offset-from-master 250 +ptp monitor threshold mean-path-delay 1500 +ptp monitor sequence-id +ptp monitor threshold missing-message sync 3 sequence-ids +ptp monitor threshold missing-message follow-up 3 sequence-ids +ptp monitor threshold missing-message delay-resp 3 sequence-ids +ptp monitor threshold missing-message announce 3 sequence-ids +! spanning-tree mode none ! vrf instance MGMT @@ -59,6 +72,12 @@ interface Port-Channel16 mpls ip ip ospf network point-to-point ip ospf area 0.0.0.0 + ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 ! interface Ethernet1 description P2P_LINK_TO_CORE-1-ISIS-SR-LDP_Ethernet1 @@ -154,6 +173,12 @@ interface Ethernet10 mpls ip ip ospf network point-to-point ip ospf area 0.0.0.0 + ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 ! interface Ethernet12 description P2P_LINK_TO_CORE-1-ISIS-SR-LDP_Ethernet12 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg index 4cfaba9b585..ab2a855e46d 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_bgp.cfg @@ -10,6 +10,19 @@ service routing protocols model multi-agent ! hostname l3_edge_bgp ! +ptp clock-identity 00:1C:73:14:00:01 +ptp domain 127 +ptp mode boundary +ptp priority1 20 +ptp priority2 1 +ptp monitor threshold offset-from-master 250 +ptp monitor threshold mean-path-delay 1500 +ptp monitor sequence-id +ptp monitor threshold missing-message sync 3 sequence-ids +ptp monitor threshold missing-message follow-up 3 sequence-ids +ptp monitor threshold missing-message delay-resp 3 sequence-ids +ptp monitor threshold missing-message announce 3 sequence-ids +! spanning-tree mode none ! vrf instance MGMT @@ -44,6 +57,11 @@ interface ethernet1 ip address 192.168.0.0/31 mac security profile TEST-MACSEC-PROFILE ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 service-policy type qos input TEST_POLICY service-profile TEST-QOS-PROFILE ! TEST RAW_EOS_CLI diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg index c1ff76a9de2..4920f2721dd 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_isis.cfg @@ -10,6 +10,19 @@ service routing protocols model multi-agent ! hostname l3_edge_isis ! +ptp clock-identity 00:1C:73:14:00:01 +ptp domain 127 +ptp mode boundary +ptp priority1 20 +ptp priority2 1 +ptp monitor threshold offset-from-master 250 +ptp monitor threshold mean-path-delay 1500 +ptp monitor sequence-id +ptp monitor threshold missing-message sync 3 sequence-ids +ptp monitor threshold missing-message follow-up 3 sequence-ids +ptp monitor threshold missing-message delay-resp 3 sequence-ids +ptp monitor threshold missing-message announce 3 sequence-ids +! spanning-tree mode none ! vrf instance MGMT @@ -30,6 +43,11 @@ interface ethernet1 ip address 192.168.0.0/31 mac security profile TEST-MACSEC-PROFILE ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 service-profile TEST-QOS-PROFILE ! interface ethernet2 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg index 762df9dc35f..b654bece544 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/l3_edge_ospf.cfg @@ -10,6 +10,19 @@ service routing protocols model multi-agent ! hostname l3_edge_ospf ! +ptp clock-identity 00:1C:73:14:00:01 +ptp domain 127 +ptp mode boundary +ptp priority1 20 +ptp priority2 1 +ptp monitor threshold offset-from-master 250 +ptp monitor threshold mean-path-delay 1500 +ptp monitor sequence-id +ptp monitor threshold missing-message sync 3 sequence-ids +ptp monitor threshold missing-message follow-up 3 sequence-ids +ptp monitor threshold missing-message delay-resp 3 sequence-ids +ptp monitor threshold missing-message announce 3 sequence-ids +! spanning-tree mode none ! vrf instance MGMT @@ -30,6 +43,11 @@ interface ethernet1 ip address 192.168.0.0/31 mac security profile TEST-MACSEC-PROFILE ptp enable + ptp announce interval 0 + ptp announce timeout 3 + ptp delay-req interval -3 + ptp sync-message interval -3 + ptp transport ipv4 service-profile TEST-QOS-PROFILE ! interface ethernet2 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg index 4d30b44ee00..a733181d4b7 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-leaf1.cfg @@ -193,7 +193,7 @@ interface Ethernet12 channel-group 12 mode active ! interface Ethernet13 - description SERVER_bmca-endpoint_eth1 + description SERVER_dynamic-endpoint_eth1 no shutdown switchport access vlan 11 switchport mode access diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg index 1145a809124..fb7e12507c4 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine1.cfg @@ -92,10 +92,10 @@ interface Ethernet6 mtu 9214 no switchport ptp enable - ptp announce interval 0 - ptp announce timeout 3 - ptp delay-req interval -3 - ptp sync-message interval -3 + ptp announce interval 2 + ptp announce timeout 10 + ptp delay-req interval 2 + ptp sync-message interval 2 ptp transport ipv4 ! interface Ethernet7 @@ -107,6 +107,7 @@ interface Ethernet7 ptp announce interval 0 ptp announce timeout 3 ptp delay-req interval -3 + ptp role master ptp sync-message interval -3 ptp transport ipv4 ! diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg index 3f1d97728f7..fc956cf3905 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/configs/ptp-tests-spine2.cfg @@ -48,10 +48,10 @@ interface Ethernet6 mtu 9214 no switchport ptp enable - ptp announce interval 0 - ptp announce timeout 3 - ptp delay-req interval -3 - ptp sync-message interval -3 + ptp announce interval 2 + ptp announce timeout 10 + ptp delay-req interval 2 + ptp sync-message interval 2 ptp transport ipv4 ! interface Ethernet7 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml index bfd506aff18..dc0f7996f6e 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-1-isis-sr-ldp.yml @@ -27,6 +27,24 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ptp: + mode: boundary + clock_identity: 00:1C:73:7f:00:01 + priority1: 127 + priority2: 1 + domain: 127 + monitor: + enabled: true + threshold: + offset_from_master: 250 + mean_path_delay: 1500 + missing_message: + sequence_ids: + enabled: true + announce: 3 + delay_resp: 3 + follow_up: 3 + sync: 3 router_general: router_id: ipv4: 10.0.0.1 @@ -236,6 +254,15 @@ ethernet_interfaces: shutdown: false mtu: 1500 ip_address: 100.64.48.12/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true isis_enable: CORE isis_metric: 50 isis_network_point_to_point: true @@ -435,6 +462,15 @@ port_channel_interfaces: shutdown: false mtu: 1500 ip_address: 100.64.48.16/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true ipv6_enable: true isis_enable: CORE isis_metric: 60 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml index d57edb98af2..33858baf8be 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/core-2-ospf-ldp.yml @@ -27,6 +27,24 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ptp: + mode: boundary + clock_identity: 00:1C:73:7f:00:02 + priority1: 127 + priority2: 2 + domain: 127 + monitor: + enabled: true + threshold: + offset_from_master: 250 + mean_path_delay: 1500 + missing_message: + sequence_ids: + enabled: true + announce: 3 + delay_resp: 3 + follow_up: 3 + sync: 3 router_general: router_id: ipv4: 10.0.0.2 @@ -181,6 +199,15 @@ ethernet_interfaces: shutdown: false mtu: 1500 ip_address: 100.64.48.13/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true ospf_network_point_to_point: true ospf_area: 0.0.0.0 mpls: @@ -298,6 +325,15 @@ port_channel_interfaces: shutdown: false mtu: 1500 ip_address: 100.64.48.17/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true ipv6_enable: true ospf_network_point_to_point: true ospf_area: 0.0.0.0 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml index 9daa77e0615..f441ed5e67e 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/custom-ptp-profile.yml @@ -140,7 +140,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_not-in-this-fabric_Ethernet8 ptp: announce: interval: 4 @@ -150,6 +149,7 @@ ethernet_interfaces: interval: -7 transport: ipv4 enable: true + description: P2P_not-in-this-fabric_Ethernet8 vlans: - id: 11 name: VLAN11 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml index c3ceb717a5f..cd4fb857328 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_bgp.yml @@ -72,6 +72,24 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ptp: + mode: boundary + clock_identity: 00:1C:73:14:00:01 + priority1: 20 + priority2: 1 + domain: 127 + monitor: + enabled: true + threshold: + offset_from_master: 250 + mean_path_delay: 1500 + missing_message: + sequence_ids: + enabled: true + announce: 3 + delay_resp: 3 + follow_up: 3 + sync: 3 loopback_interfaces: - name: Loopback0 description: ROUTER_ID @@ -103,12 +121,19 @@ ethernet_interfaces: ' ip_address: 192.168.0.0/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true mac_security: profile: TEST-MACSEC-PROFILE description: P2P_peer1_ethernet1 speed: forced 10000full - ptp: - enable: true service_policy: qos: input: TEST_POLICY diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml index 207a4a9a407..a659f6cfe9f 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_isis.yml @@ -22,6 +22,24 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ptp: + mode: boundary + clock_identity: 00:1C:73:14:00:01 + priority1: 20 + priority2: 1 + domain: 127 + monitor: + enabled: true + threshold: + offset_from_master: 250 + mean_path_delay: 1500 + missing_message: + sequence_ids: + enabled: true + announce: 3 + delay_resp: 3 + follow_up: 3 + sync: 3 loopback_interfaces: - name: Loopback0 description: ROUTER_ID @@ -49,12 +67,19 @@ ethernet_interfaces: mtu: 2000 service_profile: TEST-QOS-PROFILE ip_address: 192.168.0.0/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true mac_security: profile: TEST-MACSEC-PROFILE description: P2P_peer1_ethernet1 speed: forced 10000full - ptp: - enable: true - name: ethernet2 peer: peer2 peer_interface: ethernet2 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml index 703e8a7d313..d7d84e4d162 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/l3_edge_ospf.yml @@ -22,6 +22,24 @@ management_api_http: enable_vrfs: - name: MGMT enable_https: true +ptp: + mode: boundary + clock_identity: 00:1C:73:14:00:01 + priority1: 20 + priority2: 1 + domain: 127 + monitor: + enabled: true + threshold: + offset_from_master: 250 + mean_path_delay: 1500 + missing_message: + sequence_ids: + enabled: true + announce: 3 + delay_resp: 3 + follow_up: 3 + sync: 3 loopback_interfaces: - name: Loopback0 description: ROUTER_ID @@ -50,12 +68,19 @@ ethernet_interfaces: mtu: 2000 service_profile: TEST-QOS-PROFILE ip_address: 192.168.0.0/31 + ptp: + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 + enable: true mac_security: profile: TEST-MACSEC-PROFILE description: P2P_peer1_ethernet1 speed: forced 10000full - ptp: - enable: true - name: ethernet2 peer: peer2 peer_interface: ethernet2 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml index ea3eee408f2..76a1308679e 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-leaf1.yml @@ -359,11 +359,11 @@ ethernet_interfaces: id: 14 mode: active - name: Ethernet13 - peer: bmca-endpoint + peer: dynamic-endpoint peer_interface: eth1 peer_type: server - port_profile: PTP-profile-BMCA - description: SERVER_bmca-endpoint_eth1 + port_profile: PTP-profile-dynamic + description: SERVER_dynamic-endpoint_eth1 shutdown: false switchport: enabled: true diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml index 3b32eeca7db..651c29025ba 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine1.yml @@ -207,16 +207,16 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine2_Ethernet6 ptp: announce: - interval: 0 - timeout: 3 - delay_req: -3 + interval: 2 + timeout: 10 + delay_req: 2 sync_message: - interval: -3 + interval: 2 transport: ipv4 enable: true + description: P2P_ptp-tests-spine2_Ethernet6 - name: Ethernet7 peer: ptp-tests-spine2 peer_interface: Ethernet7 @@ -225,7 +225,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine2_Ethernet7 ptp: announce: interval: 0 @@ -234,7 +233,9 @@ ethernet_interfaces: sync_message: interval: -3 transport: ipv4 + role: master enable: true + description: P2P_ptp-tests-spine2_Ethernet7 - name: Ethernet8 peer: ptp-tests-spine2 peer_interface: Ethernet8 @@ -243,7 +244,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine2_Ethernet8 ptp: announce: interval: 0 @@ -253,6 +253,7 @@ ethernet_interfaces: interval: -3 transport: ipv4 enable: true + description: P2P_ptp-tests-spine2_Ethernet8 - name: Ethernet9 peer: ptp-tests-spine2 peer_interface: Ethernet9 @@ -261,7 +262,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine2_Ethernet9 ptp: announce: interval: 0 @@ -271,6 +271,7 @@ ethernet_interfaces: interval: -3 transport: ipv4 enable: true + description: P2P_ptp-tests-spine2_Ethernet9 loopback_interfaces: - name: Loopback0 description: ROUTER_ID diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml index 95361e29f9e..c555572bccb 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/intended/structured_configs/ptp-tests-spine2.yml @@ -135,16 +135,16 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine1_Ethernet6 ptp: announce: - interval: 0 - timeout: 3 - delay_req: -3 + interval: 2 + timeout: 10 + delay_req: 2 sync_message: - interval: -3 + interval: 2 transport: ipv4 enable: true + description: P2P_ptp-tests-spine1_Ethernet6 - name: Ethernet7 peer: ptp-tests-spine1 peer_interface: Ethernet7 @@ -153,7 +153,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine1_Ethernet7 ptp: announce: interval: 0 @@ -163,6 +162,7 @@ ethernet_interfaces: interval: -3 transport: ipv4 enable: true + description: P2P_ptp-tests-spine1_Ethernet7 - name: Ethernet8 peer: ptp-tests-spine1 peer_interface: Ethernet8 @@ -171,7 +171,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine1_Ethernet8 ptp: announce: interval: 0 @@ -181,6 +180,7 @@ ethernet_interfaces: interval: -3 transport: ipv4 enable: true + description: P2P_ptp-tests-spine1_Ethernet8 - name: Ethernet9 peer: ptp-tests-spine1 peer_interface: Ethernet9 @@ -189,7 +189,6 @@ ethernet_interfaces: enabled: false shutdown: false mtu: 9214 - description: P2P_ptp-tests-spine1_Ethernet9 ptp: announce: interval: 0 @@ -199,5 +198,6 @@ ethernet_interfaces: interval: -3 transport: ipv4 enable: true + description: P2P_ptp-tests-spine1_Ethernet9 metadata: platform: vEOS-LAB diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml index 5e6ebb4f3b1..d2e3eb9e8af 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/CORE_UNIT_TESTS.yml @@ -47,8 +47,12 @@ core_router: nodes: - name: core-1-isis-sr-ldp id: 1 + ptp: + enabled: true - name: core-2-ospf-ldp id: 2 + ptp: + enabled: true - name: core-3-isis-sr-ldp id: 3 - name: core-4-multicast @@ -77,6 +81,8 @@ core_interfaces: speed: "forced 1000full" mtu: 1500 ip_pool: underlay_pool + ptp: + enabled: true # Testing merge of structured config on profile and link. structured_config: l2_mtu: 2222 @@ -184,6 +190,8 @@ core_interfaces: - node: core-2-ospf-ldp interfaces: [ Ethernet16, Ethernet17 ] profile: isis_bb_profile + ptp: + enabled: true # P2P core links with underlay_multicast(pim-sparse) enabled. - nodes: [ core-4-multicast, peer1 ] diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml index c21d43b644f..2ef8cec0535 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/group_vars/PTP_TESTS.yml @@ -14,11 +14,13 @@ core_interfaces: interfaces: [ Ethernet6, Ethernet6 ] ptp: enabled: true + profile: myptpprofile include_in_underlay_protocol: false - nodes: [ ptp-tests-spine1, ptp-tests-spine2 ] interfaces: [ Ethernet7, Ethernet7 ] ptp: enabled: true + roles: ["master", "dynamic"] include_in_underlay_protocol: false # Testing the same as above with l3_edge @@ -59,20 +61,20 @@ tenants: ip_address: 172.17.11.1/24 port_profiles: - - profile: PTP-profile-BMCA + - profile: PTP-profile-dynamic vlans: 11 mode: access ptp: enabled: true - endpoint_role: bmca + endpoint_role: dynamic servers: - - name: bmca-endpoint + - name: dynamic-endpoint adapters: - endpoint_ports: [ eth1 ] switch_ports: [ Ethernet13 ] switches: [ ptp-tests-leaf1 ] - profile: PTP-profile-BMCA + profile: PTP-profile-dynamic - name: video-endpoint adapters: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml index fbd45d54bd4..37eb8f780a4 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/custom-ptp-profile.yml @@ -18,6 +18,7 @@ l3_edge: interfaces: [ Ethernet8, Ethernet8 ] ptp: enabled: true + profile: my-custom-ptp-profile include_in_underlay_protocol: false ptp_settings: diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml index 34bbc14621e..e0655ba14cb 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_bgp.yml @@ -2,6 +2,8 @@ type: spine spine: nodes: - name: l3_edge_bgp + ptp: + enabled: true id: 1 evpn_role: "none" loopback_ipv4_pool: 1.2.3.4/24 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml index 4d9c4718363..da27d83db12 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_isis.yml @@ -8,6 +8,8 @@ type: spine spine: nodes: - name: l3_edge_isis + ptp: + enabled: true id: 1 evpn_role: "none" loopback_ipv4_pool: 1.2.3.4/24 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml index 4984a58bbad..8239bd5e829 100644 --- a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/l3_edge_ospf.yml @@ -4,6 +4,8 @@ type: spine spine: nodes: - name: l3_edge_ospf + ptp: + enabled: true id: 1 evpn_role: "none" loopback_ipv4_pool: 1.2.3.4/24 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml new file mode 100644 index 00000000000..c72a5aa10a0 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine1.yml @@ -0,0 +1,18 @@ +--- +ptp_profiles: + - profile: myptpprofile + announce: + interval: 2 + timeout: 10 + delay_req: 2 + sync_message: + interval: 2 + transport: ipv4 + - profile: aes67-r16-2016 + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 diff --git a/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml new file mode 100644 index 00000000000..c72a5aa10a0 --- /dev/null +++ b/ansible_collections/arista/avd/molecule/eos_designs_unit_tests/inventory/host_vars/ptp-tests-spine2.yml @@ -0,0 +1,18 @@ +--- +ptp_profiles: + - profile: myptpprofile + announce: + interval: 2 + timeout: 10 + delay_req: 2 + sync_message: + interval: 2 + transport: ipv4 + - profile: aes67-r16-2016 + announce: + interval: 0 + timeout: 3 + delay_req: -3 + sync_message: + interval: -3 + transport: ipv4 diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md index b3ff11d4e76..487da91d999 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md @@ -41,7 +41,7 @@ | [        qos_profile](## ".[].adapters.[].qos_profile") | String | | | | QOS profile name. | | [        ptp](## ".[].adapters.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
| | [          enabled](## ".[].adapters.[].ptp.enabled") | Boolean | | `False` | | | - | [          endpoint_role](## ".[].adapters.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower | | + | [          endpoint_role](## ".[].adapters.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default | PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. | | [          profile](## ".[].adapters.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [        sflow](## ".[].adapters.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. | | [        flow_tracking](## ".[].adapters.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. | @@ -300,7 +300,13 @@ # `ptp role master` is set to ensure control over the PTP topology. ptp: enabled: - endpoint_role: + + # PTP role of the endpoint. + # `follower` will configure the switch port as `ptp role master`. + # `dynamic` will use BMCA. + # `default` is deprecated in favor of `follower`. + # `bmca` is deprecated in favor of `dynamic`. + endpoint_role: # Default available profiles are: # - "aes67" 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 ccdb0ec2844..8eae83c0fe1 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 @@ -42,6 +42,9 @@ | [      bfd](## "core_interfaces.p2p_links_profiles.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). | | [      ptp](## "core_interfaces.p2p_links_profiles.[].ptp") | Dictionary | | | | PTP parameters. | | [        enabled](## "core_interfaces.p2p_links_profiles.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. | + | [        roles](## "core_interfaces.p2p_links_profiles.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. | + | [          - <str>](## "core_interfaces.p2p_links_profiles.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master | | + | [        profile](## "core_interfaces.p2p_links_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [      sflow](## "core_interfaces.p2p_links_profiles.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. | | [      underlay_multicast](## "core_interfaces.p2p_links_profiles.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. | | [      flow_tracking](## "core_interfaces.p2p_links_profiles.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. | @@ -90,6 +93,9 @@ | [      bfd](## "core_interfaces.p2p_links.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). | | [      ptp](## "core_interfaces.p2p_links.[].ptp") | Dictionary | | | | PTP parameters. | | [        enabled](## "core_interfaces.p2p_links.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. | + | [        roles](## "core_interfaces.p2p_links.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. | + | [          - <str>](## "core_interfaces.p2p_links.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master | | + | [        profile](## "core_interfaces.p2p_links.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [      sflow](## "core_interfaces.p2p_links.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. | | [      underlay_multicast](## "core_interfaces.p2p_links.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. | | [      flow_tracking](## "core_interfaces.p2p_links.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. | @@ -214,6 +220,16 @@ # Enable PTP. enabled: + # Role in boundary clock mode for each node. Default is `dynamic`. + roles: + - + + # Default available profiles are: + # - "aes67" + # - "aes67-r16-2016" + # - "smpte2059-2" + profile: + # Enable sFlow. Overrides `fabric_sflow` setting. sflow: @@ -360,6 +376,16 @@ # Enable PTP. enabled: + # Role in boundary clock mode for each node. Default is `dynamic`. + roles: + - + + # Default available profiles are: + # - "aes67" + # - "aes67-r16-2016" + # - "smpte2059-2" + profile: + # Enable sFlow. Overrides `fabric_sflow` setting. sflow: 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 40eb4f7d50e..e51b6e0a0d5 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 @@ -42,6 +42,9 @@ | [      bfd](## "l3_edge.p2p_links_profiles.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). | | [      ptp](## "l3_edge.p2p_links_profiles.[].ptp") | Dictionary | | | | PTP parameters. | | [        enabled](## "l3_edge.p2p_links_profiles.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. | + | [        roles](## "l3_edge.p2p_links_profiles.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. | + | [          - <str>](## "l3_edge.p2p_links_profiles.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master | | + | [        profile](## "l3_edge.p2p_links_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [      sflow](## "l3_edge.p2p_links_profiles.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. | | [      underlay_multicast](## "l3_edge.p2p_links_profiles.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. | | [      flow_tracking](## "l3_edge.p2p_links_profiles.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. | @@ -90,6 +93,9 @@ | [      bfd](## "l3_edge.p2p_links.[].bfd") | Boolean | | | | Enable BFD (only considered for BGP). | | [      ptp](## "l3_edge.p2p_links.[].ptp") | Dictionary | | | | PTP parameters. | | [        enabled](## "l3_edge.p2p_links.[].ptp.enabled") | Boolean | | `False` | | Enable PTP. | + | [        roles](## "l3_edge.p2p_links.[].ptp.roles") | List, items: String | | | | Role in boundary clock mode for each node. Default is `dynamic`. | + | [          - <str>](## "l3_edge.p2p_links.[].ptp.roles.[]") | String | | `dynamic` | Valid Values:
- dynamic
- master | | + | [        profile](## "l3_edge.p2p_links.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [      sflow](## "l3_edge.p2p_links.[].sflow") | Boolean | | | | Enable sFlow. Overrides `fabric_sflow` setting. | | [      underlay_multicast](## "l3_edge.p2p_links.[].underlay_multicast") | Boolean | | `False` | | Enable PIM sparse mode. Requires `include_in_underlay_protocol` and the global `underlay_multicast` to be `true`. | | [      flow_tracking](## "l3_edge.p2p_links.[].flow_tracking") | Dictionary | | | | Enable flow-tracking. Overrides `fabric_flow_tracking` setting. | @@ -214,6 +220,16 @@ # Enable PTP. enabled: + # Role in boundary clock mode for each node. Default is `dynamic`. + roles: + - + + # Default available profiles are: + # - "aes67" + # - "aes67-r16-2016" + # - "smpte2059-2" + profile: + # Enable sFlow. Overrides `fabric_sflow` setting. sflow: @@ -360,6 +376,16 @@ # Enable PTP. enabled: + # Role in boundary clock mode for each node. Default is `dynamic`. + roles: + - + + # Default available profiles are: + # - "aes67" + # - "aes67-r16-2016" + # - "smpte2059-2" + profile: + # Enable sFlow. Overrides `fabric_sflow` setting. sflow: diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md index 355bf327783..4fbaec627be 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md @@ -36,7 +36,7 @@ | [    qos_profile](## "network_ports.[].qos_profile") | String | | | | QOS profile name. | | [    ptp](## "network_ports.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
| | [      enabled](## "network_ports.[].ptp.enabled") | Boolean | | `False` | | | - | [      endpoint_role](## "network_ports.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower | | + | [      endpoint_role](## "network_ports.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default | PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. | | [      profile](## "network_ports.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [    sflow](## "network_ports.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. | | [    flow_tracking](## "network_ports.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. | @@ -274,7 +274,13 @@ # `ptp role master` is set to ensure control over the PTP topology. ptp: enabled: - endpoint_role: + + # PTP role of the endpoint. + # `follower` will configure the switch port as `ptp role master`. + # `dynamic` will use BMCA. + # `default` is deprecated in favor of `follower`. + # `bmca` is deprecated in favor of `dynamic`. + endpoint_role: # Default available profiles are: # - "aes67" diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md index a71c88ee66d..9dec90eaddd 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md @@ -32,7 +32,7 @@ | [    qos_profile](## "port_profiles.[].qos_profile") | String | | | | QOS profile name. | | [    ptp](## "port_profiles.[].ptp") | Dictionary | | | | The global PTP profile parameters will be applied to all connected endpoints where `ptp` is manually enabled.
`ptp role master` is set to ensure control over the PTP topology.
| | [      enabled](## "port_profiles.[].ptp.enabled") | Boolean | | `False` | | | - | [      endpoint_role](## "port_profiles.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- bmca
- default
- follower | | + | [      endpoint_role](## "port_profiles.[].ptp.endpoint_role") | String | | `follower` | Valid Values:
- follower
- dynamic
- bmca
- default | PTP role of the endpoint.
`follower` will configure the switch port as `ptp role master`.
`dynamic` will use BMCA.
`default` is deprecated in favor of `follower`.
`bmca` is deprecated in favor of `dynamic`. | | [      profile](## "port_profiles.[].ptp.profile") | String | | `aes67-r16-2016` | | Default available profiles are:
- "aes67"
- "aes67-r16-2016"
- "smpte2059-2" | | [    sflow](## "port_profiles.[].sflow") | Boolean | | | | Configures sFlow on the interface. Overrides `fabric_sflow.endpoints` setting. | | [    flow_tracking](## "port_profiles.[].flow_tracking") | Dictionary | | | | Configures flow-tracking on the interface. Overrides `fabric_flow_tracking.endpoints` setting. | @@ -255,7 +255,13 @@ # `ptp role master` is set to ensure control over the PTP topology. ptp: enabled: - endpoint_role: + + # PTP role of the endpoint. + # `follower` will configure the switch port as `ptp role master`. + # `dynamic` will use BMCA. + # `default` is deprecated in favor of `follower`. + # `bmca` is deprecated in favor of `dynamic`. + endpoint_role: # Default available profiles are: # - "aes67" diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py index 1f35119d087..204df7de342 100644 --- a/python-avd/pyavd/_eos_designs/schema/__init__.py +++ b/python-avd/pyavd/_eos_designs/schema/__init__.py @@ -1026,18 +1026,51 @@ class Descriptions(AvdList[str]): class Ptp(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}} + class Roles(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Roles._item_type = str + + _fields: ClassVar[dict] = { + "enabled": {"type": bool, "default": False}, + "roles": {"type": Roles}, + "profile": {"type": str, "default": "aes67-r16-2016"}, + "_custom_data": {"type": dict}, + } enabled: bool """ Enable PTP. Default value: `False` """ + roles: Roles + """ + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + """ + profile: str + """ + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" + + Default value: `"aes67-r16-2016"` + """ _custom_data: dict[str, Any] if TYPE_CHECKING: - def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None: + def __init__( + self, + *, + enabled: bool | UndefinedType = Undefined, + roles: Roles | UndefinedType = Undefined, + profile: str | UndefinedType = Undefined, + _custom_data: dict[str, Any] | UndefinedType = Undefined, + ) -> None: """ Ptp. @@ -1046,6 +1079,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d Args: enabled: Enable PTP. + roles: + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + profile: + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" _custom_data: _custom_data """ @@ -1556,18 +1599,51 @@ class Descriptions(AvdList[str]): class Ptp(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}} + class Roles(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Roles._item_type = str + + _fields: ClassVar[dict] = { + "enabled": {"type": bool, "default": False}, + "roles": {"type": Roles}, + "profile": {"type": str, "default": "aes67-r16-2016"}, + "_custom_data": {"type": dict}, + } enabled: bool """ Enable PTP. Default value: `False` """ + roles: Roles + """ + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + """ + profile: str + """ + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" + + Default value: `"aes67-r16-2016"` + """ _custom_data: dict[str, Any] if TYPE_CHECKING: - def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None: + def __init__( + self, + *, + enabled: bool | UndefinedType = Undefined, + roles: Roles | UndefinedType = Undefined, + profile: str | UndefinedType = Undefined, + _custom_data: dict[str, Any] | UndefinedType = Undefined, + ) -> None: """ Ptp. @@ -1576,6 +1652,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d Args: enabled: Enable PTP. + roles: + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + profile: + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" _custom_data: _custom_data """ @@ -5079,18 +5165,51 @@ class Descriptions(AvdList[str]): class Ptp(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}} + class Roles(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Roles._item_type = str + + _fields: ClassVar[dict] = { + "enabled": {"type": bool, "default": False}, + "roles": {"type": Roles}, + "profile": {"type": str, "default": "aes67-r16-2016"}, + "_custom_data": {"type": dict}, + } enabled: bool """ Enable PTP. Default value: `False` """ + roles: Roles + """ + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + """ + profile: str + """ + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" + + Default value: `"aes67-r16-2016"` + """ _custom_data: dict[str, Any] if TYPE_CHECKING: - def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None: + def __init__( + self, + *, + enabled: bool | UndefinedType = Undefined, + roles: Roles | UndefinedType = Undefined, + profile: str | UndefinedType = Undefined, + _custom_data: dict[str, Any] | UndefinedType = Undefined, + ) -> None: """ Ptp. @@ -5099,6 +5218,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d Args: enabled: Enable PTP. + roles: + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + profile: + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" _custom_data: _custom_data """ @@ -5609,18 +5738,51 @@ class Descriptions(AvdList[str]): class Ptp(AvdModel): """Subclass of AvdModel.""" - _fields: ClassVar[dict] = {"enabled": {"type": bool, "default": False}, "_custom_data": {"type": dict}} + class Roles(AvdList[str]): + """Subclass of AvdList with `str` items.""" + + Roles._item_type = str + + _fields: ClassVar[dict] = { + "enabled": {"type": bool, "default": False}, + "roles": {"type": Roles}, + "profile": {"type": str, "default": "aes67-r16-2016"}, + "_custom_data": {"type": dict}, + } enabled: bool """ Enable PTP. Default value: `False` """ + roles: Roles + """ + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + """ + profile: str + """ + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" + + Default value: `"aes67-r16-2016"` + """ _custom_data: dict[str, Any] if TYPE_CHECKING: - def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined) -> None: + def __init__( + self, + *, + enabled: bool | UndefinedType = Undefined, + roles: Roles | UndefinedType = Undefined, + profile: str | UndefinedType = Undefined, + _custom_data: dict[str, Any] | UndefinedType = Undefined, + ) -> None: """ Ptp. @@ -5629,6 +5791,16 @@ def __init__(self, *, enabled: bool | UndefinedType = Undefined, _custom_data: d Args: enabled: Enable PTP. + roles: + Role in boundary clock mode for each node. Default is `dynamic`. + + Subclass of AvdList with `str` + items. + profile: + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" _custom_data: _custom_data """ @@ -6825,8 +6997,18 @@ class Ptp(AvdModel): } enabled: bool """Default value: `False`""" - endpoint_role: Literal["bmca", "default", "follower"] - """Default value: `"follower"`""" + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] + """ + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. + + Default value: `"follower"` + """ profile: str """ Default available profiles are: @@ -6844,7 +7026,7 @@ def __init__( self, *, enabled: bool | UndefinedType = Undefined, - endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined, + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined, profile: str | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined, ) -> None: @@ -6856,7 +7038,14 @@ def __init__( Args: enabled: enabled - endpoint_role: endpoint_role + endpoint_role: + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. profile: Default available profiles are: - "aes67" @@ -10664,8 +10853,18 @@ class Ptp(AvdModel): } enabled: bool """Default value: `False`""" - endpoint_role: Literal["bmca", "default", "follower"] - """Default value: `"follower"`""" + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] + """ + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. + + Default value: `"follower"` + """ profile: str """ Default available profiles are: @@ -10683,7 +10882,7 @@ def __init__( self, *, enabled: bool | UndefinedType = Undefined, - endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined, + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined, profile: str | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined, ) -> None: @@ -10695,7 +10894,14 @@ def __init__( Args: enabled: enabled - endpoint_role: endpoint_role + endpoint_role: + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. profile: Default available profiles are: - "aes67" @@ -17657,8 +17863,18 @@ class Ptp(AvdModel): } enabled: bool """Default value: `False`""" - endpoint_role: Literal["bmca", "default", "follower"] - """Default value: `"follower"`""" + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] + """ + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. + + Default value: `"follower"` + """ profile: str """ Default available profiles are: @@ -17676,7 +17892,7 @@ def __init__( self, *, enabled: bool | UndefinedType = Undefined, - endpoint_role: Literal["bmca", "default", "follower"] | UndefinedType = Undefined, + endpoint_role: Literal["follower", "dynamic", "bmca", "default"] | UndefinedType = Undefined, profile: str | UndefinedType = Undefined, _custom_data: dict[str, Any] | UndefinedType = Undefined, ) -> None: @@ -17688,7 +17904,14 @@ def __init__( Args: enabled: enabled - endpoint_role: endpoint_role + endpoint_role: + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` + will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of + `dynamic`. profile: Default available profiles are: - "aes67" diff --git a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml index 9b77a0373a5..4eb87f66f14 100644 --- a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml @@ -5274,11 +5274,21 @@ $defs: default: false endpoint_role: type: str + description: 'PTP role of the endpoint. + + `follower` will configure the switch port as `ptp role master`. + + `dynamic` will use BMCA. + + `default` is deprecated in favor of `follower`. + + `bmca` is deprecated in favor of `dynamic`.' default: follower valid_values: + - follower + - dynamic - bmca - default - - follower profile: type: str default: aes67-r16-2016 @@ -9672,6 +9682,20 @@ $defs: type: bool default: false description: Enable PTP. + roles: + type: list + description: Role in boundary clock mode for each node. Default is `dynamic`. + items: + type: str + default: dynamic + valid_values: + - dynamic + - master + profile: + type: str + default: aes67-r16-2016 + description: "Default available profiles are:\n - \"aes67\"\n - \"aes67-r16-2016\"\n + \ - \"smpte2059-2\"" sflow: type: bool description: Enable sFlow. Overrides `fabric_sflow` setting. diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml index 42733f30bd8..8dce57646a7 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_adapter_config.schema.yml @@ -135,11 +135,18 @@ $defs: default: false endpoint_role: type: str + description: |- + PTP role of the endpoint. + `follower` will configure the switch port as `ptp role master`. + `dynamic` will use BMCA. + `default` is deprecated in favor of `follower`. + `bmca` is deprecated in favor of `dynamic`. default: "follower" valid_values: + - "follower" + - "dynamic" - "bmca" - "default" - - "follower" profile: type: str default: "aes67-r16-2016" diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml index 62fc8a436ef..4372b615769 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/defs_p2p_links.schema.yml @@ -132,6 +132,23 @@ $defs: type: bool default: false description: Enable PTP. + roles: + type: list + description: Role in boundary clock mode for each node. Default is `dynamic`. + items: + type: str + default: "dynamic" + valid_values: + - "dynamic" + - "master" + profile: + type: str + default: "aes67-r16-2016" + description: |- + Default available profiles are: + - "aes67" + - "aes67-r16-2016" + - "smpte2059-2" sflow: type: bool description: Enable sFlow. Overrides `fabric_sflow` setting. diff --git a/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py b/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py index 45251b79108..820b6d3af4e 100644 --- a/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py +++ b/python-avd/pyavd/_eos_designs/structured_config/connected_endpoints/utils.py @@ -226,7 +226,7 @@ def _get_adapter_ptp( ptp_config["enable"] = True - if adapter.ptp.endpoint_role != "bmca": + if adapter.ptp.endpoint_role not in ["dynamic", "bmca"]: ptp_config["role"] = "master" ptp_config.pop("profile", None) diff --git a/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py b/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py index 74293364638..4daf1196b12 100644 --- a/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py +++ b/python-avd/pyavd/_eos_designs/structured_config/core_interfaces_and_l3_edge/utils.py @@ -211,6 +211,31 @@ def _get_common_interface_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge, if p2p_link.ip: interface_cfg["ip_address"] = p2p_link.ip[index] + if p2p_link.ptp.enabled: + ptp_config = {} + + if self.shared_utils.ptp_enabled: + # Apply PTP profile config from node settings when profile is not defined on p2p_link + if not p2p_link.ptp.profile: + ptp_config.update(self.shared_utils.ptp_profile._as_dict(include_default_values=True)) + + # Apply PTP profile defined for the p2p_link + elif p2p_link.ptp.profile not in self.inputs.ptp_profiles: + msg = f"PTP Profile '{p2p_link.ptp.profile}' referenced under {self.data_model}.p2p_links does not exist in `ptp_profiles`." + raise AristaAvdInvalidInputsError(msg) + + else: + ptp_config.update(self.inputs.ptp_profiles[p2p_link.ptp.profile]._as_dict(include_default_values=True)) + + node_index = p2p_link.nodes._as_list().index(self.shared_utils.hostname) # TODO: Implement .index() method on AvdList and AvdIndexedList class. + if len(p2p_link.ptp.roles) > node_index and p2p_link.ptp.roles[node_index] == "master": + ptp_config["role"] = "master" + + ptp_config["enable"] = True + ptp_config.pop("profile", None) + + interface_cfg["ptp"] = ptp_config + if p2p_link.include_in_underlay_protocol: if p2p_link.underlay_multicast and self.shared_utils.underlay_multicast: interface_cfg["pim"] = {"ipv4": {"sparse_mode": True}} @@ -271,22 +296,7 @@ def _get_ethernet_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge, p2p_link Covers config that is only applicable to ethernet interfaces. This config will only be used on both main interfaces and port-channel members. """ - ethernet_cfg = {"speed": p2p_link.speed} - - if not p2p_link.ptp.enabled: - return ethernet_cfg - - ptp_config = {} - - # Apply PTP profile config - if self.shared_utils.ptp_enabled: - ptp_config.update(self.shared_utils.ptp_profile._as_dict(include_default_values=True)) - - ptp_config["enable"] = True - ptp_config.pop("profile", None) - ethernet_cfg["ptp"] = ptp_config - - return ethernet_cfg + return {"speed": p2p_link.speed} def _get_port_channel_member_cfg(self: AvdStructuredConfigCoreInterfacesAndL3Edge, p2p_link: T_P2pLinksItem, p2p_link_data: dict, member: dict) -> dict: """