# Copyright (c) 2024 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
$id: eos_designs
type: dict
allow_other_keys: true
keys:
  application_classification:
    type: dict
    $ref: eos_cli_config_gen#/keys/application_traffic_recognition
  avd_data_conversion_mode:
    documentation_options:
      table: role-input-validation
    type: str
    valid_values:
    - disabled
    - error
    - warning
    - info
    - debug
    - quiet
    default: debug
    description: 'Conversion Mode for AVD input data conversion.

      Input data conversion will perform type conversion of input variables as defined
      in the schema.

      The type conversion is intended to help the user to identify minor issues with
      the input data, while still allowing the data to be validated.

      During conversion, messages will generated with information about the host(s)
      and key(s) which required conversion.

      "disabled" means that conversion will not run - avoid this since conversion
      is also handling data deprecation and upgrade.

      "error" will produce error messages and fail the task.

      "warning" will produce warning messages.

      "info" will produce regular log messages.

      "debug" will produce hidden debug messages viewable with -v.

      "quiet" will not produce any messages

      '
  avd_data_validation_mode:
    documentation_options:
      table: role-input-validation
    type: str
    valid_values:
    - disabled
    - error
    - warning
    - info
    - debug
    default: warning
    description: 'Validation Mode for AVD input data validation.

      Input data validation will validate the input variables according to the schema.

      During validation, messages will generated with information about the host(s)
      and key(s) which failed validation.

      "disabled" means that validation will not run.

      "error" will produce error messages and fail the task.

      "warning" will produce warning messages.

      "info" will produce regular log messages.

      "debug" will produce hidden debug messages viewable with -v.

      '
  bfd_multihop:
    documentation_options:
      table: bfd-settings
    type: dict
    description: BFD Multihop tuning.
    keys:
      interval:
        type: int
        convert_types:
        - str
        min: 50
        max: 60000
        required: true
      min_rx:
        type: int
        convert_types:
        - str
        min: 50
        max: 60000
        required: true
      multiplier:
        type: int
        convert_types:
        - str
        min: 3
        max: 50
        required: true
    default:
      interval: 300
      min_rx: 300
      multiplier: 3
  bgp_as:
    documentation_options:
      table: bgp-settings
    description: 'BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>"
      to use to configure overlay when "overlay_routing_protocol" == ibgp.

      For asdot notation in YAML inputs, the value must be put in quotes, to prevent
      it from being interpreted as a float number.'
    type: str
    convert_types:
    - int
  bgp_default_ipv4_unicast:
    documentation_options:
      table: bgp-settings
    description: 'Default activation of IPv4 unicast address-family on all IPv4 neighbors.

      It is best practice to disable activation.

      '
    type: bool
    default: false
  bgp_distance:
    documentation_options:
      table: bgp-settings
    type: dict
    $ref: eos_cli_config_gen#/keys/router_bgp/keys/distance
  bgp_ecmp:
    documentation_options:
      table: bgp-settings
    description: 'Maximum ECMP for BGP multi-path.

      The default value is 4 except for WAN Routers where the default value is unset
      (falls back to EOS default).'
    type: int
    convert_types:
    - str
  bgp_graceful_restart:
    documentation_options:
      table: bgp-settings
    description: 'BGP graceful-restart allows a BGP speaker with separate control
      plane and data plane processing to continue forwarding traffic during a BGP
      restart.

      Its neighbors (receiving speakers) may retain routing information from the restarting
      speaker while a BGP session with it is being re-established, reducing route
      flapping.

      '
    type: dict
    keys:
      enabled:
        type: bool
        default: false
        required: true
        description: Enable or disable graceful-restart for all BGP peers.
      restart_time:
        type: int
        convert_types:
        - str
        min: 1
        max: 3600
        default: 300
        description: Restart time in seconds.
  bgp_maximum_paths:
    documentation_options:
      table: bgp-settings
    description: 'Maximum Paths for BGP multi-path.

      The default value is 4 except for WAN Routers where the default value is 16.'
    type: int
    convert_types:
    - str
    min: 1
    max: 512
  bgp_mesh_pes:
    documentation_options:
      table: overlay-settings
    type: bool
    default: false
    description: 'Configure an iBGP full mesh between PEs, either because there is
      no RR used or other reasons.

      Only supported in combination with MPLS overlay.

      '
  bgp_peer_groups:
    documentation_options:
      table: bgp-settings
    description: 'Leverage an Arista EOS switch to generate the encrypted password
      using the correct peer group name.

      Note that the name of the peer groups use ''-'' instead of ''_'' in EOS configuration.

      '
    type: dict
    keys:
      ipv4_underlay_peers:
        type: dict
        keys:
          name:
            type: str
            default: IPv4-UNDERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: false
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      mlag_ipv4_underlay_peer:
        type: dict
        keys:
          name:
            type: str
            default: MLAG-IPv4-UNDERLAY-PEER
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: false
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      evpn_overlay_peers:
        type: dict
        keys:
          name:
            type: str
            default: EVPN-OVERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      evpn_overlay_core:
        type: dict
        keys:
          name:
            type: str
            default: EVPN-OVERLAY-CORE
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      mpls_overlay_peers:
        type: dict
        keys:
          name:
            type: str
            default: MPLS-OVERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      rr_overlay_peers:
        type: dict
        keys:
          name:
            type: str
            default: RR-OVERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      ipvpn_gateway_peers:
        type: dict
        keys:
          name:
            type: str
            default: IPVPN-GATEWAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      wan_overlay_peers:
        type: dict
        keys:
          name:
            type: str
            default: WAN-OVERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          bfd_timers:
            type: dict
            description: 'Specify the BFD timers to override the default values.

              It is recommended to keep BFD total timeout longer than the DPS timeout.

              The Default BFD timeout is 10 x 1 seconds and the default DPS timeout
              is 5 x 1 seconds.'
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/keys/bfd_timers
            keys:
              interval:
                type: int
                default: 1000
              min_rx:
                type: int
                default: 1000
              multiplier:
                type: int
                default: 10
          listen_range_prefixes:
            type: list
            description: 'Only used for nodes where `wan_role` is `server` like AutoVPN
              RRs and Pathfinders.

              For clients, AVD will raise an error if the Loopback0 IP is not in any
              listen range.'
            items:
              type: str
              description: The prefixes to use in listen_range.
          ttl_maximum_hops:
            type: int
            convert_types:
            - str
            default: 1
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      wan_rr_overlay_peers:
        type: dict
        description: Configuration options for the peer-group created to peer between
          AutoVPN RRs or CV Pathfinders.
        keys:
          name:
            type: str
            default: WAN-RR-OVERLAY-PEERS
            description: Name of peer group.
          password:
            type: str
            description: Type 7 encrypted password.
          bfd:
            type: bool
            default: true
          bfd_timers:
            type: dict
            description: 'Specify the BFD timers to override the default values.

              It is recommended to keep BFD total timeout longer than the DPS timeout.

              The Default BFD timeout is 10 x 1 seconds and the default DPS timeout
              is 5 x 1 seconds.'
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/keys/bfd_timers
            keys:
              interval:
                type: int
                default: 1000
              min_rx:
                type: int
                default: 1000
              multiplier:
                type: int
                default: 10
          ttl_maximum_hops:
            type: int
            convert_types:
            - str
            default: 1
          structured_config:
            type: dict
            description: Custom structured config added under router_bgp.peer_groups.[name=<name>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items/
      IPv4_UNDERLAY_PEERS:
        type: dict
        deprecation:
          warning: true
          new_key: bgp_peer_groups.ipv4_underlay_peers
          removed: true
          remove_in_version: 4.0.0
      MLAG_IPv4_UNDERLAY_PEER:
        type: dict
        deprecation:
          warning: true
          new_key: bgp_peer_groups.mlag_ipv4_underlay_peer
          removed: true
          remove_in_version: 4.0.0
      EVPN_OVERLAY_PEERS:
        type: dict
        deprecation:
          warning: true
          new_key: bgp_peer_groups.evpn_overlay_peers
          removed: true
          remove_in_version: 4.0.0
  bgp_update_wait_install:
    documentation_options:
      table: bgp-settings
    type: bool
    $ref: eos_cli_config_gen#/keys/router_bgp/keys/updates/keys/wait_install
  bgp_update_wait_for_convergence:
    documentation_options:
      table: bgp-settings
    type: bool
    $ref: eos_cli_config_gen#/keys/router_bgp/keys/updates/keys/wait_for_convergence
  connected_endpoints_keys:
    documentation_options:
      table: connected-endpoints-keys
    description: 'Endpoints connecting to the fabric can be grouped by using separate
      keys.

      The keys can be customized to provide a better better organization or grouping
      of your data.

      `connected_endpoints_keys` should be defined in the top level group_vars for
      the fabric.

      The default values will be overridden if defining this key, so it is recommended
      to copy the defaults and modify them.

      '
    type: list
    primary_key: key
    convert_types:
    - dict
    items:
      type: dict
      keys:
        key:
          type: str
        type:
          type: str
          description: Type used for documentation.
        description:
          type: str
          description: Description used for documentation.
    default:
    - key: servers
      type: server
      description: Server
    - key: firewalls
      type: firewall
      description: Firewall
    - key: routers
      type: router
      description: Router
    - key: load_balancers
      type: load_balancer
      description: Load Balancer
    - key: storage_arrays
      type: storage_array
      description: Storage Array
    - key: cpes
      type: cpe
      description: CPE
    - key: workstations
      type: workstation
      description: Workstation
    - key: access_points
      type: access_point
      description: Access Point
    - key: phones
      type: phone
      description: Phone
    - key: printers
      type: printer
      description: Printer
    - key: cameras
      type: camera
      description: Camera
    - key: generic_devices
      type: generic_device
      description: Generic Device
  core_interfaces:
    type: dict
    $ref: eos_designs#/$defs/l3_edge
  custom_structured_configuration_list_merge:
    documentation_options:
      table: custom-structured-configuration
    type: str
    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"
    valid_values:
    - replace
    - append
    - keep
    - prepend
    - append_rp
    - prepend_rp
    default: append_rp
  custom_structured_configuration_prefix:
    documentation_options:
      table: custom-structured-configuration
    type: list
    convert_types:
    - str
    items:
      type: str
    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_
  cv_pathfinder_regions:
    documentation_options:
      table: wan-cv-pathfinder-regions
    description: Define the CV Pathfinder hierarchy.
    type: list
    primary_key: name
    items:
      type: dict
      $ref: eos_cli_config_gen#/keys/router_adaptive_virtual_topology/keys/region
      keys:
        name:
          type: str
          description: The region name.
        description:
          type: str
        id:
          type: int
          description: The region ID must be unique for the whole WAN deployment.
        sites:
          type: list
          description: All sites are placed in a default zone "<region_name>-ZONE"
            with ID 1.
          primary_key: name
          items:
            type: dict
            $ref: eos_cli_config_gen#/keys/router_adaptive_virtual_topology/keys/site
            keys:
              name:
                type: str
                description: The site name.
              description:
                type: str
              id:
                type: int
                description: 'The site ID must be unique within a zone.

                  Given that all the sites are placed in a zone named after the region,
                  the site ID must be unique within a region.'
              location:
                type: str
                description: Location as a sring is resolved on Cloudvision.
              site_contact:
                type: str
              site_after_hours_contact:
                type: str
  cv_tags_topology_type:
    documentation_options:
      table: cloudvision-tags
    description: 'PREVIEW: This key is currently not supported

      Device type that CloudVision should use when generating the Topology. Defaults
      to the setting under node_type_keys.'
    type: str
    valid_values:
    - leaf
    - spine
    - core
    - edge
  cv_topology:
    documentation_options:
      table: cv-topology
    type: list
    description: 'Generate AVD configurations directly from the given CloudVision
      topology.

      Activate this feature by setting `use_cv_topology` to `true`.

      Requires `default_interfaces` to be set for the relevant platforms and node
      types to detect the proper interface roles automatically.

      Neighbor hostnames must match the inventory hostnames of the AVD inventory to
      be taken into consideration.'
    primary_key: hostname
    items:
      type: dict
      keys:
        hostname:
          type: str
        platform:
          type: str
          required: true
        interfaces:
          type: list
          required: true
          primary_key: name
          items:
            type: dict
            keys:
              name:
                type: str
              neighbor:
                type: str
              neighbor_interface:
                type: str
  cvp_ingestauth_key:
    documentation_options:
      table: cloudvision-settings
    type: str
    description: 'On-premise CVP ingest auth key. If set, TerminAttr will be configured
      with key-based authentication for on-premise CVP.

      If not set, TerminAttr will be configured with certificate based authentication:

      - On-premise using token onboarding. Default token path is ''/tmp/token''.

      - CVaaS using token-secure onboarding. Default token path is ''/tmp/cv-onboarding-token''.

      Token must be copied to the device first.'
  cvp_instance_ip:
    documentation_options:
      table: cloudvision-settings
    deprecation:
      warning: true
      new_key: cvp_instance_ips
      remove_in_version: 5.0.0
    type: str
    description: 'IPv4 address or DNS name for CloudVision.

      This variable only supports an on-premise single-node cluster or the DNS name
      of a CloudVision as a Service instance.

      '
  cvp_instance_ips:
    documentation_options:
      table: cloudvision-settings
    type: list
    description: 'List of IPv4 addresses or DNS names for CloudVision.

      For on-premise CloudVision enter all the nodes of the cluster.

      For CloudVision as a Service enter the DNS name of the instance.

      `eos_designs` only supports one CloudVision cluster.

      '
    items:
      type: str
      description: IPv4 address or DNS name for CloudVision
  cvp_token_file:
    documentation_options:
      table: cloudvision-settings
    type: str
    description: 'cvp_token_file is the path to the token file on the switch.

      If not set the default locations for on-premise or CVaaS will be used.

      See cvp_ingestauth_key for details.'
  dc_name:
    documentation_options:
      table: fabric-topology
    description: 'POD Name is used in:

      - Fabric Documentation (Optional, falls back to fabric_name)

      - SNMP Location: `snmp_settings.location` (Optional)

      - HER Overlay DC scoped flood lists: `overlay_her_flood_list_scope: dc` (Required)

      '
    type: str
  default_igmp_snooping_enabled:
    documentation_options:
      table: system-settings
    description: 'When set to false, disables IGMP snooping at fabric level and overrides
      per vlan settings.

      '
    type: bool
    default: true
  default_interface_mtu:
    documentation_options:
      table: system-settings
    type: int
    convert_types:
    - str
    description: 'Default interface MTU configured on EOS under "interface defaults".

      Can be overriden per platform under platform settings.

      '
    min: 68
    max: 65535
  default_interfaces:
    documentation_options:
      table: default-interfaces
    type: list
    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).

      '
    items:
      type: dict
      keys:
        types:
          type: list
          required: true
          description: List of node type keys.
          items:
            type: str
        platforms:
          type: list
          required: true
          description: 'List of platform families.

            This is defined as a Python regular expression that matches the full platform
            type.

            '
          items:
            type: str
            description: Arista platform family regular expression.
        uplink_interfaces:
          type: list
          description: List of uplink interfaces or uplink interface ranges.
          items:
            type: str
            description: Interface range or interface.
        mlag_interfaces:
          type: list
          description: List of MLAG interfaces or MLAG interface ranges.
          items:
            type: str
            description: Interface range or interface.
        downlink_interfaces:
          type: list
          description: List of downlink interfaces or downlink interface ranges.
          items:
            type: str
            description: Interface range or interface.
  default_mgmt_method:
    documentation_options:
      table: management-interface-settings
    type: str
    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"
    valid_values:
    - oob
    - inband
    - none
    default: oob
  default_node_types:
    type: list
    primary_key: node_type
    description: Uses hostname matches against a regular expression to determine the
      node type.
    items:
      type: dict
      keys:
        node_type:
          type: str
          description: Resulting node type when regex matches.
        match_hostnames:
          type: list
          required: true
          description: Regular expressions to match against hostnames.
          items:
            type: str
            required: true
            description: Regex needs to match full hostname (i.e. is bounded by ^
              and $ elements).
  design:
    documentation_options:
      table: design
    type: dict
    keys:
      type:
        type: str
        description: 'By setting the design.type variable, the default node-types
          and templates described in these documents will be used.

          '
        valid_values:
        - l3ls-evpn
        - mpls
        - l2ls
        default: l3ls-evpn
  enable_trunk_groups:
    documentation_options:
      table: fabric-settings
    type: bool
    description: 'Enable Trunk Group support across eos_designs.

      Warning: Because of the nature of the EOS Trunk Group feature, enabling this
      is "all or nothing".

      *All* vlans and *all* trunks towards connected endpoints must be using trunk
      groups as well.

      If trunk groups are not assigned to a trunk, no vlans will be enabled on that
      trunk.

      See "Details on enable_trunk_groups" below before enabling this feature.

      '
    default: false
  eos_designs_custom_templates:
    documentation_options:
      table: role-custom-templates
    type: list
    items:
      type: dict
      keys:
        template:
          type: str
          description: Template file.
          required: true
        options:
          description: Template options.
          type: dict
          keys:
            list_merge:
              type: str
              description: Merge strategy for lists.
              default: append_rp
            strip_empty_keys:
              type: bool
              description: Filter out keys from the generated output if value is null/none/undefined.
              default: true
  eos_designs_documentation:
    documentation_options:
      table: role-documentation-output-settings
    description: 'Control fabric documentation generation.

      '
    type: dict
    keys:
      connected_endpoints:
        description: 'Generate fabric-wide documentation for connected endpoints.

          '
        type: bool
        default: false
  event_handlers:
    $ref: eos_cli_config_gen#/keys/event_handlers
    documentation_options:
      table: management-settings
    type: list
  evpn_ebgp_gateway_inter_domain:
    documentation_options:
      table: evpn-settings
    type: bool
  evpn_ebgp_gateway_multihop:
    documentation_options:
      table: evpn-settings
    description: 'Default of 15, considering a large value to avoid BGP reachability
      issues in very complex DCI networks.

      Adapt the value for your specific topology.

      '
    type: int
    convert_types:
    - str
    default: 15
  evpn_ebgp_multihop:
    documentation_options:
      table: evpn-settings
    description: 'Default of 3, the recommended value for a 3 stage spine and leaf
      topology.

      Set to a higher value to allow for very large and complex topologies.

      '
    type: int
    convert_types:
    - str
    default: 3
  evpn_hostflap_detection:
    documentation_options:
      table: evpn-settings
    type: dict
    keys:
      enabled:
        description: If set to false it will disable EVPN host-flap detection.
        type: bool
        default: true
      threshold:
        description: Minimum number of MAC moves that indicate a MAC duplication issue.
        type: int
        convert_types:
        - str
        default: 5
      window:
        description: Time (in seconds) to detect a MAC duplication issue.
        type: int
        convert_types:
        - str
        default: 180
      expiry_timeout:
        description: Time (in seconds) to purge a MAC duplication issue.
        type: int
        convert_types:
        - str
  evpn_import_pruning:
    documentation_options:
      table: evpn-settings
    description: 'Enable VPN import pruning (Min. EOS 4.24.2F).

      The Route Target extended communities carried by incoming VPN paths will be
      examined.

      If none of those Route Targets have been configured for import, the path will
      be immediately discarded.

      '
    type: bool
    default: false
  evpn_multicast:
    documentation_options:
      table: evpn-settings
    type: bool
    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
  evpn_overlay_bgp_rtc:
    documentation_options:
      table: evpn-settings
    description: 'Enable Route Target Membership Constraint Address Family on EVPN
      overlay BGP peerings (Min. EOS 4.25.1F).

      Requires use eBGP as overlay protocol.

      '
    type: bool
    default: false
  evpn_prevent_readvertise_to_server:
    documentation_options:
      table: evpn-settings
    description: 'Configure route-map on eBGP sessions towards route-servers, where
      prefixes with the peer''s ASN in the AS Path are filtered away.

      This is very useful in large-scale networks, where convergence will be quicker
      by not returning all updates received

      from Route-server-1 to Router-server-2 just for Route-server-2 to throw them
      away because of AS Path loop detection.

      '
    type: bool
    default: false
  evpn_rd_type:
    documentation_options:
      table: evpn-settings
    type: dict
    deprecation:
      warning: true
      new_key: overlay_rd_type
      removed: true
      remove_in_version: 4.0.0
  evpn_rt_type:
    documentation_options:
      table: evpn-settings
    type: dict
    deprecation:
      warning: true
      new_key: overlay_rt_type
      removed: true
      remove_in_version: 4.0.0
  evpn_short_esi_prefix:
    documentation_options:
      table: evpn-settings
    description: Configure prefix for "short_esi" values.
    type: str
    default: '0000:0000:'
  evpn_vlan_aware_bundles:
    documentation_options:
      table: evpn-settings
    description: Enable vlan aware bundles for EVPN MAC-VRF.
    type: bool
    default: false
  evpn_vlan_bundles:
    documentation_options:
      table: evpn-vlan-bundles
    type: list
    primary_key: name
    items:
      type: dict
      keys:
        name:
          type: str
          convert_types:
          - int
          description: 'Specify an EVPN vlan-aware-bundle name.

            EVPN vlan-aware-bundles group L2 VLANs and define common settings.

            '
        id:
          type: int
          required: true
          convert_types:
          - str
          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.

            See "overlay_rd_type" and "overlay_rt_type" for details.

            '
        rt_override:
          type: str
          convert_types:
          - int
          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"
        rd_override:
          type: str
          convert_types:
          - int
          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"
        evpn_l2_multi_domain:
          type: bool
          description: 'Explicitly extend VLAN-Aware Bundle to remote EVPN domains.

            Overrides `<network_services_key>.[].evpn_l2_multi_domain`.

            '
        bgp:
          type: dict
          keys:
            raw_eos_cli:
              type: str
              description: 'EOS cli commands rendered on router_bgp.vlans-aware-bundle.

                '
  fabric_evpn_encapsulation:
    documentation_options:
      table: evpn-settings
    description: Should be set to mpls for evpn-mpls scenario.
    valid_values:
    - vxlan
    - mpls
    default: vxlan
    type: str
  fabric_ip_addressing:
    type: dict
    keys:
      mlag:
        type: dict
        keys:
          algorithm:
            type: str
            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."
            valid_values:
            - first_id
            - odd_id
            - same_subnet
          ipv4_prefix_length:
            type: int
            default: 31
            min: 1
            max: 31
            convert_types:
            - str
            description: IPv4 prefix length used for MLAG peer-vlan and L3 point-to-point
              SVIs over the MLAG peer-link.
      p2p_uplinks:
        type: dict
        keys:
          ipv4_prefix_length:
            type: int
            default: 31
            min: 1
            max: 31
            convert_types:
            - str
            description: IPv4 prefix length used for L3 point-to-point uplinks.
  fabric_name:
    documentation_options:
      table: fabric-topology
    description: Fabric Name, required to match Ansible Group name covering all devices
      in the Fabric, **must** be an inventory group name.
    type: str
    required: true
  fabric_sflow:
    documentation_options:
      table: management-sflow-settings
    type: dict
    description: 'Default enabling of sFlow for various interface types across the
      fabric.

      sFlow can also be enabled/disabled under each of the specific data models.

      For general sFlow settings see `sflow_settings`.'
    keys:
      uplinks:
        description: Enable sFlow on all fabric uplinks.
        type: bool
      downlinks:
        description: Enable sFlow on all fabric downlinks.
        type: bool
      endpoints:
        description: Enable sFlow on all endpoints ports.
        type: bool
      l3_edge:
        description: Enable sFlow on all p2p_links defined under l3_edge.
        type: bool
      core_interfaces:
        description: Enable sFlow on all p2p_links defined under core_interfaces.
        type: bool
      mlag_interfaces:
        description: Enable sFlow on all MLAG peer interfaces.
        type: bool
  flow_tracking_settings:
    description: 'PREVIEW: This key is currently not supported


      Define the flow tracking parameters for this topology.'
    type: dict
    keys:
      flow_tracker_name:
        type: str
        default: FLOW-TRACKER
        description: Flow Tracker Name.
      record_export:
        type: dict
        keys:
          on_inactive_timeout:
            description: Flow record inactive export timeout in milliseconds.
            type: int
            convert_types:
            - str
            min: 3000
            max: 900000
            default: 70000
          on_interval:
            type: int
            convert_types:
            - str
            min: 1000
            max: 36000000
            default: 300000
            description: Flow record export interval in milliseconds.
      exporter:
        type: dict
        keys:
          name:
            type: str
            default: CV-TELEMETRY
            description: Exporter Name.
          template_interval:
            description: Template interval in milliseconds.
            type: int
            convert_types:
            - str
            min: 5000
            max: 3600000
            default: 3600000
  generate_cv_tags:
    documentation_options:
      table: cloudvision-tags
    type: dict
    description: 'PREVIEW: This key is currently not supported

      Generate CloudVision Tags based on AVD data.'
    keys:
      topology_hints:
        type: bool
        default: false
        description: Enable the generation of CloudVision Topology Tags (hints).
      interface_tags:
        description: List of interface tags that should be generated.
        type: list
        primary_key: name
        items:
          type: dict
          description: Each tag can either have a static value or a dynamic value
            sourced from structured configuration.
          keys:
            name:
              description: Tag name to be assigned to generated tags.
              required: true
              type: str
            data_path:
              description: 'Structured config field/key path to be used to find the
                value for the tag. Dot notation is supported to reference values inside
                dictionaries.

                For Example: ''data_path: channel_group.id'' would set the tag with
                the value of the channel id of the interface. If there is no channel
                id, the tag is not created.

                `data_path` is ignored if `value` is set.'
              type: str
            value:
              description: Value to be assigned to the tag.
              type: str
      device_tags:
        description: List of device tags that should be generated.
        type: list
        items:
          type: dict
          description: Each tag can either have a static value or a dynamic value
            sourced from structured configuration.
          keys:
            name:
              description: Tag name to be assigned to generated tags.
              required: true
              type: str
            data_path:
              description: 'Structured config field/key path to be used to find the
                value for the tag. Dot notation is supported to reference values inside
                dictionaries.

                For Example: ''data_path: router_bfd.multihop.interval'' would set
                the tag with the value of the interval for multihop bfd. If this value
                is not specified in the structured config, the tag is not created.

                `data_path` is ignored if `value` is set.'
              type: str
            value:
              description: Value to be assigned to the tag.
              type: str
  hardware_counters:
    documentation_options:
      table: system-settings
    $ref: eos_cli_config_gen#/keys/hardware_counters
    type: dict
  internal_vlan_order:
    documentation_options:
      table: system-settings
    type: dict
    description: Internal vlan allocation order and range.
    keys:
      allocation:
        type: str
        valid_values:
        - ascending
        - descending
        required: true
      range:
        type: dict
        keys:
          beginning:
            type: int
            convert_types:
            - str
            description: First VLAN ID.
            min: 2
            max: 4094
            required: true
          ending:
            type: int
            convert_types:
            - str
            description: Last VLAN ID.
            min: 2
            max: 4094
            required: true
    default:
      allocation: ascending
      range:
        beginning: 1006
        ending: 1199
  ipv4_acls:
    type: list
    primary_key: name
    description: 'IPv4 extended access-lists supporting substitution on certain fields.

      These access-lists can be referenced under node settings `l3_interfaces`, and
      will only be configured on devices where they are in use.


      The substitution is useful when assigning the same access-list on multiple interfaces,

      but where certain fields require unique values like the "interface_ip" or "peer_ip".

      When using substitution, the interface name will be appended to the ACL name.'
    items:
      $ref: eos_cli_config_gen#/keys/ip_access_lists/items
      type: dict
      keys:
        name:
          type: str
          description: 'Access-list name.

            When using substitution for any fields, the interface name will be appended
            to the ACL name.'
        entries:
          type: list
          required: true
          items:
            type: dict
            keys:
              source:
                type: str
                description: 'This field supports substitution of the fields "interface_ip"
                  and "peer_ip".

                  Alternatively it can be set with a static value of "any", "<ip>/<mask>"
                  or "<ip>".

                  "<ip>" without a mask means host.

                  Required except for remarks.'
              destination:
                type: str
                description: 'This field supports substitution of the fields "interface_ip"
                  and "peer_ip".

                  Alternatively it can be set with a static value of "any", "<ip>/<mask>"
                  or "<ip>".

                  "<ip>" without a mask means host.

                  Required except for remarks.'
  ipv6_mgmt_destination_networks:
    documentation_options:
      table: management-settings
    description: 'List of IPv6 prefixes to configure as static routes towards the
      OOB IPv6 Management interface gateway.

      Replaces the default route.

      '
    type: list
    items:
      type: str
      description: IPv6_network/Mask.
  ipv6_mgmt_gateway:
    documentation_options:
      table: management-settings
    type: str
    format: ipv6
    description: 'OOB Management interface gateway in IPv6 format.

      Used as next-hop for default gateway or static routes defined under ''ipv6_mgmt_destination_networks''.

      '
  is_deployed:
    documentation_options:
      table: is-deployed
    description: 'If the device is already deployed in the fabric.

      When set to false, interfaces toward this device may be shutdown depending on
      the `shutdown_interfaces_towards_undeployed_peers` setting.

      Furthermore `eos_config_deploy_cvp` will not attempt to move or apply configurations
      to the device.

      '
    type: bool
    default: true
  isis_advertise_passive_only:
    documentation_options:
      table: isis-settings
    type: bool
    default: false
  isis_area_id:
    documentation_options:
      table: isis-settings
    type: str
    default: '49.0001'
    convert_types:
    - int
    - float
  isis_default_circuit_type:
    documentation_options:
      table: isis-settings
    type: str
    valid_values:
    - 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.

      '
  isis_default_is_type:
    display_name: ISIS Default IS Type
    documentation_options:
      table: isis-settings
    type: str
    valid_values:
    - level-1-2
    - level-1
    - level-2
    default: level-2
  isis_default_metric:
    documentation_options:
      table: isis-settings
    type: int
    convert_types:
    - str
    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.

      '
  isis_maximum_paths:
    documentation_options:
      table: isis-settings
    description: Number of path to configure in ECMP for ISIS.
    type: int
    convert_types:
    - str
  isis_ti_lfa:
    documentation_options:
      table: isis-settings
    type: dict
    keys:
      enabled:
        type: bool
        default: false
      protection:
        type: str
        valid_values:
        - link
        - node
      local_convergence_delay:
        description: Local convergence delay in milliseconds.
        type: int
        convert_types:
        - str
        default: 10000
  l3_edge:
    type: dict
    $ref: eos_designs#/$defs/l3_edge
  l3_interface_profiles:
    type: list
    documentation_options:
      table: node-type-l3-interfaces-configuration
    description: '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
    $ref: eos_cli_config_gen#/keys/local_users
    type: list
  mac_address_table:
    documentation_options:
      table: system-settings
    type: dict
    description: 'MAC address-table aging time.

      Use to change the EOS default of 300.

      '
    keys:
      aging_time:
        type: int
        convert_types:
        - str
        description: 'Aging time in seconds 10-1000000.

          Enter 0 to disable aging.

          '
        min: 0
        max: 1000000
  management_eapi:
    documentation_options:
      table: management-settings
    description: 'Default is HTTPS management eAPI enabled.

      The VRF is set to < mgmt_interface_vrf >.

      '
    type: dict
    keys:
      enable_http:
        type: bool
        default: false
      enable_https:
        type: bool
        default: true
      default_services:
        type: bool
  mgmt_destination_networks:
    documentation_options:
      table: management-interface-settings
    type: list
    description: 'List of IPv4 prefixes to configure as static routes towards the
      OOB Management interface gateway.

      Replaces the default route.'
    items:
      type: str
      description: IPv4_address/Mask.
  mgmt_gateway:
    documentation_options:
      table: management-interface-settings
    type: str
    description: 'OOB Management interface gateway in IPv4 format.

      Used as next-hop for default gateway or static routes defined under ''mgmt_destination_networks''.

      '
  mgmt_interface:
    documentation_options:
      table: management-interface-settings
    type: str
    default: Management1
    description: OOB Management interface.
  mgmt_interface_description:
    documentation_options:
      table: management-interface-settings
    type: str
    description: 'Management interface description.

      '
    default: oob_management
  mgmt_interface_vrf:
    documentation_options:
      table: management-interface-settings
    type: str
    default: MGMT
    description: OOB Management VRF.
    convert_types:
    - int
  mgmt_vrf_routing:
    documentation_options:
      table: management-interface-settings
    type: bool
    default: false
    description: Configure IP routing for the OOB Management VRF.
  mlag_ibgp_peering_vrfs:
    documentation_options:
      table: overlay-settings
    type: dict
    description: 'On mlag leafs, an SVI interface is defined per vrf, to establish
      iBGP peering (required when there are MLAG leafs in topology).

      The SVI id will be derived from the base vlan defined: mlag_ibgp_peering_vrfs.base_vlan
      + (vrf_id or vrf_vni) - 1.

      Depending on the values of vrf_id / vrf_vni it may be required to adjust the
      base_vlan to avoid overlaps or invalid vlan ids.

      The SVI ip address derived from mlag_l3_peer_ipv4_pool is re-used across all
      iBGP peerings.

      '
    keys:
      base_vlan:
        type: int
        convert_types:
        - str
        min: 1
        max: 4093
        default: 3000
  mlag_on_orphan_port_channel_downlink:
    type: bool
    documentation_options:
      table: fabric-settings
    description: 'If `true` (default) an MLAG ID will always be configured on a Port-Channel
      downlink even if the downlink is only on one node in the MLAG pair.

      If `false` an MLAG ID will only be configured on Port-Channel downlinks dual-homed
      to two MLAG switches.

      Note the default value will change to `false` in AVD version 5.0'
    default: true
  name_servers:
    documentation_options:
      table: management-settings
    type: list
    description: List of DNS servers. The VRF is set to < mgmt_interface_vrf >.
    items:
      type: str
      description: IPv4 address
  network_ports:
    type: list
    items:
      type: dict
      $ref: eos_designs#/$defs/adapter_config
      keys:
        switches:
          type: list
          description: 'Regex matching the full hostname of one or more switches.

            The regular expression must match the full hostname.

            '
          items:
            type: str
        switch_ports:
          type: list
          description: "List of ranges using AVD range_expand syntax.\nFor example:\n\nswitch_ports:\n
            \ - Ethernet1\n  - Ethernet2-48\n\nAll switch_ports ranges are expanded
            into individual port configurations.\n\nFor more details and examples
            of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../docs/plugins/Filter_plugins/range_expand.md).\n"
          items:
            type: str
        description:
          type: str
          description: Description to be used on all ports.
  network_services_keys:
    type: list
    primary_key: name
    convert_types:
    - dict
    description: 'Network Services can be grouped by using separate keys.

      The keys can be customized to provide a better better organization or grouping
      of your data.

      `network_services_keys` should be defined in the top level group_vars for the
      fabric.

      The default values will be overridden if defining this key, so it is recommended
      to copy the defaults and modify them.

      '
    items:
      type: dict
      keys:
        name:
          type: str
    default:
    - name: tenants
  new_network_services_bgp_vrf_config:
    type: bool
    description: 'Set this key to `true` in the node type to generate full BGP configuration

      for network services even when `evpn` is not in the address families

      (`evpn` is the default address family for `l3ls-evpn` but not for `l2ls`).


      This is `false` by default except if `uplink_type` is set to `p2p-vrfs`, then
      the default value is `true`.


      This may introduce breaking changes to your configuration.'
  node_type_keys:
    type: list
    description: 'Define Node Type Keys, to specify the properties of each node type
      in the fabric.

      This allows for complete customization of the fabric layout and functionality.

      `node_type_keys` should be defined in top level group_var for the fabric.

      The default values will be overridden if defining this key, so it is recommended
      to copy the defaults and modify them.

      '
    convert_types:
    - dict
    primary_key: key
    items:
      type: dict
      keys:
        key:
          type: str
        type:
          type: str
          description: Type value matching this node_type_key.
        connected_endpoints:
          type: bool
          default: false
          description: Are endpoints connected to this node type.
        default_evpn_role:
          type: str
          valid_values:
          - none
          - client
          - server
          default: none
          description: Default evpn_role. Can be overridden in topology vars.
        default_ptp_priority1:
          type: int
          min: 0
          max: 255
          default: 127
          description: Default PTP priority 1
        default_underlay_routing_protocol:
          documentation_options:
            table: node-type-keys
          type: str
          default: ebgp
          convert_to_lower_case: true
          $ref: eos_designs#/keys/underlay_routing_protocol
          description: 'Set the default underlay routing_protocol.

            Can be overridden by setting "underlay_routing_protocol" host/group_vars.

            '
        default_overlay_routing_protocol:
          type: str
          default: ebgp
          convert_to_lower_case: true
          valid_values:
          - ebgp
          - ibgp
          - her
          - cvx
          - none
          description: 'Set the default overlay routing_protocol.

            Can be overridden by setting "overlay_routing_protocol" host/group_vars.

            '
        default_mpls_overlay_role:
          type: str
          valid_values:
          - client
          - server
          - none
          description: 'Set the default mpls overlay role.

            Acting role in overlay control plane.

            '
        default_overlay_address_families:
          type: list
          convert_types:
          - str
          items:
            type: str
            convert_to_lower_case: true
            valid_values:
            - evpn
            - vpn-ipv4
            - vpn-ipv6
          description: 'Set the default overlay address families.

            '
        default_evpn_encapsulation:
          type: str
          convert_to_lower_case: true
          valid_values:
          - mpls
          - vxlan
          description: 'Set the default evpn encapsulation.

            '
        default_wan_role:
          type: str
          valid_values:
          - client
          - server
          description: 'Set the default WAN role.


            This is used both for AutoVPN and Pathfinder designs.

            That means if `wan_mode` root key is set to `autovpn` or `cv-pathfinder`.

            `server` indicates that the router is a route-reflector.


            Only supported if `overlay_routing_protocol` is set to `ibgp`.

            '
        mlag_support:
          type: bool
          default: false
          description: Can this node type support mlag.
        network_services:
          description: Will network services be deployed on this node type.
          type: dict
          keys:
            l1:
              type: bool
              default: false
              description: ??
            l2:
              type: bool
              default: false
              description: Vlans
            l3:
              type: bool
              default: false
              description: 'VRFs, SVIs (if l2 is true).

                Only supported with underlay_router.

                '
        underlay_router:
          type: bool
          default: true
          description: Is this node type a L3 device.
        uplink_type:
          type: str
          valid_values:
          - p2p
          - port-channel
          - p2p-vrfs
          - lan
          default: p2p
          description: '`uplink_type` must be `p2p`, `p2p-vrfs` or `lan` if `vtep`
            or `underlay_router` is true.


            For `p2p-vrfs`, the uplinks are configured as L3 interfaces with a subinterface
            for each VRF

            in `network_services` present on both the uplink and the downlink switch.

            The subinterface ID is the `vrf_id`.

            ''underlay_router'' and ''network_services.l3'' must be set to true.

            VRF `default` is always configured on the physical interface using the
            underlay routing protocol.

            All subinterfaces use the same IP address as the physical interface.

            Multicast is not supported.

            Only BGP is supported for subinterfaces.


            For `lan`, a single uplink interface is supported and will be configured
            as an L3 Interface with

            subinterfaces for each SVI defined under the VRFs in `network_services`
            as long as the uplink switch also

            has the VLAN permitted by tag/tenant filtering.'
        vtep:
          type: bool
          default: false
          description: Is this switch an EVPN VTEP.
        mpls_lsr:
          type: bool
          default: false
          description: Is this switch an MPLS LSR.
        ip_addressing:
          type: dict
          description: Override ip_addressing templates.
          keys:
            python_module:
              type: str
              description: Custom Python Module to import for IP addressing.
            python_class_name:
              type: str
              description: Name of Custom Python Class to import for IP addressing.
            router_id:
              type: str
              description: Path to Custom J2 template.
            router_id_ipv6:
              type: str
              description: Path to Custom J2 template.
            mlag_ip_primary:
              type: str
              description: Path to Custom J2 template.
            mlag_ip_secondary:
              type: str
              description: Path to Custom J2 template.
            mlag_l3_ip_primary:
              type: str
              description: Path to Custom J2 template.
            mlag_l3_ip_secondary:
              type: str
              description: Path to Custom J2 template.
            mlag_ibgp_peering_ip_primary:
              type: str
              description: Path to Custom J2 template.
            mlag_ibgp_peering_ip_secondary:
              type: str
              description: Path to Custom J2 template.
            p2p_uplinks_ip:
              type: str
              description: Path to Custom J2 template.
            p2p_uplinks_peer_ip:
              type: str
              description: Path to Custom J2 template.
            vtep_ip_mlag:
              type: str
              description: Path to Custom J2 template.
            vtep_ip:
              type: str
              description: Path to Custom J2 template.
        interface_descriptions:
          type: dict
          description: 'Override interface_descriptions templates

            If description templates use Jinja2, they have to strip whitespaces using
            {%- -%} on any code blocks.

            '
          keys:
            python_module:
              type: str
              description: Custom Python Module to import for interface descriptions.
            python_class_name:
              type: str
              description: Name of Custom Python Class to import for interface descriptions.
            underlay_ethernet_interfaces:
              type: str
              description: Path to Custom J2 template.
            underlay_port_channel_interfaces:
              type: str
              description: Path to Custom J2 template.
            mlag_ethernet_interfaces:
              type: str
              description: Path to Custom J2 template.
            mlag_port_channel_interfaces:
              type: str
              description: Path to Custom J2 template.
            connected_endpoints_ethernet_interfaces:
              type: str
              description: Path to Custom J2 template.
            connected_endpoints_port_channel_interfaces:
              type: str
              description: Path to Custom J2 template.
            overlay_loopback_interface:
              type: str
              description: Path to Custom J2 template.
            vtep_loopback_interface:
              type: str
              description: Path to Custom J2 template.
        cv_tags_topology_type:
          documentation_options:
            table: cloudvision-tags
          description: 'PREVIEW: This key is currently not supported

            Type that CloudVision should use when generating the Topology.'
          type: str
          valid_values:
          - leaf
          - spine
          - core
          - edge
  ntp_settings:
    documentation_options:
      table: management-settings
    type: dict
    description: NTP settings
    keys:
      server_vrf:
        type: str
        description: "EOS only supports NTP servers in one VRF, so this VRF is used
          for all NTP servers and one local-interface.\n- `use_mgmt_interface_vrf`
          will configure the NTP server(s) under the VRF set with `mgmt_interface_vrf`
          and set the `mgmt_interface` as NTP local-interface.\n  An error will be
          raised if `mgmt_ip` or `ipv6_mgmt_ip` are not configured for the device.\n-
          `use_inband_mgmt_vrf` will configure the NTP server(s) under the VRF set
          with `inband_mgmt_vrf` and set the `inband_mgmt_interface` as NTP local-interface.\n
          \ An error will be raised if inband management is not configured for the
          device.\n- Any other string will be used directly as the VRF name but local
          interface must be set with `custom_structured_configuration_ntp` if needed.\nIf
          not set, the VRF is automatically picked up from the global setting `default_mgmt_method`."
      servers:
        type: list
        description: The first server is always set as "preferred".
        items:
          type: dict
          keys:
            name:
              type: str
              $ref: eos_cli_config_gen#/keys/ntp/keys/servers/items/keys/name
            burst:
              type: bool
            iburst:
              type: bool
            key:
              type: int
              $ref: eos_cli_config_gen#/keys/ntp/keys/servers/items/keys/key
            maxpoll:
              type: int
              $ref: eos_cli_config_gen#/keys/ntp/keys/servers/items/keys/maxpoll
            minpoll:
              type: int
              $ref: eos_cli_config_gen#/keys/ntp/keys/servers/items/keys/minpoll
            version:
              type: int
              $ref: eos_cli_config_gen#/keys/ntp/keys/servers/items/keys/version
      authenticate:
        type: bool
      authenticate_servers_only:
        type: bool
      authentication_keys:
        type: list
        $ref: eos_cli_config_gen#/keys/ntp/keys/authentication_keys
      trusted_keys:
        type: str
        $ref: eos_cli_config_gen#/keys/ntp/keys/trusted_keys
  only_local_vlan_trunk_groups:
    documentation_options:
      table: fabric-settings
    type: bool
    description: 'A vlan can have many trunk_groups assigned.

      To avoid unneeded configuration changes on all leaf switches when a new trunk
      group is added,

      this feature will only configure the vlan trunk groups matched with local connected_endpoints.

      See "Details on only_local_vlan_trunk_groups" below.

      Requires "enable_trunk_groups: true".

      '
    default: false
  overlay_cvx_servers:
    documentation_options:
      table: overlay-settings
    description: 'List of CVX vxlan overlay controllers.

      Required if overlay_routing_protocol == CVX.

      CVX servers (VMs) are peering using their management interface, so mgmt_ip must
      be set for all CVX servers.

      '
    type: list
    items:
      type: str
      description: '''inventory_hostname'' of CVX server

        '
  overlay_her_flood_list_per_vni:
    documentation_options:
      table: overlay-settings
    type: bool
    description: 'When using Head-End Replication, configure flood-lists per VNI.

      By default HER will be configured with a common flood-list containing all VTEPs.

      This behavior can be changed to per-VNI flood-lists by setting `overlay_her_flood_list_per_vni:
      true`.

      This will make `eos_designs` consider configured VLANs per VTEP, and only include
      the relevant VTEPs to each VNI''s flood-list.

      '
    default: false
  overlay_her_flood_list_scope:
    documentation_options:
      table: overlay-settings
    type: str
    description: 'When using Head-End Replication, set the scope of flood-lists to
      Fabric or DC.

      By default all VTEPs in the Fabric (part of the inventory group referenced by
      "fabric_name") are added to the flood-lists.

      This can be changed to all VTEPs in the DC (sharing the same "dc_name" value).

      This is useful if Border Leaf switches are dividing the VXLAN overlay into separate
      domains.

      '
    valid_values:
    - fabric
    - dc
    default: fabric
  overlay_loopback_description:
    documentation_options:
      table: overlay-settings
    description: Customize the description on overlay interface Loopback0.
    type: str
  overlay_mlag_rfc5549:
    documentation_options:
      table: overlay-settings
    description: 'IPv6 Unnumbered for MLAG iBGP connections.

      Requires "underlay_rfc5549: true".

      '
    type: bool
    default: false
  overlay_rd_type:
    documentation_options:
      table: overlay-settings
    type: dict
    description: 'Configuration options for the Administrator subfield (first part
      of RD) and the Assigned Number subfield (second part of RD).


      By default Route Distinguishers (RD) are set to:

      - `<overlay_loopback>:<mac_vrf_id_base + vlan_id or mac_vrf_vni_base + vlan_id>`
      for VLANs and VLAN-Aware Bundles with L2 vlans.

      - `<overlay_loopback>:<vlan_aware_bundle_number_base + vrf_id>` for VLAN-Aware
      Bundles with SVIs.

      - `<overlay_loopback>:<vlan_aware_bundle_number_base + id>` for VLAN-Aware Bundles
      defined under ''evpn_vlan_bundles''.

      - `<overlay_loopback>:<vrf_id>` for VRFs.


      Note:

      RD is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.

      When using loopback or 32-bit ASN/number the assigned number can only be a 16-bit
      number. This may be a problem with large VNIs.

      For 16-bit ASN/number the assigned number can be a 32-bit number.

      '
    keys:
      admin_subfield:
        type: str
        convert_types:
        - int
        description: 'The method for deriving RD Administrator subfield (first part
          of RD):

          - ''overlay_loopback_ip'' means the IP address of Loopback0.

          - ''vtep_loopback'' means the IP address of the VTEP loopback interface.

          - ''bgp_as'' means the AS number of the device.

          - ''switch_id'' means the ''id'' value of the device.

          - Any <IPv4 Address> without mask.

          - Integer between <0-65535>.

          - Integer between <0-4294967295>.

          '
        default: overlay_loopback_ip
      admin_subfield_offset:
        type: str
        convert_types:
        - int
        description: 'Offset can only be used if admin_subfield is an integer between
          <0-4294967295> or ''switch_id''.

          Total value of admin_subfield + admin_subfield_offset must be <= 4294967295.

          '
      vrf_admin_subfield:
        type: str
        convert_types:
        - int
        description: 'The method for deriving RD Administrator subfield (first part
          of RD) for VRF services:

          - ''overlay_loopback_ip'' means the IP address of Loopback0.

          - ''vtep_loopback'' means the IP address of the VTEP loopback interface.

          - ''bgp_as'' means the AS number of the device.

          - ''switch_id'' means the ''id'' value of the device.

          - Any <IPv4 Address> without mask.

          - Integer between <0-65535>.

          - Integer between <0-4294967295>.


          ''vrf_admin_subfield'' takes precedence for VRF RDs if set. Otherwise the
          ''admin_subfield'' value will be used.

          '
      vrf_admin_subfield_offset:
        type: str
        convert_types:
        - int
        description: 'Offset can only be used if ''vrf_admin_subfield'' is an integer
          between <0-4294967295> or ''switch_id''.

          Total value of ''vrf_admin_subfield'' + ''vrf_admin_subfield_offset'' must
          be <= 4294967295.

          '
      vlan_assigned_number_subfield:
        type: str
        valid_values:
        - mac_vrf_id
        - mac_vrf_vni
        - vlan_id
        default: mac_vrf_id
        description: 'The method for deriving RD Assigned Number subfield for VLAN
          services (second part of RD):

          - ''mac_vrf_id'' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.

          - ''mac_vrf_vni'' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.

          - ''vlan_id'' will only use the ''vlan_id'' and ignores all base values.


          These methods can be overridden per VLAN if either ''rd_override'', ''rt_override''
          or ''vni_override'' is set (preferred in this order).

          '
  overlay_routing_protocol:
    documentation_options:
      table: overlay-settings
    description: "- The following overlay routing protocols are supported:\n  - eBGP:
      Configures fabric with eBGP, default for l3ls-evpn design.\n  - iBGP: Configured
      fabric with iBGP, only supported with OSPF or ISIS variants in underlay, default
      for mpls design.\n  - CVX: Configures fabric to leverage CloudVision eXchange
      as the overlay controller.\n  - HER: Configures fabric with Head-End Replication,
      configures static VXLAN flood-lists instead of using a dynamic overlay protocol.\n
      \ - none: No overlay configuration will be generated, default for l2ls design.\n"
    type: str
    valid_values:
    - ebgp
    - ibgp
    - cvx
    - her
    - none
    default: ebgp
    convert_to_lower_case: true
  overlay_routing_protocol_address_family:
    documentation_options:
      table: overlay-settings
    type: str
    description: 'When set to `ipv6`, enable overlay EVPN peering with IPv6 addresses.

      This feature depends on underlay_ipv6 variable. As of today, only RFC5549 is
      capable to transport IPv6 in the underlay.

      '
    valid_values:
    - ipv4
    - ipv6
    default: ipv4
  overlay_rt_type:
    documentation_options:
      table: overlay-settings
    type: dict
    description: 'Configuration options for the Administrator subfield (first part
      of RT) and the Assigned Number subfield (second part of RT).


      By default Route Targets (RT) are set to:

      - `<(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id>:<(mac_vrf_id_base or mac_vrf_vni_base)
      + vlan_id>` for VLANs and VLAN-Aware Bundles with L2 vlans.

      - `<vlan_aware_bundle_number_base + vrf_id>:<vlan_aware_bundle_number_base +
      vrf_id>` for VLAN-Aware Bundles with SVIs.

      - `<vlan_aware_bundle_number_base + id>:<vlan_aware_bundle_number_base + id>`
      for VLAN-Aware Bundles defined under ''evpn_vlan_bundles''.

      - `<vrf_id>:<vrf_id>` for VRFs.


      Notes:

      RT is a 48-bit value which is split into <16-bit>:<32-bit> or <32-bit>:<16-bit>.

      When using 32-bit ASN/number the VNI can only be a 16-bit number. Alternatively
      use vlan_id/vrf_id as assigned number.

      For 16-bit ASN/number the assigned number can be a 32-bit number.

      '
    keys:
      admin_subfield:
        type: str
        convert_types:
        - int
        description: 'The method for deriving RT Administrator subfield (first part
          of RT):

          - ''vrf_id'' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id` for
          VLANs, `(vrf_id or vrf_vni)` for VRFs and `id` for bundles defined under
          ''evpn_vlan_bundles''.

          - ''vrf_vni'' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id` for
          VLANs, `(vrf_vni or vrf_id)` for VRFs and `id` for bundles defined under
          ''evpn_vlan_bundles''.

          - ''id'' means `vlan_id` for VLANs, `(vrf_id or vrf_vni)` for VRFs and `id`
          for bundles defined under ''evpn_vlan_bundles''.

          - ''bgp_as'' means the AS number of the device.

          - Integer between <0-65535>.

          - Integer between <0-4294967295>.


          The ''vrf_id'' and ''vrf_vni'' methods can be overridden per VLAN if either
          ''rt_override'' or ''vni_override'' is set (preferred in this order).

          The ''vrf_id'', ''vrf_vni'' and ''id'' methods can be overridden per bundle
          defined under `evpn_vlan_bundles` using ''rt_override''.

          '
        default: vrf_id
      vrf_admin_subfield:
        type: str
        convert_types:
        - int
        description: 'The method for deriving RT Administrator subfield (first part
          of RT) for VRF services:

          - ''id'' means `(vrf_id or vrf_vni)`.

          - ''vrf_id'' means `(vrf_id or vrf_vni)`.

          - ''vrf_vni'' means `(vrf_vni or vrf_id)`.

          - ''bgp_as'' means the AS number of the device.

          - Integer between <0-65535>.

          - Integer between <0-4294967295>.


          ''vrf_admin_subfield'' takes precedence for VRF RDs if set. Otherwise the
          ''admin_subfield'' value will be used.

          '
        default: vrf_id
      vlan_assigned_number_subfield:
        type: str
        valid_values:
        - mac_vrf_id
        - mac_vrf_vni
        - vlan_id
        default: mac_vrf_id
        description: 'The method for deriving RT Assigned Number subfield for VLAN
          services (second part of RT):

          - ''mac_vrf_id'' means `(mac_vrf_id_base or mac_vrf_vni_base) + vlan_id`.

          - ''mac_vrf_vni'' means `(mac_vrf_vni_base or mac_vrf_id_base) + vlan_id`.

          - ''vlan_id'' will only use the ''vlan_id'' and ignores all base values.


          These methods can be overridden per VLAN if either ''rt_override'' or ''vni_override''
          is set (preferred in this order).

          '
  p2p_uplinks_mtu:
    documentation_options:
      table: fabric-settings
    description: Point to Point Links MTU.
    type: int
    convert_types:
    - str
    min: 68
    max: 65535
    default: 9214
  p2p_uplinks_qos_profile:
    documentation_options:
      table: fabric-settings
    description: QOS Profile assigned on all infrastructure links.
    type: str
  platform_settings:
    documentation_options:
      table: platform-settings
    type: list
    items:
      type: dict
      keys:
        platforms:
          type: list
          items:
            type: str
            convert_types:
            - int
        trident_forwarding_table_partition:
          type: str
          description: Only applied when evpn_multicast is true.
        reload_delay:
          type: dict
          keys:
            mlag:
              type: int
              convert_types:
              - str
              min: 0
              max: 86400
              description: In seconds.
            non_mlag:
              type: int
              convert_types:
              - str
              min: 0
              max: 86400
              description: In seconds.
        tcam_profile:
          type: str
        lag_hardware_only:
          type: bool
        default_interface_mtu:
          type: int
          convert_types:
          - str
          description: 'Default interface MTU configured on EOS under "interface defaults".

            Takes precedence over the root key "default_interface_mtu".

            '
          min: 68
          max: 65535
        feature_support:
          type: dict
          keys:
            queue_monitor_length_notify:
              type: bool
              default: true
            interface_storm_control:
              type: bool
              default: true
            poe:
              type: bool
              default: false
            per_interface_mtu:
              type: bool
              default: true
              description: 'Support for configuration of per interface MTU for p2p
                links, MLAG SVIs and Network Services.

                Effectively this means that all settings regarding interface MTU will
                be ignored if this is false.

                Platforms without support for per interface MTU can use a single default
                interface MTU setting. Set this via "default_interface_mtu"

                '
            bgp_update_wait_install:
              type: bool
              default: true
              description: 'Disables FIB updates and route advertisement when the
                BGP instance is initiated until the BGP convergence state is reached.

                Can be overridden by setting "bgp_update_wait_install" host/group_vars.

                '
            bgp_update_wait_for_convergence:
              type: bool
              default: true
              description: 'Do not advertise reachability to a prefix until that prefix
                has been installed in hardware.

                This will eliminate any temporary black holes due to a BGP speaker
                advertising reachability to a prefix that may not yet be installed
                into the forwarding plane.

                Can be overridden by setting "bgp_update_wait_for_convergence" host/group_vars.

                '
        management_interface:
          type: str
          default: Management1
        raw_eos_cli:
          type: str
          description: EOS CLI rendered directly on the root level of the final EOS
            configuration.
    default:
    - platforms:
      - default
      feature_support:
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
    - platforms:
      - 7050X3
      feature_support:
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
      trident_forwarding_table_partition: flexible exact-match 16384 l2-shared 98304
        l3-shared 131072
    - platforms:
      - 720XP
      feature_support:
        poe: true
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
      trident_forwarding_table_partition: flexible exact-match 16384 l2-shared 98304
        l3-shared 131072
    - platforms:
      - '750'
      - '755'
      - '758'
      management_interface: Management0
      feature_support:
        poe: true
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
    - platforms:
      - 720DP
      - 722XP
      - 710P
      feature_support:
        poe: true
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
    - platforms:
      - 7280R
      - 7280R2
      - 7020R
      lag_hardware_only: true
      reload_delay:
        mlag: 900
        non_mlag: 1020
      tcam_profile: vxlan-routing
    - platforms:
      - 7280R3
      reload_delay:
        mlag: 900
        non_mlag: 1020
    - platforms:
      - 7500R
      - 7500R2
      lag_hardware_only: true
      management_interface: Management0
      reload_delay:
        mlag: 900
        non_mlag: 1020
      tcam_profile: vxlan-routing
    - platforms:
      - 7500R3
      - 7800R3
      management_interface: Management0
      reload_delay:
        mlag: 900
        non_mlag: 1020
    - platforms:
      - 7358X4
      management_interface: Management1/1
      reload_delay:
        mlag: 300
        non_mlag: 330
      feature_support:
        queue_monitor_length_notify: false
        interface_storm_control: true
        bgp_update_wait_for_convergence: true
        bgp_update_wait_install: false
    - platforms:
      - 7368X4
      management_interface: Management0
      reload_delay:
        mlag: 300
        non_mlag: 330
    - platforms:
      - 7300X3
      management_interface: Management0
      reload_delay:
        mlag: 1200
        non_mlag: 1320
      trident_forwarding_table_partition: flexible exact-match 16384 l2-shared 98304
        l3-shared 131072
    - platforms:
      - VEOS
      - VEOS-LAB
      - vEOS
      - vEOS-lab
      feature_support:
        bgp_update_wait_for_convergence: false
        bgp_update_wait_install: false
        interface_storm_control: false
        queue_monitor_length_notify: false
      reload_delay:
        mlag: 300
        non_mlag: 330
    - platforms:
      - CEOS
      - cEOS
      - ceos
      - cEOSLab
      feature_support:
        bgp_update_wait_for_convergence: false
        bgp_update_wait_install: false
        interface_storm_control: false
        queue_monitor_length_notify: false
      management_interface: Management0
      reload_delay:
        mlag: 300
        non_mlag: 330
  platform_speed_groups:
    documentation_options:
      table: platform-settings
    type: list
    primary_key: platform
    secondary_key: speeds
    convert_types:
    - dict
    description: Set Hardware Speed Groups per Platform.
    items:
      type: dict
      keys:
        platform:
          type: str
          convert_types:
          - int
        speeds:
          type: list
          primary_key: speed
          secondary_key: speed_groups
          convert_types:
          - dict
          items:
            type: dict
            keys:
              speed:
                type: str
              speed_groups:
                type: list
                items:
                  type: str
                  convert_types:
                  - int
  pod_name:
    documentation_options:
      table: fabric-topology
    description: 'POD Name is used in:

      - Fabric Documentation (Optional, falls back to dc_name and then to fabric_name)

      - SNMP Location: `snmp_settings.location` (Optional)

      - VRF Loopbacks: `vtep_diagnostic.loopback_ip_pools.pod` (Required)


      Recommended to be common between Spines and Leafs within a POD (One l3ls topology).

      '
    type: str
  port_profiles:
    type: list
    primary_key: profile
    convert_types:
    - dict
    description: 'Optional profiles to share common settings for connected_endpoints
      and/or network_ports.

      Keys are the same used under endpoints adapters. Keys defined under endpoints
      adapters take precedence.

      '
    items:
      type: dict
      $ref: eos_designs#/$defs/adapter_config
      keys:
        profile:
          type: str
          description: Port profile name.
        parent_profile:
          type: str
          description: 'Parent profile is optional.

            Port_profiles can refer to another port_profile to inherit settings in
            up to two levels (adapter->profile->parent_profile).

            '
  ptp:
    documentation_options:
      table: ptp
    type: dict
    keys:
      enabled:
        type: bool
      profile:
        type: str
        valid_values:
        - aes67
        - smpte2059-2
        - aes67-r16-2016
        default: aes67-r16-2016
      domain:
        type: int
        $ref: eos_cli_config_gen#/keys/ptp/keys/domain
      auto_clock_identity:
        type: bool
        default: true
  ptp_profiles:
    documentation_options:
      table: ptp
    type: list
    items:
      type: dict
      keys:
        profile:
          type: str
          description: PTP profile.
        announce:
          type: dict
          description: PTP announce interval.
          keys:
            interval:
              type: int
              convert_types:
              - str
              min: -7
              max: 4
            timeout:
              type: int
              convert_types:
              - str
              min: 2
              max: 255
        delay_req:
          type: int
          convert_types:
          - str
          min: -7
          max: 8
        sync_message:
          type: dict
          description: PTP sync message interval.
          keys:
            interval:
              type: int
              convert_types:
              - str
              min: -7
              max: 3
        transport:
          type: str
          valid_values:
          - ipv4
    default:
    - announce:
        interval: 0
        timeout: 3
      delay_req: -3
      profile: aes67-r16-2016
      sync_message:
        interval: -3
      transport: ipv4
    - announce:
        interval: -2
        timeout: 3
      delay_req: -4
      profile: smpte2059-2
      sync_message:
        interval: -4
      transport: ipv4
    - announce:
        interval: 2
        timeout: 3
      delay_req: 0
      profile: aes67
      sync_message:
        interval: 0
      transport: ipv4
  queue_monitor_length:
    documentation_options:
      table: system-settings
    $ref: eos_cli_config_gen#/keys/queue_monitor_length
    type: dict
    keys:
      enabled:
        type: bool
      notifying:
        type: bool
        description: 'If True, `eos_designs` will configure `queue-monitor length
          notifying` according to the

          `platform_settings.[].feature_support.queue_monitor_length_notify` setting.

          '
  redundancy:
    documentation_options:
      table: system-settings
    type: dict
    description: Redundancy for chassis platforms with dual supervisors | Optional.
    keys:
      protocol:
        type: str
        valid_values:
        - sso
        - rpr
  serial_number:
    documentation_options:
      table: system-settings
    description: 'Serial Number of the device.

      Used for documentation purpose in the fabric documentation as can also be used
      by the ''eos_config_deploy_cvp'' role.

      "serial_number" can also be set directly under node type settings.

      If both are set, the value under node type settings takes precedence.

      '
    type: str
    convert_types:
    - int
  sflow_settings:
    documentation_options:
      table: management-sflow-settings
    type: dict
    description: 'sFlow settings.

      The sFlow process will only be configured if any interface is enabled for sFlow.

      For default enabling of sFlow for various interface types across the fabric
      see `fabric_sflow`.'
    keys:
      destinations:
        type: list
        items:
          type: dict
          keys:
            destination:
              type: str
              required: true
              description: sFlow destination name or IP address.
            port:
              type: int
              description: UDP Port number. The default port number for sFlow is 6343.
              convert_types:
              - str
              min: 1
              max: 65535
            vrf:
              type: str
              description: "If not set, the VRF is automatically picked up from the
                global setting `default_mgmt_method`.\nThe value of `vrf` will be
                interpreted according to these rules:\n- `use_mgmt_interface_vrf`
                will configure the sFlow destination under the VRF set with `mgmt_interface_vrf`
                and set the `mgmt_interface` as sFlow source-interface.\n  An error
                will be raised if `mgmt_ip` or `ipv6_mgmt_ip` are not configured for
                the device.\n- `use_inband_mgmt_vrf` will configure the sFlow destination
                under the VRF set with `inband_mgmt_vrf` and set the `inband_mgmt_interface`
                as sFlow source-interface.\n  An error will be raised if inband management
                is not configured for the device.\n- Any other string will be used
                directly as the VRF name. Remember to set the `sflow_settings.vrfs[].source_interface`
                if needed."
              convert_types:
              - int
      vrfs:
        type: list
        primary_key: name
        items:
          type: dict
          keys:
            name:
              type: str
              convert_types:
              - int
              description: VRF name.
            source_interface:
              type: str
              description: 'Source interface to use for sFlow destinations in this
                VRF.

                If set for the VRFs defined by `mgmt_interface_vrf` or `inband_mgmt_vrf`,
                this setting will take precedence.'
  shutdown_interfaces_towards_undeployed_peers:
    documentation_options:
      table: fabric-settings
    type: bool
    default: false
    description: '- It is possible to provision configurations for a complete topology
      but flag devices as undeployed using the host level variable `is_deployed: false`.


      ```yaml

      # Use at the host level

      is_deployed: < true or false or default -> true >

      ```


      - By default, this will have no impact within the `eos_designs` role. Configs
      will still be generated by the `eos_cli_config_gen` role and will still be pushed
      by the `eos_config_deploy_eapi` directly to devices if used.

      - However, if the `eos_config_deploy_cvp` role is used to push configurations,
      CloudVision will ignore the devices flagged  as `is_deployed: false` and not
      attempt to configure them.

      - If the device is not present in the network due to CloudVision not configuring
      the device, `eos_validate_state` role will fail tests on peers of the undeployed
      device trying to verify that interfaces are up.

      - To overcome this and shutdown interfaces towards undeployed peers, the variable
      `shutdown_interfaces_towards_undeployed_peers` can be used, satisfying the `eos_validate_state`
      role interface tests.

      - Again, this is only an issue if `eos_config_deploy_cvp` is used and the devices
      are not present in the network.

      '
  snmp_settings:
    documentation_options:
      table: management-snmp-settings
    type: dict
    description: 'SNMP settings

      For SNMP local-interfaces see "source_interfaces.snmp"

      Configuration of remote SNMP engine IDs are currently only possible using `structured_config`.'
    keys:
      contact:
        type: str
        description: SNMP contact.
      location:
        type: bool
        default: false
        description: Set SNMP location. Formatted as "<fabric_name> <dc_name> <pod_name>
          <switch_rack> <inventory_hostname>".
      vrfs:
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/vrfs
        type: list
        description: 'Enable/disable SNMP for one or more VRFs.

          Can be used in combination with "enable_mgmt_interface_vrf" and "enable_inband_mgmt_vrf".'
      enable_mgmt_interface_vrf:
        type: bool
        description: 'Enable/disable SNMP for the VRF set with "mgmt_interface_vrf".

          Ignored if ''mgmt_ip'' or ''ipv6_mgmt_ip'' are not configured for the device.

          Can be used in combination with "vrfs" and "enable_inband_mgmt_vrf".'
      enable_inband_mgmt_vrf:
        type: bool
        description: 'Enable/disable SNMP for the VRF set with "inband_mgmt_vrf".

          Ignored if inband management is not configured for the device.

          Can be used in combination with "vrfs" and "enable_mgmt_interface_vrf".'
      compute_local_engineid:
        type: bool
        default: false
        description: 'Generate a local engineId for SNMP using the ''compute_local_engineid_source''
          method.

          '
      compute_local_engineid_source:
        type: str
        default: hostname_and_ip
        description: "`compute_local_engineid_source` supports:\n- `hostname_and_ip`
          generate a local engineId for SNMP by hashing via SHA1\n  the string generated
          via the concatenation of the hostname plus the management IP.\n  {{ inventory_hostname
          }} + {{ switch.mgmt_ip }}.\n- `system_mac` generate the switch default engine
          id for AVD usage.\n  To use this, `system_mac_address` MUST be set for the
          device.\n  The formula is f5717f + system_mac_address + 00.\n"
        valid_values:
        - hostname_and_ip
        - system_mac
      compute_v3_user_localized_key:
        type: bool
        default: false
        description: 'Requires compute_local_engineid to be `true`.

          If enabled, the SNMPv3 passphrases for auth and priv are transformed using
          RFC 2574, matching the value they would take in EOS CLI.

          The algorithm requires a local engineId, which is unknown to AVD, hence
          the necessity to generate one beforehand.

          '
      users:
        type: list
        description: 'Configuration of local SNMP users.

          Configuration of remote SNMP users are currently only possible using `structured_config`.'
        items:
          type: dict
          keys:
            name:
              type: str
              description: Username
            group:
              type: str
              description: Group name
            version:
              type: str
              valid_values:
              - v1
              - v2c
              - v3
            auth:
              type: str
              valid_values:
              - md5
              - sha
              - sha256
              - sha384
              - sha512
            auth_passphrase:
              type: str
              description: Cleartext passphrase so the recommendation is to use vault.
                Requires 'auth' to be set.
            priv:
              type: str
              valid_values:
              - des
              - aes
              - aes192
              - aes256
            priv_passphrase:
              type: str
              description: Cleartext passphrase so the recommendation is to use vault.
                Requires 'priv' to be set.
      hosts:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/hosts
        items:
          type: dict
          keys:
            host:
              type: str
              $ref: eos_cli_config_gen#/keys/snmp_server/keys/hosts/items/keys/host
            vrf:
              type: str
              description: 'VRF Name.

                Can be used in combination with "use_mgmt_interface_vrf" and "use_inband_mgmt_vrf"
                to configure the SNMP host under multiple VRFs.'
              convert_types:
              - int
            use_mgmt_interface_vrf:
              type: bool
              description: Configure the SNMP host under the VRF set with "mgmt_interface_vrf".
                Ignored if 'mgmt_ip' or 'ipv6_mgmt_ip' are not configured for the
                device, so if the host is only configured with this VRF, the host
                will not be configured at all. Can be used in combination with "vrf"
                and "use_inband_mgmt_vrf" to configure the SNMP host under multiple
                VRFs.
            use_inband_mgmt_vrf:
              type: bool
              description: Configure the SNMP host under the VRF set with "inband_mgmt_vrf".
                Ignored if inband management is not configured for the device, so
                if the host is only configured with this VRF, the host will not be
                configured at all. Can be used in combination with "vrf" and "use_mgmt_interface_vrf"
                to configure the SNMP host under multiple VRFs.
      communities:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/communities
      ipv4_acls:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/ipv4_acls
      ipv6_acls:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/ipv6_acls
      views:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/views
      groups:
        type: list
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/groups
      traps:
        type: dict
        $ref: eos_cli_config_gen#/keys/snmp_server/keys/traps
  source_interfaces:
    documentation_options:
      table: management-source-interfaces-settings
    type: dict
    description: 'Configure source-interfaces based on the management interfaces set
      for other `eos_designs` data models.

      By default, no source-interfaces will be configured. They can still be configured
      manually using `eos_cli_config_gen` and custom structured configuration.

      EOS supports a single source-interface per VRF, so an error will be raised in
      case of conflicts.

      Errors will also be raised if an interface is not found for a device.'
    keys:
      domain_lookup:
        type: dict
        description: IP Domain Lookup source-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure an IP Domain Lookup source-interface with the
              interface set by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure an IP Domain Lookup source-interface with the
              interface set by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
      http_client:
        type: dict
        description: IP HTTP Client source-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure an IP HTTP Client source-interface with the interface
              set by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure an IP HTTP Client source-interface with the interface
              set by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
      radius:
        type: dict
        description: IP Radius source-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure an IP Radius source-interface with the interface
              set by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure an IP Radius source-interface with the interface
              set by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
      snmp:
        type: dict
        description: SNMP local-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure a SNMP local-interface with the interface set
              by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure a SNMP local-interface with the interface set
              by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
      ssh_client:
        type: dict
        description: IP SSH Client source-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure an IP SSH Client source-interface with the interface
              set by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure an IP SSH Client source-interface with the interface
              set by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
      tacacs:
        type: dict
        description: IP Tacacs source-interfaces.
        keys:
          mgmt_interface:
            type: bool
            description: 'Configure an IP Tacacs source-interface with the interface
              set by `mgmt_interface` for the VRF set by `mgmt_interface_vrf`.

              `mgmt_interface` is typically the out-of-band Management interface,
              and can be set under the node settings, platform settings or as a group/host
              var.'
          inband_mgmt_interface:
            type: bool
            description: 'Configure an IP Tacacs source-interface with the interface
              set by `inband_mgmt_interface` for the VRF set by `inband_mgmt_vrf`.

              `inband_mgmt_interface` is typically a loopback or SVI interface, and
              can be set under the node settings.'
  svi_profiles:
    type: list
    primary_key: profile
    convert_types:
    - dict
    description: 'Profiles to share common settings for SVIs under `<network_services_key>.[].vrfs.svis`.

      Keys are the same used under SVIs. Keys defined under SVIs take precedence.

      Note: structured configuration is not merged recursively and will be taken directly
      from the most specific level in the following order:

      1. svi.nodes[inventory_hostname].structured_config

      2. svi_profile.nodes[inventory_hostname].structured_config

      3. svi_parent_profile.nodes[inventory_hostname].structured_config

      4. svi.structured_config

      5. svi_profile.structured_config

      6. svi_parent_profile.structured_config

      '
    items:
      $ref: eos_designs#/$defs/svi
      type: dict
      keys:
        profile:
          type: str
          description: Profile name
        parent_profile:
          type: str
          description: 'Parent SVI profile name to apply.

            svi_profiles can refer to another svi_profile to inherit settings in up
            to two levels (svi -> svi_profile -> svi_parent_profile).

            '
  system_mac_address:
    documentation_options:
      table: system-settings
    type: str
    description: 'Set to the same MAC address as available in "show version" on the
      device.

      "system_mac_address" can also be set under node type settings.

      If both are set, the value under node type settings takes precedence.

      '
  terminattr_disable_aaa:
    documentation_options:
      table: cloudvision-settings
    type: bool
    default: false
  terminattr_ingestexclude:
    documentation_options:
      table: cloudvision-settings
    type: str
    default: /Sysdb/cell/1/agent,/Sysdb/cell/2/agent
  terminattr_ingestgrpcurl_port:
    documentation_options:
      table: cloudvision-settings
    type: int
    convert_types:
    - str
    default: 9910
    description: 'Port number used for Terminattr connection to an on-premise CloudVision
      cluster.

      The port number is always 443 when using CloudVision as a Service, so this value
      is ignored.'
  terminattr_smashexcludes:
    documentation_options:
      table: cloudvision-settings
    type: str
    default: ale,flexCounter,hardware,kni,pulse,strata
  timezone:
    documentation_options:
      table: management-settings
    type: str
    description: Clock timezone like "CET" or "US/Pacific".
  trunk_groups:
    documentation_options:
      table: fabric-settings
    type: dict
    keys:
      mlag:
        type: dict
        description: 'Trunk Group used for MLAG VLAN (Typically VLAN 4094).

          '
        keys:
          name:
            type: str
            default: MLAG
      mlag_l3:
        type: dict
        description: 'Trunk Group used for MLAG L3 peering VLAN and for VRF L3 peering
          VLANs (Typically VLAN 4093).

          '
        keys:
          name:
            type: str
            default: LEAF_PEER_L3
      uplink:
        type: dict
        description: 'Trunk Group used on L2 Leaf switches when "enable_trunk_groups"
          is set.

          '
        keys:
          name:
            type: str
            default: UPLINK
  type:
    documentation_options:
      table: type-setting
    type: str
    dynamic_valid_values: node_type_keys.type
    description: 'The `type:` variable needs to be defined for each device in the
      fabric.

      This is leveraged to load the appropriate template to generate the configuration.

      '
  underlay_filter_peer_as:
    documentation_options:
      table: fabric-settings
    type: bool
    description: 'Configure route-map on eBGP sessions towards underlay peers, where
      prefixes with the peer''s ASN in the AS Path are filtered away.

      This is very useful in very large scale networks not using EVPN overlays, where
      convergence will be quicker by not having to return

      all updates received from Spine-1 to Spine-2 just for Spine-2 to throw them
      away because of AS Path loop detection.

      Note that this setting cannot be used while there are EVPN services present
      in the default VRF.

      '
    default: false
  underlay_filter_redistribute_connected:
    documentation_options:
      table: fabric-settings
    description: 'Filter redistribution of connected into the underlay routing protocol.

      Only applicable when overlay_routing_protocol != ''none'' and underlay_routing_protocol
      == BGP.

      Creates a route-map and prefix-list assigned to redistribute connected permitting
      only loopbacks and inband management subnets.

      '
    default: true
    type: bool
  underlay_ipv6:
    documentation_options:
      table: fabric-settings
    description: 'This feature allows IPv6 underlay routing protocol with RFC5549
      addresses to be used along with IPv4 advertisements as VXLAN tunnel endpoints.

      Requires "underlay_rfc5549: true" and "loopback_ipv6_pool" under the node type
      settings.

      '
    type: bool
    default: false
  underlay_isis_instance_name:
    documentation_options:
      table: isis-settings
    description: Default -> "EVPN_UNDERLAY" for l3ls, "CORE" for mpls.
    type: str
  underlay_multicast:
    documentation_options:
      table: fabric-settings
    type: bool
    description: 'Enable Multicast in the underlay on all p2p uplink interfaces and
      mlag l3 peer interface.

      Specifically PIM Sparse-Mode will be configured on all routed underlay interfaces.

      No other configuration is added, so the underlay will only support Source-Specific
      Multicast (SSM).

      The configuration is intended to be used as multicast underlay for EVPN OISM
      overlay.

      '
    default: false
  underlay_multicast_anycast_rp:
    documentation_options:
      table: fabric-settings
    type: dict
    description: 'If multiple nodes are configured under ''underlay_multicast_rps.[].nodes''
      for the same RP address, they will be configured

      with one of the following methods:

      - Anycast RP using PIM (RFC4610).

      - Anycast RP using MSDP (RFC4611).


      NOTE: When using MSDP, all nodes across all MSDP enabled RPs will be added to
      a single MSDP mesh group named "ANYCAST-RP".

      '
    keys:
      mode:
        type: str
        valid_values:
        - pim
        - msdp
        default: pim
  underlay_multicast_rps:
    documentation_options:
      table: fabric-settings
    description: 'List of PIM Sparse-Mode Rendevouz Points configured for underlay
      multicast on all devices.

      The device(s) listed under ''nodes'', will be configured as the Rendevouz point
      router(s).

      If multiple nodes are configured under ''nodes'' for the same RP address, they
      will be configured

      according to the ''underlay_multicast_anycast_rp.mode'' setting.


      Requires ''underlay_multicast: true''.

      '
    type: list
    primary_key: rp
    items:
      type: dict
      keys:
        rp:
          type: str
          description: RP IPv4 address.
        nodes:
          type: list
          description: 'List of nodes where a Loopback interface with the RP address
            will be configured.

            '
          primary_key: name
          items:
            type: dict
            keys:
              name:
                type: str
                description: Hostname.
              loopback_number:
                type: int
                convert_types:
                - str
                required: true
              description:
                type: str
                description: Interface description.
                default: PIM RP
        groups:
          type: list
          description: 'List of groups to associate with the RP address set in ''rp''.

            If access_list_name is set, a standard access-list will be configured
            matching these groups.

            Otherwise the groups are configured directly on the RP command.

            '
          items:
            type: str
            description: Multicast Group IPv4 prefix/mask.
        access_list_name:
          type: str
          convert_types:
          - int
          description: 'Name of standard Access-List.

            '
  underlay_ospf_area:
    documentation_options:
      table: ospf-settings
    type: str
    convert_types:
    - int
    format: ipv4
    default: 0.0.0.0
  underlay_ospf_bfd_enable:
    documentation_options:
      table: ospf-settings
    type: bool
    default: false
  underlay_ospf_max_lsa:
    documentation_options:
      table: ospf-settings
    type: int
    convert_types:
    - str
    default: 12000
  underlay_ospf_process_id:
    documentation_options:
      table: ospf-settings
    type: int
    convert_types:
    - str
    default: 100
  underlay_rfc5549:
    documentation_options:
      table: fabric-settings
    description: 'Point to Point Underlay with RFC 5549(eBGP), i.e. IPv6 Unnumbered.

      Requires "underlay_routing_protocol: ebgp".

      '
    type: bool
    default: false
  underlay_routing_protocol:
    documentation_options:
      table: fabric-settings
    type: str
    convert_to_lower_case: true
    description: "- The following underlay routing protocols are supported:\n  - EBGP
      (default for l3ls-evpn)\n  - OSPF.\n  - OSPF-LDP*.\n  - ISIS.\n  - ISIS-SR*.\n
      \ - ISIS-LDP*.\n  - ISIS-SR-LDP*.\n  - No underlay routing protocol (none)\n-
      The variables should be applied to all devices in the fabric.\n*Only supported
      with core_interfaces data model.\n"
    valid_values:
    - ebgp
    - ospf
    - ospf-ldp
    - isis
    - isis-sr
    - isis-ldp
    - isis-sr-ldp
    - none
  uplink_ptp:
    documentation_options:
      table: fabric-settings
    description: Enable PTP on all infrastructure links.
    type: dict
    keys:
      enable:
        type: bool
        default: false
  use_cv_topology:
    documentation_options:
      table: cv-topology
    type: bool
    description: 'Generate AVD configurations directly from a given CloudVision topology.

      See `cv_topology` for details.'
  vtep_vvtep_ip:
    documentation_options:
      table: overlay-settings
    description: 'IP Address used as Virtual VTEP. Will be configured as secondary
      IP on Loopback1.

      This is only needed for centralized routing designs.

      '
    type: str
  vxlan_vlan_aware_bundles:
    documentation_options:
      table: evpn-settings
    deprecation:
      warning: true
      new_key: evpn_vlan_aware_bundles
      removed: true
      remove_in_version: 4.0.0
    type: bool
    default: false
  wan_carriers:
    documentation_options:
      table: wan-path-groups-and-carriers
    description: List of carriers used for the WAN configuration and their mapping
      to path-groups.
    type: list
    primary_key: name
    items:
      type: dict
      keys:
        name:
          type: str
          description: Carrier name.
        description:
          type: str
          description: Additional information about the carrier for documentation
            purposes.
        path_group:
          type: str
          description: The path-group to which this carrier belongs.
          required: true
        trusted:
          type: bool
          default: false
          description: 'Set this to `true` to mark this carrier as "trusted".

            WAN interfaces require an inbound access-list to be set unless the carrier
            is "trusted".'
  wan_ha:
    documentation_options:
      table: wan-settings
    description: 'PREVIEW: The `wan_ha` key is currently not supported'
    type: dict
    keys:
      lan_ha_path_group_name:
        type: str
        default: LAN_HA
        description: 'When WAN HA is enabled for a site if `wan_mode: cv-pathfinder`,
          a default path-group is injected to form DPS tunnels over LAN.

          This key allows to overwrite the default LAN HA path-group name.'
  wan_ipsec_profiles:
    documentation_options:
      table: wan-settings
    description: Define IPsec profiles parameters for WAN configuration.
    type: dict
    keys:
      control_plane:
        type: dict
        required: true
        $ref: eos_designs#/$defs/ipsec_profile
        keys:
          ike_policy_name:
            type: str
            default: CP-IKE-POLICY
          sa_policy_name:
            type: str
            default: CP-SA-POLICY
          profile_name:
            type: str
            default: CP-PROFILE
          shared_key:
            type: str
            required: true
            description: 'The IPSec shared key.

              This variable is sensitive and SHOULD be configured using some vault
              mechanism.'
      data_plane:
        type: dict
        $ref: eos_designs#/$defs/ipsec_profile
        description: If `data_plane` is not defined, `control_plane` information is
          used for both.
        keys:
          ike_policy_name:
            type: str
            default: DP-IKE-POLICY
          sa_policy_name:
            type: str
            default: DP-SA-POLICY
          profile_name:
            type: str
            default: DP-PROFILE
  wan_mode:
    documentation_options:
      table: wan-settings
    description: Select if the WAN should be run using CV Pathfinder or AutoVPN only.
    type: str
    default: cv-pathfinder
    valid_values:
    - autovpn
    - cv-pathfinder
  wan_path_groups:
    documentation_options:
      table: wan-path-groups-and-carriers
    description: List of path-groups used for the WAN configuration.
    type: list
    primary_key: name
    items:
      type: dict
      keys:
        name:
          type: str
          description: Path-group name.
        id:
          type: int
          convert_types:
          - str
          description: 'Path-group id.

            Required until an auto ID algorithm is implemented.'
          required: true
        description:
          type: str
          description: Additional information about the path-group for documentation
            purposes.
        ipsec:
          type: dict
          description: Configuration of IPSec at the path-group level.
          keys:
            dynamic_peers:
              type: bool
              description: Enable IPSec for dynamic peers.
              default: true
            static_peers:
              type: bool
              description: Enable IPSec for static peers.
              default: true
        import_path_groups:
          type: list
          description: List of path-groups to import in this path-group.
          items:
            type: dict
            keys:
              remote:
                type: str
                description: Remote path-group to import.
              local:
                type: str
                description: Optional, if not set, the path-group `name` is used as
                  local.
        default_preference:
          type: str
          convert_types:
          - int
          description: 'Preference value used when a preference is not given for a
            path-group in the `wan_virtual_topologies.policies` input or when

            the path-group is used in an auto generated policy except if `excluded_from_default_policy`
            is set to `true.


            Valid values are 1-65535 | "preferred" | "alternate".


            `preferred` is converted to priority 1.

            `alternate` is converted to priority 2.'
          default: preferred
        excluded_from_default_policy:
          type: bool
          default: false
          description: When set to `true`, the path-group is excluded from AVD auto
            generated policies.
        dps_keepalive:
          type: dict
          description: Period between the transmission of consecutive keepalive messages,
            and failure threshold.
          keys:
            interval:
              type: str
              convert_types:
              - int
              description: 'Interval in milliseconds. Valid values are 50-60000 |
                "auto"


                When auto, the interval and failure_threshold are automatically determined
                based on

                path state.'
            failure_threshold:
              type: int
              min: 2
              max: 100
              default: 5
              description: Failure threshold in number of lost keep-alive messages.
              convert_types:
              - str
  wan_route_servers:
    description: 'List of the AutoVPN RRs when using `wan_mode`=`autovpn`, or the
      Pathfinders

      when using `wan_mode`=`cv-pathfinder`, to which the device should connect to.

      This is also used to establish iBGP sessions between WAN route servers.


      When the route server is part of the same inventory as the WAN routers,

      only the name is required.'
    type: list
    primary_key: hostname
    items:
      type: dict
      keys:
        hostname:
          type: str
          description: Route-Reflector hostname.
        vtep_ip:
          type: str
          description: Route-Reflector VTEP IP Address. This is usually the IP address
            under `interface Dps1`.
        path_groups:
          type: list
          description: Path-groups through which the Route Reflector/Pathfinder is
            reached.
          primary_key: name
          items:
            type: dict
            keys:
              name:
                type: str
                description: Path-group name.
              interfaces:
                type: list
                primary_key: name
                required: true
                min_length: 1
                items:
                  type: dict
                  keys:
                    name:
                      type: str
                      description: Interface name.
                    ip_address:
                      type: str
                      description: The public IPv4 address (without mask) of the Route
                        Reflector for this path-group.
                      deprecation:
                        warning: true
                        new_key: public_ip
                        removed: true
                        remove_in_version: 4.7.0
                    public_ip:
                      type: str
                      description: The public IPv4 address (without mask) of the Route
                        Reflector for this path-group.
  wan_stun_dtls_disable:
    type: bool
    documentation_options:
      table: wan-settings
    default: false
    description: 'WAN STUN connections are authenticated and secured with DTLS by
      default.

      For CV Pathfinder deployments CloudVision will automatically deploy certificates
      on the devices.

      In case of AutoVPN the certificates must be deployed manually to all devices.


      For LAB environments this can be disabled, if there are no certificates available.

      This should NOT be disabled for a WAN network connected to the internet, since
      it will leave the STUN service exposed with no authentication.'
  wan_stun_dtls_profile_name:
    type: str
    documentation_options:
      table: wan-settings
    default: STUN-DTLS
    description: 'Name of the SSL profile used for DTLS on WAN STUN connections.

      When using automatic ceritficate deployment via CloudVision this name must be
      the same on all WAN routers.'
  wan_virtual_topologies:
    type: dict
    description: 'Configure Virtual Topologies for CV Pathfinder and AutoVPN.

      Auto create a control plane profile/policy/application and enforce it being
      first in the default VRF.'
    keys:
      vrfs:
        type: list
        description: Map a VRF that exists in network_services to an AVT policy.
        primary_key: name
        items:
          type: dict
          keys:
            name:
              type: str
              convert_types:
              - int
              description: VRF name.
            policy:
              type: str
              description: 'Name of the policy to apply to this VRF.

                AVD will auto generate a default policy DEFAULT-POLICY and apply it
                to the VRF(s)

                where the `policy` key is not set.

                It is possible to overwrite the default policy for all VRFs using
                it

                by redefining it in the `wan_virtual_topologies.policies` list using
                the

                default name `DEFAULT-POLICY`.'
              default: DEFAULT-POLICY
            wan_vni:
              type: int
              convert_types:
              - str
              min: 1
              max: 255
              required: true
              description: 'Required for VRFs carried over AutoVPN or CV Pathfinder
                WAN.


                A VRF can have different VNIs between the Datacenters and the WAN.

                Note that if no VRF default is configured for WAN, AVD will automatically
                inject the VRF default with

                `wan_vni` set to `1`.

                In addition either `vrf_id` or `vrf_vni` must be set to enforce consistent
                route-targets across domains.'
      control_plane_virtual_topology:
        type: dict
        description: 'Always injected into the default VRF policy as the first entry.


          By default, if no path-groups are specified, all locally available path-groups

          are used in the generated load-balance policy.

          ID is hardcoded to 254 for the AVT profile in CV Pathfinder mode.'
        $ref: eos_designs#/$defs/virtual_topology
        keys:
          name:
            type: str
            description: Optional name, if not set `CONTROL-PLANE-PROFILE` is used.
          application_profile:
            type: str
            default: APP-PROFILE-CONTROL-PLANE
            description: 'The application profile to use for control plane traffic.


              The application profile should be defined under `application_classification.application_profiles`.

              If not defined AVD will auto generate an application profile using the
              provided name or the default value.


              If not overwritten elsewhere, the application profile is generated matching
              one application matching the control plane traffic either sourced from
              or destined to the WAN route servers.'
      policies:
        type: list
        description: "List of virtual toplogies policies.\n\nFor AutoVPN, each item
          in the list creates:\n  * one policy with:\n      * one `match` entry per
          `application_virtual_topologies` item\n        they are indexed using `10
          * <list_index>` where `list_index` starts at `1`.\n      * one `default-match`\n
          \ * one load-balance policy per `application_virtual_topologies` and one
          for the `default_virtual_topology`.\n  * if the policy is associated with
          the default VRF, a special control-plane rule is injected\n    in the policy
          with index `1` referring to a control-plane load-balance policy as defined
          under\n    `control_plane_virtual_topology` or if not set, the default one.\n\nFor
          CV Pathfinder, each item in the list creates:\n  * one policy with:\n      *
          one `match` entry per `application_virtual_topologies` item ordered as in
          the data.\n      * one last match entry for the `default` application-profile
          using `default_virtual_topology` information.\n  * one profile per `application_virtual_topologies`
          item.\n  * one profile for the `default_virtual_topology`.\n  * one load-balance
          policy per `application_virtual_topologies`.\n  * one load_balance policy
          for the `default_virtual_topology`.\n  * if the policy is associated with
          the default VRF, a special control-plane profile is configured\n    and
          injected first in the policy assigned to the `default` VRF. This profile
          points to a\n    control-plane load-balance policy as defined under `control_plane_virtual_topology`
          or if not set, the default one."
        primary_key: name
        items:
          type: dict
          keys:
            name:
              type: str
              description: Name of the AVT policy.
            application_virtual_topologies:
              type: list
              description: List of application specific virtual topologies.
              primary_key: application_profile
              items:
                type: dict
                $ref: eos_designs#/$defs/virtual_topology
                keys:
                  application_profile:
                    type: str
                    description: The application profile to use for this virtual topology.
                      It must be a defined `application_classification.application_profile`.
                  name:
                    type: str
                    description: Optional name, if not set `<policy_name>-<application_profile>`
                      is used.
                  id:
                    type: int
                    $ref: eos_cli_config_gen#keys/router_adaptive_virtual_topology/keys/vrfs/items/keys/profiles/items/keys/id
                    required: false
                    min: 2
                    max: 253
                    description: 'ID of the AVT in each VRFs. ID must be unique across
                      all virtual topologies in a policy.

                      ID 1 is reserved for the default_virtual_toplogy.

                      ID 254 is reserved for the control_plane_virtual_topology.


                      `id` is required when `wan_mode` is ''cv-pathfinder''.'
            default_virtual_topology:
              type: dict
              description: 'Default match for the policy.

                If no default match should be configured, set `drop_unmatched` to
                `true`.

                Otherwise, in CV Pathfinder mode, a default AVT profile will be configured
                with ID 1.'
              $ref: eos_designs#/$defs/virtual_topology
              required: true
              keys:
                name:
                  type: str
                  description: Optional name, if not set `<policy_name>-DEFAULT` is
                    used.
                drop_unmatched:
                  type: bool
                  description: When set, no `catch-all` match is configured for the
                    policy and unmatched traffic is dropped.
                  default: false
dynamic_keys:
  connected_endpoints_keys.key:
    $ref: eos_designs#/$defs/connected_endpoints
    type: list
    display_name: Connected Endpoints
    documentation_options:
      table: connected-endpoints
  network_services_keys.name:
    $ref: eos_designs#/$defs/network_services
    type: list
    display_name: Network Services
    documentation_options:
      table: network-services
  node_type_keys.key:
    $ref: eos_designs#/$defs/node_type
    type: dict
    documentation_options:
      table: node-type-structure
$defs:
  adapter_config:
    type: dict
    keys:
      speed:
        type: str
        description: 'Set adapter speed in the format `<interface_speed>` or `forced
          <interface_speed>` or `auto <interface_speed>`.

          If not specified speed will be auto.

          '
      description:
        type: str
        description: 'By default the description is built leveraging `<peer>_<peer_interface>`.

          When set this key will overide the default value on the physical ports.

          '
      profile:
        type: str
        description: Port-profile name to inherit configuration.
      enabled:
        type: bool
        description: 'Administrative state, setting to false will set the port to
          ''shutdown'' in the intended configuration.

          '
        default: true
      mode:
        type: str
        valid_values:
        - access
        - dot1q-tunnel
        - trunk
        - trunk phone
        description: Interface mode.
      mtu:
        type: int
        convert_types:
        - str
        min: 68
        max: 65535
      l2_mtu:
        type: int
        $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/keys/l2_mtu
      l2_mru:
        type: int
        $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/keys/l2_mru
      native_vlan:
        type: int
        convert_types:
        - str
        description: 'Native VLAN for a trunk port.

          If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag` takes precedence.

          '
        min: 1
        max: 4094
      native_vlan_tag:
        type: bool
        default: false
        description: If both `native_vlan` and `native_vlan_tag`, `native_vlan_tag`
          takes precedence.
      phone_vlan:
        type: int
        convert_types:
        - str
        description: 'Phone VLAN for a mode `trunk phone` port.

          Requires `mode: trunk phone` to be set.'
        min: 1
        max: 4094
      phone_trunk_mode:
        type: str
        valid_values:
        - tagged
        - untagged
        - tagged phone
        - untagged phone
        description: 'Specify if the phone traffic is tagged or untagged.

          If both data and phone traffic are untagged, MAC-Based VLAN Assignment (MBVA)
          is used, if supported by the model of switch.'
      trunk_groups:
        type: list
        items:
          type: str
        description: 'Required with `enable_trunk_groups: true`.

          Trunk Groups are used for limiting VLANs on trunk ports to VLANs with the
          same Trunk Group.

          '
      vlans:
        type: str
        description: Interface VLANs - if not set, the EOS default is that all VLANs
          are allowed for trunk ports, and VLAN 1 will be used for access ports.
        convert_types:
        - int
      spanning_tree_portfast:
        type: str
        valid_values:
        - edge
        - network
      spanning_tree_bpdufilter:
        type: str
        convert_types:
        - bool
        valid_values:
        - enabled
        - disabled
        - 'True'
        - 'False'
        - 'true'
        - 'false'
      spanning_tree_bpduguard:
        type: str
        convert_types:
        - bool
        valid_values:
        - enabled
        - disabled
        - 'True'
        - 'False'
        - 'true'
        - 'false'
      flowcontrol:
        type: dict
        keys:
          received:
            type: str
            valid_values:
            - received
            - send
            - 'on'
      qos_profile:
        type: str
        description: QOS profile name
      ptp:
        type: dict
        description: '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.

          '
        keys:
          enabled:
            type: bool
            default: false
          endpoint_role:
            type: str
            default: follower
            valid_values:
            - bmca
            - default
            - follower
          profile:
            type: str
            default: aes67-r16-2016
            valid_values:
            - aes67
            - aes67-r16-2016
            - smpte2059-2
      sflow:
        type: bool
        description: 'Configures sFlow on the interface. Overrides `fabric_sflow`
          setting.

          '
      link_tracking:
        type: dict
        description: 'Configure the downstream interfaces of a respective Link Tracking
          Group.

          If `port_channel` is defined in an adapter, then the port-channel interface
          is configured to be the downstream.

          Else all the ethernet interfaces will be configured as downstream -> to
          configure single-active EVPN multihomed networks.

          '
        keys:
          enabled:
            type: bool
          name:
            type: str
            description: 'Tracking group name.

              The default group name is taken from fabric variable of the switch,
              `link_tracking.groups[0].name` with default value being "LT_GROUP1".

              Optional if default link_tracking settings are configured on the node.

              '
      dot1x:
        type: dict
        description: 802.1x
        keys:
          port_control:
            type: str
            valid_values:
            - auto
            - force-authorized
            - force-unauthorized
          port_control_force_authorized_phone:
            type: bool
          reauthentication:
            type: bool
          pae:
            type: dict
            keys:
              mode:
                type: str
                valid_values:
                - authenticator
          authentication_failure:
            type: dict
            keys:
              action:
                type: str
                valid_values:
                - allow
                - drop
              allow_vlan:
                type: int
                convert_types:
                - str
                min: 1
                max: 4094
          host_mode:
            type: dict
            keys:
              mode:
                type: str
                valid_values:
                - multi-host
                - single-host
              multi_host_authenticated:
                type: bool
          mac_based_authentication:
            type: dict
            keys:
              enabled:
                type: bool
              always:
                type: bool
              host_mode_common:
                type: bool
          timeout:
            type: dict
            keys:
              idle_host:
                type: int
                convert_types:
                - str
                min: 10
                max: 65535
              quiet_period:
                type: int
                convert_types:
                - str
                min: 1
                max: 65535
              reauth_period:
                type: str
                convert_types:
                - int
                description: Range 60-4294967295 or "server".
              reauth_timeout_ignore:
                type: bool
              tx_period:
                type: int
                convert_types:
                - str
                min: 1
                max: 65535
          reauthorization_request_limit:
            type: int
            convert_types:
            - str
            min: 1
            max: 10
          unauthorized:
            type: dict
            keys:
              access_vlan_membership_egress:
                type: bool
              native_vlan_membership_egress:
                type: bool
      poe:
        $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/keys/poe
        type: dict
        description: Power Over Ethernet settings applied on port. Only configured
          if platform supports PoE.
      storm_control:
        type: dict
        description: Storm control settings applied on port toward the endpoint.
        keys:
          all:
            type: dict
            keys:
              level:
                type: str
                convert_types:
                - int
                - float
                description: Configure maximum storm-control level.
              unit:
                type: str
                valid_values:
                - percent
                - pps
                default: percent
                description: Optional variable and is hardware dependent.
          broadcast:
            type: dict
            $ref: eos_designs#/$defs/adapter_config/keys/storm_control/keys/all
          multicast:
            type: dict
            $ref: eos_designs#/$defs/adapter_config/keys/storm_control/keys/all
          unknown_unicast:
            type: dict
            $ref: eos_designs#/$defs/adapter_config/keys/storm_control/keys/all
      monitor_sessions:
        type: list
        description: Used to define switchports as source or destination for monitoring
          sessions.
        items:
          type: dict
          keys:
            name:
              type: str
              required: true
              description: Session name.
            role:
              type: str
              valid_values:
              - source
              - destination
            source_settings:
              type: dict
              keys:
                direction:
                  type: str
                  valid_values:
                  - rx
                  - tx
                  - both
                access_group:
                  type: dict
                  keys:
                    type:
                      type: str
                      valid_values:
                      - ip
                      - ipv6
                      - mac
                    name:
                      description: ACL name.
                      type: str
                    priority:
                      type: int
                      convert_types:
                      - str
            session_settings:
              type: dict
              description: 'Session settings are defined per session name.

                Different session_settings for the same session name will be combined/merged.

                '
              keys:
                encapsulation_gre_metadata_tx:
                  type: bool
                header_remove_size:
                  type: int
                  description: Number of bytes to remove from header.
                  convert_types:
                  - str
                access_group:
                  type: dict
                  keys:
                    type:
                      type: str
                      valid_values:
                      - ip
                      - ipv6
                      - mac
                    name:
                      description: ACL name.
                      type: str
                rate_limit_per_ingress_chip:
                  type: str
                  description: "Ratelimit and unit as string.\nExamples:\n  \"100000
                    bps\"\n  \"100 kbps\"\n  \"10 mbps\"\n"
                rate_limit_per_egress_chip:
                  type: str
                  description: "Ratelimit and unit as string.\nExamples:\n  \"100000
                    bps\"\n  \"100 kbps\"\n  \"10 mbps\"\n"
                sample:
                  type: int
                  convert_types:
                  - str
                truncate:
                  type: dict
                  keys:
                    enabled:
                      type: bool
                    size:
                      type: int
                      description: Size in bytes
                      convert_types:
                      - str
      ethernet_segment:
        type: dict
        description: Settings for all or single-active EVPN multihoming.
        keys:
          short_esi:
            type: str
            required: true
            description: 'In format xxxx:xxxx:xxxx or "auto".

              Define a manual short-esi (be careful using this on profiles) or set
              the value to "auto" to automatically generate the value.

              Please see the notes under "EVPN A/A ESI dual and single-attached endpoint
              scenarios" before setting `short_esi: auto`.

              '
          redundancy:
            type: str
            valid_values:
            - all-active
            - single-active
            description: 'If omitted, Port-Channels use the EOS default of all-active.

              If omitted, Ethernet interfaces are configured as single-active.

              '
          designated_forwarder_algorithm:
            type: str
            valid_values:
            - auto
            - modulus
            - preference
            description: "Configure DF algorithm and preferences.\n- auto: Use preference-based
              algorithm and assign preference based on position of device in the 'switches'
              list,\n  e.g., assuming a list of three switches, this would assign
              a preference of 200 to the first switch, 100 to the 2nd, and 0 to the
              third.\n- preference: Set preference for each switch manually using
              designated_forwarder_preferences key.\n- modulus: Use the default modulus-based
              algorithm.\nIf omitted, Port-Channels use the EOS default of modulus.\nIf
              omitted, Ethernet interfaces default to the 'auto' mechanism detailed
              above.\n"
          designated_forwarder_preferences:
            type: list
            description: Manual preference as described above, required only for preference
              algorithm.
            items:
              type: int
              convert_types:
              - str
          dont_preempt:
            type: bool
            description: Disable preemption for single-active forwarding when auto/manual
              DF preference is configured.
      port_channel:
        type: dict
        description: Used for port-channel adapter.
        keys:
          mode:
            type: str
            description: Port-Channel Mode.
            valid_values:
            - active
            - passive
            - 'on'
          channel_id:
            type: int
            convert_types:
            - str
            description: 'Port-Channel ID.

              If no channel_id is specified, an id is generated from the first switch
              port in the port channel.

              '
          description:
            type: str
            description: 'By default the description is built leveraging `<peer>`
              name or `adapter.description` when defined.

              When this key is defined, it will append its content to the physical
              port description.

              '
          enabled:
            type: bool
            default: true
            description: 'Port-Channel administrative state.

              Setting to false will set port to ''shutdown'' in intended configuration.

              '
          esi:
            type: str
            description: Format xxxx:xxxx:xxxx.
            deprecation:
              warning: true
              removed: true
              remove_in_version: 4.0.0
              new_key: short_esi
          short_esi:
            type: str
            description: In format xxxx:xxxx:xxxx or "auto".
            deprecation:
              warning: true
              remove_in_version: 5.0.0
              new_key: ethernet_segment.short_esi
          lacp_fallback:
            type: dict
            description: LACP fallback configuration.
            keys:
              mode:
                type: str
                valid_values:
                - static
                - individual
                description: 'Either static or individual mode is supported.

                  If the mode is set to "individual" the "individual.profile" setting
                  must be defined.

                  '
              individual:
                type: dict
                description: Define parameters for port-channel member interfaces.
                  Applies only if LACP fallback is set to "individual".
                keys:
                  profile:
                    type: str
                    description: Port-profile name to inherit configuration.
              timeout:
                type: int
                convert_types:
                - str
                description: Timeout in seconds. EOS default is 90 seconds.
          lacp_timer:
            type: dict
            description: LACP timer configuration. Applies only when Port-channel
              mode is not "on".
            keys:
              mode:
                type: str
                valid_values:
                - normal
                - fast
                description: LACP mode for interface members.
              multiplier:
                type: int
                convert_types:
                - str
                description: Number of LACP BPDUs lost before deeming the peer down.
                  EOS default is 3.
          subinterfaces:
            type: list
            description: 'Port-Channel L2 Subinterfaces

              Subinterfaces are only supported on routed port-channels, which means
              they cannot be configured on MLAG port-channels.

              Setting short_esi: auto generates the short_esi automatically using
              a hash of configuration elements.

              Please see the notes under "EVPN A/A ESI dual-attached endpoint scenario"
              before setting short_esi: auto.

              '
            items:
              type: dict
              keys:
                number:
                  type: int
                  convert_types:
                  - str
                  description: Subinterface number
                short_esi:
                  type: str
                  description: 'In format xxxx:xxxx:xxxx or "auto"

                    Required for multihomed port-channels with subinterfaces

                    '
                vlan_id:
                  type: int
                  convert_types:
                  - str
                  min: 1
                  max: 4094
                  description: 'VLAN ID to bridge.

                    Default is subinterface number.

                    '
                encapsulation_vlan:
                  type: dict
                  description: 'Client VLAN ID encapsulation.

                    Default is subinterface number.

                    '
                  keys:
                    client_dot1q:
                      type: int
                      convert_types:
                      - str
                      min: 1
                      max: 4094
          raw_eos_cli:
            type: str
            description: EOS CLI rendered directly on the port-channel interface in
              the final EOS configuration.
          structured_config:
            type: dict
            description: Custom structured config added under port_channel_interfaces.[name=<interface>]
              for eos_cli_config_gen.
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/port_channel_interfaces/items/
      validate_state:
        type: bool
        description: Set to false to disable interface validation by the `eos_validate_state`
          role.
      raw_eos_cli:
        type: str
        description: EOS CLI rendered directly on the ethernet interface in the final
          EOS configuration.
      structured_config:
        type: dict
        description: Custom structured config added under ethernet_interfaces.[name=<interface>]
          for eos_cli_config_gen.
        documentation_options:
          hide_keys: true
        $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/
  connected_endpoints:
    type: list
    primary_key: name
    convert_types:
    - dict
    description: 'This should be applied to group_vars or host_vars where endpoints
      are connecting.

      `connected_endpoints_keys.key` is one of the keys under "connected_endpoints_keys".

      The default keys are `servers`, `firewalls`, `routers`, `load_balancers`, and
      `storage_arrays`.

      '
    items:
      type: dict
      keys:
        name:
          type: str
          description: Endpoint name will be used in the switchport description.
        rack:
          type: str
          description: Rack is used for documentation purposes only.
        adapters:
          type: list
          description: A list of adapters, group by adapters leveraging the same port-profile.
          items:
            $ref: eos_designs#/$defs/adapter_config
            type: dict
            keys:
              switch_ports:
                type: list
                required: true
                description: 'List of switch interfaces.

                  The lists `endpoint_ports`, `switch_ports`, and `switches` must
                  have the same length.

                  '
                items:
                  type: str
                  description: Switchport interface.
              switches:
                type: list
                required: true
                description: 'List of switches.

                  The lists `endpoint_ports`, `switch_ports`, and `switches` must
                  have the same length.

                  '
                items:
                  type: str
                  description: Device
              endpoint_ports:
                type: list
                description: 'Endpoint ports is used for description, required unless
                  `description` or `descriptions` is set.

                  The lists `endpoint_ports`, `switch_ports`, `descriptions` and `switches`
                  must have the same length.

                  Each list item is one switchport.

                  '
                items:
                  type: str
                  description: Interface name.
              descriptions:
                type: list
                description: 'Unique description per port. When set, takes priority
                  over description.

                  '
              server_ports:
                type: list
                deprecation:
                  warning: true
                  removed: true
                  new_key: endpoint_ports
                  remove_in_version: 4.0.0
                items:
                  type: str
                  description: Used for documentation purposes.
  ipsec_profile:
    type: dict
    keys:
      ike_policy_name:
        type: str
        description: Name of the IKE policy.
      sa_policy_name:
        type: str
        description: Name of the SA policy.
      profile_name:
        type: str
        description: Name of the IPSec profile.
      shared_key:
        type: str
        required: true
        description: 'The type 7 encrypted IPSec shared key.

          This variable is sensitive and should be configured using some vault mechanism.'
  l3_edge:
    type: dict
    keys:
      p2p_links_ip_pools:
        type: list
        convert_types:
        - dict
        primary_key: name
        secondary_key: ipv4_pool
        items:
          type: dict
          keys:
            name:
              type: str
              description: P2P pool name.
            ipv4_pool:
              type: str
              description: IPv4 address/Mask.
            prefix_size:
              type: int
              convert_types:
              - str
              description: Subnet mask size.
              default: 31
              min: 8
              max: 31
      p2p_links_profiles:
        type: list
        convert_types:
        - dict
        primary_key: name
        $ref: eos_designs#/$defs/p2p_links
        items:
          type: dict
          keys:
            name:
              type: str
              description: P2P profile name. Any variable supported under `p2p_links`
                can be inherited from a profile.
      p2p_links:
        type: list
        $ref: eos_designs#/$defs/p2p_links
        items:
          type: dict
          keys:
            nodes:
              type: list
              required: true
            profile:
              type: str
              description: P2P profile name. Profile defined under p2p_profiles.
  network_services:
    documentation_options:
      table: network-services-common-settings
    type: list
    primary_key: name
    convert_types:
    - dict
    items:
      type: dict
      keys:
        name:
          type: str
          description: 'Specify a tenant name.

            Tenant provide a construct to group L3 VRFs and L2 VLANs.

            Networks services can be filtered by tenant name.

            '
        mac_vrf_vni_base:
          type: int
          convert_types:
          - str
          min: 0
          max: 16770000
          description: 'Base number for MAC VRF VXLAN Network Identifier (required
            with VXLAN).

            VXLAN VNI is derived from the base number with simple addition.

            i.e. mac_vrf_vni_base = 10000, svi 100 = VNI 10100, svi 300 = VNI 10300.

            '
        mac_vrf_id_base:
          type: int
          convert_types:
          - str
          min: 0
          max: 16770000
          description: 'If not set, "mac_vrf_vni_base" will be used.

            Base number for MAC VRF RD/RT ID (Required unless mac_vrf_vni_base is
            set)

            ID is derived from the base number with simple addition.

            i.e. mac_vrf_id_base = 10000, svi 100 = RD/RT 10100, svi 300 = RD/RT 10300.

            '
        vlan_aware_bundle_number_base:
          type: int
          convert_types:
          - str
          default: 0
          description: 'Base number for VLAN aware bundle RD/RT.

            The "Assigned Number" part of RD/RT is derived from vrf_vni + vlan_aware_bundle_number_base.

            '
        pseudowire_rt_base:
          documentation_options:
            table: network-services-point-to-point-services-settings
          type: int
          description: 'Pseudowire RT base, used to generate route targets for VPWS
            services.

            Avoid overlapping route target spaces between different services.

            '
          convert_types:
          - str
        enable_mlag_ibgp_peering_vrfs:
          documentation_options:
            table: network-services-vrfs-settings
          type: bool
          description: 'MLAG iBGP peering per VRF.

            By default an iBGP peering is configured per VRF between MLAG peers on
            separate VLANs.

            Setting `enable_mlag_ibgp_peering_vrfs` false under a tenant will change
            this default to prevent configuration of these peerings and VLANs for
            all VRFs in the tenant.

            This setting can be overridden per VRF.

            '
        redistribute_mlag_ibgp_peering_vrfs:
          documentation_options:
            table: network-services-vrfs-settings
          type: bool
          default: true
          description: 'Redistribute the connected subnet for the MLAG iBGP peering
            per VRF into overlay BGP.

            By default the iBGP peering subnet is redistributed into the overlay routing
            protocol per VRF.

            Setting `redistribute_mlag_ibgp_peering_vrfs: false` under a tenant will
            change this default to prevent redistribution of these subnets for all
            VRFs in the tenant.

            This setting can be overridden per VRF.

            '
        bgp_peer_groups:
          documentation_options:
            table: network-services-vrfs-bgp-settings
          type: list
          primary_key: name
          convert_types:
          - dict
          description: 'List of BGP peer groups definitions.

            This will configure BGP peer groups to be used inside the tenant VRF for
            peering with external devices.

            Since BGP peer groups are configured at higher BGP level, shared between
            VRFs,

            peer_group names should not overlap between VRFs.

            '
          items:
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items
            type: dict
            keys:
              name:
                type: str
                description: BGP peer group name.
              nodes:
                type: list
                items:
                  type: str
                description: 'Nodes is required to restrict configuration of BGP neighbors
                  to certain nodes in the network.

                  If not set the peer-group is created on devices which have a bgp_peer
                  mapped to the corresponding peer_group.

                  '
        evpn_l2_multicast:
          documentation_options:
            table: network-services-multicast-settings
          description: "Enable EVPN L2 Multicast for all SVIs and l2vlans within Tenant.\n-
            Multicast group binding is created only for Multicast traffic. BULL traffic
            will use ingress-replication.\n- Configures binding between VXLAN, VLAN,
            and multicast group IPv4 address using the following formula:\n  < evpn_l2_multicast.underlay_l2_multicast_group_ipv4_pool
            > + < vlan_id - 1 > + < evpn_l2_multicast.underlay_l2_multicast_group_ipv4_pool_offset
            >.\n- The recommendation is to assign a /20 block within the 232.0.0.0/8
            Source-Specific Multicast range.\n- Enables `redistribute igmp` on the
            router bgp MAC VRF.\n- When evpn_l2_multicast.enabled is true for a VLAN
            or a tenant, \"igmp snooping\" and \"igmp snooping querier\" will always
            be enabled - overriding those individual settings.\n- Requires `evpn_multicast`
            to also be set to `true`.\n"
          type: dict
          keys:
            enabled:
              type: bool
            underlay_l2_multicast_group_ipv4_pool:
              type: str
              description: IPv4_address/Mask
            underlay_l2_multicast_group_ipv4_pool_offset:
              type: int
              convert_types:
              - str
        evpn_l3_multicast:
          documentation_options:
            table: network-services-multicast-settings
          description: "Enable L3 Multicast for all SVIs and l3vlans within Tenant.\n-
            In the evpn-l3ls design type, this enables L3 EVPN Multicast (aka OISM)'.\n-
            Multicast group binding for VRF is created only for Multicast traffic.
            BULL traffic will use ingress-replication.\n- Configures binding between
            VXLAN, VLAN, and multicast group IPv4 address using the following formula:\n
            \ < l3_multicast.evpn_underlay_l3_multicast_group_ipv4_pool > + < vrf_vni
            - 1 > + < l3_multicast.evpn_underlay_l3_multicast_group_ipv4_pool_offset
            >.\n- The recommendation is to assign a /20 block within the 232.0.0.0/8
            Source-Specific Multicast range.\n- If enabled on an SVI using the anycast
            default gateway feature, a diagnostic loopback (see below) MUST be configured
            to source IGMP traffic.\n- Enables `evpn multicast` on the router bgp
            VRF.\n- When enabled on an SVI:\n     - If switch is part of an MLAG pair,
            enables \"pim ipv4 sparse-mode\" on the SVI.\n     - If switch is standalone
            or A-A MH, enables \"ip igmp\" on the SVI.\n     - If \"ip address virtual\"
            is configured, enables \"pim ipv4 local-interface\" and uses the diagnostic
            Loopback defined in the VRF\n- Requires `evpn_multicast` to also be set
            to `true`.\n"
          type: dict
          keys:
            enabled:
              type: bool
            evpn_underlay_l3_multicast_group_ipv4_pool:
              type: str
              description: IPv4_address/Mask
              required: true
            evpn_underlay_l3_multicast_group_ipv4_pool_offset:
              type: int
              convert_types:
              - str
            evpn_peg:
              type: list
              description: 'For each group of nodes, allow configuration of EVPN PEG
                options.

                The first group of settings where the device''s hostname is present
                in the ''nodes'' list will be used.

                '
              items:
                type: dict
                keys:
                  nodes:
                    description: A description will be applied to all nodes with RP
                      addresses configured if not set.
                    type: list
                    items:
                      type: str
                  transit:
                    description: Enable EVPN PEG transit mode.
                    type: bool
        pim_rp_addresses:
          documentation_options:
            table: network-services-multicast-settings
          description: 'For each group of nodes, allow configuration of RP Addresses
            & associated groups.

            '
          type: list
          items:
            type: dict
            keys:
              rps:
                description: List of Rendevouz Points.
                type: list
                min_length: 1
                items:
                  type: str
                  description: RP address.
              nodes:
                description: 'Restrict configuration to specific nodes.

                  Configuration Will be applied to all nodes if not set.

                  '
                type: list
                items:
                  type: str
              groups:
                type: list
                items:
                  type: str
                  description: Group_prefix/mask.
              access_list_name:
                type: str
                convert_types:
                - int
                description: 'List of groups to associate with the RP address set
                  in ''rp''.

                  If access_list_name is set, a standard access-list will be configured
                  matching these groups.

                  Otherwise the groups are configured directly on the RP command.

                  '
        igmp_snooping_querier:
          documentation_options:
            table: network-services-multicast-settings
          description: 'Enable IGMP snooping querier for each SVI/l2vlan within tenant,
            by default using IP address of Loopback 0.

            When enabled, IGMP snooping querier will only be configured on L3 devices,
            i.e., uplink_type: p2p.

            '
          type: dict
          keys:
            enabled:
              type: bool
              description: Will be enabled automatically if "evpn_l2_multicast" is
                enabled.
            source_address:
              type: str
              format: ipv4
              description: Default IP address of Loopback0
            version:
              type: int
              convert_types:
              - str
              valid_values:
              - 1
              - 2
              - 3
              default: 2
        evpn_l2_multi_domain:
          type: bool
          default: true
          description: Explicitly extend all VLANs/VLAN-Aware Bundles inside the tenant
            to remote EVPN domains.
        vrfs:
          documentation_options:
            table: network-services-vrfs-settings
          type: list
          primary_key: name
          convert_types:
          - dict
          description: 'VRFs will only be configured on a node if any of the underlying
            objects like `svis` or `l3_interfaces` apply to the node.


            It is recommended to only define a VRF in one Tenant. If the same VRF
            name is used across multiple tenants and those tenants

            are accepted by `filter.tenants` on the node, any object set under the
            duplicate VRFs must either be unique or be an exact match.


            VRF "default" is partially supported under network-services. Currently
            the supported options for "default" vrf are route-target,

            route-distinguisher settings, structured_config, raw_eos_cli in bgp and
            SVIs are the only supported interface type.

            Vlan-aware-bundles are supported as well inside default vrf. OSPF is not
            supported currently.

            '
          items:
            type: dict
            keys:
              name:
                type: str
                convert_types:
                - int
              address_families:
                type: list
                items:
                  type: str
                  valid_values:
                  - evpn
                  - vpn-ipv4
                  - vpn-ipv6
              description:
                type: str
                description: VRF description.
              vrf_vni:
                type: int
                convert_types:
                - str
                min: 1
                max: 16777215
                description: 'Required if "vrf_id" is not set.

                  The VRF VNI range is not limited, but if vrf_id is not set, "vrf_vni"
                  is used for calculating MLAG iBGP peering vlan id.

                  "vrf_vni" may also be used for VRF RD/RT ID. See "overlay_rd_type"
                  and "overlay_rt_type" for details.

                  See "mlag_ibgp_peering_vrfs.base_vlan" for details.

                  If vrf_vni > 10000 make sure to adjust "mac_vrf_vni_base" accordingly
                  to avoid overlap.

                  '
              vrf_id:
                type: int
                convert_types:
                - str
                description: 'Required if "vrf_vni" is not set.

                  "vrf_id" is used as default value for "vrf_vni" and "ospf.process_id"
                  unless those are set.

                  "vrf_id" may also be used for VRF RD/RT ID. See "overlay_rd_type"
                  and "overlay_rt_type" for details.

                  "vrf_id" is preferred over "vrf_vni" for MLAG iBGP peering vlan,
                  see "mlag_ibgp_peering_vrfs.base_vlan" for details.

                  '
              rd_override:
                type: str
                convert_types:
                - int
                description: "By default, the VRF RD will be derived from the pattern
                  defined in `overlay_rd_type`.\nThe rd_override allows us to override
                  this value and statically define it.\n\nrd_override supports two
                  formats:\n  - A single number will be used in the RD assigned number
                  subfield (second part of the RD).\n  - A full RD string with colon
                  seperator which will override the full RD.\n"
              rt_override:
                type: str
                convert_types:
                - int
                description: "By default, the VRF RT will be derived from the pattern
                  defined in `overlay_rt_type`.\nThe rt_override allows us to override
                  this value and statically define it.\n\nrt_override supports two
                  formats:\n  - A single number will be used in the RT assigned number
                  subfield (second part of the RT).\n  - A full RT string with colon
                  seperator which will override the full RT.\n"
              mlag_ibgp_peering_ipv4_pool:
                type: str
                description: 'IPv4_address/Mask

                  The subnet used for iBGP peering in the VRF.

                  Each MLAG pair will be assigned a subnet based on the ID of the
                  primary MLAG switch.

                  If not set, "mlag_peer_l3_ipv4_pool" or "mlag_peer_ipv4_pool" will
                  be used.

                  '
              ip_helpers:
                type: list
                primary_key: ip_helper
                convert_types:
                - dict
                description: IP helper for DHCP relay.
                items:
                  type: dict
                  keys:
                    ip_helper:
                      type: str
                      description: IPv4 DHCP server IP.
                    source_interface:
                      type: str
                      description: Interface name.
                    source_vrf:
                      type: str
                      description: VRF to originate DHCP relay packets to DHCP server.
                        If not set, uses current VRF.
                      convert_types:
                      - int
              enable_mlag_ibgp_peering_vrfs:
                type: bool
                description: 'MLAG iBGP peering per VRF.

                  By default an iBGP peering is configured per VRF between MLAG peers
                  on separate VLANs.

                  Setting `enable_mlag_ibgp_peering_vrfs: false` under a VRF will
                  change this default and/or override the tenant-wide setting.

                  '
              redistribute_mlag_ibgp_peering_vrfs:
                type: bool
                default: true
                description: 'Redistribute the connected subnet for the MLAG iBGP
                  peering per VRF into overlay BGP.

                  By default the iBGP peering subnet is redistributed into the overlay
                  routing protocol per VRF.

                  Setting `redistribute_mlag_ibgp_peering_vrfs: false` under a VRF
                  will change this default and/or override the tenant-wide setting.

                  '
              mlag_ibgp_peering_vlan:
                type: int
                convert_types:
                - str
                description: 'Manually define the VLAN used on the MLAG pair for the
                  iBGP session.

                  By default this parameter is calculated using the following formula:
                  `<mlag_ibgp_peering_vrfs.base_vlan>` + `<vrf_id>` - 1.

                  '
                min: 1
                max: 4096
              vtep_diagnostic:
                type: dict
                description: 'Enable VTEP Network diagnostics.

                  This will create a loopback with virtual source-nat enable to perform
                  diagnostics from the switch.

                  '
                keys:
                  loopback:
                    type: int
                    convert_types:
                    - str
                    description: 'Loopback interface number, required when vtep_diagnotics
                      defined.

                      '
                    min: 2
                    max: 2100
                  loopback_description:
                    type: str
                    description: Provide a custom description for loopback interface.
                  loopback_ip_range:
                    type: str
                    description: 'IPv4_address/Mask.

                      Loopback ip range, a unique ip is derived from this ranged and
                      assignedto each l3 leaf based on it''s unique id.

                      Loopback is not created unless loopback_ip_range or loopback_ip_pools
                      are set.

                      '
                  loopback_ip_pools:
                    type: list
                    description: 'For inventories with multiple PODs a loopback range
                      can be set per POD to avoid overlaps.

                      This only takes effect when loopback_ip_range is not defined,
                      ptional (loopback is not created unless loopback_ip_range or
                      loopback_ip_pools are set).

                      '
                    items:
                      type: dict
                      keys:
                        pod:
                          type: str
                          description: POD name.
                        ipv4_pool:
                          type: str
                          description: IPv4_address/Mask.
              ospf:
                documentation_options:
                  table: network-services-vrfs-ospf-settings
                type: dict
                description: 'Router OSPF configuration.

                  This will create an OSPF routing instance in the tenant VRF. If
                  there is no nodes definition, the OSPF instance will be

                  created on all leafs where the VRF is deployed. This will also cause
                  automatic OSPF redistribution into BGP unless

                  explicitly turned off with "redistribute_ospf: false".

                  '
                keys:
                  enabled:
                    type: bool
                  process_id:
                    type: int
                    convert_types:
                    - str
                    description: If not set, "vrf_id" will be used.
                  router_id:
                    type: str
                    description: If not set, switch router_id will be used.
                  max_lsa:
                    type: int
                    convert_types:
                    - str
                  bfd:
                    type: bool
                    default: false
                  redistribute_bgp:
                    type: dict
                    keys:
                      enabled:
                        type: bool
                        default: true
                      route_map:
                        type: str
                        description: Route-map name.
                  redistribute_connected:
                    type: dict
                    keys:
                      enabled:
                        type: bool
                        default: false
                      route_map:
                        type: str
                        description: Route-map name.
                  nodes:
                    type: list
                    items:
                      type: str
                      description: Hostname.
              redistribute_ospf:
                documentation_options:
                  table: network-services-vrfs-ospf-settings
                type: bool
                default: true
                description: Non-selectively enabling or disabling redistribute ospf
                  inside the VRF.
              evpn_l3_multicast:
                documentation_options:
                  table: network-services-multicast-settings
                type: dict
                description: 'Explicitly enable or disable evpn_l3_multicast to override
                  setting of `<network_services_key>.[].evpn_l3_multicast.enabled`.

                  Allow override of `<network_services_key>.[].evpn_l3_multicast`
                  node_settings.

                  Requires `evpn_multicast` to also be set to `true`.

                  '
                keys:
                  enabled:
                    type: bool
                  evpn_peg:
                    type: list
                    description: For each group of nodes, allow configuration of EVPN
                      PEG features.
                    items:
                      type: dict
                      keys:
                        nodes:
                          type: list
                          description: 'Restrict configuration to specific nodes.

                            Will apply to all nodes with RP addresses configured if
                            not set.

                            '
                          items:
                            type: str
                        transit:
                          type: bool
                          default: false
                          description: Enable EVPN PEG transit mode.
              pim_rp_addresses:
                documentation_options:
                  table: network-services-multicast-settings
                description: 'For each group of nodes, allow configuration of RP Addresses
                  & associated groups.

                  '
                type: list
                items:
                  type: dict
                  keys:
                    rps:
                      description: A minimum of one RP must be specified.
                      type: list
                      items:
                        type: str
                        description: RP address.
                    nodes:
                      description: 'Restrict configuration to specific nodes.

                        Configuration Will be applied to all nodes if not set.

                        '
                      type: list
                      items:
                        type: str
                    groups:
                      type: list
                      items:
                        type: str
                        description: Group_prefix/mask.
                    access_list_name:
                      type: str
                      convert_types:
                      - int
                      description: 'List of groups to associate with the RP addresses
                        set in ''rps''.

                        If access_list_name is set, a standard access-list will be
                        configured matching these groups.

                        Otherwise the groups are configured directly on the RP command.

                        '
              evpn_l2_multi_domain:
                documentation_options:
                  table: network-services-multicast-settings
                type: bool
                description: 'Explicitly extend all VLANs/VLAN-Aware Bundles inside
                  the VRF to remote EVPN domains.

                  Overrides `<network_services_key>.[].evpn_l2_multi_domain`.

                  '
              svis:
                documentation_options:
                  table: network-services-vrfs-svis-settings
                type: list
                primary_key: id
                allow_duplicate_primary_key: true
                convert_types:
                - dict
                description: 'List of SVIs.

                  This will create both the L3 SVI and L2 VLAN based on filters applied
                  to the node.

                  '
                items:
                  $ref: eos_designs#/$defs/svi
                  type: dict
                  keys:
                    id:
                      type: int
                      convert_types:
                      - str
                      description: SVI interface id and VLAN id.
                      min: 1
                      max: 4096
                    name:
                      type: str
                      description: VLAN name.
                      required: true
                    profile:
                      type: str
                      description: 'SVI profile name to apply.

                        SVI can refer to one svi_profile which again can refer to
                        another svi_profile to inherit settings in up to two levels
                        (svi -> svi_profile -> svi_parent_profile).

                        '
                    tags:
                      type: list
                      description: 'Tags leveraged for networks services filtering.

                        Tags are matched against "filter.tags" defined under node
                        type settings.

                        Tags are also matched against the "node_group" name under
                        node type settings.

                        '
                      default:
                      - all
                      items:
                        type: str
                        convert_types:
                        - int
                        description: Tag value.
                    evpn_vlan_bundle:
                      type: str
                      description: 'Name of a bundle defined under ''evpn_vlan_bundles''
                        to inherit configuration.

                        To use this option the common "evpn_vlan_aware_bundles" option
                        must be set to true.

                        '
                    nodes:
                      type: list
                      primary_key: node
                      convert_types:
                      - dict
                      items:
                        type: dict
                        $ref: eos_designs#/$defs/svi_settings
                        keys:
                          node:
                            type: str
                          tags:
                            type: list
                            description: 'Tags leveraged for networks services filtering.

                              Tags are matched against "filter.tags" defined under
                              node type settings.

                              Tags are also matched against the "node_group" name
                              under node type settings.

                              '
                            default:
                            - all
                            items:
                              type: str
                              convert_types:
                              - int
                              description: Tag value.
              l3_interfaces:
                documentation_options:
                  table: network-services-vrfs-l3-interfaces-settings
                type: list
                description: 'List of L3 interfaces.

                  This will create IP routed interface inside VRF. Length of interfaces,
                  nodes and ip_addresses must match.

                  '
                items:
                  type: dict
                  keys:
                    interfaces:
                      type: list
                      items:
                        type: str
                        description: Interface name.
                    encapsulation_dot1q_vlan:
                      type: list
                      description: For sub-interfaces the dot1q vlan is derived from
                        the interface name by default, but can also be specified.
                      items:
                        type: int
                        convert_types:
                        - str
                        min: 1
                        max: 4094
                    ip_addresses:
                      type: list
                      items:
                        type: str
                        description: IPv4_address/Mask.
                    nodes:
                      type: list
                      items:
                        type: str
                        description: Node.
                    description:
                      type: str
                    descriptions:
                      type: list
                      items:
                        type: str
                      description: '"descriptions" has precedence over "description".

                        '
                    enabled:
                      type: bool
                    mtu:
                      type: int
                      convert_types:
                      - str
                    ospf:
                      type: dict
                      description: OSPF interface configuration.
                      keys:
                        enabled:
                          type: bool
                        point_to_point:
                          type: bool
                          default: false
                        area:
                          type: str
                          convert_types:
                          - int
                          description: OSPF area ID.
                          default: '0'
                        cost:
                          type: int
                          convert_types:
                          - str
                          description: OSPF link cost.
                        authentication:
                          type: str
                          valid_values:
                          - simple
                          - message-digest
                        simple_auth_key:
                          type: str
                          description: Password used with simple authentication.
                        message_digest_keys:
                          type: list
                          items:
                            type: dict
                            keys:
                              id:
                                type: int
                                convert_types:
                                - str
                              hash_algorithm:
                                type: str
                                valid_values:
                                - md5
                                - sha1
                                - sha256
                                - sha384
                                - sha512
                                default: sha512
                              key:
                                type: str
                                description: Key password.
                    pim:
                      type: dict
                      description: 'Enable PIM sparse-mode on the interface; requires
                        "evpn_l3_multicast" to be enabled on the VRF/Tenant

                        Enabling this implicitly makes the device a PIM External Gateway
                        (PEG) in EVPN designs only.

                        At least one RP address must be configured for EVPN PEG to
                        be configured.

                        '
                      keys:
                        enabled:
                          type: bool
                    structured_config:
                      type: dict
                      description: Custom structured config added under ethernet_interfaces.[name=<interface>]
                        for eos_cli_config_gen.
                      documentation_options:
                        hide_keys: true
                      $ref: eos_cli_config_gen#/keys/ethernet_interfaces/items/
                    raw_eos_cli:
                      type: str
                      description: 'EOS CLI rendered directly on the Ethernet interface
                        in the final EOS configuration.

                        '
              loopbacks:
                documentation_options:
                  table: network-services-vrfs-loopbacks-settings
                type: list
                description: 'List of Loopback interfaces.

                  This will create Loopback interfaces inside the VRF.

                  '
                items:
                  type: dict
                  keys:
                    node:
                      type: str
                      required: true
                    loopback:
                      type: int
                      required: true
                      min: 0
                      max: 8191
                    ip_address:
                      type: str
                      required: true
                    description:
                      type: str
                    enabled:
                      type: bool
                      default: true
                    ospf:
                      type: dict
                      description: OSPF interface configuration.
                      keys:
                        enabled:
                          type: bool
                          default: false
                        area:
                          type: str
                          convert_types:
                          - int
                          description: OSPF area ID.
                          default: '0'
                    raw_eos_cli:
                      type: str
                      description: 'EOS CLI rendered directly on the Loopback interface
                        in the final EOS configuration.

                        '
              static_routes:
                type: list
                description: 'List of static routes for v4 and/or v6.

                  This will create static routes inside the tenant VRF.

                  If nodes are not specified, all l3leafs that carry the VRF will
                  also be applied the static routes.

                  If a node has a static route in the VRF, redistribute static will
                  be automatically enabled in that VRF.

                  This automatic behavior can be overridden non-selectively with the
                  redistribute_static knob for the VRF.

                  '
                items:
                  type: dict
                  keys:
                    destination_address_prefix:
                      type: str
                      description: IPv4_address.
                    gateway:
                      type: str
                      description: IPv4_address.
                    track_bfd:
                      type: bool
                      description: Track next-hop using BFD.
                    distance:
                      type: int
                      convert_types:
                      - str
                      min: 1
                      max: 255
                    tag:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 4294967295
                    name:
                      type: str
                      description: description.
                    metric:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 4294967295
                    interface:
                      type: str
                    nodes:
                      type: list
                      items:
                        type: str
              ipv6_static_routes:
                type: list
                items:
                  type: dict
                  keys:
                    destination_address_prefix:
                      type: str
                      description: IPv6_address.
                    gateway:
                      type: str
                    track_bfd:
                      type: bool
                      description: Track next-hop using BFD.
                    distance:
                      type: int
                      convert_types:
                      - str
                      min: 1
                      max: 255
                    tag:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 4294967295
                    name:
                      type: str
                      description: description.
                    metric:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 4294967295
                    interface:
                      type: str
                    nodes:
                      type: list
                      items:
                        type: str
              redistribute_static:
                type: bool
                description: Non-selectively enabling or disabling redistribute static
                  inside the VRF.
              bgp_peers:
                documentation_options:
                  table: network-services-vrfs-bgp-settings
                type: list
                primary_key: ip_address
                convert_types:
                - dict
                description: 'List of BGP peer definitions.

                  This will configure BGP neighbors inside the tenant VRF for peering
                  with external devices.

                  The configured peer will automatically be activated for ipv4 or
                  ipv6 address family based on the ip address.

                  Note, only ipv4 and ipv6 address families are currently supported
                  in eos_designs.

                  For other address families, use custom_structured configuration
                  with eos_cli_config_gen.

                  '
                items:
                  type: dict
                  keys:
                    ip_address:
                      type: str
                      description: IPv4_address or IPv6_address.
                    peer_group:
                      type: str
                      description: Peer group name.
                    remote_as:
                      type: str
                      convert_types:
                      - int
                      description: 'BGP AS <1-4294967295> or AS number in asdot notation
                        "<1-65535>.<0-65535>".

                        For asdot notation in YAML inputs, the value must be put in
                        quotes, to prevent it from being interpreted as a float number.'
                    description:
                      type: str
                    password:
                      type: str
                      description: Encrypted password.
                    send_community:
                      type: str
                      description: '''all'' or a combination of ''standard'', ''extended'',
                        ''large'' and ''link-bandwidth (w/options)''.

                        '
                    next_hop_self:
                      type: bool
                    timers:
                      type: str
                      description: BGP Keepalive and Hold Timer values in seconds
                        as string <0-3600> <0-3600>.
                    maximum_routes:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 4294967294
                      description: Maximum number of routes (0 means unlimited).
                    maximum_routes_warning_only:
                      type: bool
                    default_originate:
                      type: dict
                      keys:
                        always:
                          type: bool
                    update_source:
                      type: str
                    ebgp_multihop:
                      type: int
                      convert_types:
                      - str
                      min: 1
                      max: 255
                      description: Time-to-live in range of hops.
                    nodes:
                      type: list
                      items:
                        type: str
                      description: Nodes is required to restrict configuration of
                        BGP neighbors to certain nodes in the network.
                    set_ipv4_next_hop:
                      type: str
                      description: 'IPv4_address

                        Next hop settings can be either ipv4 or ipv6 for one neighbor,
                        this will be applied by a uniquely generated route-map per
                        neighbor.

                        Next hop takes precedence over route_map_out.

                        '
                    set_ipv6_next_hop:
                      type: str
                      description: 'IPv6_address

                        Next hop settings can be either ipv4 or ipv6 for one neighbor,
                        this will be applied by a uniquely generated route-map per
                        neighbor.

                        Next hop takes precedence over route_map_out.

                        '
                    route_map_out:
                      type: str
                      description: Route-map name.
                    route_map_in:
                      type: str
                      description: Route-map name.
                    prefix_list_in:
                      type: str
                      description: 'Inbound prefix list name.

                        The prefix-list will be associated under the IPv4 or IPv6
                        address family based on the IP address.'
                    prefix_list_out:
                      type: str
                      description: 'Outbound prefix list name.

                        The prefix-list will be associated under the IPv4 or IPv6
                        address family based on the IP address.'
                    local_as:
                      type: str
                      convert_types:
                      - int
                      description: 'Local BGP AS <1-4294967295> or AS number in asdot
                        notation "<1-65535>.<0-65535>".

                        For asdot notation in YAML inputs, the value must be put in
                        quotes, to prevent it from being interpreted as a float number.'
                    weight:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 65535
                    bfd:
                      type: bool
                    shutdown:
                      type: bool
              bgp:
                type: dict
                keys:
                  raw_eos_cli:
                    type: str
                    description: 'EOS CLI rendered directly on the Router BGP, VRF
                      definition in the final EOS configuration.

                      '
                  structured_config:
                    type: dict
                    description: Custom structured config added under router_bgp.vrfs.[name=<vrf>]
                      for eos_cli_config_gen.
                    documentation_options:
                      hide_keys: true
                    $ref: eos_cli_config_gen#/keys/router_bgp/keys/vrfs/items/
              bgp_peer_groups:
                documentation_options:
                  table: network-services-vrfs-bgp-settings
                type: list
                description: 'List of BGP peer groups definitions.

                  This will configure BGP peer groups to be used inside the tenant
                  VRF for peering with external devices.

                  Since BGP peer groups are configured at higher BGP level, shared
                  between VRFs,

                  peer_group names should not overlap between VRFs.

                  '
                items:
                  $ref: eos_cli_config_gen#/keys/router_bgp/keys/peer_groups/items
                  type: dict
                  keys:
                    name:
                      type: str
                      description: BGP peer group name.
                    nodes:
                      type: list
                      items:
                        type: str
                      description: 'Nodes is required to restrict configuration of
                        BGP neighbors to certain nodes in the network.

                        If not set the peer-group is created on devices which have
                        a bgp_peer mapped to the corresponding peer_group.

                        '
              additional_route_targets:
                documentation_options:
                  table: network-services-vrfs-settings
                type: list
                description: Configuration of extra route-targets for this VRF. Useful
                  for route-leaking or gateway between address families.
                items:
                  type: dict
                  keys:
                    type:
                      type: str
                      valid_values:
                      - import
                      - export
                    address_family:
                      type: str
                    route_target:
                      type: str
                    nodes:
                      type: list
                      items:
                        type: str
                      description: Nodes is required to restrict configuration of
                        BGP neighbors to certain nodes in the network.
              raw_eos_cli:
                type: str
                description: EOS CLI rendered directly on the root level of the final
                  EOS configuration.
              structured_config:
                type: dict
                description: Custom structured config for eos_cli_config_gen.
                documentation_options:
                  hide_keys: true
                $ref: eos_cli_config_gen#/
        l2vlans:
          documentation_options:
            table: network-services-l2vlans-settings
          type: list
          primary_key: id
          allow_duplicate_primary_key: true
          convert_types:
          - dict
          description: Define L2 network services organized by vlan id.
          items:
            type: dict
            keys:
              id:
                type: int
                convert_types:
                - str
                min: 1
                max: 4094
                description: VLAN ID
              vni_override:
                type: int
                convert_types:
                - str
                min: 1
                max: 16777215
                description: 'By default the VNI will be derived from mac_vrf_vni_base.

                  The vni_override, allows to override this value and statically define
                  it.

                  '
              rt_override:
                type: str
                convert_types:
                - int
                description: "By default the MAC VRF RT will be derived from mac_vrf_id_base
                  + vlan_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"
              rd_override:
                type: str
                convert_types:
                - int
                description: "By default the MAC VRF RD will be derived from mac_vrf_id_base
                  + vlan_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"
              name:
                type: str
                required: true
                description: VLAN name
              tags:
                type: list
                description: 'Tags leveraged for networks services filtering.

                  Tags are matched against filter.tags defined under node type settings.

                  Tags are also matched against the node_group name under node type
                  settings.

                  '
                items:
                  type: str
                  default: all
              vxlan:
                type: bool
                default: true
                description: Extend this L2VLAN over VXLAN.
              spanning_tree_priority:
                type: int
                convert_types:
                - str
                description: 'Setting spanning-tree priority per VLAN is only supported
                  with `spanning_tree_mode: rapid-pvst` under node type settings.

                  The default priority for rapid-PVST is set under the node type settings
                  with `spanning_tree_priority` (default=32768).'
              evpn_vlan_bundle:
                type: str
                description: 'Name of a bundle defined under ''evpn_vlan_bundles''
                  to inherit configuration.

                  To use this option the common "evpn_vlan_aware_bundles" option must
                  be set to true.

                  '
              trunk_groups:
                type: list
                items:
                  type: str
                  description: 'Trunk groups are used for limiting vlans to trunk
                    ports assigned to the same trunk group.

                    Requires enable_trunk_groups: true.

                    '
              evpn_l2_multicast:
                documentation_options:
                  table: network-services-multicast-settings
                type: dict
                description: 'Explicitly enable or disable evpn_l2_multicast to override
                  setting of `<network_services_key>.[].evpn_l2_multicast.enabled`.

                  When evpn_l2_multicast.enabled is set to true for a vlan or a tenant,
                  igmp snooping and igmp snooping querier will always be enabled,
                  overriding those individual settings.

                  Requires `evpn_multicast` to also be set to `true`.

                  '
                keys:
                  enabled:
                    type: bool
              igmp_snooping_enabled:
                documentation_options:
                  table: network-services-multicast-settings
                type: bool
                default: true
                description: Activate or deactivate IGMP snooping.
              igmp_snooping_querier:
                documentation_options:
                  table: network-services-multicast-settings
                type: dict
                description: 'Enable igmp snooping querier, by default using IP address
                  of Loopback 0.

                  When enabled, igmp snooping querier will only be configured on l3
                  devices, i.e., uplink_type: p2p.

                  '
                keys:
                  enabled:
                    type: bool
                    description: Will be enabled automatically if evpn_l2_multicast
                      is enabled.
                  source_address:
                    type: str
                    description: 'IPv4_address

                      If not set, IP address of "Loopback0" will be used.

                      '
                  version:
                    type: int
                    convert_types:
                    - str
                    valid_values:
                    - 1
                    - 2
                    - 3
                    default: 2
              bgp:
                type: dict
                keys:
                  structured_config:
                    type: dict
                    description: 'Custom structured config added under router_bgp.vlans.[id=<vlan>]
                      for eos_cli_config_gen.

                      This configuration will not be applied to vlan aware bundles.

                      '
                    documentation_options:
                      hide_keys: true
                    $ref: eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/
                  raw_eos_cli:
                    type: str
                    description: 'EOS cli commands rendered on router_bgp.vlans.

                      This configuration will not be applied to vlan aware bundles.

                      '
        point_to_point_services:
          documentation_options:
            table: network-services-point-to-point-services-settings
          type: list
          primary_key: name
          description: 'Point to point services (pseudowires).

            Only supported for node types with "network_services.l1: true".

            By default this is only set for node type "pe" with "design.type: mpls"

            '
          items:
            type: dict
            keys:
              name:
                type: str
                description: Pseudowire name
              type:
                type: str
                default: vpws-pseudowire
                valid_values:
                - vpws-pseudowire
              subinterfaces:
                type: list
                description: Subinterfaces will create subinterfaces and additional
                  pseudowires/patch panel config for each endpoint.
                primary_key: number
                items:
                  type: dict
                  keys:
                    number:
                      type: int
                      description: Subinterface number
                      convert_types:
                      - str
              endpoints:
                type: list
                description: Pseudowire terminating endpoints. Must have exactly two
                  items.
                min_length: 2
                max_length: 2
                items:
                  type: dict
                  keys:
                    id:
                      type: int
                      required: true
                      convert_types:
                      - str
                      description: Pseudowire ID on this endpoint.
                    nodes:
                      type: list
                      description: Usually one node. With ESI multihoming we support
                        two nodes per pseudowire endpoint
                      required: true
                      min_length: 1
                      items:
                        type: str
                    interfaces:
                      type: list
                      description: 'Interfaces patched to the pseudowire on this endpoints.

                        The list of interfaces is mapped to the list of nodes, so
                        they must have the same length.

                        '
                      required: true
                      min_length: 1
                      items:
                        type: str
                    port_channel:
                      type: dict
                      keys:
                        mode:
                          type: str
                          valid_values:
                          - active
                          - 'on'
                        short_esi:
                          type: str
              lldp_disable:
                type: bool
                description: Disable LLDP RX/TX on port mode pseudowire services.
  node_type:
    type: dict
    keys:
      defaults:
        type: dict
        description: Define variables for all nodes of this type.
        keys:
          id:
            documentation_options:
              table: node-type-common-configuration
            description: Unique identifier used for IP addressing and other algorithms.
            type: int
            convert_types:
            - str
          platform:
            documentation_options:
              table: node-type-common-configuration
            description: Arista platform family.
            type: str
            convert_types:
            - int
          mac_address:
            documentation_options:
              table: node-type-common-configuration
            type: str
            description: Leverage to document management interface mac address.
          system_mac_address:
            documentation_options:
              table: node-type-common-configuration
            type: str
            description: 'System MAC Address in this following format: "xx:xx:xx:xx:xx:xx".

              Set to the same MAC address as available in "show version" on the device.

              "system_mac_address" can also be set directly as a hostvar.

              If both are set, the setting under node type settings takes precedence.

              '
          serial_number:
            documentation_options:
              table: node-type-common-configuration
            type: str
            description: 'Set to the Serial Number of the device.

              Only used for documentation purpose in the fabric documentation and
              part of the structured_config.

              "serial_number" can also be set directly as a hostvar.

              If both are set, the setting under node type settings takes precedence.

              '
          rack:
            documentation_options:
              table: node-type-common-configuration
            description: Rack that the switch is located in (only used in snmp_settings
              location).
            type: str
          mgmt_ip:
            documentation_options:
              table: node-type-common-configuration
            description: Node management interface IPv4 address.
            type: str
            format: cidr
          ipv6_mgmt_ip:
            documentation_options:
              table: node-type-common-configuration
            description: Node management interface IPv6 address.
            type: str
            format: cidr
          mgmt_interface:
            documentation_options:
              table: node-type-common-configuration
            description: 'Management Interface Name.

              Default -> platform_management_interface -> mgmt_interface -> "Management1".

              '
            type: str
          link_tracking:
            documentation_options:
              table: node-type-uplink-configuration
            description: 'This configures the Link Tracking Group on a switch as well
              as adds the p2p-uplinks of the switch as the upstream interfaces.

              Useful in EVPN multhoming designs.

              '
            type: dict
            keys:
              enabled:
                type: bool
                default: false
              groups:
                type: list
                description: 'Link Tracking Groups.

                  By default a single group named "LT_GROUP1" is defined with default
                  values.

                  Any groups defined under "groups" will replace the default.

                  '
                default:
                - name: LT_GROUP1
                items:
                  type: dict
                  keys:
                    name:
                      type: str
                      description: Tracking group name.
                    recovery_delay:
                      type: int
                      convert_types:
                      - str
                      min: 0
                      max: 3600
                      description: default -> platform_settings_mlag_reload_delay
                        -> 300.
                    links_minimum:
                      type: int
                      convert_types:
                      - str
                      min: 1
                      max: 100000
          lacp_port_id_range:
            documentation_options:
              table: node-type-common-configuration
            description: 'This will generate the "lacp port-id range", "begin" and
              "end" values based on node "id" and the number of nodes in the "node_group".

              Unique LACP port-id ranges are recommended for EVPN Multihoming designs.

              '
            type: dict
            keys:
              enabled:
                type: bool
                default: false
              size:
                description: Recommended size > = number of ports in the switch.
                type: int
                convert_types:
                - str
                default: 128
              offset:
                description: 'Offset is used to avoid overlapping port-id ranges of
                  different switches.

                  Useful when a "connected-endpoint" is connected to switches in different
                  "node_groups".

                  '
                type: int
                convert_types:
                - str
                default: 0
          always_configure_ip_routing:
            documentation_options:
              table: node-type-common-configuration
            type: bool
            default: false
            description: 'Force configuration of "ip routing" even on L2 devices.

              Use this to retain behavior of AVD versions below 4.0.0.

              '
          raw_eos_cli:
            documentation_options:
              table: node-type-common-configuration
            description: EOS CLI rendered directly on the root level of the final
              EOS configuration.
            type: str
          structured_config:
            documentation_options:
              table: node-type-common-configuration
              hide_keys: true
            description: Custom structured config for eos_cli_config_gen.
            type: dict
            $ref: eos_cli_config_gen#/
          uplink_type:
            documentation_options:
              table: node-type-uplink-configuration
            type: str
            $ref: eos_designs#/keys/node_type_keys/items/keys/uplink_type
            description: 'Override the default `uplink_type` set at the `node_type_key`
              level.

              `uplink_type` must be "p2p" if `vtep` or `underlay_router` is true for
              the `node_type_key` definition.'
          uplink_ipv4_pool:
            documentation_options:
              table: node-type-uplink-configuration
            description: IPv4 subnet to use to connect to uplink switches.
            type: str
            format: ipv4_cidr
          uplink_interfaces:
            documentation_options:
              table: node-type-uplink-configuration
            description: 'Local uplink interfaces

              Each list item supports range syntax that can be expanded into a list
              of interfaces.

              If uplink_interfaces is not defined, platform-specific defaults (defined
              under default_interfaces) will be used instead.

              Please note that default_interfaces are not defined by default, you
              should define these yourself.

              '
            type: list
            items:
              type: str
              pattern: Ethernet[\d/]+
          uplink_switch_interfaces:
            documentation_options:
              table: node-type-uplink-configuration
            description: Interfaces located on uplink switches.
            type: list
            items:
              type: str
              pattern: Ethernet[\d/]+
          uplink_switches:
            documentation_options:
              table: node-type-uplink-configuration
            type: list
            items:
              type: str
              required: true
              description: 'Hostname of uplink switch.

                If parallel uplinks are in use, update max_parallel_uplinks below
                and specify each uplink switch multiple times.

                e.g. uplink_switches: [ ''DC1-SPINE1'', ''DC1-SPINE1'', ''DC1-SPINE2'',
                ''DC1-SPINE2'' ].

                '
          uplink_interface_speed:
            documentation_options:
              table: node-type-uplink-configuration
            description: 'Set point-to-Point interface speed and will apply to uplink
              interfaces on both ends.

              (Uplink switch interface speed can be overridden with `uplink_switch_interface_speed`).

              Speed should be set in the format `<interface_speed>` or `forced <interface_speed>`
              or `auto <interface_speed>`.

              '
            type: str
          uplink_switch_interface_speed:
            documentation_options:
              table: node-type-uplink-configuration
            description: 'Set point-to-Point interface speed for the uplink switch
              interface only.

              Speed should be set in the format `<interface_speed>` or `forced <interface_speed>`
              or `auto <interface_speed>`.

              '
            type: str
          max_uplink_switches:
            documentation_options:
              table: node-type-uplink-configuration
            type: int
            convert_types:
            - str
            description: 'Maximum number of uplink switches.

              Changing this value may change IP Addressing on uplinks.

              Can be used to reserve IP space for future expansions.

              '
          max_parallel_uplinks:
            documentation_options:
              table: node-type-uplink-configuration
            type: int
            convert_types:
            - str
            description: 'Number of parallel links towards uplink switches.

              Changing this value may change interface naming on uplinks (and corresponding
              downlinks).

              Can be used to reserve interfaces for future parallel uplinks.

              '
          uplink_bfd:
            documentation_options:
              table: node-type-uplink-configuration
            type: bool
            default: false
            description: Enable bfd on uplink interfaces.
          uplink_native_vlan:
            documentation_options:
              table: node-type-uplink-configuration
            type: int
            convert_types:
            - str
            min: 1
            max: 4094
            description: 'Only applicable to switches with layer-2 port-channel uplinks.

              A suspended (disabled) vlan will be created in both ends of the link
              unless the vlan is defined under network services.

              By default the uplink will not have a native_vlan configured, so EOS
              defaults to vlan 1.

              '
          uplink_ptp:
            documentation_options:
              table: node-type-uplink-configuration
            description: Enable PTP on all infrastructure links.
            type: dict
            keys:
              enable:
                type: bool
                default: false
          uplink_macsec:
            documentation_options:
              table: node-type-uplink-configuration
            description: Enable MacSec on all uplinks.
            type: dict
            keys:
              profile:
                type: str
          uplink_port_channel_id:
            documentation_options:
              table: node-type-uplink-configuration
            type: int
            convert_types:
            - str
            min: 1
            max: 999999
            description: "Only applicable for L2 switches with `uplink_type: port-channel`.\nBy
              default the uplink Port-channel ID will be set to the number of the
              lowest member interface defined under `uplink_interfaces`.\nFor example:\n
              \ member ports [ Eth22, Eth23 ] -> ID 22\n  member ports [ Eth11/1,
              Eth22/1 ] -> ID 111\nFor MLAG port-channels ID will be based on the
              lowest member interface on the first MLAG switch.\nThis option overrides
              the default behavior and statically sets the local Port-channel ID.\nNote!
              Make sure the ID is unique and does not overlap with autogenerated Port-channel
              IDs in the Network Services.\nNote! For MLAG pairs the ID must be between
              1 and 2000 and both MLAG switches must have the same value.\n"
          uplink_switch_port_channel_id:
            documentation_options:
              table: node-type-uplink-configuration
            type: int
            convert_types:
            - str
            min: 1
            max: 999999
            description: "Only applicable for L2 switches with `uplink_type: port-channel`.\nBy
              default the uplink switch Port-channel ID will be set to the number
              of the first interface defined under `uplink_switch_interfaces`.\nFor
              example:\n  member ports [ Eth22, Eth23 ] -> ID 22\n  member ports [
              Eth11/1, Eth22/1 ] -> ID 111\nFor MLAG port-channels ID will be based
              on the lowest member interface on the first MLAG switch.\nThis option
              overrides the default behavior and statically sets the Port-channel
              ID on the uplink switch.\nNote! Make sure the ID is unique and does
              not overlap with autogenerated Port-channel IDs in the Network Services.\nNote!
              For MLAG pairs the ID must be between 1 and 2000 and both MLAG switches
              must have the same value.\n"
          uplink_structured_config:
            documentation_options:
              table: node-type-uplink-configuration
              hide_keys: true
            type: dict
            description: 'Custom structured config applied to "uplink_interfaces",
              and "uplink_switch_interfaces".

              When uplink_type == "p2p", custom structured config added under ethernet_interfaces.[name=<interface>]
              for eos_cli_config_gen overrides the settings on the ethernet interface
              level.

              When uplink_type == "port-channel", custom structured config added under
              port_channel_interfaces.[name=<interface>] for eos_cli_config_gen overrides
              the settings on the port-channel interface level.

              "uplink_structured_config" is applied after "structured_config", so
              it can override "structured_config" defined on node-level.

              Note! The content of this dictionary is _not_ validated by the schema,
              since it can be either ethernet_interfaces or port_channel_interfaces.

              '
          mlag_port_channel_structured_config:
            $ref: eos_cli_config_gen#/keys/port_channel_interfaces/items/
            documentation_options:
              table: node-type-l2-mlag-configuration
              hide_keys: true
            type: dict
            description: 'Custom structured config applied to MLAG peer link port-channel
              id.

              Added under port_channel_interfaces.[name=<interface>] for eos_cli_config_gen.

              Overrides the settings on the port-channel interface level.

              "mlag_port_channel_structured_config" is applied after "structured_config",
              so it can override "structured_config" defined on node-level.

              '
          mlag_peer_vlan_structured_config:
            $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/
            documentation_options:
              table: node-type-l2-mlag-configuration
              hide_keys: true
            type: dict
            description: 'Custom structured config applied to MLAG Peer Link (control
              link) SVI interface id.

              Added under vlan_interfaces.[name=<interface>] for eos_cli_config_gen.

              Overrides the settings on the vlan interface level.

              "mlag_peer_vlan_structured_config" is applied after "structured_config",
              so it can override "structured_config" defined on node-level.

              '
          mlag_peer_l3_vlan_structured_config:
            $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/
            documentation_options:
              table: node-type-l2-mlag-configuration
              hide_keys: true
            type: dict
            description: 'Custom structured config applied to MLAG underlay L3 peering
              SVI interface id.

              Added under vlan_interfaces.[name=<interface>] for eos_cli_config_gen.

              Overrides the settings on the vlan interface level.

              "mlag_peer_l3_vlan_structured_config" is applied after "structured_config",
              so it can override "structured_config" defined on node-level.

              '
          short_esi:
            documentation_options:
              table: node-type-uplink-configuration
            description: 'short_esi only valid for l2leaf devices using port-channel
              uplink.

              Setting short_esi to "auto" generates the short_esi automatically using
              a hash of configuration elements.

              < 0000:0000:0000 | auto >.

              '
            type: str
          isis_system_id_prefix:
            documentation_options:
              table: node-type-isis-configuration
            description: (4.4 hexadecimal).
            type: str
            pattern: '[0-9a-f]{4}\.[0-9a-f]{4}'
          isis_maximum_paths:
            documentation_options:
              table: node-type-isis-configuration
            description: Number of path to configure in ECMP for ISIS.
            type: int
            convert_types:
            - str
          is_type:
            documentation_options:
              table: node-type-isis-configuration
            type: str
            valid_values:
            - level-1-2
            - level-1
            - level-2
            default: level-2
          node_sid_base:
            documentation_options:
              table: node-type-isis-configuration
            description: Node-SID base for isis-sr underlay variants. Combined with
              node id to generate ISIS-SR node-SID.
            type: int
            convert_types:
            - str
            default: 0
          loopback_ipv4_pool:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: IPv4 subnet for Loopback0 allocation.
            type: str
            format: ipv4_cidr
          vtep_loopback_ipv4_pool:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: IPv4 subnet for VTEP-Loopback allocation.
            type: str
            format: ipv4_cidr
          loopback_ipv4_offset:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: 'Offset all assigned loopback IP addresses.

              Required when the < loopback_ipv4_pool > is same for 2 different node_types
              (like spine and l3leaf) to avoid over-lapping IPs.

              For example, set the minimum offset l3leaf.defaults.loopback_ipv4_offset:
              < total # spine switches > or vice versa.

              '
            type: int
            convert_types:
            - str
            default: 0
          loopback_ipv6_pool:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: IPv6 subnet for Loopback0 allocation.
            type: str
            format: ipv6_cidr
          loopback_ipv6_offset:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: 'Offset all assigned loopback IPv6 addresses.

              Required when the < loopback_ipv6_pool > is same for 2 different node_types
              (like spine and l3leaf) to avoid overlapping IPs.

              For example, set the minimum offset l3leaf.defaults.loopback_ipv6_offset:
              < total # spine switches > or vice versa.

              '
            type: int
            convert_types:
            - str
            default: 0
          vtep:
            type: bool
            description: 'Node is configured as a VTEP when applicable based on ''overlay_routing_protocol''.

              Overrides VTEP setting inherited from node_type_keys.'
            documentation_options:
              table: node-type-loopback-vtep-configuration
          vtep_loopback:
            documentation_options:
              table: node-type-loopback-vtep-configuration
            description: Set VXLAN source interface.
            type: str
            pattern: Loopback[\d/]+
          bgp_as:
            documentation_options:
              table: node-type-bgp-configuration
            description: 'BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".

              For asdot notation in YAML inputs, the value must be put in quotes,
              to prevent it from being interpreted as a float number.

              Required with eBGP.'
            type: str
            convert_types:
            - int
            - float
          bgp_defaults:
            documentation_options:
              table: node-type-bgp-configuration
            description: List of EOS commands to apply to BGP daemon.
            type: list
            items:
              type: str
          evpn_role:
            documentation_options:
              table: node-type-bgp-configuration
            type: str
            description: 'Acting role in EVPN control plane.

              Default is set in node_type definition from node_type_keys.

              '
            valid_values:
            - client
            - server
            - none
          evpn_route_servers:
            documentation_options:
              table: node-type-bgp-configuration
            description: List of nodes acting as EVPN Route-Servers / Route-Reflectors.
            type: list
            items:
              type: str
          evpn_services_l2_only:
            documentation_options:
              table: node-type-evpn-services-configuration
            description: 'Possibility to prevent configuration of Tenant VRFs and
              SVIs.

              Override node definition "network_services_l3" from node_type_keys.

              This allows support for centralized routing.

              '
            type: bool
            default: false
          filter:
            documentation_options:
              table: node-type-evpn-services-configuration
            description: 'Filter L3 and L2 network services based on tenant and tags
              (and operation filter).

              If filter is not defined it will default to all.

              '
            type: dict
            keys:
              tenants:
                type: list
                description: 'Limit configured Network Services to those defined under
                  these Tenants. Set to [''all''] for all Tenants (default).

                  This list also limits Tenants included by `always_include_vrfs_in_tenants`.'
                items:
                  type: str
                default:
                - all
              tags:
                type: list
                description: Limit configured VLANs to those matching the given tags.
                  Set to ['all'] for all VLANs (default).
                items:
                  type: str
                default:
                - all
              allow_vrfs:
                type: list
                description: 'Limit configured Network Services to those defined under
                  these VRFs. Set to [''all''] for all VRFs (default).

                  This list also limits VRFs included by `always_include_vrfs_in_tenants`.'
                items:
                  type: str
                  convert_types:
                  - int
                default:
                - all
              deny_vrfs:
                type: list
                description: 'Prevent configuration of Network Services defined under
                  these VRFs.

                  This list prevents the given VRFs to be included by any other filtering
                  mechanism.'
                items:
                  type: str
                  convert_types:
                  - int
                default:
                - all
              always_include_vrfs_in_tenants:
                description: 'List of tenants where VRFs will be configured even if
                  VLANs are not included in tags.

                  Useful for L3 "border" leaf.

                  '
                type: list
                items:
                  type: str
              only_vlans_in_use:
                type: bool
                default: false
                description: 'Only configure VLANs, SVIs, VRFs in use by connected
                  endpoints or downstream L2 switches.

                  Note! This feature only considers configuration managed by eos_designs.

                  This excludes structured_config, custom_structured_configuration_,
                  raw_eos_cli, eos_cli, custom templates, configlets etc.

                  '
          igmp_snooping_enabled:
            documentation_options:
              table: node-type-evpn-services-configuration
            description: Activate or deactivate IGMP snooping on device level.
            type: bool
            default: true
          evpn_gateway:
            documentation_options:
              table: node-type-evpn-multi-domain-gateway-configuration
            description: 'Node is acting as EVPN Multi-Domain Gateway.

              New BGP peer-group is generated between EVPN GWs in different domains
              or between GWs and Route Servers.

              Name can be changed under "bgp_peer_groups.evpn_overlay_core" variable.

              L3 rechability for different EVPN GWs must be already in place, it is
              recommended to use DCI & L3 Edge if Route Servers and GWs are not defined
              under the same Ansible inventory.

              '
            type: dict
            keys:
              remote_peers:
                description: 'Define remote peers of the EVPN VXLAN Gateway.

                  If the hostname can be found in the inventory, ip_address and BGP
                  ASN will be automatically populated. Manual override takes precedence.

                  If the peer''s hostname can not be found in the inventory, ip_address
                  and bgp_as must be defined.

                  '
                type: list
                items:
                  type: dict
                  keys:
                    hostname:
                      description: Hostname of remote EVPN GW server.
                      type: str
                    ip_address:
                      description: Peering IP of remote Route Server.
                      type: str
                      format: ipv4
                    bgp_as:
                      description: 'Remote Route Server''s BGP AS <1-4294967295> or
                        AS number in asdot notation "<1-65535>.<0-65535>".

                        For asdot notation in YAML inputs, the value must be put in
                        quotes, to prevent it from being interpreted as a float number.'
                      type: str
                      convert_types:
                      - int
                      - float
              evpn_l2:
                description: Enable EVPN Gateway functionality for route-types 2 (MAC-IP)
                  and 3 (IMET).
                type: dict
                keys:
                  enabled:
                    type: bool
                    default: false
              evpn_l3:
                description: Enable EVPN Gateway functionality for route-type 5 (IP-PREFIX).
                type: dict
                keys:
                  enabled:
                    type: bool
                    default: false
                  inter_domain:
                    type: bool
                    default: true
          ipvpn_gateway:
            documentation_options:
              table: node-type-evpn-ipvpn-gateway-configuration
            description: 'Node is acting as IP-VPN Gateway for EVPN to MPLS-IP-VPN
              Interworking. The BGP peer group used for this is "bgp_peer_groups.ipvpn_gateway_peers".

              L3 Reachability is required for this to work, the preferred method to
              establish underlay connectivity is to use core_interfaces.

              '
            type: dict
            keys:
              enabled:
                type: bool
                required: true
              evpn_domain_id:
                description: Domain ID to assign to EVPN address family for use with
                  D-path. Format <nn>:<nn>.
                type: str
                default: '65535:1'
              ipvpn_domain_id:
                description: Domain ID to assign to IPVPN address families for use
                  with D-path. Format <nn>:<nn>.
                type: str
                default: '65535:2'
              enable_d_path:
                description: Enable D-path for use with BGP bestpath selection algorithm.
                type: bool
                default: true
              maximum_routes:
                description: Maximum routes to accept from IPVPN remote peers.
                type: int
                convert_types:
                - str
                default: 0
              local_as:
                description: 'Local BGP AS applied to peering with IPVPN remote peers.

                  BGP AS <1-4294967295> or AS number in asdot notation "<1-65535>.<0-65535>".

                  For asdot notation in YAML inputs, the value must be put in quotes,
                  to prevent it from being interpreted as a float number.'
                type: str
                convert_types:
                - int
                default: none
              address_families:
                description: IPVPN address families to enable for remote peers.
                type: list
                items:
                  type: str
                default:
                - vpn-ipv4
              remote_peers:
                type: list
                items:
                  type: dict
                  keys:
                    hostname:
                      description: Hostname of remote IPVPN Peer.
                      type: str
                      required: true
                    ip_address:
                      description: Peering IP of remote IPVPN Peer.
                      type: str
                      format: ipv4
                      required: true
                    bgp_as:
                      description: 'Remote IPVPN Peer''s BGP AS <1-4294967295> or
                        AS number in asdot notation "<1-65535>.<0-65535>".

                        For asdot notation in YAML inputs, the value must be put in
                        quotes, to prevent it from being interpreted as a float number.'
                      type: str
                      required: true
                      convert_types:
                      - int
                      - float
          mlag:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: Enable / Disable auto MLAG, when two nodes are defined in
              node group.
            type: bool
            default: true
          mlag_dual_primary_detection:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: Enable / Disable MLAG dual primary detection.
            type: bool
            default: false
          mlag_ibgp_origin_incomplete:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'Set origin of routes received from MLAG iBGP peer to incomplete.

              The purpose is to optimize routing for leaf loopbacks from spine perspective
              and

              avoid suboptimal routing via peerlink for control plane traffic.

              '
            type: bool
            default: true
          mlag_interfaces:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'Each list item supports range syntax that can be expanded
              into a list of interfaces.

              Required when MLAG leafs are present in the topology.

              '
            type: list
            items:
              type: str
          mlag_interfaces_speed:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'Set MLAG interface speed.

              Speed should be set in the format `<interface_speed>` or `forced <interface_speed>`
              or `auto <interface_speed>`.

              '
            type: str
          mlag_peer_l3_vlan:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'Underlay L3 peering SVI interface id.

              If set to 0 or the same vlan as mlag_peer_vlan, the mlag_peer_vlan will
              be used for L3 peering.

              '
            type: int
            convert_types:
            - str
            - bool
            min: 0
            max: 4094
            default: 4093
          mlag_peer_l3_ipv4_pool:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'IP address pool used for MLAG underlay L3 peering. IP is
              derived from the node id.

              Required when MLAG leafs present in topology and they are using a separate
              L3 peering VLAN.

              '
            type: str
            format: ipv4_cidr
          mlag_peer_vlan:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: MLAG Peer Link (control link) SVI interface id.
            type: int
            convert_types:
            - str
            min: 1
            max: 4094
            default: 4094
          mlag_peer_link_allowed_vlans:
            documentation_options:
              table: node-type-l2-mlag-configuration
            type: str
          mlag_peer_ipv4_pool:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'IP address pool used for MLAG Peer Link (control link).
              IP is derived from the node id.

              Required when MLAG leafs present in topology.

              '
            type: str
            format: ipv4_cidr
          mlag_port_channel_id:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: 'If not set, the mlag port-channel id is generated based
              on the digits of the first interface present in ''mlag_interfaces''.

              Valid port-channel id numbers are < 1-2000 > for EOS < 4.25.0F and <
              1 - 999999 > for EOS >= 4.25.0F.

              '
            type: int
            convert_types:
            - str
          mlag_domain_id:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: MLAG Domain ID. If not set the node group name (Set with
              "group" key) will be used.
            type: str
          spanning_tree_mode:
            documentation_options:
              table: node-type-l2-mlag-configuration
            type: str
            valid_values:
            - mstp
            - rstp
            - rapid-pvst
            - none
          spanning_tree_priority:
            documentation_options:
              table: node-type-l2-mlag-configuration
            type: int
            convert_types:
            - str
            default: 32768
            description: 'Spanning-tree priority configured for the selected mode.

              For `rapid-pvst` the priority can also be set per VLAN under network
              services.'
          spanning_tree_root_super:
            documentation_options:
              table: node-type-l2-mlag-configuration
            type: bool
            default: false
          virtual_router_mac_address:
            documentation_options:
              table: node-type-l2-mlag-configuration
            description: Virtual router mac address for anycast gateway.
            type: str
            format: mac
          inband_mgmt_interface:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Pointer to interface used for inband management.

              All configuration must be done using other data models like network
              services or structured_config.

              ''inband_mgmt_interface'' is only used to refer to this interface as
              source in various management protocol settings (future feature).


              On L2 switches, this defaults to Vlan<inband_mgmt_vlan> if either ''inband_mgmt_subnet''
              or ''inband_mgmt_ip'' is set.

              '
            type: str
          inband_mgmt_vlan:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'VLAN number used for inband management on L2 switches (switches
              using port-channel trunks as uplinks).

              When using ''inband_mgmt_subnet'' the VLAN and SVIs will be created
              automatically on this switch as well as all ''uplink_switches''.

              When using ''inband_mgmt_ip'' the VLAN and SVI will only be created
              on this device and added to uplink trunk. The VLAN and SVI on the parent
              switches must be created using network services data models.'
            type: int
            convert_types:
            - str
            default: 4092
          inband_mgmt_subnet:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Optional IP subnet assigned to inband management SVIs on
              L2 switches (switches using port-channels as uplinks).

              Parent l3leafs will have SVI with "ip virtual-router" and host-route
              injection based on ARP.

              This allows all l3leafs to reuse the same subnet across multiple racks
              without VXLAN extension.

              SVI IP address will be assigned as follows:

              virtual-router: <subnet> + 1

              l3leaf A      : <subnet> + 2 (same IP on all l3leaf A)

              l3leaf B      : <subnet> + 3 (same IP on all l3leaf B)

              l2leafs       : <subnet> + 3 + <l2leaf id>

              GW on l2leafs : <subnet> + 1

              Assign range larger than total l2leafs + 5


              Setting is ignored if ''inband_mgmt_ip'' is set.


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv4_cidr
          inband_mgmt_ip:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'IP address assigned to the inband management interface set
              with ''inband_mgmt_vlan''.

              This overrides ''inband_mgmt_subnet'', hence all behavior of ''inband_mgmt_subnet''
              is removed.


              If this is set the VLAN and SVI will only be created on the L2 switch
              and added to uplink trunk.

              The VLAN and SVI on the parent switches must be created using network
              services data models.


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv4_cidr
          inband_mgmt_gateway:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Default gateway configured in the ''inband_mgmt_vrf'' when
              using ''inband_mgmt_ip''. Otherwise gateway is derived from ''inband_mgmt_subnet''
              if set.


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv4
          inband_mgmt_ipv6_address:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'IPv6 address assigned to the inband management interface
              set with ''inband_mgmt_vlan''.

              This overrides ''inband_mgmt_ipv6_subnet'', hence the configuration
              of ''inband_mgmt_ipv6_subnet'' is ignored.


              If this is set the VLAN and SVI will only be created on the L2 switch
              and added to uplink trunk.

              The VLAN and SVI on the parent switches must be created using network
              services data models.


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv6
          inband_mgmt_ipv6_subnet:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Optional IPv6 prefix assigned to inband management SVIs
              on L2 switches (switches using port-channels as uplinks).

              Parent l3leafs will have SVI with "ipv6 virtual-router" and host-route
              injection based on ARP.

              This allows all l3leafs to reuse the same subnet across multiple racks
              without VXLAN extension.

              SVI IP address will be assigned as follows:

              virtual-router: <subnet> + 1

              l3leaf A      : <subnet> + 2 (same IP on all l3leaf A)

              l3leaf B      : <subnet> + 3 (same IP on all l3leaf B)

              l2leafs       : <subnet> + 3 + <l2leaf id>

              GW on l2leafs : <subnet> + 1

              Assign range larger than total l2leafs + 5


              Setting is ignored if ''inband_mgmt_ipv6_address'' is set.


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv6_cidr
          inband_mgmt_ipv6_gateway:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Default gateway configured in the ''inband_mgmt_vrf''.

              Used when `inband_mgmt_ipv6_address` is set.

              Ignored when ''inband_mgmt_ipv6_subnet'' is set (first IP in subnet
              used as gateway).


              This setting is applicable to L2 switches (switches using port-channel
              trunks as uplinks).

              '
            type: str
            format: ipv6
          inband_mgmt_description:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Description configured on the Inband Management SVI.


              This setting is only applied on the devices where it is set, it does
              not automatically affect any parent/child devices configuration, so
              it must be set on each applicable node/node-group/node-type as needed.'
            type: str
            default: Inband Management
          inband_mgmt_vlan_name:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Name configured on the Inband Management VLAN.

              This setting is only applied on the devices where it is set, it does
              not automatically affect any parent/child devices configuration, so
              it must be set on each applicable node/node-group/node-type as needed.'
            type: str
            default: Inband Management
          inband_mgmt_vrf:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'VRF configured on the Inband Management Interface.

              The VRF is created if not already created by other means.

              This setting is only applied on the devices where it is set, it does
              not automatically affect any parent/child devices configuration, so
              it must be set on each applicable node/node-group/node-type as needed.'
            type: str
            default: default
            convert_types:
            - int
          inband_mgmt_mtu:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'MTU configured on the Inband Management Interface.

              This setting is only applied on the devices where it is set, it does
              not automatically affect any parent/child devices configuration, so
              it must be set on each applicable node/node-group/node-type as needed.'
            type: int
            default: 1500
          inband_ztp:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Enable to configure upstream device with proper configuration
              to allow downstream devices to ZTP inband.

              This setting also requires that the `inband_mgmt_vlan` is set for the
              node.'
            type: bool
            default: false
          inband_ztp_lacp_fallback_delay:
            documentation_options:
              table: node-type-inband-management-configuration
            description: 'Set the LACP fallback timeout of the upstream device''s
              port-channel towards the downstream inband ZTP node.

              This setting also requires that `inband_ztp` is set for the node.'
            type: int
            min: 0
            max: 300
            default: 30
          inband_management_subnet:
            documentation_options:
              table: node-type-inband-management-configuration
            deprecation:
              warning: true
              new_key: inband_mgmt_subnet
              remove_in_version: 5.0.0
            type: str
            $ref: eos_designs#/$defs/node_type/keys/defaults/keys/inband_mgmt_subnet
          inband_management_vlan:
            documentation_options:
              table: node-type-inband-management-configuration
            deprecation:
              warning: true
              new_key: inband_mgmt_vlan
              remove_in_version: 5.0.0
            type: int
            $ref: eos_designs#/$defs/node_type/keys/defaults/keys/inband_mgmt_vlan
          mpls_overlay_role:
            documentation_options:
              table: node-type-mpls-configuration
            type: str
            valid_values:
            - client
            - server
            - none
            description: 'Set the default mpls overlay role.

              Acting role in overlay control plane.

              '
          overlay_address_families:
            documentation_options:
              table: node-type-mpls-configuration
            type: list
            convert_types:
            - str
            items:
              type: str
              valid_values:
              - evpn
              - vpn-ipv4
              - vpn-ipv6
            description: 'Set the default overlay address families.

              '
          mpls_route_reflectors:
            documentation_options:
              table: node-type-mpls-configuration
            type: list
            convert_types:
            - str
            description: List of inventory hostname acting as MPLS route-reflectors.
            items:
              type: str
              description: Inventory_hostname_of_mpls_route_reflectors.
          bgp_cluster_id:
            documentation_options:
              table: node-type-mpls-configuration
            type: str
            convert_types:
            - int
            description: Set BGP cluster id.
          ptp:
            documentation_options:
              table: node-type-ptp-configuration
            type: dict
            keys:
              enabled:
                type: bool
                default: false
              profile:
                type: str
                valid_values:
                - aes67
                - smpte2059-2
                - aes67-r16-2016
                default: aes67-r16-2016
              mlag:
                description: Configure PTP on the MLAG peer-link port-channel when
                  PTP is enabled. By default PTP will not be configured on the MLAG
                  peer-link port-channel.
                type: bool
                default: false
              domain:
                type: int
                convert_types:
                - str
                min: 0
                max: 255
                default: 127
              priority1:
                type: int
                convert_types:
                - str
                min: 0
                max: 255
                description: 'default -> automatically set based on node_type.

                  '
              priority2:
                type: int
                convert_types:
                - str
                min: 0
                max: 255
                description: 'default -> (node_id modulus 256).

                  '
              auto_clock_identity:
                type: bool
                default: true
                description: 'If you prefer to have PTP clock identity be the system
                  MAC-address of the switch, which is the default EOS behaviour, simply
                  disable the automatic PTP clock identity.

                  default -> (clock_identity_prefix = 00:1C:73 (default)) + (PTP priority
                  1 as HEX) + ":00:" + (PTP priority 2 as HEX).

                  '
              clock_identity_prefix:
                type: str
                description: 'PTP clock idetentiy 3-byte prefix. i.e. "01:02:03".

                  By default the 3-byte prefix is "00:1C:73".

                  This can be overridden if auto_clock_identity is set to true (which
                  is the default).

                  '
              clock_identity:
                type: str
                description: 'Set PTP clock identity manually. 6-byte value i.e. "01:02:03:04:05:06".

                  '
              source_ip:
                type: str
                description: 'By default in EOS, PTP packets are sourced with an IP
                  address from the routed port or from the relevant SVI, which is
                  the recommended behaviour.

                  This can be set manually if required, for example, to a value of
                  "10.1.2.3".

                  '
              mode:
                type: str
                valid_values:
                - boundary
                default: boundary
              mode_one_step:
                type: bool
                default: false
              ttl:
                type: int
                convert_types:
                - str
              forward_unicast:
                type: bool
                default: false
                description: 'Enable PTP unicast forwarding.

                  '
              dscp:
                type: dict
                keys:
                  general_messages:
                    type: int
                    convert_types:
                    - str
                  event_messages:
                    type: int
                    convert_types:
                    - str
              monitor:
                type: dict
                keys:
                  enabled:
                    type: bool
                    default: true
                  threshold:
                    type: dict
                    keys:
                      offset_from_master:
                        type: int
                        convert_types:
                        - str
                        min: 0
                        max: 1000000000
                        default: 250
                      mean_path_delay:
                        type: int
                        convert_types:
                        - str
                        min: 0
                        max: 1000000000
                        default: 1500
                      drop:
                        type: dict
                        keys:
                          offset_from_master:
                            type: int
                            convert_types:
                            - str
                            min: 0
                            max: 1000000000
                          mean_path_delay:
                            type: int
                            convert_types:
                            - str
                            min: 0
                            max: 1000000000
                  missing_message:
                    type: dict
                    keys:
                      intervals:
                        type: dict
                        keys:
                          announce:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                          follow_up:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                          sync:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                      sequence_ids:
                        type: dict
                        keys:
                          enabled:
                            type: bool
                            default: true
                          announce:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                            default: 3
                          delay_resp:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                            default: 3
                          follow_up:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                            default: 3
                          sync:
                            type: int
                            convert_types:
                            - str
                            min: 2
                            max: 255
                            default: 3
          wan_role:
            documentation_options:
              table: node-type-wan-configuration
            type: str
            $ref: eos_designs#/keys/node_type_keys/items/keys/default_wan_role
            description: 'Override the default WAN role.


              This is used both for AutoVPN and Pathfinder designs.

              That means if `wan_mode` root key is set to `autovpn` or `cv-pathfinder`.

              `server` indicates that the router is a route-reflector.


              Only supported if `overlay_routing_protocol` is set to `ibgp`.'
          cv_pathfinder_transit_mode:
            documentation_options:
              table: node-type-wan-configuration
            type: str
            valid_values:
            - region
            - zone
            description: 'Configure the transit mode for a WAN client for CV Pathfinder
              designs

              only when the `wan_mode` root key is set to `cv_pathfinder`.


              ''zone'' is currently not supported.'
          cv_pathfinder_region:
            documentation_options:
              table: node-type-wan-configuration
            type: str
            description: 'The CV Pathfinder region name.

              This key is required for WAN routers but optional for pathfinders.

              The region name must be defined under ''cv_pathfinder_regions''.'
          cv_pathfinder_site:
            documentation_options:
              table: node-type-wan-configuration
            type: str
            description: 'The CV Pathfinder site name.

              This key is required for WAN routers but ignored for pathfinders.

              The site name must be defined for the relevant region under ''cv_pathfinder_regions''.'
          wan_ha:
            documentation_options:
              table: node-type-wan-configuration
            type: dict
            description: 'PREVIEW: This key is currently not supported


              The key is supported only if `wan_mode` == `cv-pathfinder`.

              AutoVPN support is still to be determined.


              Maximum 2 devices supported by group for HA.'
            keys:
              enabled:
                type: bool
                default: true
                description: Enable / Disable auto CV-Pathfinder HA, when two nodes
                  are defined in the same node_group.
              ipsec:
                type: bool
                default: true
                description: Enable / Disable IPsec over HA path-group when HA is
                  enabled.
          dps_mss_ipv4:
            documentation_options:
              table: node-type-wan-configuration
            type: str
            $ref: eos_cli_config_gen#/keys/router_path_selection/keys/tcp_mss_ceiling/keys/ipv4_segment_size
            description: IPv4 MSS value configured under "router path-selection" on
              WAN Devices.
            default: auto
          l3_interfaces:
            type: list
            $ref: eos_designs#/$defs/node_type_l3_interfaces
            documentation_options:
              table: node-type-l3-interfaces-configuration
            description: 'L3 Interfaces to configure on the node.

              Used to define the node for WAN interfaces when `wan_carrier` is set.'
            items:
              type: dict
              keys:
                profile:
                  type: str
                  description: 'L3 interface profile name. Profile defined under `l3_interface_profiles`.

                    '
          data_plane_cpu_allocation_max:
            documentation_options:
              table: system-settings
            type: int
            $ref: eos_cli_config_gen#/keys/platform/keys/sfe/keys/data_plane_cpu_allocation_max
            description: 'Set the maximum number of CPU used for the data plane.

              This setting is useful on virtual Route Reflectors and Pathfinders where
              more CPU cores should be allocated for control plane.'
      node_groups:
        type: list
        description: Define variables related to all nodes part of this group.
        convert_types:
        - dict
        primary_key: group
        items:
          $ref: eos_designs#/$defs/node_type/keys/defaults
          type: dict
          keys:
            group:
              type: str
              description: '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:
              $ref: eos_designs#/$defs/node_type/keys/nodes
              description: Define variables per node.
              type: list
      nodes:
        description: Define variables per node.
        type: list
        convert_types:
        - dict
        primary_key: name
        items:
          $ref: eos_designs#/$defs/node_type/keys/defaults
          type: dict
          keys:
            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'' or subinterface
            name like ''Ethernet2.42''

            For a subinterface, the parent physical interface is automatically created.'
          pattern: Ethernet[\d/]+(.[\d]+)?
        description:
          type: str
          description: 'Interface description.

            If not set a default description will be configured with ''[<peer>[ <peer_interface>]]'''
        ip_address:
          type: str
          description: Node IPv4 address/Mask or 'dhcp'.
        dhcp_ip:
          type: str
          description: 'When the `ip_address` is `dhcp`, this optional field allows
            to indicate the expected

            IPv4 address (without mask) to be allocated on the interface if known.

            This is not rendered in the configuration but can be used for substitution
            of ''interface_ip'' in the Access-list

            set under `ipv4_acl_in` and `ipv4_acl_out`.'
        public_ip:
          type: str
          description: "Node IPv4 address (no mask).\n\nThis is used to get the public
            IP (if known) when the device is behind NAT.\nThis is only used for `wan_rr`
            routers (AutoVPN RRs and Pathfinders) to determine the Public IP\nwith
            the following preference:\n  `wan_route_servers.path_groups.interfaces.ip_address`\n
            \     -> `l3_interfaces.public_ip`\n          -> `l3_interfaces.ip_address`\n\nThe
            determined Public IP is used by WAN routers when peering with this interface."
        encapsulation_dot1q_vlan:
          description: For subinterfaces the dot1q vlan is derived from the interface
            name by default, but can also be specified.
          type: int
          convert_types:
          - str
          min: 1
          max: 4094
        dhcp_accept_default_route:
          type: bool
          default: true
          description: Accept a default route from DHCP if `ip_address` is set to
            `dhcp`.
        enabled:
          type: bool
          default: true
          description: Enable or Shutdown the interface.
        speed:
          type: str
          description: Speed should be set in the format `<interface_speed>` or `forced
            <interface_speed>` or `auto <interface_speed>`.
        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.
        ipv4_acl_in:
          description: 'Name of the IPv4 access-list to be assigned in the ingress
            direction.

            The access-list must be defined under `ipv4_acls`.

            Required for all WAN interfaces (`wan_carrier` is set) unless the carrier
            is marked as ''trusted'' under `wan_carriers`.'
          type: str
          convert_types:
          - int
        ipv4_acl_out:
          description: 'Name of the IPv4 Access-list to be assigned in the egress
            direction.

            The access-list must be defined under `ipv4_acls`.'
          type: str
          convert_types:
          - int
        static_routes:
          description: Configure IPv4 static routes pointing to `peer_ip`.
          type: list
          min_length: 1
          items:
            type: dict
            keys:
              prefix:
                type: str
                required: true
                description: IPv4_network/Mask
        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.

            Unless the carrier is marked as ''trusted'' under `wan_carriers`, `ipv4_acl_in`
            is also required on all WAN interfaces.'
        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_carrier` 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:
      type: dict
      keys:
        id:
          type: int
          convert_types:
          - str
          description: 'Unique id per subnet_summary. Used to calculate ip addresses.

            Required with ip_pool. ID starting from 1.

            '
        speed:
          type: str
          description: Speed should be set in the format `<interface_speed>` or `forced
            <interface_speed>` or `auto <interface_speed>`.
        ip_pool:
          type: str
          description: P2P pool name. IP Pool defined under p2p_links_ip_pools. A
            /31 will be taken from the pool per P2P link.
        subnet:
          type: str
          description: IPv4 address/Mask. Subnet used on this P2P link.
        ip:
          type: list
          description: Specific IP addresses used on this P2P link.
          items:
            type: str
            description: Node IPv4 address/Mask.
        ipv6_enable:
          type: bool
          default: false
          description: Allows turning on ipv6 for the link or profile (also autodetected
            based on underlay_rfc5549 and include_in_underlay_protocol).
        nodes:
          type: list
          description: Nodes where this link should be configured.
          items:
            type: str
            description: 'The values can be < node_a >, < node_b >.

              ex.- [ core-1-isis-sr-ldp, core-2-ospf-ldp ].

              '
        interfaces:
          type: list
          description: Interfaces where this link should be configured and Required
            unless using port-channels.
          items:
            type: str
            description: 'The value can be like < node_a_interface >, < node_b_interface
              >.

              ex. - [ Ethernet2, Ethernet2 ].

              '
        as:
          type: list
          description: 'AS numbers for BGP.

            Required with bgp peering.

            '
          items:
            type: str
            convert_types:
            - int
            description: The values can be like ["node_a_as", "node_b_as"].
        descriptions:
          type: list
          description: Interface description.
          items:
            type: str
        include_in_underlay_protocol:
          type: bool
          default: true
          description: Add this interface to underlay routing protocol.
        isis_hello_padding:
          type: bool
          default: false
        isis_metric:
          type: int
          convert_types:
          - str
        isis_circuit_type:
          type: str
          valid_values:
          - level-1
          - level-2
          - level-1-2
        isis_authentication_mode:
          type: str
          valid_values:
          - md5
          - text
        isis_authentication_key:
          type: str
          description: Type-7 encrypted password.
        mpls_ip:
          type: bool
          description: MPLS parameters. Default value is true if switch.mpls_lsr is
            true.
        mpls_ldp:
          type: bool
          description: MPLS parameters. Default value is true for ldp underlay variants,
            otherwise false.
        mtu:
          type: int
          convert_types:
          - str
          description: MTU for this P2P link. Default value same as p2p_uplinks_mtu.
        bfd:
          type: bool
          default: false
          description: Enable BFD (only considered for BGP).
        ptp:
          description: PTP parameters.
          type: dict
          keys:
            enabled:
              type: bool
              default: false
              description: Enable PTP.
        sflow:
          type: bool
          description: Enable sFlow. Overrides `fabric_sflow` setting.
        qos_profile:
          type: str
          description: QOS service profile.
        macsec_profile:
          type: str
          description: MAC security profile.
        port_channel:
          description: Port-channel parameters.
          type: dict
          keys:
            mode:
              type: str
              default: active
            nodes_child_interfaces:
              type: list
              primary_key: node
              secondary_key: interfaces
              convert_types:
              - dict
              items:
                type: dict
                keys:
                  node:
                    type: str
                  interfaces:
                    type: list
                    description: List of node interfaces. Ex.- [ 'node1 interface1',
                      'node1 interface2' ].
                    items:
                      type: str
                  channel_id:
                    type: int
                    convert_types:
                    - str
                    description: Port-Channel ID. If no channel_id is specified, an
                      id is generated from the first switch port in the port channel.
        raw_eos_cli:
          type: str
          description: EOS CLI rendered directly on the point-to-point interface in
            the final EOS configuration.
        routing_protocol:
          type: str
          valid_values:
          - ebgp
          description: 'Enables deviation of the routing protocol used on this link
            from the fabric underlay default.

            - ebgp: Enforce plain IPv4 BGP peering'
        structured_config:
          type: dict
          documentation_options:
            hide_keys: true
          description: '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.'
  svi:
    type: dict
    $ref: eos_designs#/$defs/svi_settings
    keys:
      nodes:
        type: list
        primary_key: node
        convert_types:
        - dict
        description: 'Define node specific configuration, such as unique IP addresses.

          Any keys set here will be merged onto the SVI config, except `structured_config`
          keys which will replace the `structured_config` set on SVI level.

          '
        items:
          type: dict
          $ref: eos_designs#/$defs/svi_settings
          keys:
            node:
              type: str
              description: l3_leaf inventory hostname
  svi_settings:
    type: dict
    keys:
      name:
        type: str
        description: VLAN name
      enabled:
        type: bool
        description: Enable or disable interface
      description:
        type: str
        description: 'SVI description. By default set to VLAN name.

          '
      ip_address:
        type: str
        description: IPv4_address/Mask. Usually set under "nodes" to have unique IPv4
          addresses per node.
      ipv6_address:
        type: str
        description: IPv6_address/Mask. Usually set under "nodes" to have unique IPv6
          addresses per node.
      ipv6_enable:
        type: bool
        description: Explicitly enable/disable link-local IPv6 addressing.
      ip_address_virtual:
        type: str
        description: 'IPv4_address/Mask

          IPv4 VXLAN Anycast IP address

          Conserves IP addresses in VXLAN deployments as it doesn''t require unique
          IP addresses on each node.

          '
      ipv6_address_virtual:
        type: str
        description: 'IPv6_address/Mask

          ipv6 address virtuals to configure VXLAN Anycast IP address (Optional)

          If both "ipv6_address_virtual" and "ipv6_address_virtuals" are set, all
          addresses will be configured

          '
        deprecation:
          warning: true
          remove_in_version: 5.0.0
          new_key: ipv6_address_virtuals
      ipv6_address_virtuals:
        type: list
        description: 'IPv6 VXLAN Anycast IP addresses

          Conserves IPv6 addresses in VXLAN deployments as it doesn''t require unique
          IPv6 addresses on each node.

          '
        items:
          type: str
          description: IPv6_address/Mask
      ip_address_virtual_secondaries:
        type: list
        description: Secondary IPv4 VXLAN Anycast IP addresses
        items:
          type: str
          description: IPv4_address/Mask
      ip_virtual_router_addresses:
        type: list
        description: 'IPv4 VARP addresses.

          Requires an IP address to be configured on the SVI.

          If ip_address_virtual is also set, ip_virtual_router_addresses will take
          precedence

          _if_ there is an ip_address configured for the node.

          '
        items:
          type: str
          description: 'IPv4_address/Mask or IPv4_address

            IPv4_address/Mask will also configure a static route to the SVI per best
            practice.

            '
      ipv6_virtual_router_addresses:
        type: list
        description: 'IPv6 VARP addresses.

          Requires an IPv6 address to be configured on the SVI.

          If ipv6_address_virtuals is also set, ipv6_virtual_router_addresses will
          take precedence

          _if_ there is an ipv6_address configured for the node.

          '
        items:
          type: str
          description: IPv6_address
      ip_helpers:
        type: list
        primary_key: ip_helper
        convert_types:
        - dict
        description: IP helper for DHCP relay
        items:
          type: dict
          keys:
            ip_helper:
              type: str
              description: IPv4 DHCP server IP
            source_interface:
              type: str
              description: Interface name to originate DHCP relay packets to DHCP
                server.
            source_vrf:
              type: str
              description: VRF to originate DHCP relay packets to DHCP server. If
                not set, EOS uses the VRF on the SVI.
              convert_types:
              - int
      vni_override:
        type: int
        convert_types:
        - str
        min: 1
        max: 16777215
        description: 'By default the VNI will be derived from "mac_vrf_vni_base".

          The vni_override allows us to override this value and statically define
          it (optional).

          '
      rt_override:
        type: str
        convert_types:
        - int
        description: "By default the MAC VRF RT will be derived from mac_vrf_id_base
          + vlan_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"
      rd_override:
        type: str
        convert_types:
        - int
        description: "By default the MAC VRF RD will be derived from mac_vrf_id_base
          + vlan_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"
      trunk_groups:
        type: list
        items:
          type: str
          description: 'Trunk groups are used for limiting vlans to trunk ports assigned
            to the same trunk group.

            Requires "enable_trunk_groups: true".

            '
      evpn_l2_multicast:
        documentation_options:
          table: network-services-multicast-settings
        type: dict
        description: 'Explicitly enable or disable evpn_l2_multicast to override setting
          of `<network_services_key>.[].evpn_l2_multicast.enabled`.

          When evpn_l2_multicast.enabled is set to true for a vlan or a tenant, "igmp
          snooping" and "igmp snooping querier" will always be enabled, overriding
          those individual settings.

          Requires `evpn_multicast` to also be set to `true`.

          '
        keys:
          enabled:
            type: bool
      evpn_l3_multicast:
        documentation_options:
          table: network-services-multicast-settings
        type: dict
        description: 'Explicitly enable or disable evpn_l3_multicast to override setting
          of `<network_services_key>.[].evpn_l3_multicast.enabled` and `<network_services_key>.[].vrfs.[].evpn_l3_multicast.enabled`.

          Requires `evpn_multicast` to also be set to `true`.

          '
        keys:
          enabled:
            type: bool
      igmp_snooping_enabled:
        documentation_options:
          table: network-services-multicast-settings
        type: bool
        description: Enable IGMP Snooping (Enabled by default on EOS).
      igmp_snooping_querier:
        documentation_options:
          table: network-services-multicast-settings
        type: dict
        keys:
          enabled:
            type: bool
            description: Will be enabled automatically if evpn_l2_multicast is enabled.
          source_address:
            type: str
            description: 'IPv4_address

              If not set, IP address of "Loopback0" will be used.

              '
          version:
            type: int
            description: IGMP Version (By default EOS uses IGMP version 2 for IGMP
              querier).
            convert_types:
            - str
            valid_values:
            - 1
            - 2
            - 3
      vxlan:
        type: bool
        default: true
        description: Extend this SVI over VXLAN.
      spanning_tree_priority:
        type: int
        convert_types:
        - str
        description: 'Setting spanning-tree priority per VLAN is only supported with
          `spanning_tree_mode: rapid-pvst` under node type settings.

          The default priority for rapid-PVST is set under the node type settings
          with `spanning_tree_priority` (default=32768).'
      mtu:
        type: int
        convert_types:
        - str
        description: Interface MTU.
      ospf:
        documentation_options:
          table: network-services-vrfs-ospf-settings
        type: dict
        description: OSPF interface configuration.
        keys:
          enabled:
            type: bool
          point_to_point:
            type: bool
            default: true
          area:
            type: str
            convert_types:
            - int
            description: OSPF area ID.
            default: '0'
          cost:
            type: int
            convert_types:
            - str
            description: OSPF link cost.
          authentication:
            type: str
            valid_values:
            - simple
            - message-digest
          simple_auth_key:
            type: str
            description: Password used with simple authentication.
          message_digest_keys:
            type: list
            items:
              type: dict
              keys:
                id:
                  type: int
                  convert_types:
                  - str
                hash_algorithm:
                  type: str
                  valid_values:
                  - md5
                  - sha1
                  - sha256
                  - sha384
                  - sha512
                  default: sha512
                key:
                  type: str
                  description: Type 7 encrypted key.
      bgp:
        type: dict
        keys:
          structured_config:
            type: dict
            description: 'Structured configuration and EOS CLI commands rendered on
              router_bgp.vlans.[id=<vlan>]

              This configuration will not be applied to vlan aware bundles

              '
            documentation_options:
              hide_keys: true
            $ref: eos_cli_config_gen#/keys/router_bgp/keys/vlans/items/
          raw_eos_cli:
            type: str
            description: 'EOS CLI rendered directly on the Router BGP, VLAN definition
              in the final EOS configuration.

              '
      raw_eos_cli:
        type: str
        description: 'EOS CLI rendered directly on the VLAN interface in the final
          EOS configuration.

          '
      structured_config:
        type: dict
        description: 'Custom structured config added under vlan_interfaces.[name=<interface>]
          for eos_cli_config_gen.

          '
        documentation_options:
          hide_keys: true
        $ref: eos_cli_config_gen#/keys/vlan_interfaces/items/
  virtual_topology:
    type: dict
    keys:
      name:
        type: str
        description: Optional name.
      traffic_class:
        type: int
        $ref: eos_cli_config_gen#keys/router_adaptive_virtual_topology/keys/policies/items/keys/matches/items/keys/traffic_class
      dscp:
        type: int
        $ref: eos_cli_config_gen#keys/router_adaptive_virtual_topology/keys/policies/items/keys/matches/items/keys/dscp
      lowest_hop_count:
        description: 'Prefer paths with lowest hop-count.

          Only applicable for `wan_mode: "cv-pathfinder"`.'
        type: bool
        default: false
        $ref: eos_cli_config_gen#keys/router_path_selection/keys/load_balance_policies/items/keys/lowest_hop_count
      constraints:
        type: dict
        keys:
          jitter:
            type: int
            $ref: eos_cli_config_gen#keys/router_path_selection/keys/load_balance_policies/items/keys/jitter
          latency:
            type: int
            $ref: eos_cli_config_gen#keys/router_path_selection/keys/load_balance_policies/items/keys/latency
          loss_rate:
            type: str
            $ref: eos_cli_config_gen#keys/router_path_selection/keys/load_balance_policies/items/keys/loss_rate
      path_groups:
        type: list
        min_length: 1
        items:
          type: dict
          keys:
            names:
              type: list
              description: List of path-group names.
              required: true
              min_length: 1
              items:
                type: str
            preference:
              type: str
              convert_types:
              - int
              description: 'Valid values are 1-65535 | "preferred" | "alternate".


                "preferred" is converted to priority 1.

                "alternate" is converted to priority 2.


                If not set, each path-group in `names` will be attributed its `default_preference`.'
