Skip to content

Porting Guide for Ansible AVD 6.x.x

Major releases of AVD can contain breaking changes. This porting guide addresses how to update your inventory and playbooks to be compatible with new default behaviors and changed data models when upgrading from AVD 5.x versions.

Note

To upgrade from AVD version 4.x, first upgrade to AVD 5.7 using the Porting Guide for Ansible AVD 5.x.x and then upgrade to 6.x with this guide.

Users of eos_designs need to consider the changes in eos_cli_config_gen when using structured configuration.

Common changes

// TODO: potentially remove if empty

Removal of Ansible tags from AVD roles

// TODO: potentially remove if empty

Removal of Ansible components

// TODO: complete table

The following Ansible components have been removed from the arista.avd Ansible collection in version 6.0.0.

Component type Name Replacement
Filter arista.avd.xxx
Action plugin/Module arista.avd.xxx
Role arista.avd.dhcp_provisioner The role is not compatible with modern DHCP servers and should not be used for production. The arista.avd.dhcp_provisioner role is released as open source, so it can be copied and reused according to the license and copyright.

Changes to role arista.avd.eos_designs

Removal of deprecated eos_designs data models

The following data model keys have been removed from eos_designs in AVD 6.0.0.

Removed key New key
aaa_settings.accounting.exec.console.group aaa_settings.accounting.exec.console.methods[].group
aaa_settings.accounting.exec.console.logging aaa_settings.accounting.exec.console.methods[].method
aaa_settings.accounting.exec.default.group aaa_settings.accounting.exec.default.methods[].group
aaa_settings.accounting.exec.default.logging aaa_settings.accounting.exec.default.methods[].method
aaa_settings.accounting.system.default.group aaa_settings.accounting.system.default.methods[].group
aaa_settings.accounting.dot1x.default.group aaa_settings.accounting.dot1x.default.methods[].group
aaa_settings.accounting.commands[].console[].group aaa_settings.accounting.commands[].console[].methods[].group
aaa_settings.accounting.commands[].console[].logging aaa_settings.accounting.commands[].console[].methods[].method
aaa_settings.accounting.commands[].default[].group aaa_settings.accounting.commands[].default[].methods[].group
aaa_settings.accounting.commands[].default[].logging aaa_settings.accounting.commands[].default[].methods[].method
avd_6_behaviors -
core_interfaces.p2p_links[].underlay_multicast core_interfaces.p2p_links.multicast_pim_sm
core_interfaces.p2p_links_profiles[].underlay_multicast core_interfaces.p2p_links_profiles.multicast_pim_sm
design -
flow_tracking_settings.trackers.exporters.collector flow_tracking_settings.trackers.exporters.collectors
l3_edge.p2p_links[].underlay_multicast l3_edge.p2p_links.multicast_pim_sm
l3_edge.p2p_links_profiles[].underlay_multicast l3_edge.p2p_links_profiles.multicast_pim_sm
name_servers dns_settings.servers
<network_services_key>[].vrfs[].ipv6_static_routes[].destination_address_prefix <network_services_key>[].vrfs[].ipv6_static_routes[].prefix
<network_services_key>[].vrfs[].ipv6_static_routes[].gateway <network_services_key>[].vrfs[].ipv6_static_routes[].next_hop
<network_services_key>[].vrfs[].static_routes[].destination_address_prefix <network_services_key>[].vrfs[].static_routes[].prefix
<network_services_key>[].vrfs[].static_routes[].gateway <network_services_key>[].vrfs[].static_routes[].next_hop
node_type_keys[].interface_descriptions.overlay_loopback_interface node_type_keys[].interface_descriptions.router_id_loopback_interface
overlay_loopback_description router_id_loopback_description
snmp_settings.enable_inband_mgmt_vrf snmp_settings.vrfs[name="use_inband_mgmt_vrf"].enabled
snmp_settings.enable_mgmt_interface_vrf snmp_settings.vrfs[name="use_mgmt_interface_vrf"].enabled
snmp_settings.hosts[].use_inband_mgmt_vrf snmp_settings.hosts[vrf=use_inband_mgmt_vrf]
snmp_settings.hosts[].use_mgmt_interface_vrf snmp_settings.hosts[vrf=use_mgmt_interface_vrf]
snmp_settings.ipv4_acls snmp_settings.vrfs[].ipv4_acl
snmp_settings.ipv6_acls snmp_settings.vrfs[].ipv6_acl
source_interfaces.domain_lookup dns_settings
source_interfaces.radius aaa_settings.radius.vrfs[].source_interface or aaa_settings.radius.servers[].vrf: use_mgmt_interface_vrf or aaa_settings.radius.servers[].vrf: use_inband_mgmt_vrf
source_interfaces.snmp snmp_settings.vrfs[].source_interface or snmp_settings.hosts[].vrf: use_mgmt_interface_vrf or snmp_settings.hosts[].vrf: use_inband_mgmt_vrf or avd_6_behaviors.snmp_settings_vrfs
source_interfaces.tacacs aaa_settings.tacacs.vrfs[].source_interface or aaa_settings.tacacs.servers[].vrf: use_mgmt_interface_vrf or aaa_settings.tacacs.servers[].vrf: use_inband_mgmt_vrf
underlay_mutlticast underlay_mutlticast_pim_sm or <node_type_key>.defaults.underlay_multicast.pim_sm.enabled or <node_type_key>.node_groups[].underlay_multicast.pim_sm.enabled or <node_type_key>.node_groups[].nodes[].underlay_multicast.pim_sm.enabled or <node_type_key>.nodes[].underlay_multicast.pim_sm.enabled
underlay_ospf_authentication.message_digest_keys[].key underlay_ospf_authentication.message_digest_keys[].cleartext_key

OSPF Graceful Restart is now enable by default in the underlay

In AVD 5.x, the default value of underlay_ospf_graceful_restart was false.

Starting with AVD 6.0.0, the default value of underlay_ospf_graceful_restart has been changed to true.

To retain the previous behavior, the following change is required:

+ underlay_ospf_graceful_restart: false

In AVD 5.X.X, enabling PIM-SM on a core_interface or l3_edge link required all of the following settings:

  • underlay_multicast: true at the global level
  • underlay_multicast: true and include_in_underlay_protocol: true at the link or profile level

As of AVD 6.0.0, the global underlay_mutlicast is replaced with node setting underlay_multicast.pim_sm.enabled or global underlay_mutlicast_pim_sm. Additionally, the underlay_multicast key has been replaced by multicast_pim_sm for both core_interfaces.p2p_links[] and l3_edge.p2p_links[].

The breaking change in default behavior is for l3_edge and core_interfaces P2P links. PIM-SM is now automatically configured on links when include_in_underlay_protocol: true, provided that PIM-SM is already enabled globally (either through node settings or the global key). To retain the previous behavior, the following change is required:

- underlay_multicast: true
# # The next line enables globally
+ underlay_mutlicast_pim_sm: true

 l3leafs:
   [...]
   nodes:
     - name: MULTICAST_LEAF
+      # Alternatively, PIM-SM can be enabled at the node setting level
+      underlay_multicast:
+        pim_sm:
+          enabled: true

 # The same applies for l3_edge
 core_interfaces:
   p2p_links:
     - nodes: [MULTICAST_LEAF, MULTICAST_PEER]
       [...]
       include_in_underlay_protocol: true
+      # previously `underlay_multicast` had a default of `false`
+      multicast_pim_sm: false

Tip

To avoid editing every single p2p_links, it is possible to leverage p2p_links_profiles.

SNMP snmp-server IPv4 and IPv6 ACLs are now only configured when the VRF is enabled under snmp_settings.vrfs

In AVD 5.x, SNMP snmp-server IPv4 and IPv6 ACLs were rendered even when the VRF was not enabled under snmp_settings.vrfs.

Starting AVD 6.0.0, it is required to set enable: true under the VRF in order to render IPV4 and IPV6 ACLs or use custom_structured_config.

snmp_settings:
   vrfs:
    - name: Test_VRF
+     enable: true
      ipv4_acl: IPV4

Custom keys starting without _ in structured config are no longer supported

In AVD 5.x, custom keys starting with or without _ were accepted in structured config.

Starting AVD 6.0.0, only custom keys that begin with _ are accepted in structured config.

l3leaf:
  nodes:
    - name: host1
      id: 101
      bgp_as: 101
      structured_config:
-        custom_key: [ custom_value ]
+        _custom_key: [ custom_value ]

vrfs[].ospf.process_id and underlay_ospf_process_id must have different values for all VRFs other than default

In AVD 5.x, it was possible to configure the same value for vrfs[].ospf.process_id and underlay_ospf_process_id for any VRF which was leading to potentially overwritten configuration.

Starting AVD 6.0.0, setting the same value for vrfs[].ospf.process_id and underlay_ospf_process_id is not allowed for any VRF other than default vrf.

An error is raised if any VRF have the same ospf.process_id as underlay_ospf_process_id.

Removal of design.type

In AVD 5.x, the variable design.type was used to select between different variants of default values for node_type_keys.

As of AVD 6.x, the design.type variable has been removed. The default values of node_type_keys combine all the default node type from all designs.

# Remove the design.type setting
- design:
-   type: l2ls

Required keys for eos_designs data models

Starting AVD 6.0.0, the following data model keys have been made required in eos_designs.

Required keys
aaa_settings.accounting.exec.default.type
aaa_settings.accounting.system.default.type
aaa_settings.accounting.dot1x.default.type
aaa_settings.accounting.commands.console[].type
aaa_settings.accounting.commands.default[].type

Changes to role arista.avd.eos_cli_config_gen

Removal of deprecated eos_cli_config_gen data models

The following data model keys have been removed from eos_cli_config_gen in AVD 6.0.0.

Removed key New key
vxlan_interface.Vxlan1 vxlan_interface.vxlan1
aaa_accounting.exec.console.group aaa_accounting.exec.console.methods[].group
aaa_accounting.exec.console.logging aaa_accounting.exec.console.methods[].method
aaa_accounting.exec.default.group aaa_accounting.exec.default.methods[].group
aaa_accounting.exec.default.logging aaa_accounting.exec.default.methods[].method
aaa_accounting.system.default.group aaa_accounting.system.default.methods[].group
aaa_accounting.dot1x.default.group aaa_accounting.dot1x.default.methods[].group
aaa_accounting.commands[].console[].group aaa_accounting.commands[].console[].methods[].group
aaa_accounting.commands[].console[].logging aaa_accounting.commands[].console[].methods[].method
aaa_accounting.commands[].default[].group aaa_accounting.commands[].default[].methods[].group
aaa_accounting.commands[].default[].logging aaa_accounting.commands[].default[].methods[].method
community_lists ip_community_lists
ethernet_interfaces[].vlans ethernet_interfaces[].switchport.access_vlan or switchport.trunk.allowed_vlan
ethernet_interfaces[].native_vlan ethernet_interfaces[].switchport.trunk.native_vlan
ethernet_interfaces[].native_vlan_tag ethernet_interfaces[].switchport.trunk.native_vlan_tag
ethernet_interfaces[].mode ethernet_interfaces[].switchport.mode
ethernet_interfaces[].phone ethernet_interfaces[].switchport.phone
ethernet_interfaces[].trunk_groups ethernet_interfaces[].switchport.trunk.groups
ethernet_interfaces[].type -
ethernet_interfaces[].encapsulation_dot1q_vlan ethernet_interfaces[].encapsulation_dot1q.vlan
ethernet_interfaces[].encapsulation_vlan.client.dot1q ethernet_interfaces[].encapsulation_vlan.client.encapsulation
ethernet_interfaces[].encapsulation_vlan.client.unmatched ethernet_interfaces[].encapsulation_vlan.client.encapsulation
ethernet_interfaces[].encapsulation_vlan.network.dot1q ethernet_interfaces[].encapsulation_vlan.network.encapsulation
ethernet_interfaces[].encapsulation_vlan.network.client ethernet_interfaces[].encapsulation_vlan.network.encapsulation
ethernet_interfaces[].tcp_mss_ceiling.ipv4_segment_size ethernet_interfaces[].tcp_mss_ceiling.ipv4
ethernet_interfaces[].tcp_mss_ceiling.ipv6_segment_size ethernet_interfaces[].tcp_mss_ceiling.ipv6
ethernet_interfaces[].isis_authentication_mode ethernet_interfaces[].isis_authentication.both.mode or ethernet_interfaces[].isis_authentication.level_1.mode or ethernet_interfaces[].isis_authentication.level_2.mode
ethernet_interfaces[].isis_authentication_key ethernet_interfaces[].isis_authentication.both.key or ethernet_interfaces[].isis_authentication.level_1.key or ethernet_interfaces[].isis_authentication.level_2.key
ethernet_interfaces[].trunk_private_vlan_secondary ethernet_interfaces[].switchport.trunk.private_vlan_secondary
ethernet_interfaces[].pvlan_mapping ethernet_interfaces[].switchport.pvlan_mapping
ethernet_interfaces[].vlan_translations ethernet_interfaces[].switchport.vlan_translations
ethernet_interfaces[].vrrp_ids[].ipv6.address ethernet_interfaces[].vrrp_ids[].ipv6.addresses
ethernet_interfaces[].traffic_engineering.srlg ethernet_interfaces[].traffic_engineering.srlgs
flow_tracking.trackers[].exporters[].collector flow_tracking.trackers[].exporters[].collectors
generate_default_config -
generate_device_documentation eos_cli_config_gen_documentation.enable
ip_name_server_groups[].ip_domain_list ip_name_server_groups[].ip_domain_lists
ipv6_static_routes[].destination_address_prefix ipv6_static_routes[].prefix
ipv6_static_routes[].gateway ipv6_static_routes[].next_hop
local_users aaa_settings.local_users
management_api_models.providers management_api_models.provider
management_ssh.access_groups management_ssh.ip_access_group_in or management_ssh.vrfs.ip_access_group_in
management_ssh.ipv6_access_groups management_ssh.ipv6_access_group_in or management_ssh.vrfs.ipv6_access_group_in
port_channel_interfaces[].encapsulation_dot1q_vlan port_channel_interfaces[].encapsulation_dot1q.vlan
port_channel_interfaces[].encapsulation_vlan.client.dot1q port_channel_interfaces[].encapsulation_vlan.client.encapsulation
port_channel_interfaces[].encapsulation_vlan.client.unmatched port_channel_interfaces[].encapsulation_vlan.client.encapsulation
port_channel_interfaces[].encapsulation_vlan.network.client port_channel_interfaces[].encapsulation_vlan.network.encapsulation
port_channel_interfaces[].encapsulation_vlan.network.dot1q port_channel_interfaces[].encapsulation_vlan.network.encapsulation
port_channel_interfaces[].isis_authentication_key port_channel_interfaces[].isis_authentication.both.key or port_channel_interfaces[].isis_authentication.level_1.key or port_channel_interfaces[].isis_authentication.level_2.key
port_channel_interfaces[].isis_authentication_mode port_channel_interfaces[].isis_authentication.both.mode or port_channel_interfaces[].isis_authentication.level_1.mode or port_channel_interfaces[].isis_authentication.level_2.mode
port_channel_interfaces[].mode port_channel_interfaces[].switchport.mode
port_channel_interfaces[].native_vlan port_channel_interfaces[].switchport.trunk.native_vlan
port_channel_interfaces[].native_vlan_tag port_channel_interfaces[].switchport.trunk.native_vlan_tag
port_channel_interfaces[].phone port_channel_interfaces[].switchport.phone
port_channel_interfaces[].pvlan_mapping port_channel_interfaces[].switchport.pvlan_mapping
port_channel_interfaces[].traffic_engineering.srlg port_channel_interfaces[].traffic_engineering.srlgs
port_channel_interfaces[].trunk_groups port_channel_interfaces[].switchport.trunk.groups
port_channel_interfaces[].trunk_private_vlan_secondary port_channel_interfaces[].switchport.trunk.private_vlan_secondary
port_channel_interfaces[].type -
port_channel_interfaces[].vlans port_channel_interfaces[].switchport.access_vlan or switchport.trunk.allowed_vlan
port_channel_interfaces[].vlan_translations port_channel_interfaces[].switchport.vlan_translations
router_bgp.address_family_evpn.bgp_additional_paths router_bgp.address_family_evpn.bgp.additional_paths
router_bgp.address_family_ipv4.redistribute_routes router_bgp.address_family_ipv4.redistribute
router_bgp.address_family_ipv4_multicast.redistribute_routes router_bgp.address_family_ipv4_multicast.redistribute
router_bgp.address_family_ipv6.redistribute_routes router_bgp.address_family_ipv6.redistribute
router_bgp.address_family_ipv6_multicast.redistribute_routes router_bgp.address_family_ipv6_multicast.redistribute
router_bgp.redistribute_routes router_bgp.redistribute
router_bgp.vrfs[].address_family_ipv4.redistribute_routes router_bgp.vrfs[].address_family_ipv4.redistribute
router_bgp.vrfs[].address_family_ipv6.redistribute_routes router_bgp.vrfs[].address_family_ipv6.redistribute
router_bgp.vrfs[].address_family_ipv4_multicast.redistribute_routes router_bgp.vrfs[].address_family_ipv4_multicast.redistribute
router_bgp.vrfs[].address_family_ipv6_multicast.redistribute_routes router_bgp.vrfs[].address_family_ipv6_multicast.redistribute
router_path_selection.tcp_mss_ceiling.ipv4_segment_size router_path_selection.tcp_mss_ceiling.ipv4
static_routes[].destination_address_prefix static_routes[].prefix
static_routes[].gateway static_routes[].next_hop
vlan_interfaces[].vrrp_ids[].ipv6.address vlan_interfaces[].vrrp_ids[].ipv6.addresses
ntp.servers[].vrf ntp.vrf

ip_name_servers[].vrf is required to generate name servers configuration

In AVD 5.x, the key ip_name_servers[].vrf was not required. If this key was not set, the name server configuration was generated without an explicitly specified VRF, which the EOS CLI treats as the default VRF. This key must be set to default for default VRF in AVD 6.0.0.

 ip_name_servers:
  -  ip_address: 10.1.1.1
+    vrf: default

Traffic policy named counters must now be explicitly defined under traffic_policies.policies[].counters

In AVD 5.0.0, named counters were generated automatically based on the traffic_policies.policies[].matches[].actions[].count key.

Starting AVD 6.0.0, this automatic generation has been removed. All named counters must be defined under the new traffic_policies.policies[].counters key.

  traffic_policies:
    policies:
      - name: BLUE-C1-POLICY
+       counters:
+         - DEMO-TRAFFIC
        matches:
          - name: BLUE-C2-POLICY-01
            actions:
              count: DEMO-TRAFFIC

errdisable.recovery.causes is now a list of dictionaries

In AVD 5.x, errdisable.recovery.causes was modeled as a list of strings.

As of AVD 6.0.0, this data model has been updated to a list of dictionaries to allow configuring a recovery interval for each cause.

The diff below shows an example on how to update your inputs to match the new data model:

errdisable:
  recovery:
-   causes: [bpduguard, tapagg]
+   causes:
+     - name: bpduguard
+     - name: tapagg

ntp.servers[].vrf moved to ntp.vrf since all NTP servers must use the same VRF

In AVD 5.x, the VRF for NTP servers was defined individually under ntp.servers[].vrf.

Starting with AVD 6.0.0, because in EOS all NTP servers must be in the same VRF, ntp.servers[].vrf has been replaced by ntp.vrf to avoid misconfigurations.

ntp:
+ vrf: VRF1
  servers:
    - name: 2.2.2.55
-     vrf: VRF1

Required keys for eos_cli_config_gen data models

Starting AVD 6.0.0, the following data model keys have been made required in eos_cli_config_gen.

Required keys
aaa_accounting.exec.default.type
aaa_accounting.system.default.type
aaa_accounting.dot1x.default.type
aaa_accounting.commands.console[].type
aaa_accounting.commands.default[].type

Changes to role arista.avd.anta_runner

// TODO: potentially remove if empty