From 2d3a0e95dbf21289ae00b222e2af4a1af8413c6f Mon Sep 17 00:00:00 2001 From: Carl Buchmann Date: Fri, 7 Jul 2023 13:10:15 -0400 Subject: [PATCH] Doc(eos_designs, eos_cli_config_gen): Various doc improvements (#3001) --- README.md | 23 +- ansible_collections/arista/avd/README.md | 12 +- .../excalidraw/pyavd_functions.excalidraw | 2927 ++++++ .../avd/docs/_media/pyavd_functions_dark.svg | 16 + .../avd/docs/_media/pyavd_functions_light.svg | 16 + .../eos_designs_internal_notes.md | 4 +- .../arista/avd/docs/porting-guides/4.x.x.md | 6 +- ansible_collections/arista/avd/docs/pyavd.md | 5 + .../docs/Input Variables.md | 7827 ----------------- .../docs/role-configuration.md | 4 + .../roles/eos_designs/docs/input-variables.md | 111 +- mkdocs.yml | 11 +- 12 files changed, 3103 insertions(+), 7859 deletions(-) create mode 100644 ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw create mode 100644 ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg create mode 100644 ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg delete mode 100644 ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md diff --git a/README.md b/README.md index 05aaff36d61..4224d0adf76 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ -# Ansible Collection For Arista Validated Designs - arista.avd +# Arista Validated Designs ![Arista AVD](https://img.shields.io/badge/Arista-AVD%20Automation-blue) ![collection version](https://img.shields.io/github/v/release/aristanetworks/ansible-avd) ![License](https://img.shields.io/github/license/aristanetworks/ansible-avd)
Arista AVD Overview
-[Arista Networks](https://www.arista.com/) supports Ansible for managing devices running the Extensible Operating System (EOS) operating system natively through EOS API (eAPI) or [CloudVision Portal (CVP)](https://www.arista.com/en/products/eos/eos-cloudvision). -This collection includes a set of ansible roles and modules to help kick-start your automation with Arista. The various roles and templates provided are designed to be customized and extended to your needs! +Arista Validated Designs (AVD) is an extensible data model that defines Arista's Unified Cloud Network architecture as "code". -Full documentation for the collection: +AVD Documentation: -- [Stable version](https://www.avd.sh/en/stable/) +- [Stable version](https://avd.arista.com/stable/) - [Development version](https://www.avd.sh/en/devel/) ## Features @@ -20,20 +19,20 @@ Full documentation for the collection: ## Reference designs -- [L3LS VXLAN-EVPN, L2LS, and MPLS (beta)](./ansible_collections/arista/avd/roles/eos_designs/README.md) +- [L3LS VXLAN-EVPN, L2LS, and MPLS](https://avd.arista.com/stable/roles/eos_designs/index.html) -## Collection installation +## AVD Ansible Collection -Ansible galaxy hosts all stable versions of this collection. Installation from ansible-galaxy is the most convenient approach for consuming `arista.avd` content. Please follow the collection installation [guide](./ansible_collections/arista/avd/docs/installation/collection-installation.md). +[Arista Networks](https://www.arista.com/) supports Ansible for managing devices running Arista's **Extensible Operating System (EOS)** natively through it's **EOS API (eAPI)** or [**CloudVision Portal (CVP)**](https://www.arista.com/en/products/eos/eos-cloudvision). The collection includes a set of Ansible roles and modules to help kick-start your automation with Arista. The various roles and templates provided are designed to be customized and extended to your needs. -## Examples +### Examples -- [Getting started examples](./ansible_collections/arista/avd/docs/getting-started/intro-to-ansible-and-avd.md) +- [Getting started](https://avd.arista.com/stable/docs/getting-started/intro-to-ansible-and-avd.html) - [Arista NetDevOps Examples](https://github.com/aristanetworks/netdevops-examples) -## Additional resources +### Additional resources -- Ansible [EOS modules](https://docs.ansible.com/ansible/latest/collections/arista/eos/index.html) on ansible documentation. +- Ansible [EOS modules](https://docs.ansible.com/ansible/latest/collections/arista/eos/index.html) on Ansible documentation - Ansible [CloudVision modules](https://cvp.avd.sh/en/stable/) - [CloudVision Portal](https://www.arista.com/en/products/eos/eos-cloudvision) - [Arista Design and Deployment Guides](https://www.arista.com/en/solutions/design-guides) diff --git a/ansible_collections/arista/avd/README.md b/ansible_collections/arista/avd/README.md index 9dfabb98be8..5958aad8ee6 100644 --- a/ansible_collections/arista/avd/README.md +++ b/ansible_collections/arista/avd/README.md @@ -12,7 +12,7 @@ Arista Validated Designs (AVD) is an extensible data model that defines Arista's ## Reference designs -- [L3LS VXLAN-EVPN, L2LS, and MPLS (beta)](https://avd.sh/en/stable/roles/eos_designs/index.html) +- [L3LS VXLAN-EVPN, L2LS, and MPLS](https://avd.arista.com/stable/roles/eos_designs/index.html) ## AVD Ansible Collection @@ -20,7 +20,7 @@ Arista Validated Designs (AVD) is an extensible data model that defines Arista's Full documentation for the collection: -- [stable version](https://www.avd.sh/en/stable/) +- [stable version](https://avd.arista.com/stable/) - [development version](https://www.avd.sh/en/devel/) ### Roles overview @@ -41,11 +41,11 @@ This repository provides content for Arista's **arista.avd** collection. The fol ### Collection installation -Ansible galaxy hosts all stable versions of the `arista.avd` collection. Installation from ansible-galaxy is the most convenient approach for consuming `arista.avd` content. Please follow the collection installation [guide](https://avd.sh/en/stable/docs/installation/collection-installation.html). +Ansible galaxy hosts all stable versions of the `arista.avd` collection. Installation from ansible-galaxy is the most convenient approach for consuming `arista.avd` content. Please follow the collection installation [guide](https://avd.arista.com/stable/docs/installation/collection-installation.html). ### Examples -- [Getting started](./docs/getting-started/intro-to-ansible-and-avd.md) +- [Getting started](https://avd.arista.com/stable/docs/getting-started/intro-to-ansible-and-avd.html) - [Arista NetDevOps GitHub repository](https://github.com/aristanetworks/netdevops-examples) ### Custom plugins & modules @@ -56,7 +56,7 @@ This repository provides custom plugins for Arista's AVD collection: ## Additional resources -- Ansible [EOS modules](https://docs.ansible.com/ansible/latest/collections/arista/eos/index.html) on ansible documentation. +- Ansible [EOS modules](https://docs.ansible.com/ansible/latest/collections/arista/eos/index.html) on Ansible documentation - Ansible [CloudVision modules](https://cvp.avd.sh/en/stable/) - [CloudVision Portal](https://www.arista.com/en/products/eos/eos-cloudvision) - [Arista Design and Deployment Guides](https://www.arista.com/en/solutions/design-guides) @@ -71,7 +71,7 @@ AVD version 4.x releases with full support from Arista TAC. If your organization ## Contributing -Contributing pull requests are gladly welcomed for this repository. If you are planning a big change, please start a discussion first to make sure we'll be able to merge it. Please see [contribution guide](https://avd.sh/en/stable/docs/contribution/overview.html) for additional details. +Contributing pull requests are gladly welcomed for this repository. If you are planning a big change, please start a discussion first to make sure we'll be able to merge it. Please see [contribution guide](https://avd.arista.com/stable/docs/contribution/overview.html) for additional details. You can also open an [issue](https://github.com/aristanetworks/ansible-avd/issues) to report any problems or submit enhancements. diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw b/ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw new file mode 100644 index 00000000000..1fa62645577 --- /dev/null +++ b/ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw @@ -0,0 +1,2927 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "type": "rectangle", + "version": 1923, + "versionNonce": 2109845078, + "isDeleted": false, + "id": "SOImDgYmuuOorZdDzp7Yo", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 47.46125868231593, + "y": -124.41844743972229, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 178, + "height": 187, + "seed": 1418826834, + "groupIds": [], + "roundness": { + "type": 1 + }, + "boundElements": [ + { + "type": "text", + "id": "FNv8TuqgI2jnz2nQqysEa" + }, + { + "id": "k4WPOsFM29rrgCD9oc5Nk", + "type": "arrow" + }, + { + "id": "Bi_WdHYSLWbPwEUZqPIcG", + "type": "arrow" + }, + { + "id": "nWV8ZiXKo6XPw45kh219o", + "type": "arrow" + }, + { + "id": "ZBmJd3BihFTJBnbZTVcB3", + "type": "arrow" + } + ], + "updated": 1688749200530, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 892, + "versionNonce": 473084810, + "isDeleted": false, + "id": "FNv8TuqgI2jnz2nQqysEa", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 77.86750868231593, + "y": 9.581552560277714, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 117.1875, + "height": 48, + "seed": 1492332814, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190683, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "Structured\nEOS Config", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "SOImDgYmuuOorZdDzp7Yo", + "originalText": "Structured\nEOS Config", + "lineHeight": 1.2, + "baseline": 43 + }, + { + "type": "rectangle", + "version": 492, + "versionNonce": 578444740, + "isDeleted": false, + "id": "87wtJ2t4YJr6uLabaoR9A", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1621, + "y": 130.16327906778452, + "strokeColor": "#1e1e1e", + "backgroundColor": "#228be6", + "width": 2845, + "height": 291, + "seed": 563161746, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "18uzWZjAmGxxcibVfM4IG" + } + ], + "updated": 1688742975012, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 152, + "versionNonce": 2083234326, + "isDeleted": false, + "id": "18uzWZjAmGxxcibVfM4IG", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1616, + "y": 135.16327906778452, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 278.90625, + "height": 33.6, + "seed": 1742172942, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190684, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": " pyavd functions", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "87wtJ2t4YJr6uLabaoR9A", + "originalText": " pyavd functions", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 438, + "versionNonce": 1357864060, + "isDeleted": false, + "id": "1uTAH6rk9m6OeT4bjfMrh", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1600.6113971362183, + "y": 199.0126488328783, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 301, + "height": 85, + "seed": 1334978382, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "l2SmrHkFvJ3NcZz62WAG1" + }, + { + "id": "_bDvIufA0W2CjxsVs4n9y", + "type": "arrow" + } + ], + "updated": 1688743103749, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 366, + "versionNonce": 1734849098, + "isDeleted": false, + "id": "l2SmrHkFvJ3NcZz62WAG1", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1589.5645221362183, + "y": 224.7126488328783, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 278.90625, + "height": 33.6, + "seed": 1700122578, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190685, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_inputs()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1uTAH6rk9m6OeT4bjfMrh", + "originalText": "validate_inputs()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 409, + "versionNonce": 1937576659, + "isDeleted": false, + "id": "MeA2a5EzTwMkYUmy66Ppu", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1191.7689161588423, + "y": 218.38207632311287, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 301, + "height": 85, + "seed": 1949950350, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "9riSOgj6KqB3P7aXQ0hju" + }, + { + "id": "T6Sd6Hn6dXJON0JeaTG6W", + "type": "arrow" + }, + { + "id": "f4Ix3YpmDD-zeAAuA2WOw", + "type": "arrow" + } + ], + "updated": 1687792893658, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 349, + "versionNonce": 1775955798, + "isDeleted": false, + "id": "9riSOgj6KqB3P7aXQ0hju", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1164.3157911588423, + "y": 244.08207632311286, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 246.09375, + "height": 33.6, + "seed": 2111995854, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190686, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_avd_facts()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "MeA2a5EzTwMkYUmy66Ppu", + "originalText": "get_avd_facts()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1346, + "versionNonce": 91030908, + "isDeleted": false, + "id": "00H8AHIivD1rUGInd6vK9", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 327.5209333012044, + "y": 183.94239170655646, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 1821089170, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "39J1riLvm5aP7gW0M1s9L" + }, + { + "id": "Bi_WdHYSLWbPwEUZqPIcG", + "type": "arrow" + }, + { + "id": "ZBmJd3BihFTJBnbZTVcB3", + "type": "arrow" + } + ], + "updated": 1688742950502, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1373, + "versionNonce": 1762580746, + "isDeleted": false, + "id": "39J1riLvm5aP7gW0M1s9L", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 340.1615583012044, + "y": 209.64239170655645, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 311.71875, + "height": 33.6, + "seed": 673586002, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190686, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "00H8AHIivD1rUGInd6vK9", + "originalText": "get_device_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1412, + "versionNonce": 883011324, + "isDeleted": false, + "id": "qfecgPG7OTgfrmxH_wYjd", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 753.8086078539736, + "y": 174.46886745094116, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 216440398, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Z2MQO-tNOMQTT_k1-2IUa" + }, + { + "id": "nWV8ZiXKo6XPw45kh219o", + "type": "arrow" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1449, + "versionNonce": 380540054, + "isDeleted": false, + "id": "Z2MQO-tNOMQTT_k1-2IUa", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 791.0586078539736, + "y": 200.16886745094115, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 262.5, + "height": 33.6, + "seed": 56206478, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190687, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_doc()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "qfecgPG7OTgfrmxH_wYjd", + "originalText": "get_device_doc()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 736, + "versionNonce": 269007612, + "isDeleted": false, + "id": "kgES3Ds6zIcYs3wT5LjDf", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -855.1309528777701, + "y": 190.54630700429652, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 507, + "height": 85, + "seed": 1164519954, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "5q4xvOE3CTGtPnp7JZidS" + }, + { + "id": "k4WPOsFM29rrgCD9oc5Nk", + "type": "arrow" + }, + { + "id": "Imj5Ywbx0dSGQjMIRVipE", + "type": "arrow" + } + ], + "updated": 1688743084694, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 780, + "versionNonce": 1621305290, + "isDeleted": false, + "id": "5q4xvOE3CTGtPnp7JZidS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -847.7247028777701, + "y": 216.2463070042965, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 492.1875, + "height": 33.6, + "seed": 379459538, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190688, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kgES3Ds6zIcYs3wT5LjDf", + "originalText": "get_device_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1378, + "versionNonce": 2139561980, + "isDeleted": false, + "id": "VXejpYGAoqvozMkgRr0PN", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 362.69020487250145, + "y": 223.25356083226825, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 789406222, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Fzjm_DvQDVsl2aFB4ERQo" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1408, + "versionNonce": 1281069526, + "isDeleted": false, + "id": "Fzjm_DvQDVsl2aFB4ERQo", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 375.33082987250145, + "y": 248.95356083226824, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 311.71875, + "height": 33.6, + "seed": 57798734, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190688, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "VXejpYGAoqvozMkgRr0PN", + "originalText": "get_device_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1375, + "versionNonce": 370786428, + "isDeleted": false, + "id": "org2j-d8kWx4QSM20_rWd", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 394.7260258766164, + "y": 269.58217274478056, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 1159148302, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "a-AXoFTyFBBdOpildTGb5" + }, + { + "id": "Bi_WdHYSLWbPwEUZqPIcG", + "type": "arrow" + }, + { + "id": "_hWN74TaNhLESJlB4_VSG", + "type": "arrow" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1403, + "versionNonce": 1715445386, + "isDeleted": false, + "id": "a-AXoFTyFBBdOpildTGb5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 407.3666508766164, + "y": 295.28217274478055, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 311.71875, + "height": 33.6, + "seed": 974758222, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190689, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "org2j-d8kWx4QSM20_rWd", + "originalText": "get_device_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1460, + "versionNonce": 593644740, + "isDeleted": false, + "id": "T-8MzolAvMtCaxMjGA1cf", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 797.5544462477237, + "y": 216.68211499782547, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 81580622, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "cRI9qXhZYtsm_910OAxdI" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1499, + "versionNonce": 1442244374, + "isDeleted": false, + "id": "cRI9qXhZYtsm_910OAxdI", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 834.8044462477237, + "y": 242.38211499782545, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 262.5, + "height": 33.6, + "seed": 107567246, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190689, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_doc()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "T-8MzolAvMtCaxMjGA1cf", + "originalText": "get_device_doc()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1494, + "versionNonce": 1854149700, + "isDeleted": false, + "id": "hW__4ehGRjcsiWtE4Kik_", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 845.197202935441, + "y": 265.96777826655534, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 337, + "height": 85, + "seed": 217885202, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "1nwWTbcUt-hSTxQ2hfZYl" + }, + { + "id": "to0sNOycrrplcfjVZ-cui", + "type": "arrow" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1531, + "versionNonce": 1453276490, + "isDeleted": false, + "id": "1nwWTbcUt-hSTxQ2hfZYl", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 882.447202935441, + "y": 291.66777826655533, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 262.5, + "height": 33.6, + "seed": 532781010, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190690, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_doc()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "hW__4ehGRjcsiWtE4Kik_", + "originalText": "get_device_doc()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 692, + "versionNonce": 288232662, + "isDeleted": false, + "id": "RlnZiw7srpotEypPKNERx", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1572.511820866717, + "y": 482.91844743972297, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 146, + "height": 164, + "seed": 1212932494, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "_bDvIufA0W2CjxsVs4n9y", + "type": "arrow" + }, + { + "id": "T6Sd6Hn6dXJON0JeaTG6W", + "type": "arrow" + }, + { + "id": "lY7XNWjQ6EuOiAnaWfO6c", + "type": "arrow" + }, + { + "type": "text", + "id": "tsWgdW8eX4t-plGTT9jhD" + }, + { + "id": "h4gxZBWAV3eZtFKTTvkSW", + "type": "arrow" + } + ], + "updated": 1688749214132, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 54, + "versionNonce": 1879755658, + "isDeleted": false, + "id": "tsWgdW8eX4t-plGTT9jhD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -1534.668070866717, + "y": 617.918447439723, + "strokeColor": "#000000", + "backgroundColor": "#4c6ef5", + "width": 70.3125, + "height": 24, + "seed": 237414269, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749214132, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "inputs", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "RlnZiw7srpotEypPKNERx", + "originalText": "inputs", + "lineHeight": 1.2, + "baseline": 19 + }, + { + "type": "image", + "version": 981, + "versionNonce": 749183612, + "isDeleted": false, + "id": "QabXWHbvs9BzyUAcWwdFH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 512.1110272909991, + "y": 480.8358304353528, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 100, + "height": 100, + "seed": 1497862350, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "750f9d0703dbbf65a7085cb953ff12ee1ffc837237fbc199ccaac662de3cef890c9f8cb461d313c3e7a412ec918a6a12", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 981, + "versionNonce": 217502532, + "isDeleted": false, + "id": "LJuiQKZLOkN1No4YSLqIh", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 522.1110272909991, + "y": 490.8358304353528, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 100, + "height": 100, + "seed": 737691406, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "750f9d0703dbbf65a7085cb953ff12ee1ffc837237fbc199ccaac662de3cef890c9f8cb461d313c3e7a412ec918a6a12", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 983, + "versionNonce": 17167100, + "isDeleted": false, + "id": "PKTevfJAZHQV1Y9m0bDMk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 532.1110272909991, + "y": 500.8358304353528, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 100, + "height": 100, + "seed": 1270363470, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "750f9d0703dbbf65a7085cb953ff12ee1ffc837237fbc199ccaac662de3cef890c9f8cb461d313c3e7a412ec918a6a12", + "scale": [ + 1, + 1 + ] + }, + { + "type": "rectangle", + "version": 1588, + "versionNonce": 720920004, + "isDeleted": false, + "id": "td4rJmFYlF9E_bCcPhmMa", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 484.9283528916576, + "y": 481.25173176206545, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 196, + "height": 166, + "seed": 1105222542, + "groupIds": [], + "roundness": { + "type": 1 + }, + "boundElements": [ + { + "type": "text", + "id": "wu83w1x9bzyoTf_bQVkUA" + }, + { + "id": "_hWN74TaNhLESJlB4_VSG", + "type": "arrow" + } + ], + "updated": 1688747878875, + "link": null, + "locked": false + }, + { + "type": "image", + "version": 1001, + "versionNonce": 1325781572, + "isDeleted": false, + "id": "ZZObbvN-1ZG727xPmuA9Y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 956.0434060193875, + "y": 504.21107502392397, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 58, + "height": 58, + "seed": 334576398, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "83a00a51147534921479e98f1ea8c4c681b9185b09037689fec3b8c18e9cdbd0f30a15abc05c09040abc4ef5b33dae2d", + "scale": [ + 1, + 1 + ] + }, + { + "type": "rectangle", + "version": 1280, + "versionNonce": 1789551612, + "isDeleted": false, + "id": "6ZuBAGfvA_aDgN5Hz_LIw", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 912.4173787115778, + "y": 486.2682059725362, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 193, + "height": 168, + "seed": 812820814, + "groupIds": [], + "roundness": { + "type": 1 + }, + "boundElements": [ + { + "type": "text", + "id": "sjZlm8vxt7mPMIbLxm7PF" + }, + { + "id": "to0sNOycrrplcfjVZ-cui", + "type": "arrow" + } + ], + "updated": 1688742878069, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 835, + "versionNonce": 1058866186, + "isDeleted": false, + "id": "wu83w1x9bzyoTf_bQVkUA", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 500.8971028916576, + "y": 618.2517317620654, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 164.0625, + "height": 24, + "seed": 1243555602, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190690, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "EOS CLI Config", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "td4rJmFYlF9E_bCcPhmMa", + "originalText": "EOS CLI Config", + "lineHeight": 1.2, + "baseline": 19 + }, + { + "type": "text", + "version": 739, + "versionNonce": 271358358, + "isDeleted": false, + "id": "sjZlm8vxt7mPMIbLxm7PF", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 932.7455037115778, + "y": 601.2682059725362, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 152.34375, + "height": 48, + "seed": 42102418, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190691, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "Device\nDocumentation", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "6ZuBAGfvA_aDgN5Hz_LIw", + "originalText": "Device\nDocumentation", + "lineHeight": 1.2, + "baseline": 43 + }, + { + "type": "image", + "version": 1030, + "versionNonce": 413570300, + "isDeleted": false, + "id": "wFIVMulNg7WJawzuUvJlI", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 975.9073731069593, + "y": 523.9985431747941, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 58, + "height": 58, + "seed": 1494741262, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "83a00a51147534921479e98f1ea8c4c681b9185b09037689fec3b8c18e9cdbd0f30a15abc05c09040abc4ef5b33dae2d", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 1019, + "versionNonce": 443959492, + "isDeleted": false, + "id": "ShDqn0DOoeI5fNN9UHOU0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 997.7935210769328, + "y": 542.3141832451934, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 58, + "height": 58, + "seed": 917667090, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878069, + "link": null, + "locked": false, + "status": "saved", + "fileId": "83a00a51147534921479e98f1ea8c4c681b9185b09037689fec3b8c18e9cdbd0f30a15abc05c09040abc4ef5b33dae2d", + "scale": [ + 1, + 1 + ] + }, + { + "type": "arrow", + "version": 898, + "versionNonce": 180117642, + "isDeleted": false, + "id": "_bDvIufA0W2CjxsVs4n9y", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1473.604272223498, + "y": 472.20032480085047, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 69.37648705410766, + "height": 97.74465441683668, + "seed": 917896334, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749214132, + "link": null, + "locked": false, + "startBinding": { + "elementId": "RlnZiw7srpotEypPKNERx", + "gap": 10.718122638872494, + "focus": -0.30867600404539663 + }, + "endBinding": { + "elementId": "ofKAc6qpp-84HBW3DnDWC", + "gap": 10.70567038401344, + "focus": -0.001489364807705481 + }, + "lastCommittedPoint": null, + "startArrowhead": "triangle", + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 69.37648705410766, + -97.74465441683668 + ] + ] + }, + { + "type": "arrow", + "version": 658, + "versionNonce": 305381194, + "isDeleted": false, + "id": "T6Sd6Hn6dXJON0JeaTG6W", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1411.932767977435, + "y": 516.8569394655874, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 298.4092597135816, + "height": 206.7758376197071, + "seed": 292705934, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749214132, + "link": null, + "locked": false, + "startBinding": { + "elementId": "RlnZiw7srpotEypPKNERx", + "gap": 14.57905288928182, + "focus": 0.08651822021293838 + }, + "endBinding": { + "elementId": "MeA2a5EzTwMkYUmy66Ppu", + "gap": 6.699025522767421, + "focus": 0.005914298214042351 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 298.4092597135816, + -206.7758376197071 + ] + ] + }, + { + "type": "arrow", + "version": 587, + "versionNonce": 1490109962, + "isDeleted": false, + "id": "lY7XNWjQ6EuOiAnaWfO6c", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1414.7453910801678, + "y": 578.6395360458694, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 686.5248245153373, + "height": 204.60914376581928, + "seed": 1290286478, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749214132, + "link": null, + "locked": false, + "startBinding": { + "elementId": "RlnZiw7srpotEypPKNERx", + "gap": 11.766429786549189, + "focus": 0.36227396092790626 + }, + "endBinding": { + "elementId": "gqzleTGOSVH7KlPJiwmGC", + "gap": 10.53039228004974, + "focus": 0.06325374934764395 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 686.5248245153373, + -204.60914376581928 + ] + ] + }, + { + "type": "arrow", + "version": 1621, + "versionNonce": 493187990, + "isDeleted": false, + "id": "k4WPOsFM29rrgCD9oc5Nk", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -423.97854254927046, + "y": 177.00903855848702, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 461.4390167589294, + "height": 140.85452621814468, + "seed": 68500882, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749201496, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kgES3Ds6zIcYs3wT5LjDf", + "gap": 13.537268445809493, + "focus": -0.01419117058183044 + }, + "endBinding": { + "elementId": "SOImDgYmuuOorZdDzp7Yo", + "gap": 10.000784472656939, + "focus": -0.3054092762096793 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 461.4390167589294, + -140.85452621814468 + ] + ] + }, + { + "type": "arrow", + "version": 2390, + "versionNonce": 920555734, + "isDeleted": false, + "id": "Bi_WdHYSLWbPwEUZqPIcG", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 244.0001602758469, + "y": 53.70502259384676, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.20931241535942, + "height": 125.06885029337741, + "seed": 535429458, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749201496, + "link": null, + "locked": false, + "startBinding": { + "elementId": "SOImDgYmuuOorZdDzp7Yo", + "gap": 18.538901593530966, + "focus": 0.12942938550363026 + }, + "endBinding": { + "elementId": "00H8AHIivD1rUGInd6vK9", + "gap": 5.168518819332293, + "focus": 0.1318108036547259 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 205.20931241535942, + 125.06885029337741 + ] + ] + }, + { + "type": "arrow", + "version": 1889, + "versionNonce": 2140647420, + "isDeleted": false, + "id": "_hWN74TaNhLESJlB4_VSG", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 557.8034884673273, + "y": 361.92975051746134, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 6.246048066784283, + "height": 106.35056398099641, + "seed": 397682894, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688747878875, + "link": null, + "locked": false, + "startBinding": { + "elementId": "org2j-d8kWx4QSM20_rWd", + "gap": 7.347577772680779, + "focus": 0.04822878669839951 + }, + "endBinding": { + "elementId": "td4rJmFYlF9E_bCcPhmMa", + "gap": 12.971417263607691, + "focus": -0.12446775721955332 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 6.246048066784283, + 106.35056398099641 + ] + ] + }, + { + "type": "arrow", + "version": 2116, + "versionNonce": 1513901892, + "isDeleted": false, + "id": "to0sNOycrrplcfjVZ-cui", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1013.4271398078072, + "y": 364.63778636595225, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 1.8394531183448635, + "height": 102.94852924988163, + "seed": 316465294, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688742878083, + "link": null, + "locked": false, + "startBinding": { + "elementId": "hW__4ehGRjcsiWtE4Kik_", + "focus": 0.007525088592864275, + "gap": 13.67000809939691 + }, + "endBinding": { + "elementId": "6ZuBAGfvA_aDgN5Hz_LIw", + "focus": 0.08350845996263027, + "gap": 18.681890356702297 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 1.8394531183448635, + 102.94852924988163 + ] + ] + }, + { + "type": "rectangle", + "version": 1580, + "versionNonce": 577595850, + "isDeleted": false, + "id": "YXr3Pv0UPcip964jylN3S", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -958.7931714060551, + "y": -64.66943963819926, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 147, + "height": 125, + "seed": 845036238, + "groupIds": [], + "roundness": { + "type": 1 + }, + "boundElements": [ + { + "type": "text", + "id": "IGlG6syeQjFExC-hMFfAh" + }, + { + "id": "f4Ix3YpmDD-zeAAuA2WOw", + "type": "arrow" + }, + { + "id": "Imj5Ywbx0dSGQjMIRVipE", + "type": "arrow" + } + ], + "updated": 1688749194841, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 557, + "versionNonce": 1236529866, + "isDeleted": false, + "id": "IGlG6syeQjFExC-hMFfAh", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -938.0275464060551, + "y": 31.330560361800735, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 105.46875, + "height": 24, + "seed": 1084862734, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190691, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "avd_facts", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "YXr3Pv0UPcip964jylN3S", + "originalText": "avd_facts", + "lineHeight": 1.2, + "baseline": 19 + }, + { + "type": "arrow", + "version": 283, + "versionNonce": 963747978, + "isDeleted": false, + "id": "f4Ix3YpmDD-zeAAuA2WOw", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1050.8433442379767, + "y": 210.96644031635716, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 122.08568713472766, + "height": 140.52293134931057, + "seed": 1659336462, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749194912, + "link": null, + "locked": false, + "startBinding": { + "elementId": "MeA2a5EzTwMkYUmy66Ppu", + "gap": 7.415636006755696, + "focus": -0.28204848557033807 + }, + "endBinding": { + "elementId": "YXr3Pv0UPcip964jylN3S", + "gap": 10.11294860524585, + "focus": -0.15353176062513665 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 122.08568713472766, + -140.52293134931057 + ] + ] + }, + { + "type": "arrow", + "version": 340, + "versionNonce": 943783754, + "isDeleted": false, + "id": "Imj5Ywbx0dSGQjMIRVipE", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -832.4563784263966, + "y": 71.8039854936049, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 151.77024009224817, + "height": 105.32233083236298, + "seed": 903072786, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749194912, + "link": null, + "locked": false, + "startBinding": { + "elementId": "YXr3Pv0UPcip964jylN3S", + "gap": 11.47342513180415, + "focus": 0.32911658773523683 + }, + "endBinding": { + "elementId": "kgES3Ds6zIcYs3wT5LjDf", + "gap": 13.419990678328645, + "focus": 0.004848165915555344 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 151.77024009224817, + 105.32233083236298 + ] + ] + }, + { + "type": "arrow", + "version": 1819, + "versionNonce": 365037078, + "isDeleted": false, + "id": "nWV8ZiXKo6XPw45kh219o", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 239.43247797731436, + "y": -9.667089143397916, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 604.5219068416895, + "height": 178.2958404224495, + "seed": 787282638, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749201496, + "link": null, + "locked": false, + "startBinding": { + "elementId": "SOImDgYmuuOorZdDzp7Yo", + "gap": 13.971219294998383, + "focus": -0.07604273839251986 + }, + "endBinding": { + "elementId": "qfecgPG7OTgfrmxH_wYjd", + "gap": 5.840116171889574, + "focus": 0.27365961975668907 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 604.5219068416895, + 178.2958404224495 + ] + ] + }, + { + "type": "image", + "version": 1029, + "versionNonce": 636441117, + "isDeleted": false, + "id": "PvvOgC9WiBP9Pb8CSUHKU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1871.0042011550468, + "y": 223.7627557191688, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 159587602, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792621773, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 1037, + "versionNonce": 1895574067, + "isDeleted": false, + "id": "XOTiQlaGX1NG3nQg6CbwI", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1849.4827566574031, + "y": 240.84839757048462, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 2041084942, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792621773, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 1034, + "versionNonce": 1272514173, + "isDeleted": false, + "id": "JGguhmYQo8pEnZVqupBXc", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1825.0041931199385, + "y": 258.09842032469965, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 2004437394, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792621773, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "rectangle", + "version": 387, + "versionNonce": 448602589, + "isDeleted": false, + "id": "HoO2NTT1waA3wcc4JYKm6", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -2045.4658591305147, + "y": 137.09117784045287, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 354, + "height": 257, + "seed": 1472026973, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "8xsozFNotKqmmxOwVIeco" + }, + { + "id": "h4gxZBWAV3eZtFKTTvkSW", + "type": "arrow" + } + ], + "updated": 1687792752639, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 272, + "versionNonce": 1372649174, + "isDeleted": false, + "id": "8xsozFNotKqmmxOwVIeco", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -2040.4658591305147, + "y": 142.09117784045287, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 234.375, + "height": 48, + "seed": 993030547, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190692, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": " Inventory and \n variable management", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "HoO2NTT1waA3wcc4JYKm6", + "originalText": " Inventory and \n variable management", + "lineHeight": 1.2, + "baseline": 43 + }, + { + "type": "image", + "version": 1078, + "versionNonce": 1199090173, + "isDeleted": false, + "id": "XzQcgGK1aDa0w9n0BsdaC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -2008.287287701943, + "y": 236.05546355473848, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 2004437394, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792690601, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "text", + "version": 419, + "versionNonce": 687802762, + "isDeleted": false, + "id": "m9KyR7XvbqrRJquYV8FXK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -2026.537287701943, + "y": 338.126892126167, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 328.125, + "height": 24, + "seed": 2145111411, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190692, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 3, + "text": "inventory | group/hosts vars", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "inventory | group/hosts vars", + "lineHeight": 1.2, + "baseline": 19 + }, + { + "type": "image", + "version": 1087, + "versionNonce": 1935695645, + "isDeleted": false, + "id": "Px8IIC9Fdf1lbz7oTvqt7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1560.7158631480688, + "y": 503.887631251973, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 159587602, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792746903, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 1095, + "versionNonce": 950955315, + "isDeleted": false, + "id": "LEdhq08uKj3Zgh_1cblb-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1539.1944186504252, + "y": 520.9732731032889, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 2041084942, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792746903, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 1092, + "versionNonce": 1101034365, + "isDeleted": false, + "id": "uBGxw1fBJ7RW-lS4ZWlK7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1514.7158551129605, + "y": 538.2232958575039, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 71, + "height": 71, + "seed": 2004437394, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1687792746903, + "link": null, + "locked": false, + "status": "saved", + "fileId": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "scale": [ + 1, + 1 + ] + }, + { + "type": "arrow", + "version": 117, + "versionNonce": 1737487562, + "isDeleted": false, + "id": "h4gxZBWAV3eZtFKTTvkSW", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1811.0183994415913, + "y": 406.7463901956651, + "strokeColor": "#000000", + "backgroundColor": "#4c6ef5", + "width": 226.67682791417815, + "height": 161.8823065045409, + "seed": 1053097075, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749214132, + "link": null, + "locked": false, + "startBinding": { + "elementId": "HoO2NTT1waA3wcc4JYKm6", + "gap": 12.655212355212214, + "focus": 0.38886773524360463 + }, + "endBinding": { + "elementId": "RlnZiw7srpotEypPKNERx", + "gap": 11.829750660695861, + "focus": -0.46836578516679883 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + 226.67682791417815, + 161.8823065045409 + ] + ] + }, + { + "type": "rectangle", + "version": 1392, + "versionNonce": 1500785532, + "isDeleted": false, + "id": "UulTzjN-lSTfmcW6qDXH-", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -260.3803832775511, + "y": 192.5698905191124, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 480, + "height": 85, + "seed": 1159148302, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "D4AW4XR2_penGMsYeWQAi" + }, + { + "id": "ZBmJd3BihFTJBnbZTVcB3", + "type": "arrow" + } + ], + "updated": 1688742953472, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1462, + "versionNonce": 829926422, + "isDeleted": false, + "id": "D4AW4XR2_penGMsYeWQAi", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -250.06788327755112, + "y": 218.26989051911238, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 459.375, + "height": 33.6, + "seed": 974758222, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190693, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "UulTzjN-lSTfmcW6qDXH-", + "originalText": "validate_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1464, + "versionNonce": 832443204, + "isDeleted": false, + "id": "YVGsd61kkkzCAsgnqKcCF", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -221.4829295652571, + "y": 232.00000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 480, + "height": 85, + "seed": 1159148302, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "EUrke6QTFWf5OLSsoM2ak" + } + ], + "updated": 1688742918368, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1536, + "versionNonce": 70862922, + "isDeleted": false, + "id": "EUrke6QTFWf5OLSsoM2ak", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -211.1704295652571, + "y": 257.70000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 459.375, + "height": 33.6, + "seed": 974758222, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190693, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "YVGsd61kkkzCAsgnqKcCF", + "originalText": "validate_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 1441, + "versionNonce": 2122517188, + "isDeleted": false, + "id": "ItIR74MdYQCXUV1boDdTD", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -165.4829295652571, + "y": 267.25000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 480, + "height": 85, + "seed": 1159148302, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "CWjK3PYVxk9ZPMMWmf4lF" + } + ], + "updated": 1688742918368, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1513, + "versionNonce": 1830140246, + "isDeleted": false, + "id": "CWjK3PYVxk9ZPMMWmf4lF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -155.1704295652571, + "y": 292.95000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 459.375, + "height": 33.6, + "seed": 974758222, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190694, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ItIR74MdYQCXUV1boDdTD", + "originalText": "validate_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 451, + "versionNonce": 128999108, + "isDeleted": false, + "id": "Zx49caWJvma_xM7bssX2e", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1574.732929565257, + "y": 240.00000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 301, + "height": 85, + "seed": 1334978382, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "eFeVZeajDgZxbm87aN2gc" + } + ], + "updated": 1688742944187, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 379, + "versionNonce": 1664986890, + "isDeleted": false, + "id": "eFeVZeajDgZxbm87aN2gc", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1563.686054565257, + "y": 265.70000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 278.90625, + "height": 33.6, + "seed": 1700122578, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190694, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_inputs()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Zx49caWJvma_xM7bssX2e", + "originalText": "validate_inputs()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 459, + "versionNonce": 54519364, + "isDeleted": false, + "id": "ofKAc6qpp-84HBW3DnDWC", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1517.232929565257, + "y": 278.75000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 301, + "height": 85, + "seed": 1334978382, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "50lnRuHNDW1CbI8Q6fSYk" + }, + { + "id": "_bDvIufA0W2CjxsVs4n9y", + "type": "arrow" + } + ], + "updated": 1688742944187, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 386, + "versionNonce": 1006640790, + "isDeleted": false, + "id": "50lnRuHNDW1CbI8Q6fSYk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -1506.186054565257, + "y": 304.45000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 278.90625, + "height": 33.6, + "seed": 1700122578, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190695, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "validate_inputs()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ofKAc6qpp-84HBW3DnDWC", + "originalText": "validate_inputs()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "arrow", + "version": 2462, + "versionNonce": 1258607446, + "isDeleted": false, + "id": "ZBmJd3BihFTJBnbZTVcB3", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 83.87919149022923, + "y": 80.23719259314106, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 65.39857153520785, + "height": 102.83074687854372, + "seed": 535429458, + "groupIds": [], + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1688749201497, + "link": null, + "locked": false, + "startBinding": { + "elementId": "SOImDgYmuuOorZdDzp7Yo", + "gap": 17.655640032863356, + "focus": -0.12231188692873662 + }, + "endBinding": { + "elementId": "UulTzjN-lSTfmcW6qDXH-", + "gap": 9.501951047427623, + "focus": 0.021678014675630044 + }, + "lastCommittedPoint": null, + "startArrowhead": "triangle", + "endArrowhead": "triangle", + "points": [ + [ + 0, + 0 + ], + [ + -65.39857153520785, + 102.83074687854372 + ] + ] + }, + { + "type": "rectangle", + "version": 760, + "versionNonce": 1842105468, + "isDeleted": false, + "id": "F48URHilkFAeXwh8P9Dj4", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -813.7329295652571, + "y": 236.00000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 507, + "height": 85, + "seed": 1164519954, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "UiM-9VZmYWo3dFKVLueE7" + } + ], + "updated": 1688743084694, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 804, + "versionNonce": 445070794, + "isDeleted": false, + "id": "UiM-9VZmYWo3dFKVLueE7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -806.3266795652571, + "y": 261.70000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 492.1875, + "height": 33.6, + "seed": 379459538, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190695, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "F48URHilkFAeXwh8P9Dj4", + "originalText": "get_device_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "rectangle", + "version": 787, + "versionNonce": 696002812, + "isDeleted": false, + "id": "gqzleTGOSVH7KlPJiwmGC", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -778.7329295652571, + "y": 278.50000000000034, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffffff", + "width": 507, + "height": 85, + "seed": 1164519954, + "groupIds": [], + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "A-0x3XFP_EVmgBg6eEs58" + }, + { + "id": "lY7XNWjQ6EuOiAnaWfO6c", + "type": "arrow" + } + ], + "updated": 1688743091609, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 831, + "versionNonce": 585882582, + "isDeleted": false, + "id": "A-0x3XFP_EVmgBg6eEs58", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -771.3266795652571, + "y": 304.20000000000033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 492.1875, + "height": 33.6, + "seed": 379459538, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688749190696, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 3, + "text": "get_device_structured_config()", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "gqzleTGOSVH7KlPJiwmGC", + "originalText": "get_device_structured_config()", + "lineHeight": 1.2, + "baseline": 26 + }, + { + "type": "image", + "version": 178, + "versionNonce": 907389180, + "isDeleted": false, + "id": "0rJVpuQfOxXNCOw-JFS1-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -912.4276132349434, + "y": -48.5723524526302, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 53.40098209814643, + "height": 68.50955264298786, + "seed": 1667246788, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688748278945, + "link": null, + "locked": false, + "status": "pending", + "fileId": "f16481c52e786c0992235c6a9de7427c0a281c82", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 237, + "versionNonce": 2073487812, + "isDeleted": false, + "id": "9V-vUpulQGqj4-GZgNvVM", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 75.93111479825666, + "y": -111.17105695946613, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 53.40098209814643, + "height": 68.50955264298786, + "seed": 1667246788, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688748298150, + "link": null, + "locked": false, + "status": "pending", + "fileId": "f16481c52e786c0992235c6a9de7427c0a281c82", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 199, + "versionNonce": 1559790716, + "isDeleted": false, + "id": "zumT05DFuSL5PWTNn_AP9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 103.87142562290887, + "y": -89.43970409584783, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 53.40098209814643, + "height": 68.50955264298786, + "seed": 1667246788, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688748298150, + "link": null, + "locked": false, + "status": "pending", + "fileId": "f16481c52e786c0992235c6a9de7427c0a281c82", + "scale": [ + 1, + 1 + ] + }, + { + "type": "image", + "version": 203, + "versionNonce": 1880953156, + "isDeleted": false, + "id": "WzTVuU_bp5GY4A_zh-lds", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 128.7072574670442, + "y": -66.67352490539058, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 53.40098209814643, + "height": 68.50955264298786, + "seed": 1667246788, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1688748298150, + "link": null, + "locked": false, + "status": "pending", + "fileId": "f16481c52e786c0992235c6a9de7427c0a281c82", + "scale": [ + 1, + 1 + ] + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": { + "750f9d0703dbbf65a7085cb953ff12ee1ffc837237fbc199ccaac662de3cef890c9f8cb461d313c3e7a412ec918a6a12": { + "mimeType": "image/png", + "id": "750f9d0703dbbf65a7085cb953ff12ee1ffc837237fbc199ccaac662de3cef890c9f8cb461d313c3e7a412ec918a6a12", + "dataURL": "data:image/png;base64,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", + "created": 1665613380060 + }, + "83a00a51147534921479e98f1ea8c4c681b9185b09037689fec3b8c18e9cdbd0f30a15abc05c09040abc4ef5b33dae2d": { + "mimeType": "image/png", + "id": "83a00a51147534921479e98f1ea8c4c681b9185b09037689fec3b8c18e9cdbd0f30a15abc05c09040abc4ef5b33dae2d", + "dataURL": "data:image/png;base64,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", + "created": 1665612848806 + }, + "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab": { + "mimeType": "image/png", + "id": "59454aaa34066d746b3f8e4fbb60176834d966fb2d98f230db8a5e74281c6504ab53a078f5a400ec77a24bb890f07aab", + "dataURL": "data:image/png;base64,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", + "created": 1665613221418 + }, + "f16481c52e786c0992235c6a9de7427c0a281c82": { + "mimeType": "image/png", + "id": "f16481c52e786c0992235c6a9de7427c0a281c82", + "dataURL": "data:image/png;base64,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", + "created": 1688748247430, + "lastRetrieved": 1688748247430 + } + } +} diff --git a/ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg b/ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg new file mode 100644 index 00000000000..853ca789823 --- /dev/null +++ b/ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg @@ -0,0 +1,16 @@ + + + + + + + StructuredEOS Config pyavd functionsvalidate_inputs()get_avd_facts()get_device_config()get_device_doc()get_device_structured_config()get_device_config()get_device_config()get_device_doc()get_device_doc()inputsEOS CLI ConfigDeviceDocumentationavd_facts Inventory and variable managementinventory | group/hosts varsvalidate_structured_config()validate_structured_config()validate_structured_config()validate_inputs()validate_inputs()get_device_structured_config()get_device_structured_config() \ No newline at end of file diff --git a/ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg b/ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg new file mode 100644 index 00000000000..d8d9a12f64c --- /dev/null +++ b/ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg @@ -0,0 +1,16 @@ + + + + + + + StructuredEOS Config pyavd functionsvalidate_inputs()get_avd_facts()get_device_config()get_device_doc()get_device_structured_config()get_device_config()get_device_config()get_device_doc()get_device_doc()inputsEOS CLI ConfigDeviceDocumentationavd_facts Inventory and variable managementinventory | group/hosts varsvalidate_structured_config()validate_structured_config()validate_structured_config()validate_inputs()validate_inputs()get_device_structured_config()get_device_structured_config() \ No newline at end of file diff --git a/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md b/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md index a3fef285db7..0b0eb1b9a85 100644 --- a/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md +++ b/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md @@ -79,7 +79,7 @@ The facts can be inspected in a file per device by running the `arista.avd.eos_d ```mermaid classDiagram direction LR - class eos_designs_facts["arista.avd.eos_designs_facts"]{ + class eos_designs_facts{ - Verify devices are in one fabric group - Read and template default role_vars - Read and validate Hostvars for all devices @@ -89,7 +89,7 @@ classDiagram - Run "render" method on all EosDesignsFacts instances - Build facts from data returned by "render" } - class ActionBase["Ansible ActionBase"]{ + class ActionBase{ } class AvdSchemaTools{ } diff --git a/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md b/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md index be2f6a40f07..725e82ae7f8 100644 --- a/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md +++ b/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md @@ -143,6 +143,8 @@ bgp_update_wait_install: false The following keys under `bgp_peer_groups` have been replaced to avoid upper-case variables: +See the full data model in the [documentation](../../roles/eos_designs/docs/input-variables.html#bgp-settings) + === "Removed keys" ```yaml @@ -161,8 +163,6 @@ The following keys under `bgp_peer_groups` have been replaced to avoid upper-cas evpn_overlay_peers: ``` -TODO: Add link to data model once schema is done. - ### ISIS underlay variables #### isis_default_circuit_type @@ -539,7 +539,7 @@ See the full data model in the [documentation](../../roles/eos_cli_config_gen/do The `name_server` key has been deprecated in favor of `ip_name_servers`, more aligned with the EOS CLI. -TODO: add link to the full data model +See the full data model in the [documentation](../../roles/eos_cli_config_gen/docs/input-variables.html#ip-name-servers) === "3.x" diff --git a/ansible_collections/arista/avd/docs/pyavd.md b/ansible_collections/arista/avd/docs/pyavd.md index a5b068a237b..039fec524eb 100644 --- a/ansible_collections/arista/avd/docs/pyavd.md +++ b/ansible_collections/arista/avd/docs/pyavd.md @@ -3,6 +3,11 @@ !!! warning pyavd is still in the development phase. Please do not use. +## Functions overview + +![Arista AVD Overview](_media/pyavd_functions_dark.svg#only-dark) +![Arista AVD Overview](_media/pyavd_functions_light.svg#only-light) + ## Installation ```sh diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md deleted file mode 100644 index df3cedefc10..00000000000 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/Input Variables.md +++ /dev/null @@ -1,7827 +0,0 @@ ---- -search: - boost: 2 ---- - -# Input Variables - -## AAA Accounting - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aaa_accounting](## "aaa_accounting") | Dictionary | | | | | - | [  exec](## "aaa_accounting.exec") | Dictionary | | | | | - | [    console](## "aaa_accounting.exec.console") | Dictionary | | | | | - | [      type](## "aaa_accounting.exec.console.type") | String | | | Valid Values:
- none
- start-stop
- stop-only | | - | [      group](## "aaa_accounting.exec.console.group") | String | | | | Group Name | - | [    default](## "aaa_accounting.exec.default") | Dictionary | | | | | - | [      type](## "aaa_accounting.exec.default.type") | String | | | Valid Values:
- none
- start-stop
- stop-only | | - | [      group](## "aaa_accounting.exec.default.group") | String | | | | Group Name | - | [  system](## "aaa_accounting.system") | Dictionary | | | | | - | [    default](## "aaa_accounting.system.default") | Dictionary | | | | | - | [      type](## "aaa_accounting.system.default.type") | String | | | Valid Values:
- none
- start-stop
- stop-only | | - | [      group](## "aaa_accounting.system.default.group") | String | | | | Group Name | - | [  dot1x](## "aaa_accounting.dot1x") | Dictionary | | | | | - | [    default](## "aaa_accounting.dot1x.default") | Dictionary | | | | | - | [      type](## "aaa_accounting.dot1x.default.type") | String | | | Valid Values:
- start-stop
- stop-only | | - | [      group](## "aaa_accounting.dot1x.default.group") | String | | | | Group Name | - | [  commands](## "aaa_accounting.commands") | Dictionary | | | | | - | [    console](## "aaa_accounting.commands.console") | List, items: Dictionary | | | | | - | [      - commands](## "aaa_accounting.commands.console.[].commands") | String | | | | Privelege level 'all' or 0-15 | - | [        type](## "aaa_accounting.commands.console.[].type") | String | | | Valid Values:
- none
- start-stop
- stop-only | | - | [        group](## "aaa_accounting.commands.console.[].group") | String | | | | Group Name | - | [        logging](## "aaa_accounting.commands.console.[].logging") | Boolean | | | | | - | [    default](## "aaa_accounting.commands.default") | List, items: Dictionary | | | | | - | [      - commands](## "aaa_accounting.commands.default.[].commands") | String | | | | Privelege level 'all' or 0-15 | - | [        type](## "aaa_accounting.commands.default.[].type") | String | | | Valid Values:
- none
- start-stop
- stop-only | | - | [        group](## "aaa_accounting.commands.default.[].group") | String | | | | Group Name | - | [        logging](## "aaa_accounting.commands.default.[].logging") | Boolean | | | | | - | [    commands_default](## "aaa_accounting.commands.commands_default") | List | | | | Deprecated and removed key from AVD 2.x | - -=== "YAML" - - ```yaml - aaa_accounting: - exec: - console: - type: - group: - default: - type: - group: - system: - default: - type: - group: - dot1x: - default: - type: - group: - commands: - console: - - commands: - type: - group: - logging: - default: - - commands: - type: - group: - logging: - commands_default: - ``` - -## AAA Authentication - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aaa_authentication](## "aaa_authentication") | Dictionary | | | | | - | [  login](## "aaa_authentication.login") | Dictionary | | | | | - | [    default](## "aaa_authentication.login.default") | String | | | | Login authentication method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group radius group MYGROUP local"
| - | [    console](## "aaa_authentication.login.console") | String | | | | Console authentication method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group radius group MYGROUP local"
| - | [  enable](## "aaa_authentication.enable") | Dictionary | | | | | - | [    default](## "aaa_authentication.enable.default") | String | | | | Enable authentication method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group radius group MYGROUP local"
| - | [  dot1x](## "aaa_authentication.dot1x") | Dictionary | | | | | - | [    default](## "aaa_authentication.dot1x.default") | String | | | | 802.1x authentication method(s) as a string.
Examples:
- "group radius"
- "group MYGROUP group radius"
| - | [  policies](## "aaa_authentication.policies") | Dictionary | | | | | - | [    on_failure_log](## "aaa_authentication.policies.on_failure_log") | Boolean | | | | | - | [    on_success_log](## "aaa_authentication.policies.on_success_log") | Boolean | | | | | - | [    local](## "aaa_authentication.policies.local") | Dictionary | | | | | - | [      allow_nopassword](## "aaa_authentication.policies.local.allow_nopassword") | Boolean | | | | | - | [    lockout](## "aaa_authentication.policies.lockout") | Dictionary | | | | | - | [      failure](## "aaa_authentication.policies.lockout.failure") | Integer | | | Min: 1
Max: 255 | | - | [      duration](## "aaa_authentication.policies.lockout.duration") | Integer | | | Min: 1
Max: 4294967295 | | - | [      window](## "aaa_authentication.policies.lockout.window") | Integer | | | Min: 1
Max: 4294967295 | | - -=== "YAML" - - ```yaml - aaa_authentication: - login: - default: - console: - enable: - default: - dot1x: - default: - policies: - on_failure_log: - on_success_log: - local: - allow_nopassword: - lockout: - failure: - duration: - window: - ``` - -## AAA Authorization - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aaa_authorization](## "aaa_authorization") | Dictionary | | | | | - | [  policy](## "aaa_authorization.policy") | Dictionary | | | | | - | [    local_default_role](## "aaa_authorization.policy.local_default_role") | String | | | | | - | [  exec](## "aaa_authorization.exec") | Dictionary | | | | | - | [    default](## "aaa_authorization.exec.default") | String | | | | Exec authorization method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group radius group MYGROUP local"
| - | [  config_commands](## "aaa_authorization.config_commands") | Boolean | | | | | - | [  serial_console](## "aaa_authorization.serial_console") | Boolean | | | | | - | [  dynamic](## "aaa_authorization.dynamic") | Dictionary | | | | | - | [    dot1x_additional_groups](## "aaa_authorization.dynamic.dot1x_additional_groups") | List, items: String | | | Min Length: 1 | | - | [      - <str>](## "aaa_authorization.dynamic.dot1x_additional_groups.[].<str>") | String | | | | | - | [  commands](## "aaa_authorization.commands") | Dictionary | | | | | - | [    all_default](## "aaa_authorization.commands.all_default") | String | | | | Command authorization method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group tacacs+ group MYGROUP local
| - | [    privilege](## "aaa_authorization.commands.privilege") | List, items: Dictionary | | | | | - | [      - level](## "aaa_authorization.commands.privilege.[].level") | String | | | | Privilege level(s) 0-15 | - | [        default](## "aaa_authorization.commands.privilege.[].default") | String | | | | Command authorization method(s) as a string.
Examples:
- "group tacacs+ local"
- "group MYGROUP none"
- "group tacacs+ group MYGROUP local" | - -=== "YAML" - - ```yaml - aaa_authorization: - policy: - local_default_role: - exec: - default: - config_commands: - serial_console: - dynamic: - dot1x_additional_groups: - - - commands: - all_default: - privilege: - - level: - default: - ``` - -## AAA Root - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aaa_root](## "aaa_root") | Dictionary | | | | | - | [  secret](## "aaa_root.secret") | Dictionary | | | | | - | [    sha512_password](## "aaa_root.secret.sha512_password") | String | | | | | - -=== "YAML" - - ```yaml - aaa_root: - secret: - sha512_password: - ``` - -## AAA Server Groups - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aaa_server_groups](## "aaa_server_groups") | List, items: Dictionary | | | | | - | [  - name](## "aaa_server_groups.[].name") | String | | | | Group name | - | [    type](## "aaa_server_groups.[].type") | String | | | Valid Values:
- tacacs+
- radius
- ldap | | - | [    servers](## "aaa_server_groups.[].servers") | List, items: Dictionary | | | | | - | [      - server](## "aaa_server_groups.[].servers.[].server") | String | | | | Hostname or IP address | - | [        vrf](## "aaa_server_groups.[].servers.[].vrf") | String | | | | VRF name | - -=== "YAML" - - ```yaml - aaa_server_groups: - - name: - type: - servers: - - server: - vrf: - ``` - -## IP Extended Access-Lists (legacy model) - -AVD currently supports 2 different data models for extended ACLs: - -- The legacy `access_lists` data model, for compatibility with existing deployments -- The improved `ip_access_lists` data model, for access to more EOS features - -Both data models can coexists without conflicts, as different keys are used: `access_lists` vs `ip_access_lists`. -Access list names must be unique. - -The legacy data model supports simplified ACL definition with `sequence` to `action` mapping: - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [access_lists](## "access_lists") | List, items: Dictionary | | | | | - | [  - name](## "access_lists.[].name") | String | Required, Unique | | | Access-list Name | - | [    counters_per_entry](## "access_lists.[].counters_per_entry") | Boolean | | | | | - | [    sequence_numbers](## "access_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "access_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "access_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "deny ip any any" | - -=== "YAML" - - ```yaml - access_lists: - - name: - counters_per_entry: - sequence_numbers: - - sequence: - action: - ``` - -## Address Locking - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [address_locking](## "address_locking") | Dictionary | | | | | - | [  dhcp_servers_ipv4](## "address_locking.dhcp_servers_ipv4") | List, items: String | | | | | - | [    - <str>](## "address_locking.dhcp_servers_ipv4.[].<str>") | String | | | | DHCP server IPv4 address | - | [  disabled](## "address_locking.disabled") | Boolean | | | | Disable IP locking on configured ports | - | [  leases](## "address_locking.leases") | List, items: Dictionary | | | | | - | [    - ip](## "address_locking.leases.[].ip") | String | Required | | | IP address | - | [      mac](## "address_locking.leases.[].mac") | String | Required | | | MAC address (hhhh.hhhh.hhhh or hh:hh:hh:hh:hh:hh) | - | [  local_interface](## "address_locking.local_interface") | String | | | | | - | [  locked_address](## "address_locking.locked_address") | Dictionary | | | | | - | [    expiration_mac_disabled](## "address_locking.locked_address.expiration_mac_disabled") | Boolean | | | | Configure deauthorizing locked addresses upon MAC aging out | - | [    ipv4_enforcement_disabled](## "address_locking.locked_address.ipv4_enforcement_disabled") | Boolean | | | | Configure enforcement for locked IPv4 addresses | - | [    ipv6_enforcement_disabled](## "address_locking.locked_address.ipv6_enforcement_disabled") | Boolean | | | | Configure enforcement for locked IPv6 addresses | - -=== "YAML" - - ```yaml - address_locking: - dhcp_servers_ipv4: - - - disabled: - leases: - - ip: - mac: - local_interface: - locked_address: - expiration_mac_disabled: - ipv4_enforcement_disabled: - ipv6_enforcement_disabled: - ``` - -## Aliases - -Multi-line string with one or more alias commands. - -Example: - -```yaml -aliases: | - alias wr copy running-config startup-config - alias siib show ip interface brief -``` - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [aliases](## "aliases") | String | | | | | - -=== "YAML" - - ```yaml - aliases: - ``` - -## ARP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [arp](## "arp") | Dictionary | | | | | - | [  aging](## "arp.aging") | Dictionary | | | | | - | [    timeout_default](## "arp.aging.timeout_default") | Integer | | | Min: 60
Max: 65535 | Timeout in seconds | - -=== "YAML" - - ```yaml - arp: - aging: - timeout_default: - ``` - -## As Path - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [as_path](## "as_path") | Dictionary | | | | | - | [  regex_mode](## "as_path.regex_mode") | String | | | Valid Values:
- asn
- string | | - | [  access_lists](## "as_path.access_lists") | List, items: Dictionary | | | | | - | [    - name](## "as_path.access_lists.[].name") | String | | | | Access List Name | - | [      entries](## "as_path.access_lists.[].entries") | List, items: Dictionary | | | | | - | [        - type](## "as_path.access_lists.[].entries.[].type") | String | | | Valid Values:
- permit
- deny | | - | [          match](## "as_path.access_lists.[].entries.[].match") | String | | | | Regex To Match | - | [          origin](## "as_path.access_lists.[].entries.[].origin") | String | | any | Valid Values:
- any
- egp
- igp
- incomplete | | - -=== "YAML" - - ```yaml - as_path: - regex_mode: - access_lists: - - name: - entries: - - type: - match: - origin: - ``` - -## Banners - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [banners](## "banners") | Dictionary | | | | | - | [  login](## "banners.login") | String | | | | Multiline string ending with EOF on the last line | - | [  motd](## "banners.motd") | String | | | | Multiline string ending with EOF on the last line | - -=== "YAML" - - ```yaml - banners: - login: - motd: - ``` - -## BGP Groups - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [bgp_groups](## "bgp_groups") | List, items: Dictionary | | | | | - | [  - name](## "bgp_groups.[].name") | String | Required, Unique | | | Group Name | - | [    vrf](## "bgp_groups.[].vrf") | String | | | | | - | [    neighbors](## "bgp_groups.[].neighbors") | List, items: String | | | | | - | [      - <str>](## "bgp_groups.[].neighbors.[].<str>") | String | | | | | - | [    bgp_maintenance_profiles](## "bgp_groups.[].bgp_maintenance_profiles") | List, items: String | | | | | - | [      - <str>](## "bgp_groups.[].bgp_maintenance_profiles.[].<str>") | String | | | | Profile Name | - -=== "YAML" - - ```yaml - bgp_groups: - - name: - vrf: - neighbors: - - - bgp_maintenance_profiles: - - - ``` - -## System Boot Settings - -Set the Aboot password - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [boot](## "boot") | Dictionary | | | | | - | [  secret](## "boot.secret") | Dictionary | | | | | - | [    hash_algorithm](## "boot.secret.hash_algorithm") | String | | sha512 | Valid Values:
- md5
- sha512 | | - | [    key](## "boot.secret.key") | String | | | | Hashed Password | - -=== "YAML" - - ```yaml - boot: - secret: - hash_algorithm: - key: - ``` - -## QOS Class-maps - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [class_maps](## "class_maps") | Dictionary | | | | | - | [  pbr](## "class_maps.pbr") | List, items: Dictionary | | | | | - | [    - name](## "class_maps.pbr.[].name") | String | Required, Unique | | | Class-Map Name | - | [      ip](## "class_maps.pbr.[].ip") | Dictionary | | | | | - | [        access_group](## "class_maps.pbr.[].ip.access_group") | String | | | | Standard Access-List Name | - | [  qos](## "class_maps.qos") | List, items: Dictionary | | | | | - | [    - name](## "class_maps.qos.[].name") | String | Required, Unique | | | Class-Map Name | - | [      vlan](## "class_maps.qos.[].vlan") | Integer | | | | VLAN value(s) or range(s) of VLAN values | - | [      cos](## "class_maps.qos.[].cos") | Integer | | | | CoS value(s) or range(s) of CoS values | - | [      ip](## "class_maps.qos.[].ip") | Dictionary | | | | | - | [        access_group](## "class_maps.qos.[].ip.access_group") | String | | | | IPv4 Access-List Name | - | [      ipv6](## "class_maps.qos.[].ipv6") | Dictionary | | | | | - | [        access_group](## "class_maps.qos.[].ipv6.access_group") | String | | | | IPv6 Access-List Name | - -=== "YAML" - - ```yaml - class_maps: - pbr: - - name: - ip: - access_group: - qos: - - name: - vlan: - cos: - ip: - access_group: - ipv6: - access_group: - ``` - -## Clock - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [clock](## "clock") | Dictionary | | | | | - | [  timezone](## "clock.timezone") | String | | | | | - -=== "YAML" - - ```yaml - clock: - timezone: - ``` - -## Community Lists (legacy model) - -AVD supports 2 different data models for community lists: - -- The legacy `community_lists` data model that can be used for compatibility with the existing deployments. -- The improved `ip_community_lists` data model. - -Both data models can coexist without conflicts, as different keys are used: `community_lists` vs `ip_community_lists`. -Community list names must be unique. - -The legacy data model supports simplified community list definition that only allows a single action to be defined as string: - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [community_lists](## "community_lists") | List, items: Dictionary | | | | | - | [  - name](## "community_lists.[].name") | String | Required, Unique | | | Community-list Name | - | [    action](## "community_lists.[].action") | String | Required | | | Action as string
Example: "permit GSHUT 65123:123" | - -=== "YAML" - - ```yaml - community_lists: - - name: - action: - ``` - -## Extensibility with Custom Templates - -- Custom templates can be added below the playbook directory. -- If a location above the directory is desired, a symbolic link can be used. -- Example under the `playbooks` directory create symbolic link with the following command: - - ```bash - ln -s ../../shared_repo/custom_avd_templates/ ./custom_avd_templates - ``` - -- The output will be rendered at the end of the configuration. -- The order of custom templates in the list can be important if they overlap. -- It is recommended to use a `!` delimiter at the top of each custom template. - -Add `custom_templates` to group/host variables: - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [custom_templates](## "custom_templates") | List, items: String | | | | | - | [  - <str>](## "custom_templates.[].<str>") | String | | | | Template relative path below playbook directory | - -=== "YAML" - - ```yaml - custom_templates: - - - ``` - -## CVX - -CVX server features are not supported on physical switches. See `management_cvx` for client configurations. - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [cvx](## "cvx") | Dictionary | | | | | - | [  shutdown](## "cvx.shutdown") | Boolean | | | | | - | [  peer_hosts](## "cvx.peer_hosts") | List, items: String | | | | | - | [    - <str>](## "cvx.peer_hosts.[].<str>") | String | | | | IP address or hostname | - | [  services](## "cvx.services") | Dictionary | | | | | - | [    mcs](## "cvx.services.mcs") | Dictionary | | | | | - | [      redis](## "cvx.services.mcs.redis") | Dictionary | | | | | - | [        password](## "cvx.services.mcs.redis.password") | String | | | | Hashed password using the password_type | - | [        password_type](## "cvx.services.mcs.redis.password_type") | String | | 7 | Valid Values:
- 0
- 7
- 8a | | - | [      shutdown](## "cvx.services.mcs.shutdown") | Boolean | | | | | - | [    vxlan](## "cvx.services.vxlan") | Dictionary | | | | VXLAN Controller service | - | [      shutdown](## "cvx.services.vxlan.shutdown") | Boolean | | | | | - | [      vtep_mac_learning](## "cvx.services.vxlan.vtep_mac_learning") | String | | | Valid Values:
- control-plane
- data-plane | | - -=== "YAML" - - ```yaml - cvx: - shutdown: - peer_hosts: - - - services: - mcs: - redis: - password: - password_type: - shutdown: - vxlan: - shutdown: - vtep_mac_learning: - ``` - -## Daemon TerminAttr - -You can either provide a list of IPs/FQDNs to target on-premise Cloudvision cluster or use DNS name for your Cloudvision as a Service instance. -Streaming to multiple clusters both on-prem and cloud service is supported. - -!!! note - For TerminAttr version recommendation and EOS compatibility matrix, please refer to the latest TerminAttr Release Notes - which always contain the latest recommended versions and minimum required versions per EOS release. - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [daemon_terminattr](## "daemon_terminattr") | Dictionary | | | | | - | [  cvaddrs](## "daemon_terminattr.cvaddrs") | List, items: String | | | | Streaming address(es) for CloudVision single cluster
- TCP 9910 is used for CV on-prem
- TCP 443 is used for CV as a Service
| - | [    - <str>](## "daemon_terminattr.cvaddrs.[].<str>") | String | | | | Server address in the format `:` | - | [  clusters](## "daemon_terminattr.clusters") | List, items: Dictionary | | | | Multiple CloudVision clusters
| - | [    - name](## "daemon_terminattr.clusters.[].name") | String | Required, Unique | | | Cluster Name | - | [      cvaddrs](## "daemon_terminattr.clusters.[].cvaddrs") | List, items: String | | | | Streaming address(es) for CloudVision cluster
- TCP 9910 is used for CV on-prem
- TCP 443 is used for CV as a Service
| - | [        - <str>](## "daemon_terminattr.clusters.[].cvaddrs.[].<str>") | String | | | | Server address in the format `:` | - | [      cvauth](## "daemon_terminattr.clusters.[].cvauth") | Dictionary | | | | Authentication scheme used to connect to CloudVision
| - | [        method](## "daemon_terminattr.clusters.[].cvauth.method") | String | | | Valid Values:
- token
- token-secure
- key
- certs | | - | [        key](## "daemon_terminattr.clusters.[].cvauth.key") | String | | | | | - | [        token_file](## "daemon_terminattr.clusters.[].cvauth.token_file") | String | | | | Token file path
e.g. "/tmp/token"
| - | [        cert_file](## "daemon_terminattr.clusters.[].cvauth.cert_file") | String | | | | Client certificate file path
e.g. "/persist/secure/ssl/terminattr/primary/certs/client.crt"
| - | [        ca_file](## "daemon_terminattr.clusters.[].cvauth.ca_file") | String | | | | CA certificate file path (on-prem only)
e.g. "/persist/secure/ssl/terminattr/primary/certs/ca.crt"
| - | [        key_file](## "daemon_terminattr.clusters.[].cvauth.key_file") | String | | | | Client certificate key file path
e.g. "/persist/secure/ssl/terminattr/primary/keys/client.key"
| - | [      cvobscurekeyfile](## "daemon_terminattr.clusters.[].cvobscurekeyfile") | Boolean | | | | Encrypt the private key used for authentication to CloudVision
| - | [      cvproxy](## "daemon_terminattr.clusters.[].cvproxy") | String | | | | Proxy server through which CloudVision is reachable. Useful when the CloudVision server is hosted in the cloud.
The expected form is http://[user:password@]ip:port, e.g.: `http://arista:arista@10.83.12.78:3128`. Available as of TerminAttr v1.13.0
| - | [      cvsourceip](## "daemon_terminattr.clusters.[].cvsourceip") | String | | | | Set source IP address in case of in-band managament
| - | [      cvsourceintf](## "daemon_terminattr.clusters.[].cvsourceintf") | String | | | | Set source interface in case of in-band managament. Available as of TerminAttr v1.23.0
| - | [      cvvrf](## "daemon_terminattr.clusters.[].cvvrf") | String | | | | The VRF to use to connect to CloudVision
| - | [  cvauth](## "daemon_terminattr.cvauth") | Dictionary | | | | Authentication scheme used to connect to CloudVision
| - | [    method](## "daemon_terminattr.cvauth.method") | String | | | Valid Values:
- token
- token-secure
- key
- certs | | - | [    key](## "daemon_terminattr.cvauth.key") | String | | | | | - | [    token_file](## "daemon_terminattr.cvauth.token_file") | String | | | | Token file path
e.g. "/tmp/token"
| - | [    cert_file](## "daemon_terminattr.cvauth.cert_file") | String | | | | Client certificate file path
e.g. "/persist/secure/ssl/terminattr/primary/certs/client.crt"
| - | [    ca_file](## "daemon_terminattr.cvauth.ca_file") | String | | | | CA certificate file path (on-prem only)
e.g. "/persist/secure/ssl/terminattr/primary/certs/ca.crt"
| - | [    key_file](## "daemon_terminattr.cvauth.key_file") | String | | | | Client certificate key file path
e.g. "/persist/secure/ssl/terminattr/primary/keys/client.key"
| - | [  cvobscurekeyfile](## "daemon_terminattr.cvobscurekeyfile") | Boolean | | | | Encrypt the private key used for authentication to CloudVision
| - | [  cvproxy](## "daemon_terminattr.cvproxy") | String | | | | Proxy server through which CloudVision is reachable. Useful when the CloudVision server is hosted in the cloud.
The expected form is http://[user:password@]ip:port, e.g.: `http://arista:arista@10.83.12.78:3128`. Available as of TerminAttr v1.13.0
| - | [  cvsourceip](## "daemon_terminattr.cvsourceip") | String | | | | Set source IP address in case of in-band managament
| - | [  cvsourceintf](## "daemon_terminattr.cvsourceintf") | String | | | | Set source interface in case of in-band managament
| - | [  cvvrf](## "daemon_terminattr.cvvrf") | String | | | | The VRF to use to connect to CloudVision
| - | [  cvgnmi](## "daemon_terminattr.cvgnmi") | Boolean | | | | Stream states from EOS GNMI servers (Openconfig) to CloudVision. Available as of TerminAttr v1.13.1
| - | [  disable_aaa](## "daemon_terminattr.disable_aaa") | Boolean | | | | Disable AAA authorization and accounting.
When setting this flag, all commands pushed from CloudVision are applied directly to the CLI without authorization
| - | [  grpcaddr](## "daemon_terminattr.grpcaddr") | String | | | | Set the gRPC server address, the default is 127.0.0.1:6042
e.g. "MGMT/0.0.0.0:6042"
| - | [  grpcreadonly](## "daemon_terminattr.grpcreadonly") | Boolean | | | | gNMI read-only mode - Disable gnmi.Set()
| - | [  ingestexclude](## "daemon_terminattr.ingestexclude") | String | | | | Exclude paths from Sysdb on the ingest side.
e.g. "/Sysdb/cell/1/agent,/Sysdb/cell/2/agent"
| - | [  smashexcludes](## "daemon_terminattr.smashexcludes") | String | | | | Exclude paths from the shared memory table.
e.g. "ale,flexCounter,hardware,kni,pulse,strata"
| - | [  taillogs](## "daemon_terminattr.taillogs") | String | | | | Enable log file collection; /var/log/messages is streamed by default if no path is set.
e.g. "/var/log/messages"
| - | [  ecodhcpaddr](## "daemon_terminattr.ecodhcpaddr") | String | | | | ECO DHCP Collector address or ECO DHCP Fingerprint listening address in standalone mode (default "127.0.0.1:67")
| - | [  ipfix](## "daemon_terminattr.ipfix") | Boolean | | | | Enable IPFIX provider (TerminAttr default is true).
This flag is enabled by default and does not have to be added to the daemon configuration.
| - | [  ipfixaddr](## "daemon_terminattr.ipfixaddr") | String | | | | ECO IPFIX Collector address to listen on to receive IPFIX packets (TerminAttr default "127.0.0.1:4739").
| - | [  sflow](## "daemon_terminattr.sflow") | Boolean | | | | Enable sFlow provider (TerminAttr default is true).
| - | [  sflowaddr](## "daemon_terminattr.sflowaddr") | String | | | | ECO sFlow Collector address to listen on to receive sFlow packets (TerminAttr default "127.0.0.1:6343").
| - | [  cvconfig](## "daemon_terminattr.cvconfig") | Boolean | | | | Subscribe to dynamic device configuration from CloudVision (TerminAttr default is false).
| - | [  cvcompression](## "daemon_terminattr.cvcompression") | String | | | | The default compression scheme when streaming to CloudVision is gzip since TerminAttr 1.6.1 and CVP 2019.1.0.
There is no need to change the compression scheme.
| - | [  ingestauth_key](## "daemon_terminattr.ingestauth_key") | String | | | | Deprecated key. Use `cvauth` instead.
| - | [  ingestgrpcurl](## "daemon_terminattr.ingestgrpcurl") | Dictionary | | | | Deprecated key. Use `cvaddrs` instead.
| - | [    ips](## "daemon_terminattr.ingestgrpcurl.ips") | List, items: String | | | | | - | [      - <str>](## "daemon_terminattr.ingestgrpcurl.ips.[].<str>") | String | | | | | - | [    port](## "daemon_terminattr.ingestgrpcurl.port") | Integer | | | | | - | [  ingestvrf](## "daemon_terminattr.ingestvrf") | String | | | | Deprecated key. Use `cvvrf` instead.
| - -=== "YAML" - - ```yaml - daemon_terminattr: - cvaddrs: - - - clusters: - - name: - cvaddrs: - - - cvauth: - method: - key: - token_file: - cert_file: - ca_file: - key_file: - cvobscurekeyfile: - cvproxy: - cvsourceip: - cvsourceintf: - cvvrf: - cvauth: - method: - key: - token_file: - cert_file: - ca_file: - key_file: - cvobscurekeyfile: - cvproxy: - cvsourceip: - cvsourceintf: - cvvrf: - cvgnmi: - disable_aaa: - grpcaddr: - grpcreadonly: - ingestexclude: - smashexcludes: - taillogs: - ecodhcpaddr: - ipfix: - ipfixaddr: - sflow: - sflowaddr: - cvconfig: - cvcompression: - ingestauth_key: - ingestgrpcurl: - ips: - - - port: - ingestvrf: - ``` - -## Custom Daemons - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [daemons](## "daemons") | List, items: Dictionary | | | | | - | [  - name](## "daemons.[].name") | String | Required, Unique | | | Daemon Name | - | [    exec](## "daemons.[].exec") | String | Required | | | command to run as a daemon
| - | [    enabled](## "daemons.[].enabled") | Boolean | | True | | | - -=== "YAML" - - ```yaml - daemons: - - name: - exec: - enabled: - ``` - -## DHCP Relay - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [dhcp_relay](## "dhcp_relay") | Dictionary | | | | | - | [  servers](## "dhcp_relay.servers") | List, items: String | | | | | - | [    - <str>](## "dhcp_relay.servers.[].<str>") | String | | | | Server IP or Hostname | - | [  tunnel_requests_disabled](## "dhcp_relay.tunnel_requests_disabled") | Boolean | | | | | - -=== "YAML" - - ```yaml - dhcp_relay: - servers: - - - tunnel_requests_disabled: - ``` - -## DNS Domain - -Domain Name - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [dns_domain](## "dns_domain") | String | | | | | - -=== "YAML" - - ```yaml - dns_domain: - ``` - -## Domain List - -Search list of DNS domains - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [domain_list](## "domain_list") | List, items: String | | | | | - | [  - <str>](## "domain_list.[].<str>") | String | | | | Domain name | - -=== "YAML" - - ```yaml - domain_list: - - - ``` - -## Global 802.1x Authentication - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [dot1x](## "dot1x") | Dictionary | | | | | - | [  system_auth_control](## "dot1x.system_auth_control") | Boolean | | | | | - | [  protocol_lldp_bypass](## "dot1x.protocol_lldp_bypass") | Boolean | | | | | - | [  dynamic_authorization](## "dot1x.dynamic_authorization") | Boolean | | | | | - | [  mac_based_authentication](## "dot1x.mac_based_authentication") | Dictionary | | | | | - | [    delay](## "dot1x.mac_based_authentication.delay") | Integer | | | Min: 0
Max: 300 | | - | [    hold_period](## "dot1x.mac_based_authentication.hold_period") | Integer | | | Min: 1
Max: 300 | | - | [  radius_av_pair](## "dot1x.radius_av_pair") | Dictionary | | | | | - | [    service_type](## "dot1x.radius_av_pair.service_type") | Boolean | | | | | - | [    framed_mtu](## "dot1x.radius_av_pair.framed_mtu") | Integer | | | Min: 68
Max: 9236 | | - -=== "YAML" - - ```yaml - dot1x: - system_auth_control: - protocol_lldp_bypass: - dynamic_authorization: - mac_based_authentication: - delay: - hold_period: - radius_av_pair: - service_type: - framed_mtu: - ``` - -## Dynamic Prefix Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [dynamic_prefix_lists](## "dynamic_prefix_lists") | List, items: Dictionary | | | | | - | [  - name](## "dynamic_prefix_lists.[].name") | String | | | | Dynamic prefix-list name | - | [    match_map](## "dynamic_prefix_lists.[].match_map") | String | | | | Route-map name | - | [    prefix_list](## "dynamic_prefix_lists.[].prefix_list") | Dictionary | | | | | - | [      ipv4](## "dynamic_prefix_lists.[].prefix_list.ipv4") | String | | | | Prefix-list name | - | [      ipv6](## "dynamic_prefix_lists.[].prefix_list.ipv6") | String | | | | Prefix-list name | - -=== "YAML" - - ```yaml - dynamic_prefix_lists: - - name: - match_map: - prefix_list: - ipv4: - ipv6: - ``` - -## Enable Password - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [enable_password](## "enable_password") | Dictionary | | | | | - | [  hash_algorithm](## "enable_password.hash_algorithm") | String | | | Valid Values:
- md5
- sha512 | | - | [  key](## "enable_password.key") | String | | | | Must be the hash of the password using the specified algorithm.
By default EOS salts the password, so the simplest is to generate the hash on an EOS device. | - -=== "YAML" - - ```yaml - enable_password: - hash_algorithm: - key: - ``` - -## EOS CLI - -Multiline string with EOS CLI rendered directly on the root level of the final EOS configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [eos_cli](## "eos_cli") | String | | | | | - -=== "YAML" - - ```yaml - eos_cli: - ``` - -## EOS CLI Config Gen Configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [eos_cli_config_gen_configuration](## "eos_cli_config_gen_configuration") | Dictionary | | | | | - | [  hide_passwords](## "eos_cli_config_gen_configuration.hide_passwords") | Boolean | | False | | Replace the input data using the `hide_passwords` filter in the Jinja2 templates by '' in the configruation if true
| - -=== "YAML" - - ```yaml - eos_cli_config_gen_configuration: - hide_passwords: - ``` - -## EOS CLI Config Gen Documentation - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [eos_cli_config_gen_documentation](## "eos_cli_config_gen_documentation") | Dictionary | | | | | - | [  hide_passwords](## "eos_cli_config_gen_documentation.hide_passwords") | Boolean | | True | | Replace the input data using the `hide_passwords` filter in the Jinja2 templates by '' in the documentation if true
| - -=== "YAML" - - ```yaml - eos_cli_config_gen_documentation: - hide_passwords: - ``` - -## Errdisable - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [errdisable](## "errdisable") | Dictionary | | | | | - | [  detect](## "errdisable.detect") | Dictionary | | | | | - | [    causes](## "errdisable.detect.causes") | List, items: String | | | | | - | [      - <str>](## "errdisable.detect.causes.[].<str>") | String | | | Valid Values:
- acl
- arp-inspection
- dot1x
- link-change
- tapagg
- xcvr-misconfigured
- xcvr-overheat
- xcvr-power-unsupported | | - | [  recovery](## "errdisable.recovery") | Dictionary | | | | | - | [    causes](## "errdisable.recovery.causes") | List, items: String | | | | | - | [      - <str>](## "errdisable.recovery.causes.[].<str>") | String | | | Valid Values:
- arp-inspection
- bpduguard
- dot1x
- hitless-reload-down
- lacp-rate-limit
- link-flap
- no-internal-vlan
- portchannelguard
- portsec
- speed-misconfigured
- tap-port-init
- tapagg
- uplink-failure-detection
- xcvr-misconfigured
- xcvr-overheat
- xcvr-power-unsupported
- xcvr-unsupported | | - | [    interval](## "errdisable.recovery.interval") | Integer | | 300 | Min: 30
Max: 86400 | Interval in seconds | - -=== "YAML" - - ```yaml - errdisable: - detect: - causes: - - - recovery: - causes: - - - interval: - ``` - -## Ethernet Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ethernet_interfaces](## "ethernet_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "ethernet_interfaces.[].name") | String | Required, Unique | | | | - | [    description](## "ethernet_interfaces.[].description") | String | | | | | - | [    shutdown](## "ethernet_interfaces.[].shutdown") | Boolean | | | | | - | [    load_interval](## "ethernet_interfaces.[].load_interval") | Integer | | | Min: 0
Max: 600 | Interval in seconds for updating interface counters" | - | [    speed](## "ethernet_interfaces.[].speed") | String | | | | Speed can be interface_speed or forced interface_speed or auto interface_speed | - | [    mtu](## "ethernet_interfaces.[].mtu") | Integer | | | | | - | [    l2_mtu](## "ethernet_interfaces.[].l2_mtu") | Integer | | | | "l2_mtu" should only be defined for platforms supporting the "l2 mtu" CLI
| - | [    vlans](## "ethernet_interfaces.[].vlans") | String | | | | List of switchport vlans as string
For a trunk port this would be a range like "1-200,300"
For an access port this would be a single vlan "123"
| - | [    native_vlan](## "ethernet_interfaces.[].native_vlan") | Integer | | | | | - | [    native_vlan_tag](## "ethernet_interfaces.[].native_vlan_tag") | Boolean | | | | If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence | - | [    mode](## "ethernet_interfaces.[].mode") | String | | | Valid Values:
- access
- dot1q-tunnel
- trunk
- trunk phone | | - | [    phone](## "ethernet_interfaces.[].phone") | Dictionary | | | | | - | [      trunk](## "ethernet_interfaces.[].phone.trunk") | String | | | Valid Values:
- tagged
- tagged phone
- untagged
- untagged phone | | - | [      vlan](## "ethernet_interfaces.[].phone.vlan") | Integer | | | Min: 1
Max: 4094 | | - | [    l2_protocol](## "ethernet_interfaces.[].l2_protocol") | Dictionary | | | | | - | [      encapsulation_dot1q_vlan](## "ethernet_interfaces.[].l2_protocol.encapsulation_dot1q_vlan") | Integer | | | | Vlan tag to configure on sub-interface | - | [      forwarding_profile](## "ethernet_interfaces.[].l2_protocol.forwarding_profile") | String | | | | L2 protocol forwarding profile | - | [    trunk_groups](## "ethernet_interfaces.[].trunk_groups") | List, items: String | | | | | - | [      - <str>](## "ethernet_interfaces.[].trunk_groups.[].<str>") | String | | | | | - | [    type](## "ethernet_interfaces.[].type") | String | | | Valid Values:
- routed
- switched
- l3dot1q
- l2dot1q
- port-channel-member | l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.
Interface will not be listed in device documentation, unless "type" is set.
| - | [    snmp_trap_link_change](## "ethernet_interfaces.[].snmp_trap_link_change") | Boolean | | | | | - | [    address_locking](## "ethernet_interfaces.[].address_locking") | Dictionary | | | | | - | [      ipv4](## "ethernet_interfaces.[].address_locking.ipv4") | Boolean | | | | Enable address locking for IPv4 | - | [      ipv6](## "ethernet_interfaces.[].address_locking.ipv6") | Boolean | | | | Enable address locking for IPv6 | - | [    flowcontrol](## "ethernet_interfaces.[].flowcontrol") | Dictionary | | | | | - | [      received](## "ethernet_interfaces.[].flowcontrol.received") | String | | | Valid Values:
- desired
- on
- off | | - | [    vrf](## "ethernet_interfaces.[].vrf") | String | | | | VRF name | - | [    flow_tracker](## "ethernet_interfaces.[].flow_tracker") | Dictionary | | | | | - | [      sampled](## "ethernet_interfaces.[].flow_tracker.sampled") | String | | | | Flow tracker name | - | [    error_correction_encoding](## "ethernet_interfaces.[].error_correction_encoding") | Dictionary | | | | | - | [      enabled](## "ethernet_interfaces.[].error_correction_encoding.enabled") | Boolean | | True | | | - | [      fire_code](## "ethernet_interfaces.[].error_correction_encoding.fire_code") | Boolean | | | | | - | [      reed_solomon](## "ethernet_interfaces.[].error_correction_encoding.reed_solomon") | Boolean | | | | | - | [    link_tracking_groups](## "ethernet_interfaces.[].link_tracking_groups") | List, items: Dictionary | | | | | - | [      - name](## "ethernet_interfaces.[].link_tracking_groups.[].name") | String | Required, Unique | | | Group name | - | [        direction](## "ethernet_interfaces.[].link_tracking_groups.[].direction") | String | | | Valid Values:
- upstream
- downstream | | - | [    evpn_ethernet_segment](## "ethernet_interfaces.[].evpn_ethernet_segment") | Dictionary | | | | | - | [      identifier](## "ethernet_interfaces.[].evpn_ethernet_segment.identifier") | String | | | | EVPN Ethernet Segment Identifier (Type 1 format) | - | [      redundancy](## "ethernet_interfaces.[].evpn_ethernet_segment.redundancy") | String | | | Valid Values:
- all-active
- single-active | | - | [      designated_forwarder_election](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election") | Dictionary | | | | | - | [        algorithm](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.algorithm") | String | | | Valid Values:
- modulus
- preference | | - | [        preference_value](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.preference_value") | Integer | | | Min: 0
Max: 65535 | Preference_value is only used when "algorithm" is "preference" | - | [        dont_preempt](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.dont_preempt") | Boolean | | | | Dont_preempt is only used when "algorithm" is "preference" | - | [        hold_time](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.hold_time") | Integer | | | | | - | [        subsequent_hold_time](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.subsequent_hold_time") | Integer | | | | | - | [        candidate_reachability_required](## "ethernet_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.candidate_reachability_required") | Boolean | | | | | - | [      mpls](## "ethernet_interfaces.[].evpn_ethernet_segment.mpls") | Dictionary | | | | | - | [        shared_index](## "ethernet_interfaces.[].evpn_ethernet_segment.mpls.shared_index") | Integer | | | Min: 1
Max: 1024 | | - | [        tunnel_flood_filter_time](## "ethernet_interfaces.[].evpn_ethernet_segment.mpls.tunnel_flood_filter_time") | Integer | | | | | - | [      route_target](## "ethernet_interfaces.[].evpn_ethernet_segment.route_target") | String | | | | EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx | - | [    encapsulation_dot1q_vlan](## "ethernet_interfaces.[].encapsulation_dot1q_vlan") | Integer | | | | VLAN tag to configure on sub-interface | - | [    encapsulation_vlan](## "ethernet_interfaces.[].encapsulation_vlan") | Dictionary | | | | | - | [      client](## "ethernet_interfaces.[].encapsulation_vlan.client") | Dictionary | | | | | - | [        dot1q](## "ethernet_interfaces.[].encapsulation_vlan.client.dot1q") | Dictionary | | | | | - | [          vlan](## "ethernet_interfaces.[].encapsulation_vlan.client.dot1q.vlan") | Integer | | | | Client VLAN ID | - | [          outer](## "ethernet_interfaces.[].encapsulation_vlan.client.dot1q.outer") | Integer | | | | Client Outer VLAN ID | - | [          inner](## "ethernet_interfaces.[].encapsulation_vlan.client.dot1q.inner") | Integer | | | | Client Inner VLAN ID | - | [        unmatched](## "ethernet_interfaces.[].encapsulation_vlan.client.unmatched") | Boolean | | | | | - | [      network](## "ethernet_interfaces.[].encapsulation_vlan.network") | Dictionary | | | | Network encapsulations are all optional and skipped if using client unmatched | - | [        dot1q](## "ethernet_interfaces.[].encapsulation_vlan.network.dot1q") | Dictionary | | | | | - | [          vlan](## "ethernet_interfaces.[].encapsulation_vlan.network.dot1q.vlan") | Integer | | | | Network VLAN ID | - | [          outer](## "ethernet_interfaces.[].encapsulation_vlan.network.dot1q.outer") | Integer | | | | Network outer VLAN ID | - | [          inner](## "ethernet_interfaces.[].encapsulation_vlan.network.dot1q.inner") | Integer | | | | Network inner VLAN ID | - | [        client](## "ethernet_interfaces.[].encapsulation_vlan.network.client") | Boolean | | | | | - | [    vlan_id](## "ethernet_interfaces.[].vlan_id") | Integer | | | Min: 1
Max: 4094 | | - | [    ip_address](## "ethernet_interfaces.[].ip_address") | String | | | | IPv4 address/mask | - | [    ip_address_secondaries](## "ethernet_interfaces.[].ip_address_secondaries") | List, items: String | | | | | - | [      - <str>](## "ethernet_interfaces.[].ip_address_secondaries.[].<str>") | String | | | | | - | [    ip_helpers](## "ethernet_interfaces.[].ip_helpers") | List, items: Dictionary | | | | | - | [      - ip_helper](## "ethernet_interfaces.[].ip_helpers.[].ip_helper") | String | Required, Unique | | | | - | [        source_interface](## "ethernet_interfaces.[].ip_helpers.[].source_interface") | String | | | | Source interface name | - | [        vrf](## "ethernet_interfaces.[].ip_helpers.[].vrf") | String | | | | VRF name | - | [    ip_nat](## "ethernet_interfaces.[].ip_nat") | Dictionary | | | | | - | [      destination](## "ethernet_interfaces.[].ip_nat.destination") | Dictionary | | | | | - | [        dynamic](## "ethernet_interfaces.[].ip_nat.destination.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "ethernet_interfaces.[].ip_nat.destination.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "ethernet_interfaces.[].ip_nat.destination.dynamic.[].comment") | String | | | | | - | [            pool_name](## "ethernet_interfaces.[].ip_nat.destination.dynamic.[].pool_name") | String | Required | | | | - | [            priority](## "ethernet_interfaces.[].ip_nat.destination.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "ethernet_interfaces.[].ip_nat.destination.static") | List, items: Dictionary | | | | | - | [          - access_list](## "ethernet_interfaces.[].ip_nat.destination.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "ethernet_interfaces.[].ip_nat.destination.static.[].comment") | String | | | | | - | [            direction](## "ethernet_interfaces.[].ip_nat.destination.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "ethernet_interfaces.[].ip_nat.destination.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "ethernet_interfaces.[].ip_nat.destination.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "ethernet_interfaces.[].ip_nat.destination.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "ethernet_interfaces.[].ip_nat.destination.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "ethernet_interfaces.[].ip_nat.destination.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "ethernet_interfaces.[].ip_nat.destination.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "ethernet_interfaces.[].ip_nat.destination.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [      source](## "ethernet_interfaces.[].ip_nat.source") | Dictionary | | | | | - | [        dynamic](## "ethernet_interfaces.[].ip_nat.source.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "ethernet_interfaces.[].ip_nat.source.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "ethernet_interfaces.[].ip_nat.source.dynamic.[].comment") | String | | | | | - | [            nat_type](## "ethernet_interfaces.[].ip_nat.source.dynamic.[].nat_type") | String | Required | | Valid Values:
- overload
- pool
- pool-address-only
- pool-full-cone | | - | [            pool_name](## "ethernet_interfaces.[].ip_nat.source.dynamic.[].pool_name") | String | | | | required if 'nat_type' is pool, pool-address-only or pool-full-cone
ignored if 'nat_type' is overload
| - | [            priority](## "ethernet_interfaces.[].ip_nat.source.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "ethernet_interfaces.[].ip_nat.source.static") | List, items: Dictionary | | | | | - | [          - access_list](## "ethernet_interfaces.[].ip_nat.source.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "ethernet_interfaces.[].ip_nat.source.static.[].comment") | String | | | | | - | [            direction](## "ethernet_interfaces.[].ip_nat.source.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "ethernet_interfaces.[].ip_nat.source.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "ethernet_interfaces.[].ip_nat.source.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "ethernet_interfaces.[].ip_nat.source.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "ethernet_interfaces.[].ip_nat.source.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "ethernet_interfaces.[].ip_nat.source.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "ethernet_interfaces.[].ip_nat.source.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "ethernet_interfaces.[].ip_nat.source.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [    ipv6_enable](## "ethernet_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "ethernet_interfaces.[].ipv6_address") | String | | | | | - | [    ipv6_address_link_local](## "ethernet_interfaces.[].ipv6_address_link_local") | String | | | | Link local IPv6 address/mask | - | [    ipv6_nd_ra_disabled](## "ethernet_interfaces.[].ipv6_nd_ra_disabled") | Boolean | | | | | - | [    ipv6_nd_managed_config_flag](## "ethernet_interfaces.[].ipv6_nd_managed_config_flag") | Boolean | | | | | - | [    ipv6_nd_prefixes](## "ethernet_interfaces.[].ipv6_nd_prefixes") | List, items: Dictionary | | | | | - | [      - ipv6_prefix](## "ethernet_interfaces.[].ipv6_nd_prefixes.[].ipv6_prefix") | String | Required, Unique | | | | - | [        valid_lifetime](## "ethernet_interfaces.[].ipv6_nd_prefixes.[].valid_lifetime") | String | | | | Infinite or lifetime in seconds | - | [        preferred_lifetime](## "ethernet_interfaces.[].ipv6_nd_prefixes.[].preferred_lifetime") | String | | | | Infinite or lifetime in seconds | - | [        no_autoconfig_flag](## "ethernet_interfaces.[].ipv6_nd_prefixes.[].no_autoconfig_flag") | Boolean | | | | | - | [    ipv6_dhcp_relay_destinations](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations") | List, items: Dictionary | | | | | - | [      - address](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations.[].address") | String | Required, Unique | | | DHCP server's IPv6 address | - | [        vrf](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations.[].vrf") | String | | | | | - | [        local_interface](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations.[].local_interface") | String | | | | Local interface to communicate with DHCP server - mutually exclusive to source_address | - | [        source_address](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations.[].source_address") | String | | | | Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface | - | [        link_address](## "ethernet_interfaces.[].ipv6_dhcp_relay_destinations.[].link_address") | String | | | | Override the default link address specified in the relayed DHCP packet | - | [    access_group_in](## "ethernet_interfaces.[].access_group_in") | String | | | | Access list name | - | [    access_group_out](## "ethernet_interfaces.[].access_group_out") | String | | | | Access list name | - | [    ipv6_access_group_in](## "ethernet_interfaces.[].ipv6_access_group_in") | String | | | | IPv6 access list name | - | [    ipv6_access_group_out](## "ethernet_interfaces.[].ipv6_access_group_out") | String | | | | IPv6 access list name | - | [    mac_access_group_in](## "ethernet_interfaces.[].mac_access_group_in") | String | | | | MAC access list name | - | [    mac_access_group_out](## "ethernet_interfaces.[].mac_access_group_out") | String | | | | MAC access list name | - | [    multicast](## "ethernet_interfaces.[].multicast") | Dictionary | | | | Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both | - | [      ipv4](## "ethernet_interfaces.[].multicast.ipv4") | Dictionary | | | | | - | [        boundaries](## "ethernet_interfaces.[].multicast.ipv4.boundaries") | List, items: Dictionary | | | | | - | [          - boundary](## "ethernet_interfaces.[].multicast.ipv4.boundaries.[].boundary") | String | | | | ACL name or multicast IP subnet | - | [            out](## "ethernet_interfaces.[].multicast.ipv4.boundaries.[].out") | Boolean | | | | | - | [        static](## "ethernet_interfaces.[].multicast.ipv4.static") | Boolean | | | | | - | [      ipv6](## "ethernet_interfaces.[].multicast.ipv6") | Dictionary | | | | | - | [        boundaries](## "ethernet_interfaces.[].multicast.ipv6.boundaries") | List, items: Dictionary | | | | | - | [          - boundary](## "ethernet_interfaces.[].multicast.ipv6.boundaries.[].boundary") | String | | | | ACL name or multicast IP subnet | - | [        static](## "ethernet_interfaces.[].multicast.ipv6.static") | Boolean | | | | | - | [    ospf_network_point_to_point](## "ethernet_interfaces.[].ospf_network_point_to_point") | Boolean | | | | | - | [    ospf_area](## "ethernet_interfaces.[].ospf_area") | String | | | | | - | [    ospf_cost](## "ethernet_interfaces.[].ospf_cost") | Integer | | | | | - | [    ospf_authentication](## "ethernet_interfaces.[].ospf_authentication") | String | | | Valid Values:
- none
- simple
- message-digest | | - | [    ospf_authentication_key](## "ethernet_interfaces.[].ospf_authentication_key") | String | | | | Encrypted password - only type 7 supported | - | [    ospf_message_digest_keys](## "ethernet_interfaces.[].ospf_message_digest_keys") | List, items: Dictionary | | | | | - | [      - id](## "ethernet_interfaces.[].ospf_message_digest_keys.[].id") | Integer | Required, Unique | | | | - | [        hash_algorithm](## "ethernet_interfaces.[].ospf_message_digest_keys.[].hash_algorithm") | String | | | Valid Values:
- md5
- sha1
- sha256
- sha384
- sha512 | | - | [        key](## "ethernet_interfaces.[].ospf_message_digest_keys.[].key") | String | | | | Encrypted password - only type 7 supported | - | [    pim](## "ethernet_interfaces.[].pim") | Dictionary | | | | | - | [      ipv4](## "ethernet_interfaces.[].pim.ipv4") | Dictionary | | | | | - | [        dr_priority](## "ethernet_interfaces.[].pim.ipv4.dr_priority") | Integer | | | Min: 0
Max: 429467295 | | - | [        sparse_mode](## "ethernet_interfaces.[].pim.ipv4.sparse_mode") | Boolean | | | | | - | [    mac_security](## "ethernet_interfaces.[].mac_security") | Dictionary | | | | | - | [      profile](## "ethernet_interfaces.[].mac_security.profile") | String | | | | | - | [    channel_group](## "ethernet_interfaces.[].channel_group") | Dictionary | | | | | - | [      id](## "ethernet_interfaces.[].channel_group.id") | Integer | | | | | - | [      mode](## "ethernet_interfaces.[].channel_group.mode") | String | | | Valid Values:
- on
- active
- passive | | - | [    isis_enable](## "ethernet_interfaces.[].isis_enable") | String | | | | ISIS instance | - | [    isis_passive](## "ethernet_interfaces.[].isis_passive") | Boolean | | | | | - | [    isis_metric](## "ethernet_interfaces.[].isis_metric") | Integer | | | | | - | [    isis_network_point_to_point](## "ethernet_interfaces.[].isis_network_point_to_point") | Boolean | | | | | - | [    isis_circuit_type](## "ethernet_interfaces.[].isis_circuit_type") | String | | | Valid Values:
- level-1-2
- level-1
- level-2 | | - | [    isis_hello_padding](## "ethernet_interfaces.[].isis_hello_padding") | Boolean | | | | | - | [    isis_authentication_mode](## "ethernet_interfaces.[].isis_authentication_mode") | String | | | Valid Values:
- text
- md5 | | - | [    isis_authentication_key](## "ethernet_interfaces.[].isis_authentication_key") | String | | | | Type-7 encrypted password | - | [    poe](## "ethernet_interfaces.[].poe") | Dictionary | | | | | - | [      disabled](## "ethernet_interfaces.[].poe.disabled") | Boolean | | False | | Disable PoE on a POE capable port. PoE is enabled on all ports that support it by default in EOS. | - | [      priority](## "ethernet_interfaces.[].poe.priority") | String | | | Valid Values:
- critical
- high
- medium
- low | Prioritize a port's power in the event that one of the switch's power supplies loses power | - | [      reboot](## "ethernet_interfaces.[].poe.reboot") | Dictionary | | | | Set the PoE power behavior for a PoE port when the system is rebooted | - | [        action](## "ethernet_interfaces.[].poe.reboot.action") | String | | | Valid Values:
- maintain
- power-off | PoE action for interface | - | [      link_down](## "ethernet_interfaces.[].poe.link_down") | Dictionary | | | | Set the PoE power behavior for a PoE port when the port goes down | - | [        action](## "ethernet_interfaces.[].poe.link_down.action") | String | | | Valid Values:
- maintain
- power-off | PoE action for interface | - | [        power_off_delay](## "ethernet_interfaces.[].poe.link_down.power_off_delay") | Integer | | | Min: 1
Max: 86400 | Number of seconds to delay shutting the power off after a link down event occurs. Default value is 5 seconds in EOS. | - | [      shutdown](## "ethernet_interfaces.[].poe.shutdown") | Dictionary | | | | Set the PoE power behavior for a PoE port when the port is admin down | - | [        action](## "ethernet_interfaces.[].poe.shutdown.action") | String | | | Valid Values:
- maintain
- power-off | PoE action for interface | - | [      limit](## "ethernet_interfaces.[].poe.limit") | Dictionary | | | | Override the hardware-negotiated power limit using either wattage or a power class. Note that if using a power class, AVD will automatically convert the class value to the wattage value corresponding to that power class. | - | [        class](## "ethernet_interfaces.[].poe.limit.class") | Integer | | | Min: 0
Max: 8 | | - | [        watts](## "ethernet_interfaces.[].poe.limit.watts") | String | | | | | - | [        fixed](## "ethernet_interfaces.[].poe.limit.fixed") | Boolean | | | | Set to ignore hardware classification | - | [      negotiation_lldp](## "ethernet_interfaces.[].poe.negotiation_lldp") | Boolean | | | | Disable to prevent port from negotiating power with powered devices over LLDP. Enabled by default in EOS. | - | [      legacy_detect](## "ethernet_interfaces.[].poe.legacy_detect") | Boolean | | | | Allow a subset of legacy devices to work with the PoE switch. Disabled by default in EOS because it can cause false positive detections. | - | [    ptp](## "ethernet_interfaces.[].ptp") | Dictionary | | | | | - | [      enable](## "ethernet_interfaces.[].ptp.enable") | Boolean | | | | | - | [      announce](## "ethernet_interfaces.[].ptp.announce") | Dictionary | | | | | - | [        interval](## "ethernet_interfaces.[].ptp.announce.interval") | Integer | | | | | - | [        timeout](## "ethernet_interfaces.[].ptp.announce.timeout") | Integer | | | | | - | [      delay_req](## "ethernet_interfaces.[].ptp.delay_req") | Integer | | | | | - | [      delay_mechanism](## "ethernet_interfaces.[].ptp.delay_mechanism") | String | | | Valid Values:
- e2e
- p2p | | - | [      sync_message](## "ethernet_interfaces.[].ptp.sync_message") | Dictionary | | | | | - | [        interval](## "ethernet_interfaces.[].ptp.sync_message.interval") | Integer | | | | | - | [      role](## "ethernet_interfaces.[].ptp.role") | String | | | Valid Values:
- master
- dynamic | | - | [      vlan](## "ethernet_interfaces.[].ptp.vlan") | String | | | | VLAN can be 'all' or list of vlans as string | - | [      transport](## "ethernet_interfaces.[].ptp.transport") | String | | | Valid Values:
- ipv4
- ipv6
- layer2 | | - | [    profile](## "ethernet_interfaces.[].profile") | String | | | | Interface profile | - | [    storm_control](## "ethernet_interfaces.[].storm_control") | Dictionary | | | | | - | [      all](## "ethernet_interfaces.[].storm_control.all") | Dictionary | | | | | - | [        level](## "ethernet_interfaces.[].storm_control.all.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "ethernet_interfaces.[].storm_control.all.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      broadcast](## "ethernet_interfaces.[].storm_control.broadcast") | Dictionary | | | | | - | [        level](## "ethernet_interfaces.[].storm_control.broadcast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "ethernet_interfaces.[].storm_control.broadcast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      multicast](## "ethernet_interfaces.[].storm_control.multicast") | Dictionary | | | | | - | [        level](## "ethernet_interfaces.[].storm_control.multicast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "ethernet_interfaces.[].storm_control.multicast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      unknown_unicast](## "ethernet_interfaces.[].storm_control.unknown_unicast") | Dictionary | | | | | - | [        level](## "ethernet_interfaces.[].storm_control.unknown_unicast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "ethernet_interfaces.[].storm_control.unknown_unicast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [    logging](## "ethernet_interfaces.[].logging") | Dictionary | | | | | - | [      event](## "ethernet_interfaces.[].logging.event") | Dictionary | | | | | - | [        link_status](## "ethernet_interfaces.[].logging.event.link_status") | Boolean | | | | | - | [        congestion_drops](## "ethernet_interfaces.[].logging.event.congestion_drops") | Boolean | | | | | - | [        spanning_tree](## "ethernet_interfaces.[].logging.event.spanning_tree") | Boolean | | | | | - | [        storm_control](## "ethernet_interfaces.[].logging.event.storm_control") | Boolean | | | | | - | [    lldp](## "ethernet_interfaces.[].lldp") | Dictionary | | | | | - | [      transmit](## "ethernet_interfaces.[].lldp.transmit") | Boolean | | | | | - | [      receive](## "ethernet_interfaces.[].lldp.receive") | Boolean | | | | | - | [      ztp_vlan](## "ethernet_interfaces.[].lldp.ztp_vlan") | Integer | | | | ZTP vlan number | - | [    trunk_private_vlan_secondary](## "ethernet_interfaces.[].trunk_private_vlan_secondary") | Boolean | | | | | - | [    pvlan_mapping](## "ethernet_interfaces.[].pvlan_mapping") | String | | | | List of vlans as string | - | [    vlan_translations](## "ethernet_interfaces.[].vlan_translations") | List, items: Dictionary | | | | | - | [      - from](## "ethernet_interfaces.[].vlan_translations.[].from") | String | | | | List of vlans as string (only one vlan if direction is "both") | - | [        to](## "ethernet_interfaces.[].vlan_translations.[].to") | Integer | | | | VLAN ID | - | [        direction](## "ethernet_interfaces.[].vlan_translations.[].direction") | String | | both | Valid Values:
- in
- out
- both | | - | [    dot1x](## "ethernet_interfaces.[].dot1x") | Dictionary | | | | | - | [      port_control](## "ethernet_interfaces.[].dot1x.port_control") | String | | | Valid Values:
- auto
- force-authorized
- force-unauthorized | | - | [      port_control_force_authorized_phone](## "ethernet_interfaces.[].dot1x.port_control_force_authorized_phone") | Boolean | | | | | - | [      reauthentication](## "ethernet_interfaces.[].dot1x.reauthentication") | Boolean | | | | | - | [      pae](## "ethernet_interfaces.[].dot1x.pae") | Dictionary | | | | | - | [        mode](## "ethernet_interfaces.[].dot1x.pae.mode") | String | | | Valid Values:
- authenticator | | - | [      authentication_failure](## "ethernet_interfaces.[].dot1x.authentication_failure") | Dictionary | | | | | - | [        action](## "ethernet_interfaces.[].dot1x.authentication_failure.action") | String | | | Valid Values:
- allow
- drop | | - | [        allow_vlan](## "ethernet_interfaces.[].dot1x.authentication_failure.allow_vlan") | Integer | | | Min: 1
Max: 4094 | | - | [      host_mode](## "ethernet_interfaces.[].dot1x.host_mode") | Dictionary | | | | | - | [        mode](## "ethernet_interfaces.[].dot1x.host_mode.mode") | String | | | Valid Values:
- multi-host
- single-host | | - | [        multi_host_authenticated](## "ethernet_interfaces.[].dot1x.host_mode.multi_host_authenticated") | Boolean | | | | | - | [      mac_based_authentication](## "ethernet_interfaces.[].dot1x.mac_based_authentication") | Dictionary | | | | | - | [        enabled](## "ethernet_interfaces.[].dot1x.mac_based_authentication.enabled") | Boolean | | | | | - | [        always](## "ethernet_interfaces.[].dot1x.mac_based_authentication.always") | Boolean | | | | | - | [        host_mode_common](## "ethernet_interfaces.[].dot1x.mac_based_authentication.host_mode_common") | Boolean | | | | | - | [      timeout](## "ethernet_interfaces.[].dot1x.timeout") | Dictionary | | | | | - | [        idle_host](## "ethernet_interfaces.[].dot1x.timeout.idle_host") | Integer | | | Min: 10
Max: 65535 | | - | [        quiet_period](## "ethernet_interfaces.[].dot1x.timeout.quiet_period") | Integer | | | Min: 1
Max: 65535 | | - | [        reauth_period](## "ethernet_interfaces.[].dot1x.timeout.reauth_period") | String | | | | Value can be 60-4294967295 or 'server' | - | [        reauth_timeout_ignore](## "ethernet_interfaces.[].dot1x.timeout.reauth_timeout_ignore") | Boolean | | | | | - | [        tx_period](## "ethernet_interfaces.[].dot1x.timeout.tx_period") | Integer | | | Min: 1
Max: 65535 | | - | [      reauthorization_request_limit](## "ethernet_interfaces.[].dot1x.reauthorization_request_limit") | Integer | | | Min: 1
Max: 10 | | - | [      eapol](## "ethernet_interfaces.[].dot1x.eapol") | Dictionary | | | | | - | [        disabled](## "ethernet_interfaces.[].dot1x.eapol.disabled") | Boolean | | | | | - | [        authentication_failure_fallback_mba](## "ethernet_interfaces.[].dot1x.eapol.authentication_failure_fallback_mba") | Dictionary | | | | | - | [          enabled](## "ethernet_interfaces.[].dot1x.eapol.authentication_failure_fallback_mba.enabled") | Boolean | | | | | - | [          timeout](## "ethernet_interfaces.[].dot1x.eapol.authentication_failure_fallback_mba.timeout") | Integer | | | Min: 0
Max: 65535 | | - | [    service_profile](## "ethernet_interfaces.[].service_profile") | String | | | | QOS profile | - | [    shape](## "ethernet_interfaces.[].shape") | Dictionary | | | | | - | [      rate](## "ethernet_interfaces.[].shape.rate") | String | | | | Rate in kbps, pps or percent
Supported options are platform dependent
Examples:
- "5000 kbps"
- "1000 pps"
- "20 percent"
| - | [    qos](## "ethernet_interfaces.[].qos") | Dictionary | | | | | - | [      trust](## "ethernet_interfaces.[].qos.trust") | String | | | Valid Values:
- dscp
- cos
- disabled | | - | [      dscp](## "ethernet_interfaces.[].qos.dscp") | Integer | | | | DSCP value | - | [      cos](## "ethernet_interfaces.[].qos.cos") | Integer | | | | COS value | - | [    spanning_tree_bpdufilter](## "ethernet_interfaces.[].spanning_tree_bpdufilter") | String | | | Valid Values:
- enabled
- disabled
- True
- False
- true
- false | | - | [    spanning_tree_bpduguard](## "ethernet_interfaces.[].spanning_tree_bpduguard") | String | | | Valid Values:
- enabled
- disabled
- True
- False
- true
- false | | - | [    spanning_tree_guard](## "ethernet_interfaces.[].spanning_tree_guard") | String | | | Valid Values:
- loop
- root
- disabled | | - | [    spanning_tree_portfast](## "ethernet_interfaces.[].spanning_tree_portfast") | String | | | Valid Values:
- edge
- network | | - | [    vmtracer](## "ethernet_interfaces.[].vmtracer") | Boolean | | | | | - | [    priority_flow_control](## "ethernet_interfaces.[].priority_flow_control") | Dictionary | | | | | - | [      enabled](## "ethernet_interfaces.[].priority_flow_control.enabled") | Boolean | | | | | - | [      priorities](## "ethernet_interfaces.[].priority_flow_control.priorities") | List, items: Dictionary | | | | | - | [        - priority](## "ethernet_interfaces.[].priority_flow_control.priorities.[].priority") | Integer | Required, Unique | | Min: 0
Max: 7 | | - | [          no_drop](## "ethernet_interfaces.[].priority_flow_control.priorities.[].no_drop") | Boolean | | | | | - | [    bfd](## "ethernet_interfaces.[].bfd") | Dictionary | | | | | - | [      echo](## "ethernet_interfaces.[].bfd.echo") | Boolean | | | | | - | [      interval](## "ethernet_interfaces.[].bfd.interval") | Integer | | | | Interval in milliseconds | - | [      min_rx](## "ethernet_interfaces.[].bfd.min_rx") | Integer | | | | Rate in milliseconds | - | [      multiplier](## "ethernet_interfaces.[].bfd.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [    service_policy](## "ethernet_interfaces.[].service_policy") | Dictionary | | | | | - | [      pbr](## "ethernet_interfaces.[].service_policy.pbr") | Dictionary | | | | | - | [        input](## "ethernet_interfaces.[].service_policy.pbr.input") | String | | | | Policy Based Routing Policy-map name | - | [      qos](## "ethernet_interfaces.[].service_policy.qos") | Dictionary | | | | | - | [        input](## "ethernet_interfaces.[].service_policy.qos.input") | String | Required | | | Quality of Service Policy-map name | - | [    mpls](## "ethernet_interfaces.[].mpls") | Dictionary | | | | | - | [      ip](## "ethernet_interfaces.[].mpls.ip") | Boolean | | | | | - | [      ldp](## "ethernet_interfaces.[].mpls.ldp") | Dictionary | | | | | - | [        interface](## "ethernet_interfaces.[].mpls.ldp.interface") | Boolean | | | | | - | [        igp_sync](## "ethernet_interfaces.[].mpls.ldp.igp_sync") | Boolean | | | | | - | [    lacp_timer](## "ethernet_interfaces.[].lacp_timer") | Dictionary | | | | | - | [      mode](## "ethernet_interfaces.[].lacp_timer.mode") | String | | | Valid Values:
- fast
- normal | | - | [      multiplier](## "ethernet_interfaces.[].lacp_timer.multiplier") | Integer | | | Min: 3
Max: 3000 | | - | [    lacp_port_priority](## "ethernet_interfaces.[].lacp_port_priority") | Integer | | | Min: 0
Max: 65535 | | - | [    transceiver](## "ethernet_interfaces.[].transceiver") | Dictionary | | | | | - | [      media](## "ethernet_interfaces.[].transceiver.media") | Dictionary | | | | | - | [        override](## "ethernet_interfaces.[].transceiver.media.override") | String | | | | Transceiver type | - | [    ip_proxy_arp](## "ethernet_interfaces.[].ip_proxy_arp") | Boolean | | | | | - | [    traffic_policy](## "ethernet_interfaces.[].traffic_policy") | Dictionary | | | | | - | [      input](## "ethernet_interfaces.[].traffic_policy.input") | String | | | | Ingress traffic policy | - | [      output](## "ethernet_interfaces.[].traffic_policy.output") | String | | | | Egress traffic policy | - | [    bgp](## "ethernet_interfaces.[].bgp") | Dictionary | | | | | - | [      session_tracker](## "ethernet_interfaces.[].bgp.session_tracker") | String | | | | Name of session tracker | - | [    peer](## "ethernet_interfaces.[].peer") | String | | | | Key only used for documentation or validation purposes | - | [    peer_interface](## "ethernet_interfaces.[].peer_interface") | String | | | | Key only used for documentation or validation purposes | - | [    peer_type](## "ethernet_interfaces.[].peer_type") | String | | | | Key only used for documentation or validation purposes | - | [    sflow](## "ethernet_interfaces.[].sflow") | Dictionary | | | | | - | [      enable](## "ethernet_interfaces.[].sflow.enable") | Boolean | | | | | - | [      egress](## "ethernet_interfaces.[].sflow.egress") | Dictionary | | | | | - | [        enable](## "ethernet_interfaces.[].sflow.egress.enable") | Boolean | | | | | - | [        unmodified_enable](## "ethernet_interfaces.[].sflow.egress.unmodified_enable") | Boolean | | | | | - | [    port_profile](## "ethernet_interfaces.[].port_profile") | String | | | | Key only used for documentation or validation purposes | - | [    eos_cli](## "ethernet_interfaces.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the ethernet interface in the final EOS configuration | - -=== "YAML" - - ```yaml - ethernet_interfaces: - - name: - description: - shutdown: - load_interval: - speed: - mtu: - l2_mtu: - vlans: - native_vlan: - native_vlan_tag: - mode: - phone: - trunk: - vlan: - l2_protocol: - encapsulation_dot1q_vlan: - forwarding_profile: - trunk_groups: - - - type: - snmp_trap_link_change: - address_locking: - ipv4: - ipv6: - flowcontrol: - received: - vrf: - flow_tracker: - sampled: - error_correction_encoding: - enabled: - fire_code: - reed_solomon: - link_tracking_groups: - - name: - direction: - evpn_ethernet_segment: - identifier: - redundancy: - designated_forwarder_election: - algorithm: - preference_value: - dont_preempt: - hold_time: - subsequent_hold_time: - candidate_reachability_required: - mpls: - shared_index: - tunnel_flood_filter_time: - route_target: - encapsulation_dot1q_vlan: - encapsulation_vlan: - client: - dot1q: - vlan: - outer: - inner: - unmatched: - network: - dot1q: - vlan: - outer: - inner: - client: - vlan_id: - ip_address: - ip_address_secondaries: - - - ip_helpers: - - ip_helper: - source_interface: - vrf: - ip_nat: - destination: - dynamic: - - access_list: - comment: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - source: - dynamic: - - access_list: - comment: - nat_type: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - ipv6_enable: - ipv6_address: - ipv6_address_link_local: - ipv6_nd_ra_disabled: - ipv6_nd_managed_config_flag: - ipv6_nd_prefixes: - - ipv6_prefix: - valid_lifetime: - preferred_lifetime: - no_autoconfig_flag: - ipv6_dhcp_relay_destinations: - - address: - vrf: - local_interface: - source_address: - link_address: - access_group_in: - access_group_out: - ipv6_access_group_in: - ipv6_access_group_out: - mac_access_group_in: - mac_access_group_out: - multicast: - ipv4: - boundaries: - - boundary: - out: - static: - ipv6: - boundaries: - - boundary: - static: - ospf_network_point_to_point: - ospf_area: - ospf_cost: - ospf_authentication: - ospf_authentication_key: - ospf_message_digest_keys: - - id: - hash_algorithm: - key: - pim: - ipv4: - dr_priority: - sparse_mode: - mac_security: - profile: - channel_group: - id: - mode: - isis_enable: - isis_passive: - isis_metric: - isis_network_point_to_point: - isis_circuit_type: - isis_hello_padding: - isis_authentication_mode: - isis_authentication_key: - poe: - disabled: - priority: - reboot: - action: - link_down: - action: - power_off_delay: - shutdown: - action: - limit: - class: - watts: - fixed: - negotiation_lldp: - legacy_detect: - ptp: - enable: - announce: - interval: - timeout: - delay_req: - delay_mechanism: - sync_message: - interval: - role: - vlan: - transport: - profile: - storm_control: - all: - level: - unit: - broadcast: - level: - unit: - multicast: - level: - unit: - unknown_unicast: - level: - unit: - logging: - event: - link_status: - congestion_drops: - spanning_tree: - storm_control: - lldp: - transmit: - receive: - ztp_vlan: - trunk_private_vlan_secondary: - pvlan_mapping: - vlan_translations: - - from: - to: - direction: - dot1x: - port_control: - port_control_force_authorized_phone: - reauthentication: - pae: - mode: - authentication_failure: - action: - allow_vlan: - host_mode: - mode: - multi_host_authenticated: - mac_based_authentication: - enabled: - always: - host_mode_common: - timeout: - idle_host: - quiet_period: - reauth_period: - reauth_timeout_ignore: - tx_period: - reauthorization_request_limit: - eapol: - disabled: - authentication_failure_fallback_mba: - enabled: - timeout: - service_profile: - shape: - rate: - qos: - trust: - dscp: - cos: - spanning_tree_bpdufilter: - spanning_tree_bpduguard: - spanning_tree_guard: - spanning_tree_portfast: - vmtracer: - priority_flow_control: - enabled: - priorities: - - priority: - no_drop: - bfd: - echo: - interval: - min_rx: - multiplier: - service_policy: - pbr: - input: - qos: - input: - mpls: - ip: - ldp: - interface: - igp_sync: - lacp_timer: - mode: - multiplier: - lacp_port_priority: - transceiver: - media: - override: - ip_proxy_arp: - traffic_policy: - input: - output: - bgp: - session_tracker: - peer: - peer_interface: - peer_type: - sflow: - enable: - egress: - enable: - unmodified_enable: - port_profile: - eos_cli: - ``` - -## Event Handlers - -Gives the ability to monitor and react to Syslog messages. -Event Handlers provide a powerful and flexible tool that can be used to apply self-healing actions, -customize the system behavior, and implement workarounds to problems discovered in the field. - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [event_handlers](## "event_handlers") | List, items: Dictionary | | | | | - | [  - name](## "event_handlers.[].name") | String | Required, Unique | | | Event Handler Name | - | [    action_type](## "event_handlers.[].action_type") | String | | | Valid Values:
- bash
- increment
- log | | - | [    action](## "event_handlers.[].action") | String | | | | Command to execute
| - | [    delay](## "event_handlers.[].delay") | Integer | | | | Event-handler delay in seconds
| - | [    trigger](## "event_handlers.[].trigger") | String | | | Valid Values:
- on-logging
- on-startup-config | Configure event trigger condition.
| - | [    regex](## "event_handlers.[].regex") | String | | | | Regular expression to use for searching log messages. Required for on-logging trigger
| - | [    asynchronous](## "event_handlers.[].asynchronous") | Boolean | | False | | Set the action to be non-blocking. | - -=== "YAML" - - ```yaml - event_handlers: - - name: - action_type: - action: - delay: - trigger: - regex: - asynchronous: - ``` - -## Event Monitor - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [event_monitor](## "event_monitor") | Dictionary | | | | | - | [  enabled](## "event_monitor.enabled") | Boolean | | | | | - -=== "YAML" - - ```yaml - event_monitor: - enabled: - ``` - -## Flow Trackings - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [flow_trackings](## "flow_trackings") | List, items: Dictionary | | | | | - | [  - type](## "flow_trackings.[].type") | String | Required, Unique | | Valid Values:
- sampled | Flow Tracking Type - only 'sampled' supported for now | - | [    sample](## "flow_trackings.[].sample") | Integer | | | Min: 1
Max: 4294967295 | | - | [    trackers](## "flow_trackings.[].trackers") | List, items: Dictionary | | | | | - | [      - name](## "flow_trackings.[].trackers.[].name") | String | Required, Unique | | | Tracker Name | - | [        record_export](## "flow_trackings.[].trackers.[].record_export") | Dictionary | | | | | - | [          on_inactive_timeout](## "flow_trackings.[].trackers.[].record_export.on_inactive_timeout") | Integer | | | Min: 3000
Max: 900000 | Flow record inactive export timeout in milliseconds | - | [          on_interval](## "flow_trackings.[].trackers.[].record_export.on_interval") | Integer | | | Min: 1000
Max: 36000000 | Flow record export interval in milliseconds | - | [          mpls](## "flow_trackings.[].trackers.[].record_export.mpls") | Boolean | | | | Export MPLS forwarding information | - | [        exporters](## "flow_trackings.[].trackers.[].exporters") | List, items: Dictionary | | | | | - | [          - name](## "flow_trackings.[].trackers.[].exporters.[].name") | String | Required, Unique | | | Exporter Name | - | [            collector](## "flow_trackings.[].trackers.[].exporters.[].collector") | Dictionary | | | | | - | [              host](## "flow_trackings.[].trackers.[].exporters.[].collector.host") | String | | | | Collector IPv4 address or IPv6 address or fully qualified domain name | - | [              port](## "flow_trackings.[].trackers.[].exporters.[].collector.port") | Integer | | | Min: 1
Max: 65535 | Collector Port Number | - | [            format](## "flow_trackings.[].trackers.[].exporters.[].format") | Dictionary | | | | | - | [              ipfix_version](## "flow_trackings.[].trackers.[].exporters.[].format.ipfix_version") | Integer | | | | | - | [            local_interface](## "flow_trackings.[].trackers.[].exporters.[].local_interface") | String | | | | Local Source Interface | - | [            template_interval](## "flow_trackings.[].trackers.[].exporters.[].template_interval") | Integer | | | Min: 5000
Max: 3600000 | Template interval in milliseconds | - | [    shutdown](## "flow_trackings.[].shutdown") | Boolean | | False | | | - -=== "YAML" - - ```yaml - flow_trackings: - - type: - sample: - trackers: - - name: - record_export: - on_inactive_timeout: - on_interval: - mpls: - exporters: - - name: - collector: - host: - port: - format: - ipfix_version: - local_interface: - template_interval: - shutdown: - ``` - -## Generate Default Config - -The `generate_default_config` knob allows to omit default EOS configuration. -This can be useful when leveraging `eos_cli_config_gen` to generate configlets with CloudVision. - -The following commands will be omitted when `generate_default_config` is set to `false`: - -- RANCID Content Type -- Hostname -- Default configuration for `aaa` -- Default configuration for `enable password` -- Transceiver qsfp default mode -- End of configuration delimiter - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [generate_default_config](## "generate_default_config") | Boolean | | True | | | - -=== "YAML" - - ```yaml - generate_default_config: - ``` - -## Generate Device Documentation - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [generate_device_documentation](## "generate_device_documentation") | Boolean | | True | | | - -=== "YAML" - - ```yaml - generate_device_documentation: - ``` - -## Hardware - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [hardware](## "hardware") | Dictionary | | | | | - | [  access_list](## "hardware.access_list") | Dictionary | | | | | - | [    mechanism](## "hardware.access_list.mechanism") | String | | | Valid Values:
- algomatch
- none
- tcam | | - | [  speed_groups](## "hardware.speed_groups") | List, items: Dictionary | | | | | - | [    - speed_group](## "hardware.speed_groups.[].speed_group") | Integer | Required, Unique | | | | - | [      serdes](## "hardware.speed_groups.[].serdes") | String | | | | Serdes speed like "10g" or "25g" | - -=== "YAML" - - ```yaml - hardware: - access_list: - mechanism: - speed_groups: - - speed_group: - serdes: - ``` - -## Hardware Counters - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [hardware_counters](## "hardware_counters") | Dictionary | | | | | - | [  features](## "hardware_counters.features") | List, items: Dictionary | | | | This data model allows to configure the list of hardware counters feature
available on Arista platforms.

The `name` key accepts a list of valid_values which MUST be updated to support
new feature as they are released in EOS.

The available values of the different keys like 'direction' or 'address_type'
are feature and hardware dependent and this model DOES NOT validate that the
combinations are valid. It is the responsability of the user of this data model
to make sure that the rendered CLI is accepted by the targeted device.

Examples:

* Use:
```yaml
hardware_counters:
features:
- name: ip
direction: out
layer3: true
units_packets: true
```

to render:
```eos
hardware counter feature ip out layer3 units packets
```
* Use:
```yaml
hardware_counters:
features:
- name: route
address_type: ipv4
vrf: test
prefix: 192.168.0.0/24
```

to render:
```eos
hardware counter feature route ipv4 vrf test 192.168.0.0/24
```
| - | [    - name](## "hardware_counters.features.[].name") | String | | | Valid Values:
- acl
- decap-group
- directflow
- ecn
- flow-spec
- gre tunnel interface
- ip
- mpls interface
- mpls lfib
- mpls tunnel
- multicast
- nexthop
- pbr
- pdp
- policing interface
- qos
- qos dual-rate-policer
- route
- routed-port
- subinterface
- tapagg
- traffic-class
- traffic-policy
- vlan
- vlan-interface
- vni decap
- vni encap
- vtep decap
- vtep encap | | - | [      direction](## "hardware_counters.features.[].direction") | String | | | Valid Values:
- in
- out
- cpu | Most features support only 'in' and 'out'. Some like traffic-policy support 'cpu'.
Some features DO NOT have any direction.
This validation IS NOT made by the schemas.
| - | [      address_type](## "hardware_counters.features.[].address_type") | String | | | Valid Values:
- ipv4
- ipv6
- mac | Supported only for the following features:
- acl: [ipv4, ipv6, mac] if direction is 'out'
- multicast: [ipv4, ipv6]
- route: [ipv4, ipv6]
This validation IS NOT made by the schemas.
| - | [      layer3](## "hardware_counters.features.[].layer3") | Boolean | | | | Supported only for the 'ip' feature
| - | [      vrf](## "hardware_counters.features.[].vrf") | String | | | | Supported only for the 'route' feature.
This validation IS NOT made by the schemas.
| - | [      prefix](## "hardware_counters.features.[].prefix") | String | | | | Supported only for the 'route' feature.
Mandatory for the 'route' feature.
This validation IS NOT made by the schemas.
| - | [      units_packets](## "hardware_counters.features.[].units_packets") | Boolean | | | | | - -=== "YAML" - - ```yaml - hardware_counters: - features: - - name: - direction: - address_type: - layer3: - vrf: - prefix: - units_packets: - ``` - -## Interface Defaults - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [interface_defaults](## "interface_defaults") | Dictionary | | | | | - | [  ethernet](## "interface_defaults.ethernet") | Dictionary | | | | | - | [    shutdown](## "interface_defaults.ethernet.shutdown") | Boolean | | | | | - | [  mtu](## "interface_defaults.mtu") | Integer | | | | | - -=== "YAML" - - ```yaml - interface_defaults: - ethernet: - shutdown: - mtu: - ``` - -## Maintenance Interface Groups - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [interface_groups](## "interface_groups") | List, items: Dictionary | | | | | - | [  - name](## "interface_groups.[].name") | String | Required, Unique | | | Interface-Group name | - | [    interfaces](## "interface_groups.[].interfaces") | List, items: String | | | | | - | [      - <str>](## "interface_groups.[].interfaces.[].<str>") | String | | | | Interface Name | - | [    bgp_maintenance_profiles](## "interface_groups.[].bgp_maintenance_profiles") | List, items: String | | | | | - | [      - <str>](## "interface_groups.[].bgp_maintenance_profiles.[].<str>") | String | | | | Name of BGP Maintenance Profile | - | [    interface_maintenance_profiles](## "interface_groups.[].interface_maintenance_profiles") | List, items: String | | | | | - | [      - <str>](## "interface_groups.[].interface_maintenance_profiles.[].<str>") | String | | | | Name of Interface Maintenance Profile | - -=== "YAML" - - ```yaml - interface_groups: - - name: - interfaces: - - - bgp_maintenance_profiles: - - - interface_maintenance_profiles: - - - ``` - -## Interface Profiles - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [interface_profiles](## "interface_profiles") | List, items: Dictionary | | | | | - | [  - name](## "interface_profiles.[].name") | String | Required, Unique | | | Interface-Profile Name | - | [    commands](## "interface_profiles.[].commands") | List, items: String | Required | | | | - | [      - <str>](## "interface_profiles.[].commands.[].<str>") | String | | | | EOS CLI interface command
Example: "switchport mode access" | - -=== "YAML" - - ```yaml - interface_profiles: - - name: - commands: - - - ``` - -## IP Extended Access-Lists (improved model) - -AVD currently supports 2 different data models for extended ACLs: - -- The legacy `access_lists` data model, for compatibility with existing deployments -- The improved `ip_access_lists` data model, for access to more EOS features - -Both data models can coexists without conflicts, as different keys are used: `access_lists` vs `ip_access_lists`. -Access list names must be unique. - -The improved data model has a more sophisticated design documented below: - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_access_lists](## "ip_access_lists") | List, items: Dictionary | | | | | - | [  - name](## "ip_access_lists.[].name") | String | Required, Unique | | | Access-list Name | - | [    counters_per_entry](## "ip_access_lists.[].counters_per_entry") | Boolean | | | | | - | [    entries](## "ip_access_lists.[].entries") | List, items: Dictionary | | | | ACL Entries | - | [      - sequence](## "ip_access_lists.[].entries.[].sequence") | Integer | | | | ACL entry sequence number.
| - | [        remark](## "ip_access_lists.[].entries.[].remark") | String | | | | Comment up to 100 characters.
If remark is defined, other keys in acl entry will be ignored.
| - | [        action](## "ip_access_lists.[].entries.[].action") | String | | | Valid Values:
- permit
- deny | ACL action.
Required for standard entry.
| - | [        protocol](## "ip_access_lists.[].entries.[].protocol") | String | | | | ip, tcp, udp, icmp or other protocol name or number.
Required for standard entry.
| - | [        source](## "ip_access_lists.[].entries.[].source") | String | | | | any, A.B.C.D/E or A.B.C.D.
A.B.C.D without a mask means host.
Required for standard entry.
| - | [        source_ports_match](## "ip_access_lists.[].entries.[].source_ports_match") | String | | eq | Valid Values:
- eq
- gt
- lt
- neq
- range | | - | [        source_ports](## "ip_access_lists.[].entries.[].source_ports") | List, items: String | | | | | - | [          - <str>](## "ip_access_lists.[].entries.[].source_ports.[].<str>") | String | | | | TCP/UDP source port name or number. | - | [        destination](## "ip_access_lists.[].entries.[].destination") | String | | | | any, A.B.C.D/E or A.B.C.D.
A.B.C.D without a mask means host.
Required for standard entry.
| - | [        destination_ports_match](## "ip_access_lists.[].entries.[].destination_ports_match") | String | | eq | Valid Values:
- eq
- gt
- lt
- neq
- range | | - | [        destination_ports](## "ip_access_lists.[].entries.[].destination_ports") | List, items: String | | | | | - | [          - <str>](## "ip_access_lists.[].entries.[].destination_ports.[].<str>") | String | | | | TCP/UDP destination port name or number. | - | [        tcp_flags](## "ip_access_lists.[].entries.[].tcp_flags") | List, items: String | | | | | - | [          - <str>](## "ip_access_lists.[].entries.[].tcp_flags.[].<str>") | String | | | | TCP Flag Name | - | [        fragments](## "ip_access_lists.[].entries.[].fragments") | Boolean | | | | Match non-head fragment packets. | - | [        log](## "ip_access_lists.[].entries.[].log") | Boolean | | | | Log matches against this rule. | - | [        ttl](## "ip_access_lists.[].entries.[].ttl") | Integer | | | Min: 0
Max: 254 | TTL value | - | [        ttl_match](## "ip_access_lists.[].entries.[].ttl_match") | String | | eq | Valid Values:
- eq
- gt
- lt
- neq | | - | [        icmp_type](## "ip_access_lists.[].entries.[].icmp_type") | String | | | | Message type name/number for ICMP packets. | - | [        icmp_code](## "ip_access_lists.[].entries.[].icmp_code") | String | | | | Message code for ICMP packets. | - | [        nexthop_group](## "ip_access_lists.[].entries.[].nexthop_group") | String | | | | nexthop-group name. | - | [        tracked](## "ip_access_lists.[].entries.[].tracked") | Boolean | | | | Match packets in existing ICMP/UDP/TCP connections. | - | [        dscp](## "ip_access_lists.[].entries.[].dscp") | String | | | | DSCP value or name. | - | [        vlan_number](## "ip_access_lists.[].entries.[].vlan_number") | Integer | | | | | - | [        vlan_inner](## "ip_access_lists.[].entries.[].vlan_inner") | Boolean | | False | | | - | [        vlan_mask](## "ip_access_lists.[].entries.[].vlan_mask") | String | | | | 0x000-0xFFF VLAN mask. | - -=== "YAML" - - ```yaml - ip_access_lists: - - name: - counters_per_entry: - entries: - - sequence: - remark: - action: - protocol: - source: - source_ports_match: - source_ports: - - - destination: - destination_ports_match: - destination_ports: - - - tcp_flags: - - - fragments: - log: - ttl: - ttl_match: - icmp_type: - icmp_code: - nexthop_group: - tracked: - dscp: - vlan_number: - vlan_inner: - vlan_mask: - ``` - -## IP Access Lists Max Entries - -The `ip_access_lists` data model allows to limit the number of ACL entries that AVD is allowed to generate by defining `ip_access_lists_max_entries`. -Only normal entries under `ip_access_lists` will be counted, remarks will be ignored. -If the number is above the limit, the playbook will fail. This provides a simplified control over hardware utilization. -The numbers must be based on the hardware tests and AVD does not provide any guidance. Note that other EOS features may use the same hardware resources and affect the supported scale. - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_access_lists_max_entries](## "ip_access_lists_max_entries") | Integer | | | | | - -=== "YAML" - - ```yaml - ip_access_lists_max_entries: - ``` - -## IP Community Lists - -AVD supports 2 different data models for community lists: - -- The legacy `community_lists` data model that can be used for compatibility with the existing deployments. -- The improved `ip_community_lists` data model. - -Both data models can coexist without conflicts, as different keys are used: `community_lists` vs `ip_community_lists`. -Community list names must be unique. - -The improved data model has a better design documented below: - -communities and regexp MUST not be configured together in the same entry -possible community strings are (case insensitive): - -- GSHUT -- internet -- local-as -- no-advertise -- no-export -- <1-4294967040> -- aa:nn - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_community_lists](## "ip_community_lists") | List, items: Dictionary | | | | | - | [  - name](## "ip_community_lists.[].name") | String | Required, Unique | | | IP Community-list Name | - | [    entries](## "ip_community_lists.[].entries") | List, items: Dictionary | Required | | | | - | [      - action](## "ip_community_lists.[].entries.[].action") | String | Required | | Valid Values:
- permit
- deny | | - | [        communities](## "ip_community_lists.[].entries.[].communities") | List, items: String | | | | If defined, a standard community-list will be configured | - | [          - <str>](## "ip_community_lists.[].entries.[].communities.[].<str>") | String | | | | | - | [        regexp](## "ip_community_lists.[].entries.[].regexp") | String | | | | Regular Expression
If defined, a regex community-list will be configured | - -=== "YAML" - - ```yaml - ip_community_lists: - - name: - entries: - - action: - communities: - - - regexp: - ``` - -## IP DHCP Relay - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_dhcp_relay](## "ip_dhcp_relay") | Dictionary | | | | | - | [  information_option](## "ip_dhcp_relay.information_option") | Boolean | | | | Insert Option-82 information | - -=== "YAML" - - ```yaml - ip_dhcp_relay: - information_option: - ``` - -## IP Domain Lookup - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_domain_lookup](## "ip_domain_lookup") | Dictionary | | | | | - | [  source_interfaces](## "ip_domain_lookup.source_interfaces") | List, items: Dictionary | | | | | - | [    - name](## "ip_domain_lookup.source_interfaces.[].name") | String | Required, Unique | | | Source Interface
| - | [      vrf](## "ip_domain_lookup.source_interfaces.[].vrf") | String | | | | | - -=== "YAML" - - ```yaml - ip_domain_lookup: - source_interfaces: - - name: - vrf: - ``` - -## IP Extended Community Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_extcommunity_lists](## "ip_extcommunity_lists") | List, items: Dictionary | | | | | - | [  - name](## "ip_extcommunity_lists.[].name") | String | Required, Unique | | | Community-list Name | - | [    entries](## "ip_extcommunity_lists.[].entries") | List, items: Dictionary | Required | | | | - | [      - type](## "ip_extcommunity_lists.[].entries.[].type") | String | Required | | Valid Values:
- permit
- deny | | - | [        extcommunities](## "ip_extcommunity_lists.[].entries.[].extcommunities") | String | Required | | | Communities as string
Example: "65000:65000" | - -=== "YAML" - - ```yaml - ip_extcommunity_lists: - - name: - entries: - - type: - extcommunities: - ``` - -## IP Extended Community Lists RegExp - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_extcommunity_lists_regexp](## "ip_extcommunity_lists_regexp") | List, items: Dictionary | | | | | - | [  - name](## "ip_extcommunity_lists_regexp.[].name") | String | Required, Unique | | | Community-list Name | - | [    entries](## "ip_extcommunity_lists_regexp.[].entries") | List, items: Dictionary | Required | | | | - | [      - type](## "ip_extcommunity_lists_regexp.[].entries.[].type") | String | Required | | Valid Values:
- permit
- deny | | - | [        regexp](## "ip_extcommunity_lists_regexp.[].entries.[].regexp") | String | Required | | | Regular Expression | - -=== "YAML" - - ```yaml - ip_extcommunity_lists_regexp: - - name: - entries: - - type: - regexp: - ``` - -## IP Hardware - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_hardware](## "ip_hardware") | Dictionary | | | | | - | [  fib](## "ip_hardware.fib") | Dictionary | | | | | - | [    optimize](## "ip_hardware.fib.optimize") | Dictionary | | | | | - | [      prefixes](## "ip_hardware.fib.optimize.prefixes") | Dictionary | | | | | - | [        profile](## "ip_hardware.fib.optimize.prefixes.profile") | String | | | Valid Values:
- internet
- urpf-internet | | - -=== "YAML" - - ```yaml - ip_hardware: - fib: - optimize: - prefixes: - profile: - ``` - -## IP HTTP Client Source Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_http_client_source_interfaces](## "ip_http_client_source_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "ip_http_client_source_interfaces.[].name") | String | | | | Interface Name | - | [    vrf](## "ip_http_client_source_interfaces.[].vrf") | String | | | | | - -=== "YAML" - - ```yaml - ip_http_client_source_interfaces: - - name: - vrf: - ``` - -## IP ICMP Redirect - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_icmp_redirect](## "ip_icmp_redirect") | Boolean | | | | | - -=== "YAML" - - ```yaml - ip_icmp_redirect: - ``` - -## IP IGMP Snooping - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_igmp_snooping](## "ip_igmp_snooping") | Dictionary | | | | | - | [  globally_enabled](## "ip_igmp_snooping.globally_enabled") | Boolean | | True | | | - | [  robustness_variable](## "ip_igmp_snooping.robustness_variable") | Integer | | | | | - | [  restart_query_interval](## "ip_igmp_snooping.restart_query_interval") | Integer | | | | | - | [  interface_restart_query](## "ip_igmp_snooping.interface_restart_query") | Integer | | | | | - | [  fast_leave](## "ip_igmp_snooping.fast_leave") | Boolean | | | | | - | [  querier](## "ip_igmp_snooping.querier") | Dictionary | | | | | - | [    enabled](## "ip_igmp_snooping.querier.enabled") | Boolean | | | | | - | [    address](## "ip_igmp_snooping.querier.address") | String | | | | IP Address | - | [    query_interval](## "ip_igmp_snooping.querier.query_interval") | Integer | | | | | - | [    max_response_time](## "ip_igmp_snooping.querier.max_response_time") | Integer | | | | | - | [    last_member_query_interval](## "ip_igmp_snooping.querier.last_member_query_interval") | Integer | | | | | - | [    last_member_query_count](## "ip_igmp_snooping.querier.last_member_query_count") | Integer | | | | | - | [    startup_query_interval](## "ip_igmp_snooping.querier.startup_query_interval") | Integer | | | | | - | [    startup_query_count](## "ip_igmp_snooping.querier.startup_query_count") | Integer | | | | | - | [    version](## "ip_igmp_snooping.querier.version") | Integer | | | | | - | [  proxy](## "ip_igmp_snooping.proxy") | Boolean | | | | | - | [  vlans](## "ip_igmp_snooping.vlans") | List, items: Dictionary | | | | | - | [    - id](## "ip_igmp_snooping.vlans.[].id") | Integer | Required, Unique | | | VLAN ID | - | [      enabled](## "ip_igmp_snooping.vlans.[].enabled") | Boolean | | | | | - | [      querier](## "ip_igmp_snooping.vlans.[].querier") | Dictionary | | | | | - | [        enabled](## "ip_igmp_snooping.vlans.[].querier.enabled") | Boolean | | | | | - | [        address](## "ip_igmp_snooping.vlans.[].querier.address") | String | | | | IP Address | - | [        query_interval](## "ip_igmp_snooping.vlans.[].querier.query_interval") | Integer | | | | | - | [        max_response_time](## "ip_igmp_snooping.vlans.[].querier.max_response_time") | Integer | | | | | - | [        last_member_query_interval](## "ip_igmp_snooping.vlans.[].querier.last_member_query_interval") | Integer | | | | | - | [        last_member_query_count](## "ip_igmp_snooping.vlans.[].querier.last_member_query_count") | Integer | | | | | - | [        startup_query_interval](## "ip_igmp_snooping.vlans.[].querier.startup_query_interval") | Integer | | | | | - | [        startup_query_count](## "ip_igmp_snooping.vlans.[].querier.startup_query_count") | Integer | | | | | - | [        version](## "ip_igmp_snooping.vlans.[].querier.version") | Integer | | | | | - | [      max_groups](## "ip_igmp_snooping.vlans.[].max_groups") | Integer | | | | | - | [      fast_leave](## "ip_igmp_snooping.vlans.[].fast_leave") | Boolean | | | | | - | [      proxy](## "ip_igmp_snooping.vlans.[].proxy") | Boolean | | | | Global proxy settings should be enabled before enabling per-vlan | - -=== "YAML" - - ```yaml - ip_igmp_snooping: - globally_enabled: - robustness_variable: - restart_query_interval: - interface_restart_query: - fast_leave: - querier: - enabled: - address: - query_interval: - max_response_time: - last_member_query_interval: - last_member_query_count: - startup_query_interval: - startup_query_count: - version: - proxy: - vlans: - - id: - enabled: - querier: - enabled: - address: - query_interval: - max_response_time: - last_member_query_interval: - last_member_query_count: - startup_query_interval: - startup_query_count: - version: - max_groups: - fast_leave: - proxy: - ``` - -## IP Name Servers - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_name_servers](## "ip_name_servers") | List, items: Dictionary | | | | | - | [  - ip_address](## "ip_name_servers.[].ip_address") | String | | | | IPv4 or IPv6 address for DNS server | - | [    vrf](## "ip_name_servers.[].vrf") | String | | | | VRF Name | - | [    priority](## "ip_name_servers.[].priority") | Integer | | | Min: 0
Max: 4 | Priority value (lower is first) | - -=== "YAML" - - ```yaml - ip_name_servers: - - ip_address: - vrf: - priority: - ``` - -## IP Nat - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_nat](## "ip_nat") | Dictionary | | | | | - | [  kernel_buffer_size](## "ip_nat.kernel_buffer_size") | Integer | | | Min: 1
Max: 64 | Buffer size in MB | - | [  pools](## "ip_nat.pools") | List, items: Dictionary | | | | | - | [    - name](## "ip_nat.pools.[].name") | String | Required, Unique | | | | - | [      prefix_length](## "ip_nat.pools.[].prefix_length") | Integer | Required | | Min: 16
Max: 32 | | - | [      ranges](## "ip_nat.pools.[].ranges") | List, items: Dictionary | | | | | - | [        - first_ip](## "ip_nat.pools.[].ranges.[].first_ip") | String | Required | | | IPv4 address | - | [          last_ip](## "ip_nat.pools.[].ranges.[].last_ip") | String | Required | | | IPv4 address | - | [          first_port](## "ip_nat.pools.[].ranges.[].first_port") | Integer | | | Min: 1
Max: 65535 | | - | [          last_port](## "ip_nat.pools.[].ranges.[].last_port") | Integer | | | Min: 1
Max: 65535 | | - | [      utilization_log_threshold](## "ip_nat.pools.[].utilization_log_threshold") | Integer | | | Min: 1
Max: 100 | | - | [  synchronization](## "ip_nat.synchronization") | Dictionary | | | | | - | [    description](## "ip_nat.synchronization.description") | String | | | | | - | [    expiry_interval](## "ip_nat.synchronization.expiry_interval") | Integer | | | Min: 60
Max: 3600 | in seconds | - | [    local_interface](## "ip_nat.synchronization.local_interface") | String | | | | EOS interface name | - | [    peer_address](## "ip_nat.synchronization.peer_address") | String | | | | IPv4 address | - | [    port_range](## "ip_nat.synchronization.port_range") | Dictionary | | | | | - | [      first_port](## "ip_nat.synchronization.port_range.first_port") | Integer | | | Min: 1024
Max: 65535 | | - | [      last_port](## "ip_nat.synchronization.port_range.last_port") | Integer | | | Min: 1024
Max: 65535 | >= first_port | - | [      split_disabled](## "ip_nat.synchronization.port_range.split_disabled") | Boolean | | | | | - | [    shutdown](## "ip_nat.synchronization.shutdown") | Boolean | | | | | - | [  translation](## "ip_nat.translation") | Dictionary | | | | | - | [    address_selection](## "ip_nat.translation.address_selection") | Dictionary | | | | | - | [      any](## "ip_nat.translation.address_selection.any") | Boolean | | | | | - | [      hash_field_source_ip](## "ip_nat.translation.address_selection.hash_field_source_ip") | Boolean | | | | | - | [    counters](## "ip_nat.translation.counters") | Boolean | | | | | - | [    low_mark](## "ip_nat.translation.low_mark") | Dictionary | | | | | - | [      percentage](## "ip_nat.translation.low_mark.percentage") | Integer | | | Min: 1
Max: 99 | Used to render 'ip nat translation low-mark ' | - | [      host_percentage](## "ip_nat.translation.low_mark.host_percentage") | Integer | | | Min: 1
Max: 99 | Used to render 'ip nat translation low-mark host' | - | [    max_entries](## "ip_nat.translation.max_entries") | Dictionary | | | | | - | [      limit](## "ip_nat.translation.max_entries.limit") | Integer | | | Min: 0
Max: 4294967295 | | - | [      host_limit](## "ip_nat.translation.max_entries.host_limit") | Integer | | | Min: 0
Max: 4294967295 | | - | [      ip_limits](## "ip_nat.translation.max_entries.ip_limits") | List, items: Dictionary | | | | | - | [        - ip](## "ip_nat.translation.max_entries.ip_limits.[].ip") | String | Required, Unique | | | IPv4 address | - | [          limit](## "ip_nat.translation.max_entries.ip_limits.[].limit") | Integer | Required | | Min: 0
Max: 4294967295 | | - | [    timeouts](## "ip_nat.translation.timeouts") | List, items: Dictionary | | | | | - | [      - protocol](## "ip_nat.translation.timeouts.[].protocol") | String | Required, Unique | | Valid Values:
- tcp
- udp | | - | [        timeout](## "ip_nat.translation.timeouts.[].timeout") | Integer | Required | | Min: 0
Max: 4294967295 | in seconds | - -=== "YAML" - - ```yaml - ip_nat: - kernel_buffer_size: - pools: - - name: - prefix_length: - ranges: - - first_ip: - last_ip: - first_port: - last_port: - utilization_log_threshold: - synchronization: - description: - expiry_interval: - local_interface: - peer_address: - port_range: - first_port: - last_port: - split_disabled: - shutdown: - translation: - address_selection: - any: - hash_field_source_ip: - counters: - low_mark: - percentage: - host_percentage: - max_entries: - limit: - host_limit: - ip_limits: - - ip: - limit: - timeouts: - - protocol: - timeout: - ``` - -## IP Radius Source Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_radius_source_interfaces](## "ip_radius_source_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "ip_radius_source_interfaces.[].name") | String | | | | Interface Name | - | [    vrf](## "ip_radius_source_interfaces.[].vrf") | String | | | | VRF Name | - -=== "YAML" - - ```yaml - ip_radius_source_interfaces: - - name: - vrf: - ``` - -## IP Routing - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_routing](## "ip_routing") | Boolean | | | | | - -=== "YAML" - - ```yaml - ip_routing: - ``` - -## IP Routing IPv6 Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_routing_ipv6_interfaces](## "ip_routing_ipv6_interfaces") | Boolean | | | | | - -=== "YAML" - - ```yaml - ip_routing_ipv6_interfaces: - ``` - -## IP SSH Client Source Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_ssh_client_source_interfaces](## "ip_ssh_client_source_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "ip_ssh_client_source_interfaces.[].name") | String | | | | Interface Name | - | [    vrf](## "ip_ssh_client_source_interfaces.[].vrf") | String | | default | | | - -=== "YAML" - - ```yaml - ip_ssh_client_source_interfaces: - - name: - vrf: - ``` - -## IP Tacacs Source Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_tacacs_source_interfaces](## "ip_tacacs_source_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "ip_tacacs_source_interfaces.[].name") | String | | | | Interface name | - | [    vrf](## "ip_tacacs_source_interfaces.[].vrf") | String | | | | | - -=== "YAML" - - ```yaml - ip_tacacs_source_interfaces: - - name: - vrf: - ``` - -## IP Virtual Router MAC Address - -MAC address (hh:hh:hh:hh:hh:hh) - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ip_virtual_router_mac_address](## "ip_virtual_router_mac_address") | String | | | | | - -=== "YAML" - - ```yaml - ip_virtual_router_mac_address: - ``` - -## IPv6 Extended Access-Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_access_lists](## "ipv6_access_lists") | List, items: Dictionary | | | | | - | [  - name](## "ipv6_access_lists.[].name") | String | Required, Unique | | | IPv6 Access-list Name | - | [    counters_per_entry](## "ipv6_access_lists.[].counters_per_entry") | Boolean | | | | | - | [    sequence_numbers](## "ipv6_access_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "ipv6_access_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "ipv6_access_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "deny ipv6 any any" | - -=== "YAML" - - ```yaml - ipv6_access_lists: - - name: - counters_per_entry: - sequence_numbers: - - sequence: - action: - ``` - -## IPv6 Hardware - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_hardware](## "ipv6_hardware") | Dictionary | | | | | - | [  fib](## "ipv6_hardware.fib") | Dictionary | | | | | - | [    optimize](## "ipv6_hardware.fib.optimize") | Dictionary | | | | | - | [      prefixes](## "ipv6_hardware.fib.optimize.prefixes") | Dictionary | | | | | - | [        profile](## "ipv6_hardware.fib.optimize.prefixes.profile") | String | | | | Pre-defined profile 'internet' or user-defined profile name | - -=== "YAML" - - ```yaml - ipv6_hardware: - fib: - optimize: - prefixes: - profile: - ``` - -## IPv6 ICMP Redirect - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_icmp_redirect](## "ipv6_icmp_redirect") | Boolean | | | | | - -=== "YAML" - - ```yaml - ipv6_icmp_redirect: - ``` - -## IPv6 Prefix Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_prefix_lists](## "ipv6_prefix_lists") | List, items: Dictionary | | | | | - | [  - name](## "ipv6_prefix_lists.[].name") | String | Required, Unique | | | Prefix-list Name | - | [    sequence_numbers](## "ipv6_prefix_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "ipv6_prefix_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "ipv6_prefix_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "permit 1b11:3a00:22b0:0082::/64 eq 128" | - -=== "YAML" - - ```yaml - ipv6_prefix_lists: - - name: - sequence_numbers: - - sequence: - action: - ``` - -## IPv6 Standard Access Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_standard_access_lists](## "ipv6_standard_access_lists") | List, items: Dictionary | | | | | - | [  - name](## "ipv6_standard_access_lists.[].name") | String | Required, Unique | | | Access-list Name | - | [    counters_per_entry](## "ipv6_standard_access_lists.[].counters_per_entry") | Boolean | | | | | - | [    sequence_numbers](## "ipv6_standard_access_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "ipv6_standard_access_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "ipv6_standard_access_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "deny ipv6 any any" | - -=== "YAML" - - ```yaml - ipv6_standard_access_lists: - - name: - counters_per_entry: - sequence_numbers: - - sequence: - action: - ``` - -## IPv6 Static Routes - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_static_routes](## "ipv6_static_routes") | List, items: Dictionary | | | | | - | [  - vrf](## "ipv6_static_routes.[].vrf") | String | | | | | - | [    destination_address_prefix](## "ipv6_static_routes.[].destination_address_prefix") | String | | | | IPv6 Network/Mask | - | [    interface](## "ipv6_static_routes.[].interface") | String | | | | | - | [    gateway](## "ipv6_static_routes.[].gateway") | String | | | | IPv6 Address | - | [    track_bfd](## "ipv6_static_routes.[].track_bfd") | Boolean | | | | Track next-hop using BFD | - | [    distance](## "ipv6_static_routes.[].distance") | Integer | | | Min: 1
Max: 255 | | - | [    tag](## "ipv6_static_routes.[].tag") | Integer | | | Min: 0
Max: 4294967295 | | - | [    name](## "ipv6_static_routes.[].name") | String | | | | Description | - | [    metric](## "ipv6_static_routes.[].metric") | Integer | | | Min: 0
Max: 4294967295 | | - -=== "YAML" - - ```yaml - ipv6_static_routes: - - vrf: - destination_address_prefix: - interface: - gateway: - track_bfd: - distance: - tag: - name: - metric: - ``` - -## IPv6 Unicast Routing - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ipv6_unicast_routing](## "ipv6_unicast_routing") | Boolean | | | | | - -=== "YAML" - - ```yaml - ipv6_unicast_routing: - ``` - -## L2 Protocol - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [l2_protocol](## "l2_protocol") | Dictionary | | | | | - | [  forwarding_profiles](## "l2_protocol.forwarding_profiles") | List, items: Dictionary | | | | | - | [    - name](## "l2_protocol.forwarding_profiles.[].name") | String | Required, Unique | | | | - | [      protocols](## "l2_protocol.forwarding_profiles.[].protocols") | List, items: Dictionary | | | | | - | [        - name](## "l2_protocol.forwarding_profiles.[].protocols.[].name") | String | Required, Unique | | Valid Values:
- bfd per-link rfc-7130
- e-lmi
- isis
- lacp
- lldp
- macsec
- pause
- stp | | - | [          forward](## "l2_protocol.forwarding_profiles.[].protocols.[].forward") | Boolean | | | | | - | [          tagged_forward](## "l2_protocol.forwarding_profiles.[].protocols.[].tagged_forward") | Boolean | | | | | - | [          untagged_forward](## "l2_protocol.forwarding_profiles.[].protocols.[].untagged_forward") | Boolean | | | | | - -=== "YAML" - - ```yaml - l2_protocol: - forwarding_profiles: - - name: - protocols: - - name: - forward: - tagged_forward: - untagged_forward: - ``` - -## LACP - -Set Link Aggregation Control Protocol (LACP) parameters. - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [lacp](## "lacp") | Dictionary | | | | | - | [  port_id](## "lacp.port_id") | Dictionary | | | | LACP port-ID range configuration. | - | [    range](## "lacp.port_id.range") | Dictionary | | | | | - | [      begin](## "lacp.port_id.range.begin") | Integer | | | | Minimum LACP port-ID range. | - | [      end](## "lacp.port_id.range.end") | Integer | | | | Maximum LACP port-ID range. | - | [  rate_limit](## "lacp.rate_limit") | Dictionary | | | | Set LACPDU rate limit options. | - | [    default](## "lacp.rate_limit.default") | Boolean | | | | Enable LACPDU rate limiting by default on all ports. | - | [  system_priority](## "lacp.system_priority") | Integer | | | Min: 0
Max: 65535 | Set local system LACP priority. | - -=== "YAML" - - ```yaml - lacp: - port_id: - range: - begin: - end: - rate_limit: - default: - system_priority: - ``` - -## Link Tracking Groups - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [link_tracking_groups](## "link_tracking_groups") | List, items: Dictionary | | | | | - | [  - name](## "link_tracking_groups.[].name") | String | Required, Unique | | | | - | [    links_minimum](## "link_tracking_groups.[].links_minimum") | Integer | | | Min: 1
Max: 100000 | | - | [    recovery_delay](## "link_tracking_groups.[].recovery_delay") | Integer | | | Min: 0
Max: 3600 | | - -=== "YAML" - - ```yaml - link_tracking_groups: - - name: - links_minimum: - recovery_delay: - ``` - -## LLDP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [lldp](## "lldp") | Dictionary | | | | | - | [  timer](## "lldp.timer") | Integer | | | | | - | [  timer_reinitialization](## "lldp.timer_reinitialization") | String | | | | | - | [  holdtime](## "lldp.holdtime") | Integer | | | | | - | [  management_address](## "lldp.management_address") | String | | | | | - | [  vrf](## "lldp.vrf") | String | | | | | - | [  receive_packet_tagged_drop](## "lldp.receive_packet_tagged_drop") | String | | | | | - | [  tlvs](## "lldp.tlvs") | List, items: Dictionary | | | | | - | [    - name](## "lldp.tlvs.[].name") | String | Required, Unique | | Valid Values:
- link-aggregation
- management-address
- max-frame-size
- med
- port-description
- port-vlan
- power-via-mdi
- system-capabilities
- system-description
- system-name
- vlan-name | | - | [      transmit](## "lldp.tlvs.[].transmit") | Boolean | | | | | - | [  run](## "lldp.run") | Boolean | | | | | - -=== "YAML" - - ```yaml - lldp: - timer: - timer_reinitialization: - holdtime: - management_address: - vrf: - receive_packet_tagged_drop: - tlvs: - - name: - transmit: - run: - ``` - -## Load Interval - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [load_interval](## "load_interval") | Dictionary | | | | | - | [  default](## "load_interval.default") | Integer | | | | Default load interval in seconds | - -=== "YAML" - - ```yaml - load_interval: - default: - ``` - -## Local Users - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [local_users](## "local_users") | List, items: Dictionary | | | | | - | [  - name](## "local_users.[].name") | String | Required, Unique | | | Username | - | [    disabled](## "local_users.[].disabled") | Boolean | | | | If true, the user will be removed and all other settings are ignored.
Useful for removing the default "admin" user.
| - | [    privilege](## "local_users.[].privilege") | Integer | | | Min: 0
Max: 15 | Initial privilege level with local EXEC authorization.
| - | [    role](## "local_users.[].role") | String | | | | EOS RBAC Role to be assigned to the user such as "network-admin" or "network-operator"
| - | [    sha512_password](## "local_users.[].sha512_password") | String | | | | SHA512 Hash of Password
Must be the hash of the password. By default EOS salts the password with the username, so the simplest is to generate the hash on an EOS device using the same username.
| - | [    no_password](## "local_users.[].no_password") | Boolean | | | | If set a password will not be configured for this user. "sha512_password" MUST not be defined for this user.
| - | [    ssh_key](## "local_users.[].ssh_key") | String | | | | | - | [    shell](## "local_users.[].shell") | String | | | Valid Values:
- /bin/bash
- /bin/sh
- /sbin/nologin | Specify shell for the user
| - -=== "YAML" - - ```yaml - local_users: - - name: - disabled: - privilege: - role: - sha512_password: - no_password: - ssh_key: - shell: - ``` - -## Logging - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [logging](## "logging") | Dictionary | | | | | - | [  console](## "logging.console") | String | | | Valid Values:
- debugging
- informational
- notifications
- warnings
- errors
- critical
- alerts
- emergencies
- disabled | Console logging severity level
| - | [  monitor](## "logging.monitor") | String | | | Valid Values:
- debugging
- informational
- notifications
- warnings
- errors
- critical
- alerts
- emergencies
- disabled | Monitor logging severity level
| - | [  buffered](## "logging.buffered") | Dictionary | | | | | - | [    size](## "logging.buffered.size") | Integer | | | Min: 10
Max: 2147483647 | | - | [    level](## "logging.buffered.level") | String | | | Valid Values:
- alerts
- critical
- debugging
- emergencies
- errors
- informational
- notifications
- warnings
- disabled | Buffer logging severity level
| - | [  trap](## "logging.trap") | String | | | Valid Values:
- alerts
- critical
- debugging
- emergencies
- errors
- informational
- notifications
- system
- warnings
- disabled | Trap logging severity level
| - | [  synchronous](## "logging.synchronous") | Dictionary | | | | | - | [    level](## "logging.synchronous.level") | String | | critical | Valid Values:
- alerts
- all
- critical
- debugging
- emergencies
- errors
- informational
- notifications
- warnings
- disabled | Synchronous logging severity level
| - | [  format](## "logging.format") | Dictionary | | | | | - | [    timestamp](## "logging.format.timestamp") | String | | | Valid Values:
- high-resolution
- traditional
- traditional timezone
- traditional year
- traditional timezone year
- traditional year timezone | Timestamp format | - | [    hostname](## "logging.format.hostname") | String | | | Valid Values:
- fqdn
- ipv4 | Hostname format | - | [    sequence_numbers](## "logging.format.sequence_numbers") | Boolean | | | | Add sequence numbers to log messages
| - | [  facility](## "logging.facility") | String | | | Valid Values:
- auth
- cron
- daemon
- kern
- local0
- local1
- local2
- local3
- local4
- local5
- local6
- local7
- lpr
- mail
- news
- sys9
- sys10
- sys11
- sys12
- sys13
- sys14
- syslog
- user
- uucp | | - | [  source_interface](## "logging.source_interface") | String | | | | Source Interface Name | - | [  vrfs](## "logging.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "logging.vrfs.[].name") | String | Required, Unique | | | VRF name | - | [      source_interface](## "logging.vrfs.[].source_interface") | String | | | | Source interface name | - | [      hosts](## "logging.vrfs.[].hosts") | List, items: Dictionary | | | | | - | [        - name](## "logging.vrfs.[].hosts.[].name") | String | Required, Unique | | | Syslog server name | - | [          protocol](## "logging.vrfs.[].hosts.[].protocol") | String | | udp | Valid Values:
- tcp
- udp | | - | [          ports](## "logging.vrfs.[].hosts.[].ports") | List, items: Integer | | | | | - | [            - <int>](## "logging.vrfs.[].hosts.[].ports.[].<int>") | Integer | | | | | - | [  policy](## "logging.policy") | Dictionary | | | | | - | [    match](## "logging.policy.match") | Dictionary | | | | | - | [      match_lists](## "logging.policy.match.match_lists") | List, items: Dictionary | | | | | - | [        - name](## "logging.policy.match.match_lists.[].name") | String | Required, Unique | | | Match list | - | [          action](## "logging.policy.match.match_lists.[].action") | String | | | Valid Values:
- discard | | - -=== "YAML" - - ```yaml - logging: - console: - monitor: - buffered: - size: - level: - trap: - synchronous: - level: - format: - timestamp: - hostname: - sequence_numbers: - facility: - source_interface: - vrfs: - - name: - source_interface: - hosts: - - name: - protocol: - ports: - - - policy: - match: - match_lists: - - name: - action: - ``` - -## Loopback Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [loopback_interfaces](## "loopback_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "loopback_interfaces.[].name") | String | Required, Unique | | | Loopback interface name e.g. "Loopback0" | - | [    description](## "loopback_interfaces.[].description") | String | | | | | - | [    shutdown](## "loopback_interfaces.[].shutdown") | Boolean | | | | | - | [    vrf](## "loopback_interfaces.[].vrf") | String | | | | VRF name | - | [    ip_address](## "loopback_interfaces.[].ip_address") | String | | | | IPv4_address/Mask | - | [    ip_address_secondaries](## "loopback_interfaces.[].ip_address_secondaries") | List, items: String | | | | | - | [      - <str>](## "loopback_interfaces.[].ip_address_secondaries.[].<str>") | String | | | | IPv4_address/Mask | - | [    ipv6_enable](## "loopback_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "loopback_interfaces.[].ipv6_address") | String | | | | IPv6_address/Mask | - | [    ip_proxy_arp](## "loopback_interfaces.[].ip_proxy_arp") | Boolean | | | | | - | [    ospf_area](## "loopback_interfaces.[].ospf_area") | String | | | | | - | [    mpls](## "loopback_interfaces.[].mpls") | Dictionary | | | | | - | [      ldp](## "loopback_interfaces.[].mpls.ldp") | Dictionary | | | | | - | [        interface](## "loopback_interfaces.[].mpls.ldp.interface") | Boolean | | | | | - | [    isis_enable](## "loopback_interfaces.[].isis_enable") | String | | | | ISIS instance name | - | [    isis_passive](## "loopback_interfaces.[].isis_passive") | Boolean | | | | | - | [    isis_metric](## "loopback_interfaces.[].isis_metric") | Integer | | | | | - | [    isis_network_point_to_point](## "loopback_interfaces.[].isis_network_point_to_point") | Boolean | | | | | - | [    node_segment](## "loopback_interfaces.[].node_segment") | Dictionary | | | | | - | [      ipv4_index](## "loopback_interfaces.[].node_segment.ipv4_index") | Integer | | | | | - | [      ipv6_index](## "loopback_interfaces.[].node_segment.ipv6_index") | Integer | | | | | - | [    eos_cli](## "loopback_interfaces.[].eos_cli") | String | | | | EOS CLI rendered directly on the loopback interface in the final EOS configuration | - -=== "YAML" - - ```yaml - loopback_interfaces: - - name: - description: - shutdown: - vrf: - ip_address: - ip_address_secondaries: - - - ipv6_enable: - ipv6_address: - ip_proxy_arp: - ospf_area: - mpls: - ldp: - interface: - isis_enable: - isis_passive: - isis_metric: - isis_network_point_to_point: - node_segment: - ipv4_index: - ipv6_index: - eos_cli: - ``` - -## MAC Access Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mac_access_lists](## "mac_access_lists") | List, items: Dictionary | | | | | - | [  - name](## "mac_access_lists.[].name") | String | Required, Unique | | | MAC Access-list Name | - | [    counters_per_entry](## "mac_access_lists.[].counters_per_entry") | Boolean | | | | | - | [    entries](## "mac_access_lists.[].entries") | List, items: Dictionary | | | | | - | [      - sequence](## "mac_access_lists.[].entries.[].sequence") | Integer | | | | | - | [        action](## "mac_access_lists.[].entries.[].action") | String | | | | | - -=== "YAML" - - ```yaml - mac_access_lists: - - name: - counters_per_entry: - entries: - - sequence: - action: - ``` - -## MAC Address Table - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mac_address_table](## "mac_address_table") | Dictionary | | | | | - | [  aging_time](## "mac_address_table.aging_time") | Integer | | | | Aging time in seconds | - | [  notification_host_flap](## "mac_address_table.notification_host_flap") | Dictionary | | | | | - | [    logging](## "mac_address_table.notification_host_flap.logging") | Boolean | | | | | - | [    detection](## "mac_address_table.notification_host_flap.detection") | Dictionary | | | | | - | [      window](## "mac_address_table.notification_host_flap.detection.window") | Integer | | | Min: 2
Max: 300 | | - | [      moves](## "mac_address_table.notification_host_flap.detection.moves") | Integer | | | Min: 2
Max: 10 | | - -=== "YAML" - - ```yaml - mac_address_table: - aging_time: - notification_host_flap: - logging: - detection: - window: - moves: - ``` - -## MAC Security (MACsec) - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mac_security](## "mac_security") | Dictionary | | | | | - | [  license](## "mac_security.license") | Dictionary | Required | | | | - | [    license_name](## "mac_security.license.license_name") | String | Required | | | | - | [    license_key](## "mac_security.license.license_key") | String | Required | | | | - | [  fips_restrictions](## "mac_security.fips_restrictions") | Boolean | Required | | | | - | [  profiles](## "mac_security.profiles") | List, items: Dictionary | | | | | - | [    - name](## "mac_security.profiles.[].name") | String | Required, Unique | | | Profile-Name | - | [      cipher](## "mac_security.profiles.[].cipher") | String | | | Valid Values:
- aes128-gcm
- aes128-gcm-xpn
- aes256-gcm
- aes256-gcm-xpn | | - | [      connection_keys](## "mac_security.profiles.[].connection_keys") | List, items: Dictionary | | | | | - | [        - id](## "mac_security.profiles.[].connection_keys.[].id") | String | Required, Unique | | | | - | [          encrypted_key](## "mac_security.profiles.[].connection_keys.[].encrypted_key") | String | | | | | - | [          fallback](## "mac_security.profiles.[].connection_keys.[].fallback") | Boolean | | | | | - | [      mka](## "mac_security.profiles.[].mka") | Dictionary | | | | | - | [        key_server_priority](## "mac_security.profiles.[].mka.key_server_priority") | Integer | | | Min: 0
Max: 255 | | - | [        session](## "mac_security.profiles.[].mka.session") | Dictionary | | | | | - | [          rekey_period](## "mac_security.profiles.[].mka.session.rekey_period") | Integer | | | Min: 30
Max: 100000 | Rekey period in seconds | - | [      sci](## "mac_security.profiles.[].sci") | Boolean | | | | | - | [      l2_protocols](## "mac_security.profiles.[].l2_protocols") | Dictionary | | | | | - | [        ethernet_flow_control](## "mac_security.profiles.[].l2_protocols.ethernet_flow_control") | Dictionary | | | | | - | [          mode](## "mac_security.profiles.[].l2_protocols.ethernet_flow_control.mode") | String | Required | | Valid Values:
- encrypt
- bypass | | - | [        lldp](## "mac_security.profiles.[].l2_protocols.lldp") | Dictionary | | | | | - | [          mode](## "mac_security.profiles.[].l2_protocols.lldp.mode") | String | Required | | Valid Values:
- bypass
- bypass unauthorized | | - -=== "YAML" - - ```yaml - mac_security: - license: - license_name: - license_key: - fips_restrictions: - profiles: - - name: - cipher: - connection_keys: - - id: - encrypted_key: - fallback: - mka: - key_server_priority: - session: - rekey_period: - sci: - l2_protocols: - ethernet_flow_control: - mode: - lldp: - mode: - ``` - -## Maintenance Mode - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [maintenance](## "maintenance") | Dictionary | | | | | - | [  default_interface_profile](## "maintenance.default_interface_profile") | String | | | | Name of default Interface Profile
| - | [  default_bgp_profile](## "maintenance.default_bgp_profile") | String | | | | Name of default BGP Profile
| - | [  default_unit_profile](## "maintenance.default_unit_profile") | String | | | | Name of default Unit Profile
| - | [  interface_profiles](## "maintenance.interface_profiles") | List, items: Dictionary | | | | | - | [    - name](## "maintenance.interface_profiles.[].name") | String | Required, Unique | | | | - | [      rate_monitoring](## "maintenance.interface_profiles.[].rate_monitoring") | Dictionary | | | | | - | [        load_interval](## "maintenance.interface_profiles.[].rate_monitoring.load_interval") | Integer | | | | Load Interval in Seconds
| - | [        threshold](## "maintenance.interface_profiles.[].rate_monitoring.threshold") | Integer | | | | Threshold in kbps
| - | [      shutdown](## "maintenance.interface_profiles.[].shutdown") | Dictionary | | | | | - | [        max_delay](## "maintenance.interface_profiles.[].shutdown.max_delay") | Integer | | | | Max delay in seconds
| - | [  bgp_profiles](## "maintenance.bgp_profiles") | List, items: Dictionary | | | | | - | [    - name](## "maintenance.bgp_profiles.[].name") | String | Required, Unique | | | BGP Profile Name | - | [      initiator](## "maintenance.bgp_profiles.[].initiator") | Dictionary | | | | | - | [        route_map_inout](## "maintenance.bgp_profiles.[].initiator.route_map_inout") | String | | | | Route Map | - | [  unit_profiles](## "maintenance.unit_profiles") | List, items: Dictionary | | | | | - | [    - name](## "maintenance.unit_profiles.[].name") | String | Required, Unique | | | Unit Profile Name | - | [      on_boot](## "maintenance.unit_profiles.[].on_boot") | Dictionary | | | | | - | [        duration](## "maintenance.unit_profiles.[].on_boot.duration") | Integer | | | Min: 300
Max: 3600 | On-boot in seconds
| - | [  units](## "maintenance.units") | List, items: Dictionary | | | | | - | [    - name](## "maintenance.units.[].name") | String | Required, Unique | | | Unit Name | - | [      quiesce](## "maintenance.units.[].quiesce") | Boolean | | | | | - | [      profile](## "maintenance.units.[].profile") | String | | | | Name of Unit Profile
| - | [      groups](## "maintenance.units.[].groups") | Dictionary | | | | | - | [        bgp_groups](## "maintenance.units.[].groups.bgp_groups") | List, items: String | | | | | - | [          - <str>](## "maintenance.units.[].groups.bgp_groups.[].<str>") | String | | | | Name of BGP Group
| - | [        interface_groups](## "maintenance.units.[].groups.interface_groups") | List, items: String | | | | | - | [          - <str>](## "maintenance.units.[].groups.interface_groups.[].<str>") | String | | | | Name of Interface Group | - -=== "YAML" - - ```yaml - maintenance: - default_interface_profile: - default_bgp_profile: - default_unit_profile: - interface_profiles: - - name: - rate_monitoring: - load_interval: - threshold: - shutdown: - max_delay: - bgp_profiles: - - name: - initiator: - route_map_inout: - unit_profiles: - - name: - on_boot: - duration: - units: - - name: - quiesce: - profile: - groups: - bgp_groups: - - - interface_groups: - - - ``` - -## Management API Gnmi - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_api_gnmi](## "management_api_gnmi") | Dictionary | | | | | - | [  provider](## "management_api_gnmi.provider") | String | | eos-native | | | - | [  transport](## "management_api_gnmi.transport") | Dictionary | | | | | - | [    grpc](## "management_api_gnmi.transport.grpc") | List, items: Dictionary | | | | | - | [      - name](## "management_api_gnmi.transport.grpc.[].name") | String | | | | Transport name | - | [        ssl_profile](## "management_api_gnmi.transport.grpc.[].ssl_profile") | String | | | | SSL profile name | - | [        vrf](## "management_api_gnmi.transport.grpc.[].vrf") | String | | | | VRF name is optional | - | [        notification_timestamp](## "management_api_gnmi.transport.grpc.[].notification_timestamp") | String | | | Valid Values:
- send-time
- last-change-time | Per the GNMI specification, the default timestamp field of a notification message is set to be
the time at which the value of the underlying data source changes or when the reported event takes place.
In order to facilitate integration in legacy environments oriented around polling style operations,
an option to support overriding the timestamp field to the send-time is available from EOS 4.27.0F.
| - | [        ip_access_group](## "management_api_gnmi.transport.grpc.[].ip_access_group") | String | | | | ACL name | - | [    grpc_tunnels](## "management_api_gnmi.transport.grpc_tunnels") | List, items: Dictionary | | | | | - | [      - name](## "management_api_gnmi.transport.grpc_tunnels.[].name") | String | Required, Unique | | | Transport name | - | [        shutdown](## "management_api_gnmi.transport.grpc_tunnels.[].shutdown") | Boolean | | | | Operational status of the gRPC tunnel | - | [        tunnel_ssl_profile](## "management_api_gnmi.transport.grpc_tunnels.[].tunnel_ssl_profile") | String | | | | Tunnel SSL profile name | - | [        gnmi_ssl_profile](## "management_api_gnmi.transport.grpc_tunnels.[].gnmi_ssl_profile") | String | | | | gNMI SSL profile name | - | [        vrf](## "management_api_gnmi.transport.grpc_tunnels.[].vrf") | String | | | | VRF name | - | [        destination](## "management_api_gnmi.transport.grpc_tunnels.[].destination") | Dictionary | | | | | - | [          address](## "management_api_gnmi.transport.grpc_tunnels.[].destination.address") | String | Required | | | IP address or hostname | - | [          port](## "management_api_gnmi.transport.grpc_tunnels.[].destination.port") | Integer | Required | | Min: 1
Max: 65535 | TCP Port | - | [        local_interface](## "management_api_gnmi.transport.grpc_tunnels.[].local_interface") | Dictionary | | | | | - | [          name](## "management_api_gnmi.transport.grpc_tunnels.[].local_interface.name") | String | Required | | | Interface name | - | [          port](## "management_api_gnmi.transport.grpc_tunnels.[].local_interface.port") | Integer | Required | | Min: 1
Max: 65535 | TCP Port | - | [        target](## "management_api_gnmi.transport.grpc_tunnels.[].target") | Dictionary | | | | | - | [          use_serial_number](## "management_api_gnmi.transport.grpc_tunnels.[].target.use_serial_number") | Boolean | | | | Use serial number as the Target ID | - | [          target_ids](## "management_api_gnmi.transport.grpc_tunnels.[].target.target_ids") | List, items: String | | | | Target IDs as a list.
| - | [            - <str>](## "management_api_gnmi.transport.grpc_tunnels.[].target.target_ids.[].<str>") | String | | | | | - | [  enable_vrfs](## "management_api_gnmi.enable_vrfs") | List, items: Dictionary | | | | Enable VRFs will be deprecated in AVD v4.0.
These should not be mixed with the new keys above.
| - | [    - name](## "management_api_gnmi.enable_vrfs.[].name") | String | Required, Unique | | | VRF name | - | [      access_group](## "management_api_gnmi.enable_vrfs.[].access_group") | String | | | | Standard IPv4 ACL name | - | [  octa](## "management_api_gnmi.octa") | Dictionary | | | | Octa key will be deprecated in AVD v4.0.
These should not be mixed with the new keys above.
Octa activates `eos-native` provider and it is the only provider currently supported by EOS. | - -=== "YAML" - - ```yaml - management_api_gnmi: - provider: - transport: - grpc: - - name: - ssl_profile: - vrf: - notification_timestamp: - ip_access_group: - grpc_tunnels: - - name: - shutdown: - tunnel_ssl_profile: - gnmi_ssl_profile: - vrf: - destination: - address: - port: - local_interface: - name: - port: - target: - use_serial_number: - target_ids: - - - enable_vrfs: - - name: - access_group: - octa: - ``` - -## Management API HTTP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_api_http](## "management_api_http") | Dictionary | | | | | - | [  enable_http](## "management_api_http.enable_http") | Boolean | | | | | - | [  enable_https](## "management_api_http.enable_https") | Boolean | | | | | - | [  https_ssl_profile](## "management_api_http.https_ssl_profile") | String | | | | SSL Profile Name | - | [  default_services](## "management_api_http.default_services") | Boolean | | | | Enable default services: capi-doc and tapagg | - | [  enable_vrfs](## "management_api_http.enable_vrfs") | List, items: Dictionary | | | | | - | [    - name](## "management_api_http.enable_vrfs.[].name") | String | Required, Unique | | | VRF Name | - | [      access_group](## "management_api_http.enable_vrfs.[].access_group") | String | | | | Standard IPv4 ACL name | - | [      ipv6_access_group](## "management_api_http.enable_vrfs.[].ipv6_access_group") | String | | | | Standard IPv6 ACL name | - | [  protocol_https_certificate](## "management_api_http.protocol_https_certificate") | Dictionary | | | | | - | [    certificate](## "management_api_http.protocol_https_certificate.certificate") | String | | | | Name of certificate; private key must also be specified | - | [    private_key](## "management_api_http.protocol_https_certificate.private_key") | String | | | | Name of private key; certificate must also be specified | - -=== "YAML" - - ```yaml - management_api_http: - enable_http: - enable_https: - https_ssl_profile: - default_services: - enable_vrfs: - - name: - access_group: - ipv6_access_group: - protocol_https_certificate: - certificate: - private_key: - ``` - -## Management API Models - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_api_models](## "management_api_models") | Dictionary | | | | | - | [  providers](## "management_api_models.providers") | List, items: Dictionary | | | | | - | [    - name](## "management_api_models.providers.[].name") | String | | | Valid Values:
- sysdb
- smash | | - | [      paths](## "management_api_models.providers.[].paths") | List, items: Dictionary | | | | | - | [        - path](## "management_api_models.providers.[].paths.[].path") | String | | | | | - | [          disabled](## "management_api_models.providers.[].paths.[].disabled") | Boolean | | False | | | - -=== "YAML" - - ```yaml - management_api_models: - providers: - - name: - paths: - - path: - disabled: - ``` - -## Management Console - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_console](## "management_console") | Dictionary | | | | | - | [  idle_timeout](## "management_console.idle_timeout") | Integer | | | Min: 0
Max: 86400 | | - -=== "YAML" - - ```yaml - management_console: - idle_timeout: - ``` - -## Management CVX - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_cvx](## "management_cvx") | Dictionary | | | | | - | [  shutdown](## "management_cvx.shutdown") | Boolean | | | | | - | [  server_hosts](## "management_cvx.server_hosts") | List, items: String | | | | | - | [    - <str>](## "management_cvx.server_hosts.[].<str>") | String | | | | IP or hostname | - | [  source_interface](## "management_cvx.source_interface") | String | | | | Interface name | - | [  vrf](## "management_cvx.vrf") | String | | | | VRF Name | - -=== "YAML" - - ```yaml - management_cvx: - shutdown: - server_hosts: - - - source_interface: - vrf: - ``` - -## Management Defaults - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_defaults](## "management_defaults") | Dictionary | | | | | - | [  secret](## "management_defaults.secret") | Dictionary | | | | | - | [    hash](## "management_defaults.secret.hash") | String | | | Valid Values:
- md5
- sha512 | | - -=== "YAML" - - ```yaml - management_defaults: - secret: - hash: - ``` - -## Management Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_interfaces](## "management_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "management_interfaces.[].name") | String | Required, Unique | | | Management Interface Name | - | [    description](## "management_interfaces.[].description") | String | | | | | - | [    shutdown](## "management_interfaces.[].shutdown") | Boolean | | | | | - | [    mtu](## "management_interfaces.[].mtu") | Integer | | | | | - | [    vrf](## "management_interfaces.[].vrf") | String | | | | VRF Name | - | [    ip_address](## "management_interfaces.[].ip_address") | String | | | | IPv4_address/Mask | - | [    ipv6_enable](## "management_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "management_interfaces.[].ipv6_address") | String | | | | IPv6_address/Mask | - | [    type](## "management_interfaces.[].type") | String | | oob | Valid Values:
- oob
- inband | For documentation purposes only | - | [    gateway](## "management_interfaces.[].gateway") | String | | | | IPv4 address of default gateway in management VRF | - | [    ipv6_gateway](## "management_interfaces.[].ipv6_gateway") | String | | | | IPv6 address of default gateway in management VRF | - | [    mac_address](## "management_interfaces.[].mac_address") | String | | | | MAC address | - | [    eos_cli](## "management_interfaces.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the management interface in the final EOS configuration | - -=== "YAML" - - ```yaml - management_interfaces: - - name: - description: - shutdown: - mtu: - vrf: - ip_address: - ipv6_enable: - ipv6_address: - type: - gateway: - ipv6_gateway: - mac_address: - eos_cli: - ``` - -## Management Security - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_security](## "management_security") | Dictionary | | | | | - | [  entropy_source](## "management_security.entropy_source") | String | | | | | - | [  password](## "management_security.password") | Dictionary | | | | | - | [    minimum_length](## "management_security.password.minimum_length") | Integer | | | Min: 1
Max: 32 | | - | [    encryption_key_common](## "management_security.password.encryption_key_common") | Boolean | | | | | - | [    encryption_reversible](## "management_security.password.encryption_reversible") | String | | | | | - | [  ssl_profiles](## "management_security.ssl_profiles") | List, items: Dictionary | | | | | - | [    - name](## "management_security.ssl_profiles.[].name") | String | | | | | - | [      tls_versions](## "management_security.ssl_profiles.[].tls_versions") | String | | | | List of allowed TLS versions as string
Examples:
- "1.0"
- "1.0 1.1"
| - | [      cipher_list](## "management_security.ssl_profiles.[].cipher_list") | String | | | | cipher_list syntax follows the openssl cipher strings format.
Colon (:) separated list of allowed ciphers as a string
| - | [      trust_certificate](## "management_security.ssl_profiles.[].trust_certificate") | Dictionary | | | | | - | [        certificates](## "management_security.ssl_profiles.[].trust_certificate.certificates") | List, items: String | | | | List of trust certificate names
Examples:
- test1.crt
- test2.crt
| - | [          - <str>](## "management_security.ssl_profiles.[].trust_certificate.certificates.[].<str>") | String | | | | | - | [        requirement](## "management_security.ssl_profiles.[].trust_certificate.requirement") | Dictionary | | | | | - | [          basic_constraint_ca](## "management_security.ssl_profiles.[].trust_certificate.requirement.basic_constraint_ca") | Boolean | | | | | - | [          hostname_fqdn](## "management_security.ssl_profiles.[].trust_certificate.requirement.hostname_fqdn") | Boolean | | | | Enforce hostname to be FQDN without wildcard.
| - | [        policy_expiry_date_ignore](## "management_security.ssl_profiles.[].trust_certificate.policy_expiry_date_ignore") | Boolean | | | | | - | [        system](## "management_security.ssl_profiles.[].trust_certificate.system") | Boolean | | | | Use system-supplied trust certificates.
| - | [      chain_certificate](## "management_security.ssl_profiles.[].chain_certificate") | Dictionary | | | | | - | [        certificates](## "management_security.ssl_profiles.[].chain_certificate.certificates") | List, items: String | | | | List of chain certificate names
Examples:
- chain1.crt
- chain2.crt
| - | [          - <str>](## "management_security.ssl_profiles.[].chain_certificate.certificates.[].<str>") | String | | | | | - | [        requirement](## "management_security.ssl_profiles.[].chain_certificate.requirement") | Dictionary | | | | | - | [          basic_constraint_ca](## "management_security.ssl_profiles.[].chain_certificate.requirement.basic_constraint_ca") | Boolean | | | | | - | [          include_root_ca](## "management_security.ssl_profiles.[].chain_certificate.requirement.include_root_ca") | Boolean | | | | | - | [      certificate](## "management_security.ssl_profiles.[].certificate") | Dictionary | | | | | - | [        file](## "management_security.ssl_profiles.[].certificate.file") | String | | | | | - | [        key](## "management_security.ssl_profiles.[].certificate.key") | String | | | | | - -=== "YAML" - - ```yaml - management_security: - entropy_source: - password: - minimum_length: - encryption_key_common: - encryption_reversible: - ssl_profiles: - - name: - tls_versions: - cipher_list: - trust_certificate: - certificates: - - - requirement: - basic_constraint_ca: - hostname_fqdn: - policy_expiry_date_ignore: - system: - chain_certificate: - certificates: - - - requirement: - basic_constraint_ca: - include_root_ca: - certificate: - file: - key: - ``` - -## Management SSH - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_ssh](## "management_ssh") | Dictionary | | | | | - | [  access_groups](## "management_ssh.access_groups") | List, items: Dictionary | | | | | - | [    - name](## "management_ssh.access_groups.[].name") | String | | | | Standard ACL Name | - | [      vrf](## "management_ssh.access_groups.[].vrf") | String | | | | VRF Name | - | [  ipv6_access_groups](## "management_ssh.ipv6_access_groups") | List, items: Dictionary | | | | | - | [    - name](## "management_ssh.ipv6_access_groups.[].name") | String | | | | Standard ACL Name | - | [      vrf](## "management_ssh.ipv6_access_groups.[].vrf") | String | | | | VRF Name | - | [  idle_timeout](## "management_ssh.idle_timeout") | Integer | | | Min: 0
Max: 86400 | Idle timeout in minutes | - | [  cipher](## "management_ssh.cipher") | List, items: String | | | | Cryptographic ciphers for SSH to use | - | [    - <str>](## "management_ssh.cipher.[].<str>") | String | | | | | - | [  key_exchange](## "management_ssh.key_exchange") | List, items: String | | | | Cryptographic key exchange methods for SSH to use | - | [    - <str>](## "management_ssh.key_exchange.[].<str>") | String | | | | | - | [  mac](## "management_ssh.mac") | List, items: String | | | | Cryptographic MAC algorithms for SSH to use | - | [    - <str>](## "management_ssh.mac.[].<str>") | String | | | | | - | [  hostkey](## "management_ssh.hostkey") | Dictionary | | | | | - | [    server](## "management_ssh.hostkey.server") | List, items: String | | | | SSH host key settings | - | [      - <str>](## "management_ssh.hostkey.server.[].<str>") | String | | | | | - | [  enable](## "management_ssh.enable") | Boolean | | | | Enable SSH daemon | - | [  connection](## "management_ssh.connection") | Dictionary | | | | | - | [    limit](## "management_ssh.connection.limit") | Integer | | | Min: 1
Max: 100 | Maximum total number of SSH sessions to device | - | [    per_host](## "management_ssh.connection.per_host") | Integer | | | Min: 1
Max: 20 | Maximum number of SSH sessions to device from a single host | - | [  vrfs](## "management_ssh.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "management_ssh.vrfs.[].name") | String | Required, Unique | | | VRF Name | - | [      enable](## "management_ssh.vrfs.[].enable") | Boolean | | | | Enable SSH in VRF | - | [  log_level](## "management_ssh.log_level") | String | | | | SSH daemon log level | - -=== "YAML" - - ```yaml - management_ssh: - access_groups: - - name: - vrf: - ipv6_access_groups: - - name: - vrf: - idle_timeout: - cipher: - - - key_exchange: - - - mac: - - - hostkey: - server: - - - enable: - connection: - limit: - per_host: - vrfs: - - name: - enable: - log_level: - ``` - -## Management Tech Support - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [management_tech_support](## "management_tech_support") | Dictionary | | | | | - | [  policy_show_tech_support](## "management_tech_support.policy_show_tech_support") | Dictionary | | | | | - | [    exclude_commands](## "management_tech_support.policy_show_tech_support.exclude_commands") | List, items: Dictionary | | | | | - | [      - command](## "management_tech_support.policy_show_tech_support.exclude_commands.[].command") | String | | | | Command to exclude from tech-support | - | [        type](## "management_tech_support.policy_show_tech_support.exclude_commands.[].type") | String | | text | Valid Values:
- text
- json | The supported values for type are platform dependent. | - | [    include_commands](## "management_tech_support.policy_show_tech_support.include_commands") | List, items: Dictionary | | | | | - | [      - command](## "management_tech_support.policy_show_tech_support.include_commands.[].command") | String | | | | Command to include in tech-support | - -=== "YAML" - - ```yaml - management_tech_support: - policy_show_tech_support: - exclude_commands: - - command: - type: - include_commands: - - command: - ``` - -## Match Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [match_list_input](## "match_list_input") | Dictionary | | | | | - | [  string](## "match_list_input.string") | List, items: Dictionary | | | | | - | [    - name](## "match_list_input.string.[].name") | String | Required, Unique | | | Match-list Name | - | [      sequence_numbers](## "match_list_input.string.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [        - sequence](## "match_list_input.string.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [          match_regex](## "match_list_input.string.[].sequence_numbers.[].match_regex") | String | Required | | | Regular Expression | - -=== "YAML" - - ```yaml - match_list_input: - string: - - name: - sequence_numbers: - - sequence: - match_regex: - ``` - -## MCS Client - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mcs_client](## "mcs_client") | Dictionary | | | | | - | [  shutdown](## "mcs_client.shutdown") | Boolean | | | | | - | [  cvx_secondary](## "mcs_client.cvx_secondary") | Dictionary | | | | | - | [    name](## "mcs_client.cvx_secondary.name") | String | | | | | - | [    shutdown](## "mcs_client.cvx_secondary.shutdown") | Boolean | | | | | - | [    server_hosts](## "mcs_client.cvx_secondary.server_hosts") | List, items: String | | | | | - | [      - <str>](## "mcs_client.cvx_secondary.server_hosts.[].<str>") | String | | | | IP or hostname | - -=== "YAML" - - ```yaml - mcs_client: - shutdown: - cvx_secondary: - name: - shutdown: - server_hosts: - - - ``` - -## Multi-Chassis Link Aggregation (MLAG) Configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mlag_configuration](## "mlag_configuration") | Dictionary | | | | | - | [  domain_id](## "mlag_configuration.domain_id") | String | | | | | - | [  heartbeat_interval](## "mlag_configuration.heartbeat_interval") | Integer | | | | Heartbeat interval in milliseconds | - | [  local_interface](## "mlag_configuration.local_interface") | String | | | | Local Interface Name | - | [  peer_address](## "mlag_configuration.peer_address") | String | | | | IPv4 Address | - | [  peer_address_heartbeat](## "mlag_configuration.peer_address_heartbeat") | Dictionary | | | | | - | [    peer_ip](## "mlag_configuration.peer_address_heartbeat.peer_ip") | String | | | | IPv4 Address | - | [    vrf](## "mlag_configuration.peer_address_heartbeat.vrf") | String | | | | VRF Name | - | [  dual_primary_detection_delay](## "mlag_configuration.dual_primary_detection_delay") | Integer | | | Min: 0
Max: 86400 | Delay in seconds | - | [  dual_primary_recovery_delay_mlag](## "mlag_configuration.dual_primary_recovery_delay_mlag") | Integer | | | Min: 0
Max: 86400 | Delay in seconds | - | [  dual_primary_recovery_delay_non_mlag](## "mlag_configuration.dual_primary_recovery_delay_non_mlag") | Integer | | | Min: 0
Max: 86400 | Delay in seconds | - | [  peer_link](## "mlag_configuration.peer_link") | String | | | | Port-Channel interface name | - | [  reload_delay_mlag](## "mlag_configuration.reload_delay_mlag") | String | | | | Delay in seconds <0-86400> or 'infinity' | - | [  reload_delay_non_mlag](## "mlag_configuration.reload_delay_non_mlag") | String | | | | Delay in seconds <0-86400> or 'infinity' | - -=== "YAML" - - ```yaml - mlag_configuration: - domain_id: - heartbeat_interval: - local_interface: - peer_address: - peer_address_heartbeat: - peer_ip: - vrf: - dual_primary_detection_delay: - dual_primary_recovery_delay_mlag: - dual_primary_recovery_delay_non_mlag: - peer_link: - reload_delay_mlag: - reload_delay_non_mlag: - ``` - -## Monitor Connectivity - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [monitor_connectivity](## "monitor_connectivity") | Dictionary | | | | | - | [  shutdown](## "monitor_connectivity.shutdown") | Boolean | | | | | - | [  interval](## "monitor_connectivity.interval") | Integer | | | | | - | [  interface_sets](## "monitor_connectivity.interface_sets") | List, items: Dictionary | | | | | - | [    - name](## "monitor_connectivity.interface_sets.[].name") | String | | | | | - | [      interfaces](## "monitor_connectivity.interface_sets.[].interfaces") | String | | | | Interface range(s) should be of same type, Ethernet, Loopback, Management etc.
Multiple interface ranges can be specified separated by ","
| - | [  local_interfaces](## "monitor_connectivity.local_interfaces") | String | | | | | - | [  hosts](## "monitor_connectivity.hosts") | List, items: Dictionary | | | | | - | [    - name](## "monitor_connectivity.hosts.[].name") | String | | | | Host Name | - | [      description](## "monitor_connectivity.hosts.[].description") | String | | | | | - | [      ip](## "monitor_connectivity.hosts.[].ip") | String | | | | | - | [      local_interfaces](## "monitor_connectivity.hosts.[].local_interfaces") | String | | | | | - | [      url](## "monitor_connectivity.hosts.[].url") | String | | | | | - | [  vrfs](## "monitor_connectivity.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "monitor_connectivity.vrfs.[].name") | String | | | | VRF Name | - | [      description](## "monitor_connectivity.vrfs.[].description") | String | | | | | - | [      interface_sets](## "monitor_connectivity.vrfs.[].interface_sets") | List, items: Dictionary | | | | | - | [        - name](## "monitor_connectivity.vrfs.[].interface_sets.[].name") | String | | | | | - | [          interfaces](## "monitor_connectivity.vrfs.[].interface_sets.[].interfaces") | String | | | | | - | [      local_interfaces](## "monitor_connectivity.vrfs.[].local_interfaces") | String | | | | | - | [      hosts](## "monitor_connectivity.vrfs.[].hosts") | List, items: Dictionary | | | | | - | [        - name](## "monitor_connectivity.vrfs.[].hosts.[].name") | String | | | | Host name | - | [          description](## "monitor_connectivity.vrfs.[].hosts.[].description") | String | | | | | - | [          ip](## "monitor_connectivity.vrfs.[].hosts.[].ip") | String | | | | | - | [          local_interfaces](## "monitor_connectivity.vrfs.[].hosts.[].local_interfaces") | String | | | | | - | [          url](## "monitor_connectivity.vrfs.[].hosts.[].url") | String | | | | | - -=== "YAML" - - ```yaml - monitor_connectivity: - shutdown: - interval: - interface_sets: - - name: - interfaces: - local_interfaces: - hosts: - - name: - description: - ip: - local_interfaces: - url: - vrfs: - - name: - description: - interface_sets: - - name: - interfaces: - local_interfaces: - hosts: - - name: - description: - ip: - local_interfaces: - url: - ``` - -## Monitor Sessions - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [monitor_sessions](## "monitor_sessions") | List, items: Dictionary | | | | | - | [  - name](## "monitor_sessions.[].name") | String | Required | | | Session Name | - | [    sources](## "monitor_sessions.[].sources") | List, items: Dictionary | | | | | - | [      - name](## "monitor_sessions.[].sources.[].name") | String | | | | Interface name, range or comma separated list | - | [        direction](## "monitor_sessions.[].sources.[].direction") | String | | | Valid Values:
- rx
- tx
- both | | - | [        access_group](## "monitor_sessions.[].sources.[].access_group") | Dictionary | | | | | - | [          type](## "monitor_sessions.[].sources.[].access_group.type") | String | | | Valid Values:
- ip
- ipv6
- mac | | - | [          name](## "monitor_sessions.[].sources.[].access_group.name") | String | | | | ACL Name | - | [          priority](## "monitor_sessions.[].sources.[].access_group.priority") | Integer | | | | | - | [    destinations](## "monitor_sessions.[].destinations") | List, items: String | | | | | - | [      - <str>](## "monitor_sessions.[].destinations.[].<str>") | String | | | | 'cpu' or interface name, range or comma separated list | - | [    encapsulation_gre_metadata_tx](## "monitor_sessions.[].encapsulation_gre_metadata_tx") | Boolean | | | | | - | [    header_remove_size](## "monitor_sessions.[].header_remove_size") | Integer | | | | Number of bytes to remove from header | - | [    access_group](## "monitor_sessions.[].access_group") | Dictionary | | | | | - | [      type](## "monitor_sessions.[].access_group.type") | String | | | Valid Values:
- ip
- ipv6
- mac | | - | [      name](## "monitor_sessions.[].access_group.name") | String | | | | ACL Name | - | [    rate_limit_per_ingress_chip](## "monitor_sessions.[].rate_limit_per_ingress_chip") | String | | | | Ratelimit and unit as string.
Examples:
"100000 bps"
"100 kbps"
"10 mbps"
| - | [    rate_limit_per_egress_chip](## "monitor_sessions.[].rate_limit_per_egress_chip") | String | | | | Ratelimit and unit as string.
Examples:
"100000 bps"
"100 kbps"
"10 mbps"
| - | [    sample](## "monitor_sessions.[].sample") | Integer | | | | | - | [    truncate](## "monitor_sessions.[].truncate") | Dictionary | | | | | - | [      enabled](## "monitor_sessions.[].truncate.enabled") | Boolean | | | | | - | [      size](## "monitor_sessions.[].truncate.size") | Integer | | | | Size in bytes | - -=== "YAML" - - ```yaml - monitor_sessions: - - name: - sources: - - name: - direction: - access_group: - type: - name: - priority: - destinations: - - - encapsulation_gre_metadata_tx: - header_remove_size: - access_group: - type: - name: - rate_limit_per_ingress_chip: - rate_limit_per_egress_chip: - sample: - truncate: - enabled: - size: - ``` - -## MPLS - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [mpls](## "mpls") | Dictionary | | | | | - | [  ip](## "mpls.ip") | Boolean | | | | | - | [  ldp](## "mpls.ldp") | Dictionary | | | | | - | [    interface_disabled_default](## "mpls.ldp.interface_disabled_default") | Boolean | | | | | - | [    router_id](## "mpls.ldp.router_id") | String | | | | | - | [    shutdown](## "mpls.ldp.shutdown") | Boolean | | | | | - | [    transport_address_interface](## "mpls.ldp.transport_address_interface") | String | | | | Interface Name | - -=== "YAML" - - ```yaml - mpls: - ip: - ldp: - interface_disabled_default: - router_id: - shutdown: - transport_address_interface: - ``` - -## Name Server - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [name_server](## "name_server") deprecated | Dictionary | | | | This key is deprecated. Support will be removed in AVD version v5.0.0. Use ip_name_servers instead. | - | [  source](## "name_server.source") | Dictionary | | | | | - | [    vrf](## "name_server.source.vrf") | String | | | | VRF Name | - | [  nodes](## "name_server.nodes") | List, items: String | | | | | - | [    - <str>](## "name_server.nodes.[].<str>") | String | | | | | - -=== "YAML" - - ```yaml - name_server: - source: - vrf: - nodes: - - - ``` - -## NTP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ntp](## "ntp") | Dictionary | | | | | - | [  local_interface](## "ntp.local_interface") | Dictionary | | | | | - | [    name](## "ntp.local_interface.name") | String | | | | Source interface | - | [    vrf](## "ntp.local_interface.vrf") | String | | | | VRF name | - | [  servers](## "ntp.servers") | List, items: Dictionary | | | | | - | [    - name](## "ntp.servers.[].name") | String | | | | IP or hostname e.g., 2.2.2.55, ie.pool.ntp.org | - | [      burst](## "ntp.servers.[].burst") | Boolean | | | | | - | [      iburst](## "ntp.servers.[].iburst") | Boolean | | | | | - | [      key](## "ntp.servers.[].key") | Integer | | | Min: 1
Max: 65535 | | - | [      local_interface](## "ntp.servers.[].local_interface") | String | | | | Source interface | - | [      maxpoll](## "ntp.servers.[].maxpoll") | Integer | | | Min: 3
Max: 17 | Value of maxpoll between 3 - 17 (Logarithmic) | - | [      minpoll](## "ntp.servers.[].minpoll") | Integer | | | Min: 3
Max: 17 | Value of minpoll between 3 - 17 (Logarithmic) | - | [      preferred](## "ntp.servers.[].preferred") | Boolean | | | | | - | [      version](## "ntp.servers.[].version") | Integer | | | Min: 1
Max: 4 | | - | [      vrf](## "ntp.servers.[].vrf") | String | | | | VRF name | - | [  authenticate](## "ntp.authenticate") | Boolean | | | | | - | [  authenticate_servers_only](## "ntp.authenticate_servers_only") | Boolean | | | | | - | [  authentication_keys](## "ntp.authentication_keys") | List, items: Dictionary | | | | | - | [    - id](## "ntp.authentication_keys.[].id") | Integer | Required, Unique | | Min: 1
Max: 65534 | Key identifier | - | [      hash_algorithm](## "ntp.authentication_keys.[].hash_algorithm") | String | | | Valid Values:
- md5
- sha1 | | - | [      key](## "ntp.authentication_keys.[].key") | String | | | | Obfuscated key | - | [      key_type](## "ntp.authentication_keys.[].key_type") | String | | | Valid Values:
- 0
- 7
- 8a | | - | [  trusted_keys](## "ntp.trusted_keys") | String | | | | List of trusted-keys as string ex. 10-12,15 | - -=== "YAML" - - ```yaml - ntp: - local_interface: - name: - vrf: - servers: - - name: - burst: - iburst: - key: - local_interface: - maxpoll: - minpoll: - preferred: - version: - vrf: - authenticate: - authenticate_servers_only: - authentication_keys: - - id: - hash_algorithm: - key: - key_type: - trusted_keys: - ``` - -## Patch Panel - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [patch_panel](## "patch_panel") | Dictionary | | | | | - | [  patches](## "patch_panel.patches") | List, items: Dictionary | | | | | - | [    - name](## "patch_panel.patches.[].name") | String | Required, Unique | | | | - | [      enabled](## "patch_panel.patches.[].enabled") | Boolean | | | | | - | [      connectors](## "patch_panel.patches.[].connectors") | List, items: Dictionary | | | Min Length: 2
Max Length: 2 | Must have exactly two connectors to a patch of which at least one must be of type "interface" | - | [        - id](## "patch_panel.patches.[].connectors.[].id") | String | Required, Unique | | | | - | [          type](## "patch_panel.patches.[].connectors.[].type") | String | Required | | Valid Values:
- interface
- pseudowire | | - | [          endpoint](## "patch_panel.patches.[].connectors.[].endpoint") | String | Required | | | String with relevant endpoint depending on type.
Examples:
- "Ethernet1"
- "Ethernet1 dot1q vlan 123"
- "bgp vpws TENANT_A pseudowire VPWS_PW_1"
- "ldp LDP_PW_1"
| - -=== "YAML" - - ```yaml - patch_panel: - patches: - - name: - enabled: - connectors: - - id: - type: - endpoint: - ``` - -## Peer Filters - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [peer_filters](## "peer_filters") | List, items: Dictionary | | | | | - | [  - name](## "peer_filters.[].name") | String | Required, Unique | | | Peer-filter Name | - | [    sequence_numbers](## "peer_filters.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "peer_filters.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        match](## "peer_filters.[].sequence_numbers.[].match") | String | Required | | | Match as string
Example: "as-range 1-100 result accept" | - -=== "YAML" - - ```yaml - peer_filters: - - name: - sequence_numbers: - - sequence: - match: - ``` - -## Platform - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [platform](## "platform") | Dictionary | | | | | - | [  trident](## "platform.trident") | Dictionary | | | | | - | [    forwarding_table_partition](## "platform.trident.forwarding_table_partition") | String | | | | | - | [  sand](## "platform.sand") | Dictionary | | | | Most of the platform sand options are hardware dependant and optional | - | [    qos_maps](## "platform.sand.qos_maps") | List, items: Dictionary | | | | | - | [      - traffic_class](## "platform.sand.qos_maps.[].traffic_class") | Integer | | | Min: 0
Max: 7 | | - | [        to_network_qos](## "platform.sand.qos_maps.[].to_network_qos") | Integer | | | Min: 0
Max: 63 | | - | [    lag](## "platform.sand.lag") | Dictionary | | | | | - | [      hardware_only](## "platform.sand.lag.hardware_only") | Boolean | | | | | - | [      mode](## "platform.sand.lag.mode") | String | | | | | - | [    forwarding_mode](## "platform.sand.forwarding_mode") | String | | | | | - | [    multicast_replication](## "platform.sand.multicast_replication") | Dictionary | | | | | - | [      default](## "platform.sand.multicast_replication.default") | String | | | Valid Values:
- ingress
- egress | | - -=== "YAML" - - ```yaml - platform: - trident: - forwarding_table_partition: - sand: - qos_maps: - - traffic_class: - to_network_qos: - lag: - hardware_only: - mode: - forwarding_mode: - multicast_replication: - default: - ``` - -## PoE - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [poe](## "poe") | Dictionary | | | | | - | [  reboot](## "poe.reboot") | Dictionary | | | | Set the global PoE power behavior for PoE ports when the system is rebooted. | - | [    action](## "poe.reboot.action") | String | | | Valid Values:
- power-off
- maintain | PoE action for interface. By default in EOS, reboot action is set to power-off. | - | [  interface_shutdown](## "poe.interface_shutdown") | Dictionary | | | | Set the global PoE power behavior for PoE ports when ports are admin down | - | [    action](## "poe.interface_shutdown.action") | String | | | Valid Values:
- power-off
- maintain | PoE action for interface. By default in EOS, interface shutdown action is set to maintain. | - -=== "YAML" - - ```yaml - poe: - reboot: - action: - interface_shutdown: - action: - ``` - -## Policy Maps - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [policy_maps](## "policy_maps") | Dictionary | | | | | - | [  pbr](## "policy_maps.pbr") | List, items: Dictionary | | | | PBR Policy-Maps | - | [    - name](## "policy_maps.pbr.[].name") | String | Required, Unique | | | Policy-Map Name | - | [      classes](## "policy_maps.pbr.[].classes") | List, items: Dictionary | | | | | - | [        - name](## "policy_maps.pbr.[].classes.[].name") | String | Required, Unique | | | Class Name | - | [          index](## "policy_maps.pbr.[].classes.[].index") | Integer | | | | | - | [          drop](## "policy_maps.pbr.[].classes.[].drop") | Boolean | | | | 'drop' and 'set' are mutually exclusive | - | [          set](## "policy_maps.pbr.[].classes.[].set") | Dictionary | | | | Set Nexthop
'drop' and 'set' are mutually exclusive
| - | [            nexthop](## "policy_maps.pbr.[].classes.[].set.nexthop") | Dictionary | | | | | - | [              ip_address](## "policy_maps.pbr.[].classes.[].set.nexthop.ip_address") | String | | | | IPv4 or IPv6 Address | - | [              recursive](## "policy_maps.pbr.[].classes.[].set.nexthop.recursive") | Boolean | | | | | - | [  qos](## "policy_maps.qos") | List, items: Dictionary | | | | QOS Policy-Maps | - | [    - name](## "policy_maps.qos.[].name") | String | Required, Unique | | | Policy-Map Name | - | [      classes](## "policy_maps.qos.[].classes") | List, items: Dictionary | | | | | - | [        - name](## "policy_maps.qos.[].classes.[].name") | String | Required, Unique | | | Class Name | - | [          set](## "policy_maps.qos.[].classes.[].set") | Dictionary | | | | | - | [            cos](## "policy_maps.qos.[].classes.[].set.cos") | Integer | | | | | - | [            dscp](## "policy_maps.qos.[].classes.[].set.dscp") | String | | | | | - | [            traffic_class](## "policy_maps.qos.[].classes.[].set.traffic_class") | Integer | | | | | - | [            drop_precedence](## "policy_maps.qos.[].classes.[].set.drop_precedence") | Integer | | | | | - -=== "YAML" - - ```yaml - policy_maps: - pbr: - - name: - classes: - - name: - index: - drop: - set: - nexthop: - ip_address: - recursive: - qos: - - name: - classes: - - name: - set: - cos: - dscp: - traffic_class: - drop_precedence: - ``` - -## Port Channel Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [port_channel_interfaces](## "port_channel_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "port_channel_interfaces.[].name") | String | Required, Unique | | | | - | [    description](## "port_channel_interfaces.[].description") | String | | | | | - | [    logging](## "port_channel_interfaces.[].logging") | Dictionary | | | | | - | [      event](## "port_channel_interfaces.[].logging.event") | Dictionary | | | | | - | [        link_status](## "port_channel_interfaces.[].logging.event.link_status") | Boolean | | | | | - | [    shutdown](## "port_channel_interfaces.[].shutdown") | Boolean | | | | | - | [    l2_mtu](## "port_channel_interfaces.[].l2_mtu") | Integer | | | | "l2_mtu" should only be defined for platforms supporting the "l2 mtu" CLI
| - | [    vlans](## "port_channel_interfaces.[].vlans") | String | | | | List of switchport vlans as string
For a trunk port this would be a range like "1-200,300"
For an access port this would be a single vlan "123"
| - | [    snmp_trap_link_change](## "port_channel_interfaces.[].snmp_trap_link_change") | Boolean | | | | | - | [    type](## "port_channel_interfaces.[].type") | String | | | Valid Values:
- routed
- switched
- l3dot1q
- l2dot1q | l3dot1q and l2dot1q are used for sub-interfaces. The parent interface should be defined as routed.
Interface will not be listed in device documentation, unless "type" is set.
| - | [    encapsulation_dot1q_vlan](## "port_channel_interfaces.[].encapsulation_dot1q_vlan") | Integer | | | | VLAN tag to configure on sub-interface | - | [    vrf](## "port_channel_interfaces.[].vrf") | String | | | | VRF name | - | [    encapsulation_vlan](## "port_channel_interfaces.[].encapsulation_vlan") | Dictionary | | | | | - | [      client](## "port_channel_interfaces.[].encapsulation_vlan.client") | Dictionary | | | | | - | [        dot1q](## "port_channel_interfaces.[].encapsulation_vlan.client.dot1q") | Dictionary | | | | | - | [          vlan](## "port_channel_interfaces.[].encapsulation_vlan.client.dot1q.vlan") | Integer | | | | Client VLAN ID | - | [          outer](## "port_channel_interfaces.[].encapsulation_vlan.client.dot1q.outer") | Integer | | | | Client Outer VLAN ID | - | [          inner](## "port_channel_interfaces.[].encapsulation_vlan.client.dot1q.inner") | Integer | | | | Client Inner VLAN ID | - | [        unmatched](## "port_channel_interfaces.[].encapsulation_vlan.client.unmatched") | Boolean | | | | | - | [      network](## "port_channel_interfaces.[].encapsulation_vlan.network") | Dictionary | | | | Network encapsulation are all optional, and skipped if using client unmatched | - | [        dot1q](## "port_channel_interfaces.[].encapsulation_vlan.network.dot1q") | Dictionary | | | | | - | [          vlan](## "port_channel_interfaces.[].encapsulation_vlan.network.dot1q.vlan") | Integer | | | | Network VLAN ID | - | [          outer](## "port_channel_interfaces.[].encapsulation_vlan.network.dot1q.outer") | Integer | | | | Network Outer VLAN ID | - | [          inner](## "port_channel_interfaces.[].encapsulation_vlan.network.dot1q.inner") | Integer | | | | Network Inner VLAN ID | - | [        client](## "port_channel_interfaces.[].encapsulation_vlan.network.client") | Boolean | | | | | - | [    vlan_id](## "port_channel_interfaces.[].vlan_id") | Integer | | | Min: 1
Max: 4094 | | - | [    mode](## "port_channel_interfaces.[].mode") | String | | | Valid Values:
- access
- dot1q-tunnel
- trunk
- trunk phone | | - | [    native_vlan](## "port_channel_interfaces.[].native_vlan") | Integer | | | | If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence | - | [    native_vlan_tag](## "port_channel_interfaces.[].native_vlan_tag") | Boolean | | False | | If setting both native_vlan and native_vlan_tag, native_vlan_tag takes precedence | - | [    link_tracking_groups](## "port_channel_interfaces.[].link_tracking_groups") | List, items: Dictionary | | | | | - | [      - name](## "port_channel_interfaces.[].link_tracking_groups.[].name") | String | Required, Unique | | | Group name | - | [        direction](## "port_channel_interfaces.[].link_tracking_groups.[].direction") | String | | | Valid Values:
- upstream
- downstream | | - | [    phone](## "port_channel_interfaces.[].phone") | Dictionary | | | | | - | [      trunk](## "port_channel_interfaces.[].phone.trunk") | String | | | Valid Values:
- tagged
- untagged | | - | [      vlan](## "port_channel_interfaces.[].phone.vlan") | Integer | | | Min: 1
Max: 4094 | | - | [    l2_protocol](## "port_channel_interfaces.[].l2_protocol") | Dictionary | | | | | - | [      encapsulation_dot1q_vlan](## "port_channel_interfaces.[].l2_protocol.encapsulation_dot1q_vlan") | Integer | | | | Vlan tag to configure on sub-interface | - | [      forwarding_profile](## "port_channel_interfaces.[].l2_protocol.forwarding_profile") | String | | | | L2 protocol forwarding profile | - | [    mtu](## "port_channel_interfaces.[].mtu") | Integer | | | | | - | [    mlag](## "port_channel_interfaces.[].mlag") | Integer | | | Min: 1
Max: 2000 | MLAG ID | - | [    trunk_groups](## "port_channel_interfaces.[].trunk_groups") | List, items: String | | | | | - | [      - <str>](## "port_channel_interfaces.[].trunk_groups.[].<str>") | String | | | | | - | [    lacp_fallback_timeout](## "port_channel_interfaces.[].lacp_fallback_timeout") | Integer | | 90 | Min: 0
Max: 300 | Timeout in seconds | - | [    lacp_fallback_mode](## "port_channel_interfaces.[].lacp_fallback_mode") | String | | | Valid Values:
- individual
- static | | - | [    qos](## "port_channel_interfaces.[].qos") | Dictionary | | | | | - | [      trust](## "port_channel_interfaces.[].qos.trust") | String | | | Valid Values:
- dscp
- cos
- disabled | | - | [      dscp](## "port_channel_interfaces.[].qos.dscp") | Integer | | | | DSCP value | - | [      cos](## "port_channel_interfaces.[].qos.cos") | Integer | | | | COS value | - | [    bfd](## "port_channel_interfaces.[].bfd") | Dictionary | | | | | - | [      echo](## "port_channel_interfaces.[].bfd.echo") | Boolean | | | | | - | [      interval](## "port_channel_interfaces.[].bfd.interval") | Integer | | | | Interval in milliseconds | - | [      min_rx](## "port_channel_interfaces.[].bfd.min_rx") | Integer | | | | Rate in milliseconds | - | [      multiplier](## "port_channel_interfaces.[].bfd.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [    service_policy](## "port_channel_interfaces.[].service_policy") | Dictionary | | | | | - | [      pbr](## "port_channel_interfaces.[].service_policy.pbr") | Dictionary | | | | | - | [        input](## "port_channel_interfaces.[].service_policy.pbr.input") | String | | | | Policy Based Routing Policy-map name | - | [      qos](## "port_channel_interfaces.[].service_policy.qos") | Dictionary | | | | | - | [        input](## "port_channel_interfaces.[].service_policy.qos.input") | String | Required | | | Quality of Service Policy-map name | - | [    mpls](## "port_channel_interfaces.[].mpls") | Dictionary | | | | | - | [      ip](## "port_channel_interfaces.[].mpls.ip") | Boolean | | | | | - | [      ldp](## "port_channel_interfaces.[].mpls.ldp") | Dictionary | | | | | - | [        interface](## "port_channel_interfaces.[].mpls.ldp.interface") | Boolean | | | | | - | [        igp_sync](## "port_channel_interfaces.[].mpls.ldp.igp_sync") | Boolean | | | | | - | [    trunk_private_vlan_secondary](## "port_channel_interfaces.[].trunk_private_vlan_secondary") | Boolean | | | | | - | [    pvlan_mapping](## "port_channel_interfaces.[].pvlan_mapping") | String | | | | List of vlans as string | - | [    vlan_translations](## "port_channel_interfaces.[].vlan_translations") | List, items: Dictionary | | | | | - | [      - from](## "port_channel_interfaces.[].vlan_translations.[].from") | String | | | | List of vlans as string (only one vlan if direction is "both") | - | [        to](## "port_channel_interfaces.[].vlan_translations.[].to") | Integer | | | | VLAN ID | - | [        direction](## "port_channel_interfaces.[].vlan_translations.[].direction") | String | | both | Valid Values:
- in
- out
- both | | - | [    shape](## "port_channel_interfaces.[].shape") | Dictionary | | | | | - | [      rate](## "port_channel_interfaces.[].shape.rate") | String | | | | Rate in kbps, pps or percent
Supported options are platform dependent
Examples:
- "5000 kbps"
- "1000 pps"
- "20 percent"
| - | [    storm_control](## "port_channel_interfaces.[].storm_control") | Dictionary | | | | | - | [      all](## "port_channel_interfaces.[].storm_control.all") | Dictionary | | | | | - | [        level](## "port_channel_interfaces.[].storm_control.all.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "port_channel_interfaces.[].storm_control.all.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      broadcast](## "port_channel_interfaces.[].storm_control.broadcast") | Dictionary | | | | | - | [        level](## "port_channel_interfaces.[].storm_control.broadcast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "port_channel_interfaces.[].storm_control.broadcast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      multicast](## "port_channel_interfaces.[].storm_control.multicast") | Dictionary | | | | | - | [        level](## "port_channel_interfaces.[].storm_control.multicast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "port_channel_interfaces.[].storm_control.multicast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [      unknown_unicast](## "port_channel_interfaces.[].storm_control.unknown_unicast") | Dictionary | | | | | - | [        level](## "port_channel_interfaces.[].storm_control.unknown_unicast.level") | String | | | | Configure maximum storm-control level | - | [        unit](## "port_channel_interfaces.[].storm_control.unknown_unicast.unit") | String | | percent | Valid Values:
- percent
- pps | Optional field and is hardware dependant | - | [    ip_proxy_arp](## "port_channel_interfaces.[].ip_proxy_arp") | Boolean | | | | | - | [    isis_enable](## "port_channel_interfaces.[].isis_enable") | String | | | | ISIS instance | - | [    isis_passive](## "port_channel_interfaces.[].isis_passive") | Boolean | | | | | - | [    isis_metric](## "port_channel_interfaces.[].isis_metric") | Integer | | | | | - | [    isis_network_point_to_point](## "port_channel_interfaces.[].isis_network_point_to_point") | Boolean | | | | | - | [    isis_circuit_type](## "port_channel_interfaces.[].isis_circuit_type") | String | | | Valid Values:
- level-1-2
- level-1
- level-2 | | - | [    isis_hello_padding](## "port_channel_interfaces.[].isis_hello_padding") | Boolean | | | | | - | [    isis_authentication_mode](## "port_channel_interfaces.[].isis_authentication_mode") | String | | | Valid Values:
- text
- md5 | | - | [    isis_authentication_key](## "port_channel_interfaces.[].isis_authentication_key") | String | | | | Type-7 encrypted password | - | [    traffic_policy](## "port_channel_interfaces.[].traffic_policy") | Dictionary | | | | | - | [      input](## "port_channel_interfaces.[].traffic_policy.input") | String | | | | Ingress traffic policy | - | [      output](## "port_channel_interfaces.[].traffic_policy.output") | String | | | | Egress traffic policy | - | [    evpn_ethernet_segment](## "port_channel_interfaces.[].evpn_ethernet_segment") | Dictionary | | | | | - | [      identifier](## "port_channel_interfaces.[].evpn_ethernet_segment.identifier") | String | | | | EVPN Ethernet Segment Identifier (Type 1 format) | - | [      redundancy](## "port_channel_interfaces.[].evpn_ethernet_segment.redundancy") | String | | | Valid Values:
- all-active
- single-active | | - | [      designated_forwarder_election](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election") | Dictionary | | | | | - | [        algorithm](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.algorithm") | String | | | Valid Values:
- modulus
- preference | | - | [        preference_value](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.preference_value") | Integer | | | Min: 0
Max: 65535 | Preference_value is only used when "algorithm" is "preference" | - | [        dont_preempt](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.dont_preempt") | Boolean | | False | | Dont_preempt is only used when "algorithm" is "preference" | - | [        hold_time](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.hold_time") | Integer | | | | | - | [        subsequent_hold_time](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.subsequent_hold_time") | Integer | | | | | - | [        candidate_reachability_required](## "port_channel_interfaces.[].evpn_ethernet_segment.designated_forwarder_election.candidate_reachability_required") | Boolean | | | | | - | [      mpls](## "port_channel_interfaces.[].evpn_ethernet_segment.mpls") | Dictionary | | | | | - | [        shared_index](## "port_channel_interfaces.[].evpn_ethernet_segment.mpls.shared_index") | Integer | | | Min: 1
Max: 1024 | | - | [        tunnel_flood_filter_time](## "port_channel_interfaces.[].evpn_ethernet_segment.mpls.tunnel_flood_filter_time") | Integer | | | | | - | [      route_target](## "port_channel_interfaces.[].evpn_ethernet_segment.route_target") | String | | | | EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx | - | [    esi](## "port_channel_interfaces.[].esi") deprecated | String | | | | EVPN Ethernet Segment Identifier (Type 1 format)
If both "esi" and "evpn_ethernet_segment.identifier" are defined, the new variable takes precedence
This key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.identifier instead. | - | [    rt](## "port_channel_interfaces.[].rt") deprecated | String | | | | EVPN Route Target for ESI with format xx:xx:xx:xx:xx:xx
If both "rt" and "evpn_ethernet_segment.route_target" are defined, the new variable takes precedence
This key is deprecated. Support will be removed in AVD version 5.0.0. Use evpn_ethernet_segment.route_target instead. | - | [    lacp_id](## "port_channel_interfaces.[].lacp_id") | String | | | | LACP ID with format xxxx.xxxx.xxxx | - | [    spanning_tree_bpdufilter](## "port_channel_interfaces.[].spanning_tree_bpdufilter") | String | | | Valid Values:
- enabled
- disabled
- True
- False
- true
- false | | - | [    spanning_tree_bpduguard](## "port_channel_interfaces.[].spanning_tree_bpduguard") | String | | | Valid Values:
- enabled
- disabled
- True
- False
- true
- false | | - | [    spanning_tree_guard](## "port_channel_interfaces.[].spanning_tree_guard") | String | | | Valid Values:
- loop
- root
- disabled | | - | [    spanning_tree_portfast](## "port_channel_interfaces.[].spanning_tree_portfast") | String | | | Valid Values:
- edge
- network | | - | [    vmtracer](## "port_channel_interfaces.[].vmtracer") | Boolean | | | | | - | [    ptp](## "port_channel_interfaces.[].ptp") | Dictionary | | | | | - | [      enable](## "port_channel_interfaces.[].ptp.enable") | Boolean | | | | | - | [      announce](## "port_channel_interfaces.[].ptp.announce") | Dictionary | | | | | - | [        interval](## "port_channel_interfaces.[].ptp.announce.interval") | Integer | | | | | - | [        timeout](## "port_channel_interfaces.[].ptp.announce.timeout") | Integer | | | | | - | [      delay_req](## "port_channel_interfaces.[].ptp.delay_req") | Integer | | | | | - | [      delay_mechanism](## "port_channel_interfaces.[].ptp.delay_mechanism") | String | | | Valid Values:
- e2e
- p2p | | - | [      sync_message](## "port_channel_interfaces.[].ptp.sync_message") | Dictionary | | | | | - | [        interval](## "port_channel_interfaces.[].ptp.sync_message.interval") | Integer | | | | | - | [      role](## "port_channel_interfaces.[].ptp.role") | String | | | Valid Values:
- master
- dynamic | | - | [      vlan](## "port_channel_interfaces.[].ptp.vlan") | String | | | | VLAN can be 'all' or list of vlans as string | - | [      transport](## "port_channel_interfaces.[].ptp.transport") | String | | | Valid Values:
- ipv4
- ipv6
- layer2 | | - | [    ip_address](## "port_channel_interfaces.[].ip_address") | String | | | | IPv4 address/mask | - | [    ip_nat](## "port_channel_interfaces.[].ip_nat") | Dictionary | | | | | - | [      destination](## "port_channel_interfaces.[].ip_nat.destination") | Dictionary | | | | | - | [        dynamic](## "port_channel_interfaces.[].ip_nat.destination.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "port_channel_interfaces.[].ip_nat.destination.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "port_channel_interfaces.[].ip_nat.destination.dynamic.[].comment") | String | | | | | - | [            pool_name](## "port_channel_interfaces.[].ip_nat.destination.dynamic.[].pool_name") | String | Required | | | | - | [            priority](## "port_channel_interfaces.[].ip_nat.destination.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "port_channel_interfaces.[].ip_nat.destination.static") | List, items: Dictionary | | | | | - | [          - access_list](## "port_channel_interfaces.[].ip_nat.destination.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "port_channel_interfaces.[].ip_nat.destination.static.[].comment") | String | | | | | - | [            direction](## "port_channel_interfaces.[].ip_nat.destination.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "port_channel_interfaces.[].ip_nat.destination.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "port_channel_interfaces.[].ip_nat.destination.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "port_channel_interfaces.[].ip_nat.destination.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "port_channel_interfaces.[].ip_nat.destination.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "port_channel_interfaces.[].ip_nat.destination.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "port_channel_interfaces.[].ip_nat.destination.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "port_channel_interfaces.[].ip_nat.destination.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [      source](## "port_channel_interfaces.[].ip_nat.source") | Dictionary | | | | | - | [        dynamic](## "port_channel_interfaces.[].ip_nat.source.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "port_channel_interfaces.[].ip_nat.source.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "port_channel_interfaces.[].ip_nat.source.dynamic.[].comment") | String | | | | | - | [            nat_type](## "port_channel_interfaces.[].ip_nat.source.dynamic.[].nat_type") | String | Required | | Valid Values:
- overload
- pool
- pool-address-only
- pool-full-cone | | - | [            pool_name](## "port_channel_interfaces.[].ip_nat.source.dynamic.[].pool_name") | String | | | | required if 'nat_type' is pool, pool-address-only or pool-full-cone
ignored if 'nat_type' is overload
| - | [            priority](## "port_channel_interfaces.[].ip_nat.source.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "port_channel_interfaces.[].ip_nat.source.static") | List, items: Dictionary | | | | | - | [          - access_list](## "port_channel_interfaces.[].ip_nat.source.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "port_channel_interfaces.[].ip_nat.source.static.[].comment") | String | | | | | - | [            direction](## "port_channel_interfaces.[].ip_nat.source.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "port_channel_interfaces.[].ip_nat.source.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "port_channel_interfaces.[].ip_nat.source.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "port_channel_interfaces.[].ip_nat.source.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "port_channel_interfaces.[].ip_nat.source.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "port_channel_interfaces.[].ip_nat.source.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "port_channel_interfaces.[].ip_nat.source.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "port_channel_interfaces.[].ip_nat.source.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [    ipv6_enable](## "port_channel_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "port_channel_interfaces.[].ipv6_address") | String | | | | IPv6 address/mask | - | [    ipv6_address_link_local](## "port_channel_interfaces.[].ipv6_address_link_local") | String | | | | Link local IPv6 address/mask | - | [    ipv6_nd_ra_disabled](## "port_channel_interfaces.[].ipv6_nd_ra_disabled") | Boolean | | | | | - | [    ipv6_nd_managed_config_flag](## "port_channel_interfaces.[].ipv6_nd_managed_config_flag") | Boolean | | | | | - | [    ipv6_nd_prefixes](## "port_channel_interfaces.[].ipv6_nd_prefixes") | List, items: Dictionary | | | | | - | [      - ipv6_prefix](## "port_channel_interfaces.[].ipv6_nd_prefixes.[].ipv6_prefix") | String | Required, Unique | | | | - | [        valid_lifetime](## "port_channel_interfaces.[].ipv6_nd_prefixes.[].valid_lifetime") | String | | | | Infinite or lifetime in seconds | - | [        preferred_lifetime](## "port_channel_interfaces.[].ipv6_nd_prefixes.[].preferred_lifetime") | String | | | | Infinite or lifetime in seconds | - | [        no_autoconfig_flag](## "port_channel_interfaces.[].ipv6_nd_prefixes.[].no_autoconfig_flag") | Boolean | | | | | - | [    access_group_in](## "port_channel_interfaces.[].access_group_in") | String | | | | Access list name | - | [    access_group_out](## "port_channel_interfaces.[].access_group_out") | String | | | | Access list name | - | [    ipv6_access_group_in](## "port_channel_interfaces.[].ipv6_access_group_in") | String | | | | IPv6 access list name | - | [    ipv6_access_group_out](## "port_channel_interfaces.[].ipv6_access_group_out") | String | | | | IPv6 access list name | - | [    mac_access_group_in](## "port_channel_interfaces.[].mac_access_group_in") | String | | | | MAC access list name | - | [    mac_access_group_out](## "port_channel_interfaces.[].mac_access_group_out") | String | | | | MAC access list name | - | [    pim](## "port_channel_interfaces.[].pim") | Dictionary | | | | | - | [      ipv4](## "port_channel_interfaces.[].pim.ipv4") | Dictionary | | | | | - | [        dr_priority](## "port_channel_interfaces.[].pim.ipv4.dr_priority") | Integer | | | Min: 0
Max: 429467295 | | - | [        sparse_mode](## "port_channel_interfaces.[].pim.ipv4.sparse_mode") | Boolean | | | | | - | [    service_profile](## "port_channel_interfaces.[].service_profile") | String | | | | QOS profile | - | [    ospf_network_point_to_point](## "port_channel_interfaces.[].ospf_network_point_to_point") | Boolean | | | | | - | [    ospf_area](## "port_channel_interfaces.[].ospf_area") | String | | | | | - | [    ospf_cost](## "port_channel_interfaces.[].ospf_cost") | Integer | | | | | - | [    ospf_authentication](## "port_channel_interfaces.[].ospf_authentication") | String | | | Valid Values:
- none
- simple
- message-digest | | - | [    ospf_authentication_key](## "port_channel_interfaces.[].ospf_authentication_key") | String | | | | Encrypted password | - | [    ospf_message_digest_keys](## "port_channel_interfaces.[].ospf_message_digest_keys") | List, items: Dictionary | | | | | - | [      - id](## "port_channel_interfaces.[].ospf_message_digest_keys.[].id") | Integer | Required, Unique | | | | - | [        hash_algorithm](## "port_channel_interfaces.[].ospf_message_digest_keys.[].hash_algorithm") | String | | | Valid Values:
- md5
- sha1
- sha256
- sha384
- sha512 | | - | [        key](## "port_channel_interfaces.[].ospf_message_digest_keys.[].key") | String | | | | Encrypted password | - | [    flow_tracker](## "port_channel_interfaces.[].flow_tracker") | Dictionary | | | | | - | [      sampled](## "port_channel_interfaces.[].flow_tracker.sampled") | String | | | | Flow tracker name | - | [    bgp](## "port_channel_interfaces.[].bgp") | Dictionary | | | | | - | [      session_tracker](## "port_channel_interfaces.[].bgp.session_tracker") | String | | | | Name of session tracker | - | [    peer](## "port_channel_interfaces.[].peer") | String | | | | Key only used for documentation or validation purposes | - | [    peer_interface](## "port_channel_interfaces.[].peer_interface") | String | | | | Key only used for documentation or validation purposes | - | [    peer_type](## "port_channel_interfaces.[].peer_type") | String | | | | Key only used for documentation or validation purposes | - | [    sflow](## "port_channel_interfaces.[].sflow") | Dictionary | | | | | - | [      enable](## "port_channel_interfaces.[].sflow.enable") | Boolean | | | | | - | [      egress](## "port_channel_interfaces.[].sflow.egress") | Dictionary | | | | | - | [        enable](## "port_channel_interfaces.[].sflow.egress.enable") | Boolean | | | | | - | [        unmodified_enable](## "port_channel_interfaces.[].sflow.egress.unmodified_enable") | Boolean | | | | | - | [    eos_cli](## "port_channel_interfaces.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the port-channel interface in the final EOS configuration | - -=== "YAML" - - ```yaml - port_channel_interfaces: - - name: - description: - logging: - event: - link_status: - shutdown: - l2_mtu: - vlans: - snmp_trap_link_change: - type: - encapsulation_dot1q_vlan: - vrf: - encapsulation_vlan: - client: - dot1q: - vlan: - outer: - inner: - unmatched: - network: - dot1q: - vlan: - outer: - inner: - client: - vlan_id: - mode: - native_vlan: - native_vlan_tag: - link_tracking_groups: - - name: - direction: - phone: - trunk: - vlan: - l2_protocol: - encapsulation_dot1q_vlan: - forwarding_profile: - mtu: - mlag: - trunk_groups: - - - lacp_fallback_timeout: - lacp_fallback_mode: - qos: - trust: - dscp: - cos: - bfd: - echo: - interval: - min_rx: - multiplier: - service_policy: - pbr: - input: - qos: - input: - mpls: - ip: - ldp: - interface: - igp_sync: - trunk_private_vlan_secondary: - pvlan_mapping: - vlan_translations: - - from: - to: - direction: - shape: - rate: - storm_control: - all: - level: - unit: - broadcast: - level: - unit: - multicast: - level: - unit: - unknown_unicast: - level: - unit: - ip_proxy_arp: - isis_enable: - isis_passive: - isis_metric: - isis_network_point_to_point: - isis_circuit_type: - isis_hello_padding: - isis_authentication_mode: - isis_authentication_key: - traffic_policy: - input: - output: - evpn_ethernet_segment: - identifier: - redundancy: - designated_forwarder_election: - algorithm: - preference_value: - dont_preempt: - hold_time: - subsequent_hold_time: - candidate_reachability_required: - mpls: - shared_index: - tunnel_flood_filter_time: - route_target: - esi: - rt: - lacp_id: - spanning_tree_bpdufilter: - spanning_tree_bpduguard: - spanning_tree_guard: - spanning_tree_portfast: - vmtracer: - ptp: - enable: - announce: - interval: - timeout: - delay_req: - delay_mechanism: - sync_message: - interval: - role: - vlan: - transport: - ip_address: - ip_nat: - destination: - dynamic: - - access_list: - comment: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - source: - dynamic: - - access_list: - comment: - nat_type: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - ipv6_enable: - ipv6_address: - ipv6_address_link_local: - ipv6_nd_ra_disabled: - ipv6_nd_managed_config_flag: - ipv6_nd_prefixes: - - ipv6_prefix: - valid_lifetime: - preferred_lifetime: - no_autoconfig_flag: - access_group_in: - access_group_out: - ipv6_access_group_in: - ipv6_access_group_out: - mac_access_group_in: - mac_access_group_out: - pim: - ipv4: - dr_priority: - sparse_mode: - service_profile: - ospf_network_point_to_point: - ospf_area: - ospf_cost: - ospf_authentication: - ospf_authentication_key: - ospf_message_digest_keys: - - id: - hash_algorithm: - key: - flow_tracker: - sampled: - bgp: - session_tracker: - peer: - peer_interface: - peer_type: - sflow: - enable: - egress: - enable: - unmodified_enable: - eos_cli: - ``` - -## Prefix Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [prefix_lists](## "prefix_lists") | List, items: Dictionary | | | | | - | [  - name](## "prefix_lists.[].name") | String | Required, Unique | | | Prefix-list Name | - | [    sequence_numbers](## "prefix_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "prefix_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "prefix_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "permit 10.255.0.0/27 eq 32" | - -=== "YAML" - - ```yaml - prefix_lists: - - name: - sequence_numbers: - - sequence: - action: - ``` - -## Prompt - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [prompt](## "prompt") | String | | | | | - -=== "YAML" - - ```yaml - prompt: - ``` - -## PTP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [ptp](## "ptp") | Dictionary | | | | | - | [  mode](## "ptp.mode") | String | | | Valid Values:
- boundary
- transparent | | - | [  forward_unicast](## "ptp.forward_unicast") | Boolean | | | | | - | [  clock_identity](## "ptp.clock_identity") | String | | | | The clock-id in xx:xx:xx:xx:xx:xx format | - | [  source](## "ptp.source") | Dictionary | | | | | - | [    ip](## "ptp.source.ip") | String | | | | Source IP | - | [  priority1](## "ptp.priority1") | Integer | | | Min: 0
Max: 255 | | - | [  priority2](## "ptp.priority2") | Integer | | | Min: 0
Max: 255 | | - | [  ttl](## "ptp.ttl") | Integer | | | Min: 1
Max: 254 | | - | [  domain](## "ptp.domain") | Integer | | | Min: 0
Max: 255 | | - | [  message_type](## "ptp.message_type") | Dictionary | | | | | - | [    general](## "ptp.message_type.general") | Dictionary | | | | | - | [      dscp](## "ptp.message_type.general.dscp") | Integer | | | | | - | [    event](## "ptp.message_type.event") | Dictionary | | | | | - | [      dscp](## "ptp.message_type.event.dscp") | Integer | | | | | - | [  monitor](## "ptp.monitor") | Dictionary | | | | | - | [    enabled](## "ptp.monitor.enabled") | Boolean | | True | | | - | [    threshold](## "ptp.monitor.threshold") | Dictionary | | | | | - | [      offset_from_master](## "ptp.monitor.threshold.offset_from_master") | Integer | | | Min: 0
Max: 1000000000 | | - | [      mean_path_delay](## "ptp.monitor.threshold.mean_path_delay") | Integer | | | Min: 0
Max: 1000000000 | | - | [      drop](## "ptp.monitor.threshold.drop") | Dictionary | | | | | - | [        offset_from_master](## "ptp.monitor.threshold.drop.offset_from_master") | Integer | | | Min: 0
Max: 1000000000 | | - | [        mean_path_delay](## "ptp.monitor.threshold.drop.mean_path_delay") | Integer | | | Min: 0
Max: 1000000000 | | - | [    missing_message](## "ptp.monitor.missing_message") | Dictionary | | | | | - | [      intervals](## "ptp.monitor.missing_message.intervals") | Dictionary | | | | | - | [        announce](## "ptp.monitor.missing_message.intervals.announce") | Integer | | | Min: 2
Max: 255 | | - | [        follow_up](## "ptp.monitor.missing_message.intervals.follow_up") | Integer | | | Min: 2
Max: 255 | | - | [        sync](## "ptp.monitor.missing_message.intervals.sync") | Integer | | | Min: 2
Max: 255 | | - | [      sequence_ids](## "ptp.monitor.missing_message.sequence_ids") | Dictionary | | | | | - | [        enabled](## "ptp.monitor.missing_message.sequence_ids.enabled") | Boolean | | | | | - | [        announce](## "ptp.monitor.missing_message.sequence_ids.announce") | Integer | | | Min: 2
Max: 255 | | - | [        delay_resp](## "ptp.monitor.missing_message.sequence_ids.delay_resp") | Integer | | | Min: 2
Max: 255 | | - | [        follow_up](## "ptp.monitor.missing_message.sequence_ids.follow_up") | Integer | | | Min: 2
Max: 255 | | - | [        sync](## "ptp.monitor.missing_message.sequence_ids.sync") | Integer | | | Min: 2
Max: 255 | | - -=== "YAML" - - ```yaml - ptp: - mode: - forward_unicast: - clock_identity: - source: - ip: - priority1: - priority2: - ttl: - domain: - message_type: - general: - dscp: - event: - dscp: - monitor: - enabled: - threshold: - offset_from_master: - mean_path_delay: - drop: - offset_from_master: - mean_path_delay: - missing_message: - intervals: - announce: - follow_up: - sync: - sequence_ids: - enabled: - announce: - delay_resp: - follow_up: - sync: - ``` - -## QOS - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [qos](## "qos") | Dictionary | | | | | - | [  map](## "qos.map") | Dictionary | | | | | - | [    cos](## "qos.map.cos") | List, items: String | | | | | - | [      - <str>](## "qos.map.cos.[].<str>") | String | | | | Example: "0 1 to traffic-class 1"
| - | [    dscp](## "qos.map.dscp") | List, items: String | | | | | - | [      - <str>](## "qos.map.dscp.[].<str>") | String | | | | Example: "8 9 10 to traffic-class 1"
| - | [    traffic_class](## "qos.map.traffic_class") | List, items: String | | | | | - | [      - <str>](## "qos.map.traffic_class.[].<str>") | String | | | | Example: "1 to dscp 32"
| - | [  rewrite_dscp](## "qos.rewrite_dscp") | Boolean | | | | | - -=== "YAML" - - ```yaml - qos: - map: - cos: - - - dscp: - - - traffic_class: - - - rewrite_dscp: - ``` - -## QOS Profiles - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [qos_profiles](## "qos_profiles") | List, items: Dictionary | | | | | - | [  - name](## "qos_profiles.[].name") | String | Required, Unique | | | Profile-Name | - | [    trust](## "qos_profiles.[].trust") | String | | | Valid Values:
- cos
- dscp
- disabled | | - | [    cos](## "qos_profiles.[].cos") | Integer | | | | | - | [    dscp](## "qos_profiles.[].dscp") | Integer | | | | | - | [    shape](## "qos_profiles.[].shape") | Dictionary | | | | | - | [      rate](## "qos_profiles.[].shape.rate") | String | | | | Supported options are platform dependent
Example: "< rate > kbps", "1-100 percent", "< rate > pps"
| - | [    service_policy](## "qos_profiles.[].service_policy") | Dictionary | | | | | - | [      type](## "qos_profiles.[].service_policy.type") | Dictionary | | | | | - | [        qos_input](## "qos_profiles.[].service_policy.type.qos_input") | String | | | | Policy-map name | - | [    tx_queues](## "qos_profiles.[].tx_queues") | List, items: Dictionary | | | | | - | [      - id](## "qos_profiles.[].tx_queues.[].id") | Integer | Required, Unique | | | TX-Queue ID | - | [        bandwidth_percent](## "qos_profiles.[].tx_queues.[].bandwidth_percent") | Integer | | | | | - | [        bandwidth_guaranteed_percent](## "qos_profiles.[].tx_queues.[].bandwidth_guaranteed_percent") | Integer | | | | | - | [        priority](## "qos_profiles.[].tx_queues.[].priority") | String | | | Valid Values:
- priority strict
- no priority | | - | [        shape](## "qos_profiles.[].tx_queues.[].shape") | Dictionary | | | | | - | [          rate](## "qos_profiles.[].tx_queues.[].shape.rate") | String | | | | Supported options are platform dependent
Example: "< rate > kbps", "1-100 percent", "< rate > pps"
| - | [    uc_tx_queues](## "qos_profiles.[].uc_tx_queues") | List, items: Dictionary | | | | | - | [      - id](## "qos_profiles.[].uc_tx_queues.[].id") | Integer | Required, Unique | | | UC TX queue ID | - | [        bandwidth_percent](## "qos_profiles.[].uc_tx_queues.[].bandwidth_percent") | Integer | | | | | - | [        bandwidth_guaranteed_percent](## "qos_profiles.[].uc_tx_queues.[].bandwidth_guaranteed_percent") | Integer | | | | | - | [        priority](## "qos_profiles.[].uc_tx_queues.[].priority") | String | | | Valid Values:
- priority strict
- no priority | | - | [        shape](## "qos_profiles.[].uc_tx_queues.[].shape") | Dictionary | | | | | - | [          rate](## "qos_profiles.[].uc_tx_queues.[].shape.rate") | String | | | | Supported options are platform dependent
Example: "< rate > kbps", "1-100 percent", "< rate > pps"
| - | [    mc_tx_queues](## "qos_profiles.[].mc_tx_queues") | List, items: Dictionary | | | | | - | [      - id](## "qos_profiles.[].mc_tx_queues.[].id") | Integer | Required, Unique | | | MC TX queue ID | - | [        bandwidth_percent](## "qos_profiles.[].mc_tx_queues.[].bandwidth_percent") | Integer | | | | | - | [        bandwidth_guaranteed_percent](## "qos_profiles.[].mc_tx_queues.[].bandwidth_guaranteed_percent") | Integer | | | | | - | [        priority](## "qos_profiles.[].mc_tx_queues.[].priority") | String | | | Valid Values:
- priority strict
- no priority | | - | [        shape](## "qos_profiles.[].mc_tx_queues.[].shape") | Dictionary | | | | | - | [          rate](## "qos_profiles.[].mc_tx_queues.[].shape.rate") | String | | | | Supported options are platform dependent
Example: "< rate > kbps", "1-100 percent", "< rate > pps" | - -=== "YAML" - - ```yaml - qos_profiles: - - name: - trust: - cos: - dscp: - shape: - rate: - service_policy: - type: - qos_input: - tx_queues: - - id: - bandwidth_percent: - bandwidth_guaranteed_percent: - priority: - shape: - rate: - uc_tx_queues: - - id: - bandwidth_percent: - bandwidth_guaranteed_percent: - priority: - shape: - rate: - mc_tx_queues: - - id: - bandwidth_percent: - bandwidth_guaranteed_percent: - priority: - shape: - rate: - ``` - -## Queue Monitor Length - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [queue_monitor_length](## "queue_monitor_length") | Dictionary | | | | | - | [  enabled](## "queue_monitor_length.enabled") | Boolean | Required | | | | - | [  default_thresholds](## "queue_monitor_length.default_thresholds") | Dictionary | | | | | - | [    high](## "queue_monitor_length.default_thresholds.high") | Integer | Required | | | Default high threshold for Ethernet Interfaces.
| - | [    low](## "queue_monitor_length.default_thresholds.low") | Integer | | | | Default low threshold for Ethernet Interfaces.
Low threshold support is platform dependent.
| - | [  log](## "queue_monitor_length.log") | Integer | | | | Logging interval in seconds | - | [  notifying](## "queue_monitor_length.notifying") | Boolean | | | | Should only be used for platforms supporting the "queue-monitor length notifying" CLI | - | [  cpu](## "queue_monitor_length.cpu") | Dictionary | | | | | - | [    thresholds](## "queue_monitor_length.cpu.thresholds") | Dictionary | | | | | - | [      high](## "queue_monitor_length.cpu.thresholds.high") | Integer | Required | | | | - | [      low](## "queue_monitor_length.cpu.thresholds.low") | Integer | | | | | - -=== "YAML" - - ```yaml - queue_monitor_length: - enabled: - default_thresholds: - high: - low: - log: - notifying: - cpu: - thresholds: - high: - low: - ``` - -## Queue Monitor Streaming - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [queue_monitor_streaming](## "queue_monitor_streaming") | Dictionary | | | | | - | [  enable](## "queue_monitor_streaming.enable") | Boolean | | | | | - | [  ip_access_group](## "queue_monitor_streaming.ip_access_group") | String | | | | Name of IP ACL | - | [  ipv6_access_group](## "queue_monitor_streaming.ipv6_access_group") | String | | | | Name of IPv6 ACL | - | [  max_connections](## "queue_monitor_streaming.max_connections") | Integer | | | Min: 1
Max: 100 | | - | [  vrf](## "queue_monitor_streaming.vrf") | String | | | | | - -=== "YAML" - - ```yaml - queue_monitor_streaming: - enable: - ip_access_group: - ipv6_access_group: - max_connections: - vrf: - ``` - -## Radius Server - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [radius_server](## "radius_server") | Dictionary | | | | | - | [  attribute_32_include_in_access_req](## "radius_server.attribute_32_include_in_access_req") | Dictionary | | | | | - | [    hostname](## "radius_server.attribute_32_include_in_access_req.hostname") | Boolean | | | | | - | [    format](## "radius_server.attribute_32_include_in_access_req.format") | String | | | | Specify the format of the NAS-Identifier. If 'hostname' is set, this is ignored. | - | [  dynamic_authorization](## "radius_server.dynamic_authorization") | Dictionary | | | | | - | [    port](## "radius_server.dynamic_authorization.port") | Integer | | | Min: 0
Max: 65535 | TCP Port | - | [    tls_ssl_profile](## "radius_server.dynamic_authorization.tls_ssl_profile") | String | | | | Name of TLS profile | - | [  hosts](## "radius_server.hosts") | List, items: Dictionary | | | | | - | [    - host](## "radius_server.hosts.[].host") | String | Required, Unique | | | Host IP address or name | - | [      vrf](## "radius_server.hosts.[].vrf") | String | | | | | - | [      timeout](## "radius_server.hosts.[].timeout") | Integer | | | Min: 1
Max: 1000 | | - | [      retransmit](## "radius_server.hosts.[].retransmit") | Integer | | | Min: 0
Max: 100 | | - | [      key](## "radius_server.hosts.[].key") | String | | | | Encrypted key | - -=== "YAML" - - ```yaml - radius_server: - attribute_32_include_in_access_req: - hostname: - format: - dynamic_authorization: - port: - tls_ssl_profile: - hosts: - - host: - vrf: - timeout: - retransmit: - key: - ``` - -## Radius Servers - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [radius_servers](## "radius_servers") deprecated | List, items: Dictionary | | | | This key is deprecated. Support will be removed in AVD version v5.0.0. Use radius_server.hosts instead. | - | [  - host](## "radius_servers.[].host") | String | | | | Host IP address or name | - | [    vrf](## "radius_servers.[].vrf") | String | | | | | - | [    key](## "radius_servers.[].key") | String | | | | Encrypted key | - -=== "YAML" - - ```yaml - radius_servers: - - host: - vrf: - key: - ``` - -## Redundancy - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [redundancy](## "redundancy") | Dictionary | | | | | - | [  protocol](## "redundancy.protocol") | String | | | | Redundancy Protocol | - -=== "YAML" - - ```yaml - redundancy: - protocol: - ``` - -## Roles - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [roles](## "roles") | List, items: Dictionary | | | | | - | [  - name](## "roles.[].name") | String | | | | Role name | - | [    sequence_numbers](## "roles.[].sequence_numbers") | List, items: Dictionary | | | | | - | [      - sequence](## "roles.[].sequence_numbers.[].sequence") | Integer | | | | Sequence number | - | [        action](## "roles.[].sequence_numbers.[].action") | String | | | Valid Values:
- permit
- deny | | - | [        mode](## "roles.[].sequence_numbers.[].mode") | String | | | | "config", "config-all", "exec" or mode key as string
| - | [        command](## "roles.[].sequence_numbers.[].command") | String | | | | Command as string | - -=== "YAML" - - ```yaml - roles: - - name: - sequence_numbers: - - sequence: - action: - mode: - command: - ``` - -## Route Maps - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [route_maps](## "route_maps") | List, items: Dictionary | | | | | - | [  - name](## "route_maps.[].name") | String | Required, Unique | | | Route-map Name | - | [    sequence_numbers](## "route_maps.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "route_maps.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        type](## "route_maps.[].sequence_numbers.[].type") | String | Required | | Valid Values:
- permit
- deny | | - | [        description](## "route_maps.[].sequence_numbers.[].description") | String | | | | | - | [        match](## "route_maps.[].sequence_numbers.[].match") | List, items: String | | | | List of "match" statements | - | [          - <str>](## "route_maps.[].sequence_numbers.[].match.[].<str>") | String | | | | Match as string
Example: "ip address prefix-list PL-LOOPBACKS-EVPN-OVERLAY"
| - | [        set](## "route_maps.[].sequence_numbers.[].set") | List, items: String | | | | List of "set" statements | - | [          - <str>](## "route_maps.[].sequence_numbers.[].set.[].<str>") | String | | | | Set as string
Example: "origin incomplete"
| - | [        sub_route_map](## "route_maps.[].sequence_numbers.[].sub_route_map") | String | | | | Name of Sub-Route-map | - | [        continue](## "route_maps.[].sequence_numbers.[].continue") | Dictionary | | | | | - | [          enabled](## "route_maps.[].sequence_numbers.[].continue.enabled") | Boolean | | | | | - | [          sequence_number](## "route_maps.[].sequence_numbers.[].continue.sequence_number") | Integer | | | | | - -=== "YAML" - - ```yaml - route_maps: - - name: - sequence_numbers: - - sequence: - type: - description: - match: - - - set: - - - sub_route_map: - continue: - enabled: - sequence_number: - ``` - -## Router BFD - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_bfd](## "router_bfd") | Dictionary | | | | | - | [  interval](## "router_bfd.interval") | Integer | | | | Rate in milliseconds | - | [  min_rx](## "router_bfd.min_rx") | Integer | | | | Rate in milliseconds | - | [  multiplier](## "router_bfd.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [  multihop](## "router_bfd.multihop") | Dictionary | | | | | - | [    interval](## "router_bfd.multihop.interval") | Integer | | | | Rate in milliseconds | - | [    min_rx](## "router_bfd.multihop.min_rx") | Integer | | | | Rate in milliseconds | - | [    multiplier](## "router_bfd.multihop.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [  sbfd](## "router_bfd.sbfd") | Dictionary | | | | | - | [    local_interface](## "router_bfd.sbfd.local_interface") | Dictionary | | | | | - | [      name](## "router_bfd.sbfd.local_interface.name") | String | | | | Interface Name | - | [      protocols](## "router_bfd.sbfd.local_interface.protocols") | Dictionary | | | | | - | [        ipv4](## "router_bfd.sbfd.local_interface.protocols.ipv4") | Boolean | | | | | - | [        ipv6](## "router_bfd.sbfd.local_interface.protocols.ipv6") | Boolean | | | | | - | [    initiator_interval](## "router_bfd.sbfd.initiator_interval") | Integer | | | | Rate in milliseconds | - | [    initiator_multiplier](## "router_bfd.sbfd.initiator_multiplier") | Integer | | | Min: 3
Max: 50 | | - | [    reflector](## "router_bfd.sbfd.reflector") | Dictionary | | | | | - | [      min_rx](## "router_bfd.sbfd.reflector.min_rx") | Integer | | | | Rate in milliseconds | - | [      local_discriminator](## "router_bfd.sbfd.reflector.local_discriminator") | String | | | | IPv4 address or 32 bit integer | - -=== "YAML" - - ```yaml - router_bfd: - interval: - min_rx: - multiplier: - multihop: - interval: - min_rx: - multiplier: - sbfd: - local_interface: - name: - protocols: - ipv4: - ipv6: - initiator_interval: - initiator_multiplier: - reflector: - min_rx: - local_discriminator: - ``` - -## Router BGP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_bgp](## "router_bgp") | Dictionary | | | | | - | [  as](## "router_bgp.as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [  router_id](## "router_bgp.router_id") | String | | | | In IP address format A.B.C.D | - | [  distance](## "router_bgp.distance") | Dictionary | | | | | - | [    external_routes](## "router_bgp.distance.external_routes") | Integer | Required | | Min: 1
Max: 255 | | - | [    internal_routes](## "router_bgp.distance.internal_routes") | Integer | Required | | Min: 1
Max: 255 | | - | [    local_routes](## "router_bgp.distance.local_routes") | Integer | Required | | Min: 1
Max: 255 | | - | [  graceful_restart](## "router_bgp.graceful_restart") | Dictionary | | | | | - | [    enabled](## "router_bgp.graceful_restart.enabled") | Boolean | | | | | - | [    restart_time](## "router_bgp.graceful_restart.restart_time") | Integer | | | Min: 1
Max: 3600 | Number of seconds | - | [    stalepath_time](## "router_bgp.graceful_restart.stalepath_time") | Integer | | | Min: 1
Max: 3600 | Number of seconds | - | [  graceful_restart_helper](## "router_bgp.graceful_restart_helper") | Dictionary | | | | | - | [    enabled](## "router_bgp.graceful_restart_helper.enabled") | Boolean | | | | | - | [    restart_time](## "router_bgp.graceful_restart_helper.restart_time") | Integer | | | Min: 1
Max: 100000000 | Number of seconds
graceful-restart-help long-lived and restart-time are mutually exclusive in CLI.
restart-time will take precedence if both are configured.
| - | [    long_lived](## "router_bgp.graceful_restart_helper.long_lived") | Boolean | | | | graceful-restart-help long-lived and restart-time are mutually exclusive in CLI.
restart-time will take precedence if both are configured.
| - | [  maximum_paths](## "router_bgp.maximum_paths") | Dictionary | | | | | - | [    paths](## "router_bgp.maximum_paths.paths") | Integer | Required | | Min: 1
Max: 600 | | - | [    ecmp](## "router_bgp.maximum_paths.ecmp") | Integer | Required | | Min: 1
Max: 600 | | - | [  updates](## "router_bgp.updates") | Dictionary | | | | | - | [    wait_for_convergence](## "router_bgp.updates.wait_for_convergence") | Boolean | | | | Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.
| - | [    wait_install](## "router_bgp.updates.wait_install") | Boolean | | | | 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.
| - | [  bgp_cluster_id](## "router_bgp.bgp_cluster_id") | String | | | | IP Address A.B.C.D | - | [  bgp_defaults](## "router_bgp.bgp_defaults") | List, items: String | | | | BGP command as string | - | [    - <str>](## "router_bgp.bgp_defaults.[].<str>") | String | | | | | - | [  bgp](## "router_bgp.bgp") | Dictionary | | | | | - | [    default](## "router_bgp.bgp.default") | Dictionary | | | | | - | [      ipv4_unicast](## "router_bgp.bgp.default.ipv4_unicast") | Boolean | | | | Default activation of IPv4 unicast address-family on all IPv4 neighbors (EOS default = True). | - | [      ipv4_unicast_transport_ipv6](## "router_bgp.bgp.default.ipv4_unicast_transport_ipv6") | Boolean | | | | Default activation of IPv4 unicast address-family on all IPv6 neighbors (EOS default == False). | - | [    bestpath](## "router_bgp.bgp.bestpath") | Dictionary | | | | | - | [      d_path](## "router_bgp.bgp.bestpath.d_path") | Boolean | | | | | - | [  listen_ranges](## "router_bgp.listen_ranges") | List, items: Dictionary | | | | Improved "listen_ranges" data model to support multiple listen ranges and additional filter capabilities
| - | [    - prefix](## "router_bgp.listen_ranges.[].prefix") | String | | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [      peer_id_include_router_id](## "router_bgp.listen_ranges.[].peer_id_include_router_id") | Boolean | | | | Include router ID as part of peer filter | - | [      peer_group](## "router_bgp.listen_ranges.[].peer_group") | String | | | | Peer group name | - | [      peer_filter](## "router_bgp.listen_ranges.[].peer_filter") | String | | | | Peer-filter name
note: `peer_filter` or `remote_as` is required but mutually exclusive.
If both are defined, `peer_filter` takes precedence
| - | [      remote_as](## "router_bgp.listen_ranges.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [  peer_groups](## "router_bgp.peer_groups") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [      type](## "router_bgp.peer_groups.[].type") | String | | | | Key only used for documentation or validation purposes | - | [      remote_as](## "router_bgp.peer_groups.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [      local_as](## "router_bgp.peer_groups.[].local_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [      description](## "router_bgp.peer_groups.[].description") | String | | | | | - | [      shutdown](## "router_bgp.peer_groups.[].shutdown") | Boolean | | | | | - | [      as_path](## "router_bgp.peer_groups.[].as_path") | Dictionary | | | | BGP AS-PATH options | - | [        remote_as_replace_out](## "router_bgp.peer_groups.[].as_path.remote_as_replace_out") | Boolean | | | | Replace AS number with local AS number | - | [        prepend_own_disabled](## "router_bgp.peer_groups.[].as_path.prepend_own_disabled") | Boolean | | | | Disable prepending own AS number to AS path | - | [      remove_private_as](## "router_bgp.peer_groups.[].remove_private_as") | Dictionary | | | | Remove private AS numbers in outbound AS path | - | [        enabled](## "router_bgp.peer_groups.[].remove_private_as.enabled") | Boolean | | | | | - | [        all](## "router_bgp.peer_groups.[].remove_private_as.all") | Boolean | | | | | - | [        replace_as](## "router_bgp.peer_groups.[].remove_private_as.replace_as") | Boolean | | | | | - | [      remove_private_as_ingress](## "router_bgp.peer_groups.[].remove_private_as_ingress") | Dictionary | | | | | - | [        enabled](## "router_bgp.peer_groups.[].remove_private_as_ingress.enabled") | Boolean | | | | | - | [        replace_as](## "router_bgp.peer_groups.[].remove_private_as_ingress.replace_as") | Boolean | | | | | - | [      peer_filter](## "router_bgp.peer_groups.[].peer_filter") | String | | | | Peer-filter name
note: `bgp_listen_range_prefix` and `peer_filter` will be deprecated in AVD v4.0
These should not be mixed with the new `listen_ranges` key above to avoid conflicts.
| - | [      next_hop_unchanged](## "router_bgp.peer_groups.[].next_hop_unchanged") | Boolean | | | | | - | [      update_source](## "router_bgp.peer_groups.[].update_source") | String | | | | IP address or interface name | - | [      route_reflector_client](## "router_bgp.peer_groups.[].route_reflector_client") | Boolean | | | | | - | [      bfd](## "router_bgp.peer_groups.[].bfd") | Boolean | | | | | - | [      ebgp_multihop](## "router_bgp.peer_groups.[].ebgp_multihop") | Integer | | | Min: 1
Max: 255 | Time-to-live in range of hops | - | [      next_hop_self](## "router_bgp.peer_groups.[].next_hop_self") | Boolean | | | | | - | [      password](## "router_bgp.peer_groups.[].password") | String | | | | | - | [      passive](## "router_bgp.peer_groups.[].passive") | Boolean | | | | | - | [      default_originate](## "router_bgp.peer_groups.[].default_originate") | Dictionary | | | | | - | [        enabled](## "router_bgp.peer_groups.[].default_originate.enabled") | Boolean | | | | | - | [        always](## "router_bgp.peer_groups.[].default_originate.always") | Boolean | | | | | - | [        route_map](## "router_bgp.peer_groups.[].default_originate.route_map") | String | | | | Route-map name | - | [      send_community](## "router_bgp.peer_groups.[].send_community") | String | | | | 'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)' | - | [      maximum_routes](## "router_bgp.peer_groups.[].maximum_routes") | Integer | | | Min: 0
Max: 4294967294 | Maximum number of routes (0 means unlimited) | - | [      maximum_routes_warning_limit](## "router_bgp.peer_groups.[].maximum_routes_warning_limit") | String | | | | Maximum number of routes after which a warning is issued (0 means never warn) or
Percentage of maximum number of routes at which to warn ("<1-100> percent")
| - | [      maximum_routes_warning_only](## "router_bgp.peer_groups.[].maximum_routes_warning_only") | Boolean | | | | | - | [      link_bandwidth](## "router_bgp.peer_groups.[].link_bandwidth") | Dictionary | | | | | - | [        enabled](## "router_bgp.peer_groups.[].link_bandwidth.enabled") | Boolean | | | | | - | [        default](## "router_bgp.peer_groups.[].link_bandwidth.default") | String | | | | nn.nn(K|M|G) link speed in bits/second | - | [      allowas_in](## "router_bgp.peer_groups.[].allowas_in") | Dictionary | | | | | - | [        enabled](## "router_bgp.peer_groups.[].allowas_in.enabled") | Boolean | | | | | - | [        times](## "router_bgp.peer_groups.[].allowas_in.times") | Integer | | | Min: 1
Max: 10 | Number of local ASNs allowed in a BGP update | - | [      weight](## "router_bgp.peer_groups.[].weight") | Integer | | | Min: 0
Max: 65535 | | - | [      timers](## "router_bgp.peer_groups.[].timers") | String | | | | BGP Keepalive and Hold Timer values in seconds as string "<0-3600> <0-3600>" | - | [      rib_in_pre_policy_retain](## "router_bgp.peer_groups.[].rib_in_pre_policy_retain") | Dictionary | | | | | - | [        enabled](## "router_bgp.peer_groups.[].rib_in_pre_policy_retain.enabled") | Boolean | | | | | - | [        all](## "router_bgp.peer_groups.[].rib_in_pre_policy_retain.all") | Boolean | | | | | - | [      route_map_in](## "router_bgp.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [      route_map_out](## "router_bgp.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [      bgp_listen_range_prefix](## "router_bgp.peer_groups.[].bgp_listen_range_prefix") | String | | | | IP prefix range
note: `bgp_listen_range_prefix` and `peer_filter` will be deprecated in AVD v4.0
These should not be mixed with the new `listen_ranges` key above to avoid conflicts.
| - | [      session_tracker](## "router_bgp.peer_groups.[].session_tracker") | String | | | | | - | [  neighbors](## "router_bgp.neighbors") | List, items: Dictionary | | | | | - | [    - ip_address](## "router_bgp.neighbors.[].ip_address") | String | Required, Unique | | | | - | [      peer_group](## "router_bgp.neighbors.[].peer_group") | String | | | | | - | [      remote_as](## "router_bgp.neighbors.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [      local_as](## "router_bgp.neighbors.[].local_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [      as_path](## "router_bgp.neighbors.[].as_path") | Dictionary | | | | BGP AS-PATH options | - | [        remote_as_replace_out](## "router_bgp.neighbors.[].as_path.remote_as_replace_out") | Boolean | | | | Replace AS number with local AS number | - | [        prepend_own_disabled](## "router_bgp.neighbors.[].as_path.prepend_own_disabled") | Boolean | | | | Disable prepending own AS number to AS path | - | [      description](## "router_bgp.neighbors.[].description") | String | | | | | - | [      route_reflector_client](## "router_bgp.neighbors.[].route_reflector_client") | Boolean | | | | | - | [      passive](## "router_bgp.neighbors.[].passive") | Boolean | | | | | - | [      shutdown](## "router_bgp.neighbors.[].shutdown") | Boolean | | | | | - | [      update_source](## "router_bgp.neighbors.[].update_source") | String | | | | Source Interface | - | [      bfd](## "router_bgp.neighbors.[].bfd") | Boolean | | | | | - | [      weight](## "router_bgp.neighbors.[].weight") | Integer | | | Min: 0
Max: 65535 | | - | [      timers](## "router_bgp.neighbors.[].timers") | String | | | | BGP Keepalive and Hold Timer values in seconds as string "<0-3600> <0-3600>" | - | [      route_map_in](## "router_bgp.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [      route_map_out](## "router_bgp.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [      default_originate](## "router_bgp.neighbors.[].default_originate") | Dictionary | | | | | - | [        enabled](## "router_bgp.neighbors.[].default_originate.enabled") | Boolean | | | | | - | [        always](## "router_bgp.neighbors.[].default_originate.always") | Boolean | | | | | - | [        route_map](## "router_bgp.neighbors.[].default_originate.route_map") | String | | | | | - | [      send_community](## "router_bgp.neighbors.[].send_community") | String | | | | 'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)' | - | [      maximum_routes](## "router_bgp.neighbors.[].maximum_routes") | Integer | | | Min: 0
Max: 4294967294 | Maximum number of routes (0 means unlimited) | - | [      maximum_routes_warning_limit](## "router_bgp.neighbors.[].maximum_routes_warning_limit") | String | | | | Maximum number of routes after which a warning is issued (0 means never warn) or
Percentage of maximum number of routes at which to warn ("<1-100> percent")
| - | [      maximum_routes_warning_only](## "router_bgp.neighbors.[].maximum_routes_warning_only") | Boolean | | | | | - | [      allowas_in](## "router_bgp.neighbors.[].allowas_in") | Dictionary | | | | | - | [        enabled](## "router_bgp.neighbors.[].allowas_in.enabled") | Boolean | | | | | - | [        times](## "router_bgp.neighbors.[].allowas_in.times") | Integer | | | Min: 1
Max: 10 | Number of local ASNs allowed in a BGP update | - | [      ebgp_multihop](## "router_bgp.neighbors.[].ebgp_multihop") | Integer | | | Min: 1
Max: 255 | Time-to-live in range of hops | - | [      next_hop_self](## "router_bgp.neighbors.[].next_hop_self") | Boolean | | | | | - | [      link_bandwidth](## "router_bgp.neighbors.[].link_bandwidth") | Dictionary | | | | | - | [        enabled](## "router_bgp.neighbors.[].link_bandwidth.enabled") | Boolean | | | | | - | [        default](## "router_bgp.neighbors.[].link_bandwidth.default") | String | | | | nn.nn(K|M|G) link speed in bits/second | - | [      rib_in_pre_policy_retain](## "router_bgp.neighbors.[].rib_in_pre_policy_retain") | Dictionary | | | | | - | [        enabled](## "router_bgp.neighbors.[].rib_in_pre_policy_retain.enabled") | Boolean | | | | | - | [        all](## "router_bgp.neighbors.[].rib_in_pre_policy_retain.all") | Boolean | | | | | - | [      remove_private_as](## "router_bgp.neighbors.[].remove_private_as") | Dictionary | | | | Remove private AS numbers in outbound AS path | - | [        enabled](## "router_bgp.neighbors.[].remove_private_as.enabled") | Boolean | | | | | - | [        all](## "router_bgp.neighbors.[].remove_private_as.all") | Boolean | | | | | - | [        replace_as](## "router_bgp.neighbors.[].remove_private_as.replace_as") | Boolean | | | | | - | [      remove_private_as_ingress](## "router_bgp.neighbors.[].remove_private_as_ingress") | Dictionary | | | | | - | [        enabled](## "router_bgp.neighbors.[].remove_private_as_ingress.enabled") | Boolean | | | | | - | [        replace_as](## "router_bgp.neighbors.[].remove_private_as_ingress.replace_as") | Boolean | | | | | - | [      session_tracker](## "router_bgp.neighbors.[].session_tracker") | String | | | | | - | [  neighbor_interfaces](## "router_bgp.neighbor_interfaces") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.neighbor_interfaces.[].name") | String | Required, Unique | | | Interface name | - | [      remote_as](## "router_bgp.neighbor_interfaces.[].remote_as") | String | | | | | - | [      peer_group](## "router_bgp.neighbor_interfaces.[].peer_group") | String | | Peer-group name | | | - | [      description](## "router_bgp.neighbor_interfaces.[].description") | String | | | | | - | [      peer_filter](## "router_bgp.neighbor_interfaces.[].peer_filter") | String | | | | Peer-filter name | - | [  aggregate_addresses](## "router_bgp.aggregate_addresses") | List, items: Dictionary | | | | | - | [    - prefix](## "router_bgp.aggregate_addresses.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [      advertise_only](## "router_bgp.aggregate_addresses.[].advertise_only") | Boolean | | | | | - | [      as_set](## "router_bgp.aggregate_addresses.[].as_set") | Boolean | | | | | - | [      summary_only](## "router_bgp.aggregate_addresses.[].summary_only") | Boolean | | | | | - | [      attribute_map](## "router_bgp.aggregate_addresses.[].attribute_map") | String | | | | Route-map name | - | [      match_map](## "router_bgp.aggregate_addresses.[].match_map") | String | | | | Route-map name | - | [  redistribute_routes](## "router_bgp.redistribute_routes") | List, items: Dictionary | | | | | - | [    - source_protocol](## "router_bgp.redistribute_routes.[].source_protocol") | String | Required, Unique | | | | - | [      route_map](## "router_bgp.redistribute_routes.[].route_map") | String | | | | | - | [  vlan_aware_bundles](## "router_bgp.vlan_aware_bundles") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.vlan_aware_bundles.[].name") | String | Required, Unique | | | VLAN aware bundle name | - | [      tenant](## "router_bgp.vlan_aware_bundles.[].tenant") | String | | | | Key only used for documentation or validation purposes | - | [      description](## "router_bgp.vlan_aware_bundles.[].description") | String | | | | Key only used for documentation or validation purposes | - | [      rd](## "router_bgp.vlan_aware_bundles.[].rd") | String | | | | Route distinguisher | - | [      rd_evpn_domain](## "router_bgp.vlan_aware_bundles.[].rd_evpn_domain") | Dictionary | | | | | - | [        domain](## "router_bgp.vlan_aware_bundles.[].rd_evpn_domain.domain") | String | | | Valid Values:
- remote
- all | | - | [        rd](## "router_bgp.vlan_aware_bundles.[].rd_evpn_domain.rd") | String | | | | Route distinguisher | - | [      route_targets](## "router_bgp.vlan_aware_bundles.[].route_targets") | Dictionary | | | | | - | [        both](## "router_bgp.vlan_aware_bundles.[].route_targets.both") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlan_aware_bundles.[].route_targets.both.[].<str>") | String | | | | | - | [        import](## "router_bgp.vlan_aware_bundles.[].route_targets.import") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlan_aware_bundles.[].route_targets.import.[].<str>") | String | | | | | - | [        export](## "router_bgp.vlan_aware_bundles.[].route_targets.export") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlan_aware_bundles.[].route_targets.export.[].<str>") | String | | | | | - | [        import_evpn_domains](## "router_bgp.vlan_aware_bundles.[].route_targets.import_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlan_aware_bundles.[].route_targets.import_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlan_aware_bundles.[].route_targets.import_evpn_domains.[].route_target") | String | | | | | - | [        export_evpn_domains](## "router_bgp.vlan_aware_bundles.[].route_targets.export_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlan_aware_bundles.[].route_targets.export_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlan_aware_bundles.[].route_targets.export_evpn_domains.[].route_target") | String | | | | | - | [        import_export_evpn_domains](## "router_bgp.vlan_aware_bundles.[].route_targets.import_export_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlan_aware_bundles.[].route_targets.import_export_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlan_aware_bundles.[].route_targets.import_export_evpn_domains.[].route_target") | String | | | | | - | [      redistribute_routes](## "router_bgp.vlan_aware_bundles.[].redistribute_routes") | List, items: String | | | | | - | [        - <str>](## "router_bgp.vlan_aware_bundles.[].redistribute_routes.[].<str>") | String | | | | | - | [      no_redistribute_routes](## "router_bgp.vlan_aware_bundles.[].no_redistribute_routes") | List, items: String | | | | | - | [        - <str>](## "router_bgp.vlan_aware_bundles.[].no_redistribute_routes.[].<str>") | String | | | | | - | [      vlan](## "router_bgp.vlan_aware_bundles.[].vlan") | String | | | | VLAN range as string. Example "100-200,300" | - | [  vlans](## "router_bgp.vlans") | List, items: Dictionary | | | | | - | [    - id](## "router_bgp.vlans.[].id") | Integer | Required, Unique | | | | - | [      tenant](## "router_bgp.vlans.[].tenant") | String | | | | Key only used for documentation or validation purposes | - | [      rd](## "router_bgp.vlans.[].rd") | String | | | | Route distinguisher | - | [      rd_evpn_domain](## "router_bgp.vlans.[].rd_evpn_domain") | Dictionary | | | | | - | [        domain](## "router_bgp.vlans.[].rd_evpn_domain.domain") | String | | | Valid Values:
- remote
- all | | - | [        rd](## "router_bgp.vlans.[].rd_evpn_domain.rd") | String | | | | Route distinguisher | - | [      eos_cli](## "router_bgp.vlans.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the Router BGP, VLAN definition in the final EOS configuration | - | [      route_targets](## "router_bgp.vlans.[].route_targets") | Dictionary | | | | | - | [        both](## "router_bgp.vlans.[].route_targets.both") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlans.[].route_targets.both.[].<str>") | String | | | | | - | [        import](## "router_bgp.vlans.[].route_targets.import") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlans.[].route_targets.import.[].<str>") | String | | | | | - | [        export](## "router_bgp.vlans.[].route_targets.export") | List, items: String | | | | | - | [          - <str>](## "router_bgp.vlans.[].route_targets.export.[].<str>") | String | | | | | - | [        import_evpn_domains](## "router_bgp.vlans.[].route_targets.import_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlans.[].route_targets.import_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlans.[].route_targets.import_evpn_domains.[].route_target") | String | | | | | - | [        export_evpn_domains](## "router_bgp.vlans.[].route_targets.export_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlans.[].route_targets.export_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlans.[].route_targets.export_evpn_domains.[].route_target") | String | | | | | - | [        import_export_evpn_domains](## "router_bgp.vlans.[].route_targets.import_export_evpn_domains") | List, items: Dictionary | | | | | - | [          - domain](## "router_bgp.vlans.[].route_targets.import_export_evpn_domains.[].domain") | String | | | Valid Values:
- remote
- all | | - | [            route_target](## "router_bgp.vlans.[].route_targets.import_export_evpn_domains.[].route_target") | String | | | | | - | [      redistribute_routes](## "router_bgp.vlans.[].redistribute_routes") | List, items: String | | | | | - | [        - <str>](## "router_bgp.vlans.[].redistribute_routes.[].<str>") | String | | | | | - | [      no_redistribute_routes](## "router_bgp.vlans.[].no_redistribute_routes") | List, items: String | | | | | - | [        - <str>](## "router_bgp.vlans.[].no_redistribute_routes.[].<str>") | String | | | | | - | [  vpws](## "router_bgp.vpws") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.vpws.[].name") | String | Required, Unique | | | VPWS instance name | - | [      rd](## "router_bgp.vpws.[].rd") | String | | | | Route distinguisher | - | [      route_targets](## "router_bgp.vpws.[].route_targets") | Dictionary | | | | | - | [        import_export](## "router_bgp.vpws.[].route_targets.import_export") | String | | | | Route Target | - | [      mpls_control_word](## "router_bgp.vpws.[].mpls_control_word") | Boolean | | | | | - | [      label_flow](## "router_bgp.vpws.[].label_flow") | Boolean | | | | | - | [      mtu](## "router_bgp.vpws.[].mtu") | Integer | | | | | - | [      pseudowires](## "router_bgp.vpws.[].pseudowires") | List, items: Dictionary | | | | | - | [        - name](## "router_bgp.vpws.[].pseudowires.[].name") | String | Required, Unique | | | Pseudowire name | - | [          id_local](## "router_bgp.vpws.[].pseudowires.[].id_local") | Integer | | | | Must match id_remote on other pe | - | [          id_remote](## "router_bgp.vpws.[].pseudowires.[].id_remote") | Integer | | | | Must match id_local on other pe | - | [  address_family_evpn](## "router_bgp.address_family_evpn") | Dictionary | | | | | - | [    domain_identifier](## "router_bgp.address_family_evpn.domain_identifier") | String | | | | | - | [    neighbor_default](## "router_bgp.address_family_evpn.neighbor_default") | Dictionary | | | | | - | [      encapsulation](## "router_bgp.address_family_evpn.neighbor_default.encapsulation") | String | | | Valid Values:
- vxlan
- mpls | | - | [      next_hop_self_source_interface](## "router_bgp.address_family_evpn.neighbor_default.next_hop_self_source_interface") | String | | | | Source interface name | - | [      next_hop_self_received_evpn_routes](## "router_bgp.address_family_evpn.neighbor_default.next_hop_self_received_evpn_routes") | Dictionary | | | | | - | [        enable](## "router_bgp.address_family_evpn.neighbor_default.next_hop_self_received_evpn_routes.enable") | Boolean | | | | | - | [        inter_domain](## "router_bgp.address_family_evpn.neighbor_default.next_hop_self_received_evpn_routes.inter_domain") | Boolean | | | | | - | [    peer_groups](## "router_bgp.address_family_evpn.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_evpn.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_evpn.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_evpn.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_evpn.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [        domain_remote](## "router_bgp.address_family_evpn.peer_groups.[].domain_remote") | Boolean | | | | | - | [        encapsulation](## "router_bgp.address_family_evpn.peer_groups.[].encapsulation") | String | | | Valid Values:
- vxlan
- mpls | | - | [    evpn_hostflap_detection](## "router_bgp.address_family_evpn.evpn_hostflap_detection") | Dictionary | | | | | - | [      enabled](## "router_bgp.address_family_evpn.evpn_hostflap_detection.enabled") | Boolean | | | | | - | [      window](## "router_bgp.address_family_evpn.evpn_hostflap_detection.window") | Integer | | | Min: 0
Max: 4294967295 | Time (in seconds) to detect a MAC duplication issue | - | [      threshold](## "router_bgp.address_family_evpn.evpn_hostflap_detection.threshold") | Integer | | | Min: 0
Max: 4294967295 | Minimum number of MAC moves that indicate a MAC Duplication issue | - | [      expiry_timeout](## "router_bgp.address_family_evpn.evpn_hostflap_detection.expiry_timeout") | Integer | | | Min: 0
Max: 4294967295 | Time (in seconds) to purge a MAC duplication issue | - | [    route](## "router_bgp.address_family_evpn.route") | Dictionary | | | | | - | [      import_match_failure_action](## "router_bgp.address_family_evpn.route.import_match_failure_action") | String | | | Valid Values:
- discard | | - | [  address_family_rtc](## "router_bgp.address_family_rtc") | Dictionary | | | | | - | [    peer_groups](## "router_bgp.address_family_rtc.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_rtc.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_rtc.peer_groups.[].activate") | Boolean | | | | | - | [        default_route_target](## "router_bgp.address_family_rtc.peer_groups.[].default_route_target") | Dictionary | | | | | - | [          only](## "router_bgp.address_family_rtc.peer_groups.[].default_route_target.only") | Boolean | | | | | - | [          encoding_origin_as_omit](## "router_bgp.address_family_rtc.peer_groups.[].default_route_target.encoding_origin_as_omit") | String | | | | | - | [  address_family_ipv4](## "router_bgp.address_family_ipv4") | Dictionary | | | | | - | [    networks](## "router_bgp.address_family_ipv4.networks") | List, items: Dictionary | | | | | - | [      - prefix](## "router_bgp.address_family_ipv4.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [        route_map](## "router_bgp.address_family_ipv4.networks.[].route_map") | String | | | | Route-map name | - | [    peer_groups](## "router_bgp.address_family_ipv4.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_ipv4.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_ipv4.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv4.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv4.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [        default_originate](## "router_bgp.address_family_ipv4.peer_groups.[].default_originate") | Dictionary | | | | | - | [          always](## "router_bgp.address_family_ipv4.peer_groups.[].default_originate.always") | Boolean | | | | | - | [          route_map](## "router_bgp.address_family_ipv4.peer_groups.[].default_originate.route_map") | String | | | | Route-map name | - | [        next_hop](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | - | [          address_family_ipv6_originate](## "router_bgp.address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6_originate") | Boolean | | | | | - | [        prefix_list_in](## "router_bgp.address_family_ipv4.peer_groups.[].prefix_list_in") | String | | | | Inbound prefix-list name | - | [        prefix_list_out](## "router_bgp.address_family_ipv4.peer_groups.[].prefix_list_out") | String | | | | Outbound prefix-list name | - | [    neighbors](## "router_bgp.address_family_ipv4.neighbors") | List, items: Dictionary | | | | | - | [      - ip_address](## "router_bgp.address_family_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | - | [        activate](## "router_bgp.address_family_ipv4.neighbors.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv4.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv4.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        prefix_list_in](## "router_bgp.address_family_ipv4.neighbors.[].prefix_list_in") | String | | | | Inbound prefix-list name | - | [        prefix_list_out](## "router_bgp.address_family_ipv4.neighbors.[].prefix_list_out") | String | | | | Prefix-list name | - | [        default_originate](## "router_bgp.address_family_ipv4.neighbors.[].default_originate") | Dictionary | | | | | - | [          always](## "router_bgp.address_family_ipv4.neighbors.[].default_originate.always") | Boolean | | | | | - | [          route_map](## "router_bgp.address_family_ipv4.neighbors.[].default_originate.route_map") | String | | | | | - | [  address_family_ipv4_multicast](## "router_bgp.address_family_ipv4_multicast") | Dictionary | | | | | - | [    peer_groups](## "router_bgp.address_family_ipv4_multicast.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [    neighbors](## "router_bgp.address_family_ipv4_multicast.neighbors") | List, items: Dictionary | | | | | - | [      - ip_address](## "router_bgp.address_family_ipv4_multicast.neighbors.[].ip_address") | String | Required, Unique | | | | - | [        activate](## "router_bgp.address_family_ipv4_multicast.neighbors.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv4_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv4_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [    redistribute_routes](## "router_bgp.address_family_ipv4_multicast.redistribute_routes") | List, items: Dictionary | | | | | - | [      - source_protocol](## "router_bgp.address_family_ipv4_multicast.redistribute_routes.[].source_protocol") | String | Required, Unique | | | | - | [        route_map](## "router_bgp.address_family_ipv4_multicast.redistribute_routes.[].route_map") | String | | | | | - | [  address_family_ipv6](## "router_bgp.address_family_ipv6") | Dictionary | | | | | - | [    networks](## "router_bgp.address_family_ipv6.networks") | List, items: Dictionary | | | | | - | [      - prefix](## "router_bgp.address_family_ipv6.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [        route_map](## "router_bgp.address_family_ipv6.networks.[].route_map") | String | | | | Route-map name | - | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_ipv6.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_ipv6.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv6.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv6.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [        prefix_list_in](## "router_bgp.address_family_ipv6.peer_groups.[].prefix_list_in") | String | | | | Inbound prefix-list name | - | [        prefix_list_out](## "router_bgp.address_family_ipv6.peer_groups.[].prefix_list_out") | String | | | | Outbound prefix-list name | - | [    neighbors](## "router_bgp.address_family_ipv6.neighbors") | List, items: Dictionary | | | | | - | [      - ip_address](## "router_bgp.address_family_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | - | [        activate](## "router_bgp.address_family_ipv6.neighbors.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_ipv6.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_ipv6.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        prefix_list_in](## "router_bgp.address_family_ipv6.neighbors.[].prefix_list_in") | String | | | | Inbound prefix-list name | - | [        prefix_list_out](## "router_bgp.address_family_ipv6.neighbors.[].prefix_list_out") | String | | | | Outbound prefix-list name | - | [    redistribute_routes](## "router_bgp.address_family_ipv6.redistribute_routes") | List, items: Dictionary | | | | | - | [      - source_protocol](## "router_bgp.address_family_ipv6.redistribute_routes.[].source_protocol") | String | Required, Unique | | | | - | [        route_map](## "router_bgp.address_family_ipv6.redistribute_routes.[].route_map") | String | | | | | - | [  address_family_vpn_ipv4](## "router_bgp.address_family_vpn_ipv4") | Dictionary | | | | | - | [    domain_identifier](## "router_bgp.address_family_vpn_ipv4.domain_identifier") | String | | | | | - | [    peer_groups](## "router_bgp.address_family_vpn_ipv4.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_vpn_ipv4.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_vpn_ipv4.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_vpn_ipv4.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_vpn_ipv4.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [    route](## "router_bgp.address_family_vpn_ipv4.route") | Dictionary | | | | | - | [      import_match_failure_action](## "router_bgp.address_family_vpn_ipv4.route.import_match_failure_action") | String | | | Valid Values:
- discard | | - | [    neighbors](## "router_bgp.address_family_vpn_ipv4.neighbors") | List, items: Dictionary | | | | | - | [      - ip_address](## "router_bgp.address_family_vpn_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | - | [        activate](## "router_bgp.address_family_vpn_ipv4.neighbors.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_vpn_ipv4.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_vpn_ipv4.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [    neighbor_default_encapsulation_mpls_next_hop_self](## "router_bgp.address_family_vpn_ipv4.neighbor_default_encapsulation_mpls_next_hop_self") | Dictionary | | | | | - | [      source_interface](## "router_bgp.address_family_vpn_ipv4.neighbor_default_encapsulation_mpls_next_hop_self.source_interface") | String | | | | | - | [  address_family_vpn_ipv6](## "router_bgp.address_family_vpn_ipv6") | Dictionary | | | | | - | [    domain_identifier](## "router_bgp.address_family_vpn_ipv6.domain_identifier") | String | | | | | - | [    peer_groups](## "router_bgp.address_family_vpn_ipv6.peer_groups") | List, items: Dictionary | | | | | - | [      - name](## "router_bgp.address_family_vpn_ipv6.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [        activate](## "router_bgp.address_family_vpn_ipv6.peer_groups.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_vpn_ipv6.peer_groups.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_vpn_ipv6.peer_groups.[].route_map_out") | String | | | | Outbound route-map name | - | [    route](## "router_bgp.address_family_vpn_ipv6.route") | Dictionary | | | | | - | [      import_match_failure_action](## "router_bgp.address_family_vpn_ipv6.route.import_match_failure_action") | String | | | Valid Values:
- discard | | - | [    neighbors](## "router_bgp.address_family_vpn_ipv6.neighbors") | List, items: Dictionary | | | | | - | [      - ip_address](## "router_bgp.address_family_vpn_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | - | [        activate](## "router_bgp.address_family_vpn_ipv6.neighbors.[].activate") | Boolean | | | | | - | [        route_map_in](## "router_bgp.address_family_vpn_ipv6.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [        route_map_out](## "router_bgp.address_family_vpn_ipv6.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [    neighbor_default_encapsulation_mpls_next_hop_self](## "router_bgp.address_family_vpn_ipv6.neighbor_default_encapsulation_mpls_next_hop_self") | Dictionary | | | | | - | [      source_interface](## "router_bgp.address_family_vpn_ipv6.neighbor_default_encapsulation_mpls_next_hop_self.source_interface") | String | | | | | - | [  vrfs](## "router_bgp.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.vrfs.[].name") | String | Required, Unique | | | VRF name | - | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher | - | [      evpn_multicast](## "router_bgp.vrfs.[].evpn_multicast") | Boolean | | | | | - | [      evpn_multicast_address_family](## "router_bgp.vrfs.[].evpn_multicast_address_family") | Dictionary | | | | Enable per-AF EVPN multicast settings | - | [        ipv4](## "router_bgp.vrfs.[].evpn_multicast_address_family.ipv4") | Dictionary | | | | | - | [          transit](## "router_bgp.vrfs.[].evpn_multicast_address_family.ipv4.transit") | Boolean | | | | Enable EVPN multicast transit mode | - | [      route_targets](## "router_bgp.vrfs.[].route_targets") | Dictionary | | | | | - | [        import](## "router_bgp.vrfs.[].route_targets.import") | List, items: Dictionary | | | | | - | [          - address_family](## "router_bgp.vrfs.[].route_targets.import.[].address_family") | String | Required, Unique | | | | - | [            route_targets](## "router_bgp.vrfs.[].route_targets.import.[].route_targets") | List, items: String | | | | | - | [              - <str>](## "router_bgp.vrfs.[].route_targets.import.[].route_targets.[].<str>") | String | | | | | - | [        export](## "router_bgp.vrfs.[].route_targets.export") | List, items: Dictionary | | | | | - | [          - address_family](## "router_bgp.vrfs.[].route_targets.export.[].address_family") | String | Required, Unique | | | | - | [            route_targets](## "router_bgp.vrfs.[].route_targets.export.[].route_targets") | List, items: String | | | | | - | [              - <str>](## "router_bgp.vrfs.[].route_targets.export.[].route_targets.[].<str>") | String | | | | | - | [      router_id](## "router_bgp.vrfs.[].router_id") | String | | | | in IP address format A.B.C.D | - | [      timers](## "router_bgp.vrfs.[].timers") | String | | | | BGP Keepalive and Hold Timer values in seconds as string "<0-3600> <0-3600>" | - | [      networks](## "router_bgp.vrfs.[].networks") | List, items: Dictionary | | | | | - | [        - prefix](## "router_bgp.vrfs.[].networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [          route_map](## "router_bgp.vrfs.[].networks.[].route_map") | String | | | | | - | [      updates](## "router_bgp.vrfs.[].updates") | Dictionary | | | | | - | [        wait_for_convergence](## "router_bgp.vrfs.[].updates.wait_for_convergence") | Boolean | | | | Disables FIB updates and route advertisement when the BGP instance is initiated until the BGP convergence state is reached.
| - | [        wait_install](## "router_bgp.vrfs.[].updates.wait_install") | Boolean | | | | 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.
| - | [      listen_ranges](## "router_bgp.vrfs.[].listen_ranges") | List, items: Dictionary | | | | Improved "listen_ranges" data model to support multiple listen ranges and additional filter capabilities
| - | [        - prefix](## "router_bgp.vrfs.[].listen_ranges.[].prefix") | String | | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [          peer_id_include_router_id](## "router_bgp.vrfs.[].listen_ranges.[].peer_id_include_router_id") | Boolean | | | | Include router ID as part of peer filter | - | [          peer_group](## "router_bgp.vrfs.[].listen_ranges.[].peer_group") | String | | | | Peer-group name | - | [          peer_filter](## "router_bgp.vrfs.[].listen_ranges.[].peer_filter") | String | | | | Peer-filter name
note: `peer_filter`` or `remote_as` is required but mutually exclusive.
If both are defined, peer_filter takes precedence
| - | [          remote_as](## "router_bgp.vrfs.[].listen_ranges.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [      neighbors](## "router_bgp.vrfs.[].neighbors") | List, items: Dictionary | | | | | - | [        - ip_address](## "router_bgp.vrfs.[].neighbors.[].ip_address") | String | Required, Unique | | | | - | [          peer_group](## "router_bgp.vrfs.[].neighbors.[].peer_group") | String | | | | Peer-group name | - | [          remote_as](## "router_bgp.vrfs.[].neighbors.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [          password](## "router_bgp.vrfs.[].neighbors.[].password") | String | | | | | - | [          passive](## "router_bgp.vrfs.[].neighbors.[].passive") | Boolean | | | | | - | [          remove_private_as](## "router_bgp.vrfs.[].neighbors.[].remove_private_as") | Dictionary | | | | Remove private AS numbers in outbound AS path | - | [            enabled](## "router_bgp.vrfs.[].neighbors.[].remove_private_as.enabled") | Boolean | | | | | - | [            all](## "router_bgp.vrfs.[].neighbors.[].remove_private_as.all") | Boolean | | | | | - | [            replace_as](## "router_bgp.vrfs.[].neighbors.[].remove_private_as.replace_as") | Boolean | | | | | - | [          remove_private_as_ingress](## "router_bgp.vrfs.[].neighbors.[].remove_private_as_ingress") | Dictionary | | | | | - | [            enabled](## "router_bgp.vrfs.[].neighbors.[].remove_private_as_ingress.enabled") | Boolean | | | | | - | [            replace_as](## "router_bgp.vrfs.[].neighbors.[].remove_private_as_ingress.replace_as") | Boolean | | | | | - | [          weight](## "router_bgp.vrfs.[].neighbors.[].weight") | Integer | | | Min: 0
Max: 65535 | | - | [          local_as](## "router_bgp.vrfs.[].neighbors.[].local_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [          as_path](## "router_bgp.vrfs.[].neighbors.[].as_path") | Dictionary | | | | BGP AS-PATH options | - | [            remote_as_replace_out](## "router_bgp.vrfs.[].neighbors.[].as_path.remote_as_replace_out") | Boolean | | | | Replace AS number with local AS number | - | [            prepend_own_disabled](## "router_bgp.vrfs.[].neighbors.[].as_path.prepend_own_disabled") | Boolean | | | | Disable prepending own AS number to AS path | - | [          description](## "router_bgp.vrfs.[].neighbors.[].description") | String | | | | | - | [          route_reflector_client](## "router_bgp.vrfs.[].neighbors.[].route_reflector_client") | Boolean | | | | | - | [          ebgp_multihop](## "router_bgp.vrfs.[].neighbors.[].ebgp_multihop") | Integer | | | Min: 1
Max: 255 | Time-to-live in range of hops | - | [          next_hop_self](## "router_bgp.vrfs.[].neighbors.[].next_hop_self") | Boolean | | | | | - | [          shutdown](## "router_bgp.vrfs.[].neighbors.[].shutdown") | Boolean | | | | | - | [          bfd](## "router_bgp.vrfs.[].neighbors.[].bfd") | Boolean | | | | | - | [          timers](## "router_bgp.vrfs.[].neighbors.[].timers") | String | | | | BGP Keepalive and Hold Timer values in seconds as string "<0-3600> <0-3600>" | - | [          rib_in_pre_policy_retain](## "router_bgp.vrfs.[].neighbors.[].rib_in_pre_policy_retain") | Dictionary | | | | | - | [            enabled](## "router_bgp.vrfs.[].neighbors.[].rib_in_pre_policy_retain.enabled") | Boolean | | | | | - | [            all](## "router_bgp.vrfs.[].neighbors.[].rib_in_pre_policy_retain.all") | Boolean | | | | | - | [          send_community](## "router_bgp.vrfs.[].neighbors.[].send_community") | String | | | | 'all' or a combination of 'standard', 'extended', 'large' and 'link-bandwidth (w/options)' | - | [          maximum_routes](## "router_bgp.vrfs.[].neighbors.[].maximum_routes") | Integer | | | | | - | [          maximum_routes_warning_limit](## "router_bgp.vrfs.[].neighbors.[].maximum_routes_warning_limit") | String | | | | Maximum number of routes after which a warning is issued (0 means never warn) or
Percentage of maximum number of routes at which to warn ("<1-100> percent")
| - | [          maximum_routes_warning_only](## "router_bgp.vrfs.[].neighbors.[].maximum_routes_warning_only") | Boolean | | | | | - | [          allowas_in](## "router_bgp.vrfs.[].neighbors.[].allowas_in") | Dictionary | | | | | - | [            enabled](## "router_bgp.vrfs.[].neighbors.[].allowas_in.enabled") | Boolean | | | | | - | [            times](## "router_bgp.vrfs.[].neighbors.[].allowas_in.times") | Integer | | | Min: 1
Max: 10 | Number of local ASNs allowed in a BGP update | - | [          default_originate](## "router_bgp.vrfs.[].neighbors.[].default_originate") | Dictionary | | | | | - | [            enabled](## "router_bgp.vrfs.[].neighbors.[].default_originate.enabled") | Boolean | | | | | - | [            always](## "router_bgp.vrfs.[].neighbors.[].default_originate.always") | Boolean | | | | | - | [            route_map](## "router_bgp.vrfs.[].neighbors.[].default_originate.route_map") | String | | | | | - | [          update_source](## "router_bgp.vrfs.[].neighbors.[].update_source") | String | | | | | - | [          route_map_in](## "router_bgp.vrfs.[].neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [          route_map_out](## "router_bgp.vrfs.[].neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [          prefix_list_in](## "router_bgp.vrfs.[].neighbors.[].prefix_list_in") | String | | | | Inbound prefix-list name | - | [          prefix_list_out](## "router_bgp.vrfs.[].neighbors.[].prefix_list_out") | String | | | | Outbound prefix-list name | - | [      neighbor_interfaces](## "router_bgp.vrfs.[].neighbor_interfaces") | List, items: Dictionary | | | | | - | [        - name](## "router_bgp.vrfs.[].neighbor_interfaces.[].name") | String | Required, Unique | | | Interface name | - | [          remote_as](## "router_bgp.vrfs.[].neighbor_interfaces.[].remote_as") | String | | | | BGP AS <1-4294967295> or AS number in asdot notation <1-65535>.<0-65535> | - | [          peer_group](## "router_bgp.vrfs.[].neighbor_interfaces.[].peer_group") | String | | | | Peer-group name | - | [          peer_filter](## "router_bgp.vrfs.[].neighbor_interfaces.[].peer_filter") | String | | | | Peer-filter name | - | [          description](## "router_bgp.vrfs.[].neighbor_interfaces.[].description") | String | | | | | - | [      redistribute_routes](## "router_bgp.vrfs.[].redistribute_routes") | List, items: Dictionary | | | | | - | [        - source_protocol](## "router_bgp.vrfs.[].redistribute_routes.[].source_protocol") | String | Required, Unique | | | | - | [          route_map](## "router_bgp.vrfs.[].redistribute_routes.[].route_map") | String | | | | | - | [      aggregate_addresses](## "router_bgp.vrfs.[].aggregate_addresses") | List, items: Dictionary | | | | | - | [        - prefix](## "router_bgp.vrfs.[].aggregate_addresses.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [          advertise_only](## "router_bgp.vrfs.[].aggregate_addresses.[].advertise_only") | Boolean | | | | | - | [          as_set](## "router_bgp.vrfs.[].aggregate_addresses.[].as_set") | Boolean | | | | | - | [          summary_only](## "router_bgp.vrfs.[].aggregate_addresses.[].summary_only") | Boolean | | | | | - | [          attribute_map](## "router_bgp.vrfs.[].aggregate_addresses.[].attribute_map") | String | | | | | - | [          match_map](## "router_bgp.vrfs.[].aggregate_addresses.[].match_map") | String | | | | | - | [      address_family_ipv4](## "router_bgp.vrfs.[].address_family_ipv4") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_ipv4.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_ipv4.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv4.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv4.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths") | Dictionary | | | | | - | [            install](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install") | Boolean | | | | | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send") | Dictionary | | | | | - | [              any](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.any") | Boolean | | | | | - | [              backup](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.backup") | Boolean | | | | | - | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp") | Boolean | | | | | - | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send | - | [              limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send | - | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv4.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].activate") | Boolean | | | | | - | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        peer_groups](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups") | List, items: Dictionary | | | | | - | [          - name](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].activate") | Boolean | | | | | - | [            next_hop](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].next_hop") | Dictionary | | | | | - | [              address_family_ipv6](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6") | Dictionary | | | | | - | [                enabled](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6.enabled") | Boolean | Required | | | | - | [                originate](## "router_bgp.vrfs.[].address_family_ipv4.peer_groups.[].next_hop.address_family_ipv6.originate") | Boolean | | | | | - | [        networks](## "router_bgp.vrfs.[].address_family_ipv4.networks") | List, items: Dictionary | | | | | - | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv4.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" | - | [            route_map](## "router_bgp.vrfs.[].address_family_ipv4.networks.[].route_map") | String | | | | | - | [      address_family_ipv6](## "router_bgp.vrfs.[].address_family_ipv6") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_ipv6.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_ipv6.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv6.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv6.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths") | Dictionary | | | | | - | [            install](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install") | Boolean | | | | | - | [            install_ecmp_primary](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.install_ecmp_primary") | Boolean | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.receive") | Boolean | | | | | - | [            send](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send") | Dictionary | | | | | - | [              any](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.any") | Boolean | | | | | - | [              backup](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.backup") | Boolean | | | | | - | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp") | Boolean | | | | | - | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send | - | [              limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send | - | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv6.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].activate") | Boolean | | | | | - | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        peer_groups](## "router_bgp.vrfs.[].address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | - | [          - name](## "router_bgp.vrfs.[].address_family_ipv6.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv6.peer_groups.[].activate") | Boolean | | | | | - | [        networks](## "router_bgp.vrfs.[].address_family_ipv6.networks") | List, items: Dictionary | | | | | - | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv6.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [            route_map](## "router_bgp.vrfs.[].address_family_ipv6.networks.[].route_map") | String | | | | | - | [      address_family_ipv4_multicast](## "router_bgp.vrfs.[].address_family_ipv4_multicast") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp.additional_paths") | Dictionary | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv4_multicast.bgp.additional_paths.receive") | Boolean | | | | | - | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].activate") | Boolean | | | | | - | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv4_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        peer_groups](## "router_bgp.vrfs.[].address_family_ipv4_multicast.peer_groups") | List, items: Dictionary | | | | | - | [          - name](## "router_bgp.vrfs.[].address_family_ipv4_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv4_multicast.peer_groups.[].activate") | Boolean | | | | | - | [        networks](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks") | List, items: Dictionary | | | | | - | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A.B.C.D/E" | - | [            route_map](## "router_bgp.vrfs.[].address_family_ipv4_multicast.networks.[].route_map") | String | | | | | - | [      address_family_ipv6_multicast](## "router_bgp.vrfs.[].address_family_ipv6_multicast") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [          additional_paths](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp.additional_paths") | Dictionary | | | | | - | [            receive](## "router_bgp.vrfs.[].address_family_ipv6_multicast.bgp.additional_paths.receive") | Boolean | | | | | - | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].activate") | Boolean | | | | | - | [            route_map_in](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [            route_map_out](## "router_bgp.vrfs.[].address_family_ipv6_multicast.neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [        peer_groups](## "router_bgp.vrfs.[].address_family_ipv6_multicast.peer_groups") | List, items: Dictionary | | | | | - | [          - name](## "router_bgp.vrfs.[].address_family_ipv6_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [            activate](## "router_bgp.vrfs.[].address_family_ipv6_multicast.peer_groups.[].activate") | Boolean | | | | | - | [        networks](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks") | List, items: Dictionary | | | | | - | [          - prefix](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks.[].prefix") | String | Required, Unique | | | IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [            route_map](## "router_bgp.vrfs.[].address_family_ipv6_multicast.networks.[].route_map") | String | | | | | - | [      address_family_flow_spec_ipv4](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [        neighbors](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_flow_spec_ipv4.neighbors.[].activate") | Boolean | | | | | - | [      address_family_flow_spec_ipv6](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6") | Dictionary | | | | | - | [        bgp](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.bgp") | Dictionary | | | | | - | [          missing_policy](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.bgp.missing_policy") | Dictionary | | | | | - | [            direction_in_action](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            direction_out_action](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [        neighbors](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.neighbors") | List, items: Dictionary | | | | | - | [          - ip_address](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | - | [            activate](## "router_bgp.vrfs.[].address_family_flow_spec_ipv6.neighbors.[].activate") | Boolean | | | | | - | [      address_families](## "router_bgp.vrfs.[].address_families") deprecated | List, items: Dictionary | | | | This key is deprecated. Support will be removed in AVD version v5.0.0. Use address_family_* instead. | - | [        - address_family](## "router_bgp.vrfs.[].address_families.[].address_family") | String | Required, Unique | | | | - | [          bgp](## "router_bgp.vrfs.[].address_families.[].bgp") | Dictionary | | | | | - | [            missing_policy](## "router_bgp.vrfs.[].address_families.[].bgp.missing_policy") | Dictionary | | | | | - | [              direction_in_action](## "router_bgp.vrfs.[].address_families.[].bgp.missing_policy.direction_in_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [              direction_out_action](## "router_bgp.vrfs.[].address_families.[].bgp.missing_policy.direction_out_action") | String | | | Valid Values:
- deny
- deny-in-out
- permit | | - | [            additional_paths](## "router_bgp.vrfs.[].address_families.[].bgp.additional_paths") | List, items: String | | | | | - | [              - <str>](## "router_bgp.vrfs.[].address_families.[].bgp.additional_paths.[].<str>") | String | | | | | - | [          neighbors](## "router_bgp.vrfs.[].address_families.[].neighbors") | List, items: Dictionary | | | | | - | [            - ip_address](## "router_bgp.vrfs.[].address_families.[].neighbors.[].ip_address") | String | Required, Unique | | | | - | [              activate](## "router_bgp.vrfs.[].address_families.[].neighbors.[].activate") | Boolean | | | | | - | [              route_map_in](## "router_bgp.vrfs.[].address_families.[].neighbors.[].route_map_in") | String | | | | Inbound route-map name | - | [              route_map_out](## "router_bgp.vrfs.[].address_families.[].neighbors.[].route_map_out") | String | | | | Outbound route-map name | - | [          peer_groups](## "router_bgp.vrfs.[].address_families.[].peer_groups") | List, items: Dictionary | | | | | - | [            - name](## "router_bgp.vrfs.[].address_families.[].peer_groups.[].name") | String | Required, Unique | | | Peer-group name | - | [              activate](## "router_bgp.vrfs.[].address_families.[].peer_groups.[].activate") | Boolean | | | | | - | [              next_hop](## "router_bgp.vrfs.[].address_families.[].peer_groups.[].next_hop") | Dictionary | | | | | - | [                address_family_ipv6_originate](## "router_bgp.vrfs.[].address_families.[].peer_groups.[].next_hop.address_family_ipv6_originate") | Boolean | | | | | - | [          networks](## "router_bgp.vrfs.[].address_families.[].networks") | List, items: Dictionary | | | | | - | [            - prefix](## "router_bgp.vrfs.[].address_families.[].networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I" | - | [              route_map](## "router_bgp.vrfs.[].address_families.[].networks.[].route_map") | String | | | | | - | [      eos_cli](## "router_bgp.vrfs.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the Router BGP, VRF definition in the final EOS configuration
| - | [  session_trackers](## "router_bgp.session_trackers") | List, items: Dictionary | | | | | - | [    - name](## "router_bgp.session_trackers.[].name") | String | Required, Unique | | | Name of session tracker | - | [      recovery_delay](## "router_bgp.session_trackers.[].recovery_delay") | Integer | | | Min: 1
Max: 3600 | Recovery delay in seconds | - -=== "YAML" - - ```yaml - router_bgp: - as: - router_id: - distance: - external_routes: - internal_routes: - local_routes: - graceful_restart: - enabled: - restart_time: - stalepath_time: - graceful_restart_helper: - enabled: - restart_time: - long_lived: - maximum_paths: - paths: - ecmp: - updates: - wait_for_convergence: - wait_install: - bgp_cluster_id: - bgp_defaults: - - - bgp: - default: - ipv4_unicast: - ipv4_unicast_transport_ipv6: - bestpath: - d_path: - listen_ranges: - - prefix: - peer_id_include_router_id: - peer_group: - peer_filter: - remote_as: - peer_groups: - - name: - type: - remote_as: - local_as: - description: - shutdown: - as_path: - remote_as_replace_out: - prepend_own_disabled: - remove_private_as: - enabled: - all: - replace_as: - remove_private_as_ingress: - enabled: - replace_as: - peer_filter: - next_hop_unchanged: - update_source: - route_reflector_client: - bfd: - ebgp_multihop: - next_hop_self: - password: - passive: - default_originate: - enabled: - always: - route_map: - send_community: - maximum_routes: - maximum_routes_warning_limit: - maximum_routes_warning_only: - link_bandwidth: - enabled: - default: - allowas_in: - enabled: - times: - weight: - timers: - rib_in_pre_policy_retain: - enabled: - all: - route_map_in: - route_map_out: - bgp_listen_range_prefix: - session_tracker: - neighbors: - - ip_address: - peer_group: - remote_as: - local_as: - as_path: - remote_as_replace_out: - prepend_own_disabled: - description: - route_reflector_client: - passive: - shutdown: - update_source: - bfd: - weight: - timers: - route_map_in: - route_map_out: - default_originate: - enabled: - always: - route_map: - send_community: - maximum_routes: - maximum_routes_warning_limit: - maximum_routes_warning_only: - allowas_in: - enabled: - times: - ebgp_multihop: - next_hop_self: - link_bandwidth: - enabled: - default: - rib_in_pre_policy_retain: - enabled: - all: - remove_private_as: - enabled: - all: - replace_as: - remove_private_as_ingress: - enabled: - replace_as: - session_tracker: - neighbor_interfaces: - - name: - remote_as: - peer_group: - description: - peer_filter: - aggregate_addresses: - - prefix: - advertise_only: - as_set: - summary_only: - attribute_map: - match_map: - redistribute_routes: - - source_protocol: - route_map: - vlan_aware_bundles: - - name: - tenant: - description: - rd: - rd_evpn_domain: - domain: - rd: - route_targets: - both: - - - import: - - - export: - - - import_evpn_domains: - - domain: - route_target: - export_evpn_domains: - - domain: - route_target: - import_export_evpn_domains: - - domain: - route_target: - redistribute_routes: - - - no_redistribute_routes: - - - vlan: - vlans: - - id: - tenant: - rd: - rd_evpn_domain: - domain: - rd: - eos_cli: - route_targets: - both: - - - import: - - - export: - - - import_evpn_domains: - - domain: - route_target: - export_evpn_domains: - - domain: - route_target: - import_export_evpn_domains: - - domain: - route_target: - redistribute_routes: - - - no_redistribute_routes: - - - vpws: - - name: - rd: - route_targets: - import_export: - mpls_control_word: - label_flow: - mtu: - pseudowires: - - name: - id_local: - id_remote: - address_family_evpn: - domain_identifier: - neighbor_default: - encapsulation: - next_hop_self_source_interface: - next_hop_self_received_evpn_routes: - enable: - inter_domain: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - domain_remote: - encapsulation: - evpn_hostflap_detection: - enabled: - window: - threshold: - expiry_timeout: - route: - import_match_failure_action: - address_family_rtc: - peer_groups: - - name: - activate: - default_route_target: - only: - encoding_origin_as_omit: - address_family_ipv4: - networks: - - prefix: - route_map: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - default_originate: - always: - route_map: - next_hop: - address_family_ipv6_originate: - prefix_list_in: - prefix_list_out: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - prefix_list_in: - prefix_list_out: - default_originate: - always: - route_map: - address_family_ipv4_multicast: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - redistribute_routes: - - source_protocol: - route_map: - address_family_ipv6: - networks: - - prefix: - route_map: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - prefix_list_in: - prefix_list_out: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - prefix_list_in: - prefix_list_out: - redistribute_routes: - - source_protocol: - route_map: - address_family_vpn_ipv4: - domain_identifier: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - route: - import_match_failure_action: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - neighbor_default_encapsulation_mpls_next_hop_self: - source_interface: - address_family_vpn_ipv6: - domain_identifier: - peer_groups: - - name: - activate: - route_map_in: - route_map_out: - route: - import_match_failure_action: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - neighbor_default_encapsulation_mpls_next_hop_self: - source_interface: - vrfs: - - name: - rd: - evpn_multicast: - evpn_multicast_address_family: - ipv4: - transit: - route_targets: - import: - - address_family: - route_targets: - - - export: - - address_family: - route_targets: - - - router_id: - timers: - networks: - - prefix: - route_map: - updates: - wait_for_convergence: - wait_install: - listen_ranges: - - prefix: - peer_id_include_router_id: - peer_group: - peer_filter: - remote_as: - neighbors: - - ip_address: - peer_group: - remote_as: - password: - passive: - remove_private_as: - enabled: - all: - replace_as: - remove_private_as_ingress: - enabled: - replace_as: - weight: - local_as: - as_path: - remote_as_replace_out: - prepend_own_disabled: - description: - route_reflector_client: - ebgp_multihop: - next_hop_self: - shutdown: - bfd: - timers: - rib_in_pre_policy_retain: - enabled: - all: - send_community: - maximum_routes: - maximum_routes_warning_limit: - maximum_routes_warning_only: - allowas_in: - enabled: - times: - default_originate: - enabled: - always: - route_map: - update_source: - route_map_in: - route_map_out: - prefix_list_in: - prefix_list_out: - neighbor_interfaces: - - name: - remote_as: - peer_group: - peer_filter: - description: - redistribute_routes: - - source_protocol: - route_map: - aggregate_addresses: - - prefix: - advertise_only: - as_set: - summary_only: - attribute_map: - match_map: - address_family_ipv4: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - additional_paths: - install: - install_ecmp_primary: - receive: - send: - any: - backup: - ecmp: - ecmp_limit: - limit: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - peer_groups: - - name: - activate: - next_hop: - address_family_ipv6: - enabled: - originate: - networks: - - prefix: - route_map: - address_family_ipv6: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - additional_paths: - install: - install_ecmp_primary: - receive: - send: - any: - backup: - ecmp: - ecmp_limit: - limit: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - peer_groups: - - name: - activate: - networks: - - prefix: - route_map: - address_family_ipv4_multicast: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - additional_paths: - receive: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - peer_groups: - - name: - activate: - networks: - - prefix: - route_map: - address_family_ipv6_multicast: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - additional_paths: - receive: - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - peer_groups: - - name: - activate: - networks: - - prefix: - route_map: - address_family_flow_spec_ipv4: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - neighbors: - - ip_address: - activate: - address_family_flow_spec_ipv6: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - neighbors: - - ip_address: - activate: - address_families: - - address_family: - bgp: - missing_policy: - direction_in_action: - direction_out_action: - additional_paths: - - - neighbors: - - ip_address: - activate: - route_map_in: - route_map_out: - peer_groups: - - name: - activate: - next_hop: - address_family_ipv6_originate: - networks: - - prefix: - route_map: - eos_cli: - session_trackers: - - name: - recovery_delay: - ``` - -## Router General configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_general](## "router_general") | Dictionary | | | | | - | [  router_id](## "router_general.router_id") | Dictionary | | | | | - | [    ipv4](## "router_general.router_id.ipv4") | String | | | | IPv4 Address | - | [    ipv6](## "router_general.router_id.ipv6") | String | | | | IPv6 Address | - | [  nexthop_fast_failover](## "router_general.nexthop_fast_failover") | Boolean | | False | | | - | [  vrfs](## "router_general.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "router_general.vrfs.[].name") | String | Required, Unique | | | Destination-VRF | - | [      leak_routes](## "router_general.vrfs.[].leak_routes") | List, items: Dictionary | | | | | - | [        - source_vrf](## "router_general.vrfs.[].leak_routes.[].source_vrf") | String | | | | | - | [          subscribe_policy](## "router_general.vrfs.[].leak_routes.[].subscribe_policy") | String | | | | Route-Map Policy | - | [      routes](## "router_general.vrfs.[].routes") | Dictionary | | | | | - | [        dynamic_prefix_lists](## "router_general.vrfs.[].routes.dynamic_prefix_lists") | List, items: Dictionary | | | | | - | [          - name](## "router_general.vrfs.[].routes.dynamic_prefix_lists.[].name") | String | | | | Dynamic Prefix List Name | - -=== "YAML" - - ```yaml - router_general: - router_id: - ipv4: - ipv6: - nexthop_fast_failover: - vrfs: - - name: - leak_routes: - - source_vrf: - subscribe_policy: - routes: - dynamic_prefix_lists: - - name: - ``` - -## Router IGMP Configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_igmp](## "router_igmp") | Dictionary | | | | | - | [  ssm_aware](## "router_igmp.ssm_aware") | Boolean | | | | | - -=== "YAML" - - ```yaml - router_igmp: - ssm_aware: - ``` - -## Router ISIS - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_isis](## "router_isis") | Dictionary | | | | | - | [  instance](## "router_isis.instance") | String | | | | ISIS Instance Name | - | [  net](## "router_isis.net") | String | | | | CLNS Address like "49.0001.0001.0000.0001.00" | - | [  router_id](## "router_isis.router_id") | String | | | | IPv4 Address | - | [  is_type](## "router_isis.is_type") | String | | | Valid Values:
- level-1
- level-1-2
- level-2 | | - | [  log_adjacency_changes](## "router_isis.log_adjacency_changes") | Boolean | | | | | - | [  mpls_ldp_sync_default](## "router_isis.mpls_ldp_sync_default") | Boolean | | | | | - | [  timers](## "router_isis.timers") | Dictionary | | | | | - | [    local_convergence](## "router_isis.timers.local_convergence") | Dictionary | | | | | - | [      protected_prefixes](## "router_isis.timers.local_convergence.protected_prefixes") | Boolean | | | | | - | [      delay](## "router_isis.timers.local_convergence.delay") | Integer | | 10000 | | Delay in milliseconds. | - | [  advertise](## "router_isis.advertise") | Dictionary | | | | | - | [    passive_only](## "router_isis.advertise.passive_only") | Boolean | | | | | - | [  address_family](## "router_isis.address_family") | List, items: String | | | | | - | [    - <str>](## "router_isis.address_family.[].<str>") deprecated | String | | | Valid Values:
- ipv4
- ipv6
- ipv4 unicast
- ipv6 unicast | Address FamilyThis key is deprecated. Support will be removed in AVD version 5.0.0. Use address_family_ipv4.enabled or address_family_ipv6.enabled instead. | - | [  isis_af_defaults](## "router_isis.isis_af_defaults") | List, items: String | | | | | - | [    - <str>](## "router_isis.isis_af_defaults.[].<str>") deprecated | String | | | | EOS CLI rendered under the address families
Example "maximum-paths 64"
This key is deprecated. Support will be removed in AVD version 5.0.0. Use address_family_ipv4/address_family_ipv6 instead. | - | [  redistribute_routes](## "router_isis.redistribute_routes") | List, items: Dictionary | | | | | - | [    - source_protocol](## "router_isis.redistribute_routes.[].source_protocol") | String | Required | | Valid Values:
- bgp
- connected
- isis
- ospf
- ospfv3
- static | | - | [      route_map](## "router_isis.redistribute_routes.[].route_map") | String | | | | Route-map name | - | [      include_leaked](## "router_isis.redistribute_routes.[].include_leaked") | Boolean | | | | | - | [      ospf_route_type](## "router_isis.redistribute_routes.[].ospf_route_type") | String | | | Valid Values:
- external
- internal
- nssa-external | ospf_route_type is required with source_protocols 'ospf' and 'ospfv3' | - | [  address_family_ipv4](## "router_isis.address_family_ipv4") | Dictionary | | | | | - | [    enabled](## "router_isis.address_family_ipv4.enabled") | Boolean | | | | | - | [    maximum_paths](## "router_isis.address_family_ipv4.maximum_paths") | Integer | | | Min: 1
Max: 128 | | - | [    fast_reroute_ti_lfa](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa") | Dictionary | | | | | - | [      mode](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa.mode") | String | | | Valid Values:
- link-protection
- node-protection | | - | [      level](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa.level") | String | | | Valid Values:
- level-1
- level-2 | | - | [      srlg](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa.srlg") | Dictionary | | | | Shared Risk Link Group | - | [        enable](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa.srlg.enable") | Boolean | | | | | - | [        strict](## "router_isis.address_family_ipv4.fast_reroute_ti_lfa.srlg.strict") | Boolean | | | | | - | [    tunnel_source_labeled_unicast](## "router_isis.address_family_ipv4.tunnel_source_labeled_unicast") | Dictionary | | | | | - | [      enabled](## "router_isis.address_family_ipv4.tunnel_source_labeled_unicast.enabled") | Boolean | | | | | - | [      rcf](## "router_isis.address_family_ipv4.tunnel_source_labeled_unicast.rcf") | String | | | | Route Control Function | - | [  address_family_ipv6](## "router_isis.address_family_ipv6") | Dictionary | | | | | - | [    enabled](## "router_isis.address_family_ipv6.enabled") | Boolean | | | | | - | [    maximum_paths](## "router_isis.address_family_ipv6.maximum_paths") | Integer | | | Min: 1
Max: 128 | | - | [    fast_reroute_ti_lfa](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa") | Dictionary | | | | | - | [      mode](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa.mode") | String | | | Valid Values:
- link-protection
- node-protection | | - | [      level](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa.level") | String | | | Valid Values:
- level-1
- level-2 | Optional, default is to protect all levels | - | [      srlg](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa.srlg") | Dictionary | | | | Shared Risk Link Group | - | [        enable](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa.srlg.enable") | Boolean | | | | | - | [        strict](## "router_isis.address_family_ipv6.fast_reroute_ti_lfa.srlg.strict") | Boolean | | | | | - | [  segment_routing_mpls](## "router_isis.segment_routing_mpls") | Dictionary | | | | | - | [    enabled](## "router_isis.segment_routing_mpls.enabled") | Boolean | | | | | - | [    router_id](## "router_isis.segment_routing_mpls.router_id") | String | | | | | - | [    prefix_segments](## "router_isis.segment_routing_mpls.prefix_segments") | List, items: Dictionary | | | | | - | [      - prefix](## "router_isis.segment_routing_mpls.prefix_segments.[].prefix") | String | | | | | - | [        index](## "router_isis.segment_routing_mpls.prefix_segments.[].index") | Integer | | | | | - | [  no_passive_interfaces](## "router_isis.no_passive_interfaces") | List | | | | Unused key - to be removed from eos_designs. | - -=== "YAML" - - ```yaml - router_isis: - instance: - net: - router_id: - is_type: - log_adjacency_changes: - mpls_ldp_sync_default: - timers: - local_convergence: - protected_prefixes: - delay: - advertise: - passive_only: - address_family: - - - isis_af_defaults: - - - redistribute_routes: - - source_protocol: - route_map: - include_leaked: - ospf_route_type: - address_family_ipv4: - enabled: - maximum_paths: - fast_reroute_ti_lfa: - mode: - level: - srlg: - enable: - strict: - tunnel_source_labeled_unicast: - enabled: - rcf: - address_family_ipv6: - enabled: - maximum_paths: - fast_reroute_ti_lfa: - mode: - level: - srlg: - enable: - strict: - segment_routing_mpls: - enabled: - router_id: - prefix_segments: - - prefix: - index: - no_passive_interfaces: - ``` - -## Router L2 VPN - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_l2_vpn](## "router_l2_vpn") | Dictionary | | | | | - | [  arp_learning_bridged](## "router_l2_vpn.arp_learning_bridged") | Boolean | | | | | - | [  arp_proxy](## "router_l2_vpn.arp_proxy") | Dictionary | | | | | - | [    prefix_list](## "router_l2_vpn.arp_proxy.prefix_list") | String | | | | Prefix-list name. ARP Proxying is disabled for IPv4 addresses defined in the prefix-list. | - | [  arp_selective_install](## "router_l2_vpn.arp_selective_install") | Boolean | | | | | - | [  nd_learning_bridged](## "router_l2_vpn.nd_learning_bridged") | Boolean | | | | | - | [  nd_proxy](## "router_l2_vpn.nd_proxy") | Dictionary | | | | | - | [    prefix_list](## "router_l2_vpn.nd_proxy.prefix_list") | String | | | | Prefix-list name. ND Proxying is disabled for IPv6 addresses defined in the prefix-list. | - | [  nd_rs_flooding_disabled](## "router_l2_vpn.nd_rs_flooding_disabled") | Boolean | | | | | - | [  virtual_router_nd_ra_flooding_disabled](## "router_l2_vpn.virtual_router_nd_ra_flooding_disabled") | Boolean | | | | | - -=== "YAML" - - ```yaml - router_l2_vpn: - arp_learning_bridged: - arp_proxy: - prefix_list: - arp_selective_install: - nd_learning_bridged: - nd_proxy: - prefix_list: - nd_rs_flooding_disabled: - virtual_router_nd_ra_flooding_disabled: - ``` - -## Router Msdp - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_msdp](## "router_msdp") | Dictionary | | | | | - | [  originator_id_local_interface](## "router_msdp.originator_id_local_interface") | String | | | | Interface to use for originator ID | - | [  rejected_limit](## "router_msdp.rejected_limit") | Integer | | | Min: 0
Max: 40000 | Maximum number of rejected SA messages allowed in cache | - | [  forward_register_packets](## "router_msdp.forward_register_packets") | Boolean | | | | | - | [  connection_retry_interval](## "router_msdp.connection_retry_interval") | Integer | | | Min: 1
Max: 65535 | | - | [  group_limits](## "router_msdp.group_limits") | List, items: Dictionary | | | | | - | [    - source_prefix](## "router_msdp.group_limits.[].source_prefix") | String | Required, Unique | | | Source address prefix | - | [      limit](## "router_msdp.group_limits.[].limit") | Integer | Required | | Min: 0
Max: 40000 | Limit for SAs matching the source address prefix | - | [  peers](## "router_msdp.peers") | List, items: Dictionary | | | | | - | [    - ipv4_address](## "router_msdp.peers.[].ipv4_address") | String | Required, Unique | | | Peer IP Address | - | [      default_peer](## "router_msdp.peers.[].default_peer") | Dictionary | | | | | - | [        enabled](## "router_msdp.peers.[].default_peer.enabled") | Boolean | | | | | - | [        prefix_list](## "router_msdp.peers.[].default_peer.prefix_list") | String | | | | Prefix list to filter source of SA messages | - | [      local_interface](## "router_msdp.peers.[].local_interface") | String | | | | | - | [      description](## "router_msdp.peers.[].description") | String | | | | | - | [      disabled](## "router_msdp.peers.[].disabled") | Boolean | | | | Disable the MSDP peer | - | [      sa_limit](## "router_msdp.peers.[].sa_limit") | Integer | | | Min: 0
Max: 40000 | Maximum number of SA messages allowed in cache | - | [      mesh_groups](## "router_msdp.peers.[].mesh_groups") | List, items: Dictionary | | | | | - | [        - name](## "router_msdp.peers.[].mesh_groups.[].name") | String | Required, Unique | | | Mesh group name | - | [      keepalive](## "router_msdp.peers.[].keepalive") | Dictionary | | | | | - | [        keepalive_timer](## "router_msdp.peers.[].keepalive.keepalive_timer") | Integer | Required | | Min: 1
Max: 65535 | | - | [        hold_timer](## "router_msdp.peers.[].keepalive.hold_timer") | Integer | Required | | Min: 1
Max: 65535 | Must be greater than keepalive timer | - | [      sa_filter](## "router_msdp.peers.[].sa_filter") | Dictionary | | | | | - | [        in_list](## "router_msdp.peers.[].sa_filter.in_list") | String | | | | ACL to filter inbound SA messages | - | [        out_list](## "router_msdp.peers.[].sa_filter.out_list") | String | | | | ACL to filter outbound SA messages | - | [  vrfs](## "router_msdp.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "router_msdp.vrfs.[].name") | String | Required, Unique | | | VRF name | - | [      originator_id_local_interface](## "router_msdp.vrfs.[].originator_id_local_interface") | String | | | | Interface to use for originator ID | - | [      rejected_limit](## "router_msdp.vrfs.[].rejected_limit") | Integer | | | Min: 0
Max: 40000 | Maximum number of rejected SA messages allowed in cache | - | [      forward_register_packets](## "router_msdp.vrfs.[].forward_register_packets") | Boolean | | | | | - | [      connection_retry_interval](## "router_msdp.vrfs.[].connection_retry_interval") | Integer | | | Min: 1
Max: 65535 | | - | [      group_limits](## "router_msdp.vrfs.[].group_limits") | List, items: Dictionary | | | | | - | [        - source_prefix](## "router_msdp.vrfs.[].group_limits.[].source_prefix") | String | Required, Unique | | | Source address prefix | - | [          limit](## "router_msdp.vrfs.[].group_limits.[].limit") | Integer | Required | | Min: 0
Max: 40000 | Limit for SAs matching the source address prefix | - | [      peers](## "router_msdp.vrfs.[].peers") | List, items: Dictionary | | | | | - | [        - ipv4_address](## "router_msdp.vrfs.[].peers.[].ipv4_address") | String | Required, Unique | | | Peer IP Address | - | [          default_peer](## "router_msdp.vrfs.[].peers.[].default_peer") | Dictionary | | | | | - | [            enabled](## "router_msdp.vrfs.[].peers.[].default_peer.enabled") | Boolean | | | | | - | [            prefix_list](## "router_msdp.vrfs.[].peers.[].default_peer.prefix_list") | String | | | | Prefix list to filter source of SA messages | - | [          local_interface](## "router_msdp.vrfs.[].peers.[].local_interface") | String | | | | | - | [          description](## "router_msdp.vrfs.[].peers.[].description") | String | | | | | - | [          disabled](## "router_msdp.vrfs.[].peers.[].disabled") | Boolean | | | | Disable the MSDP peer | - | [          sa_limit](## "router_msdp.vrfs.[].peers.[].sa_limit") | Integer | | | Min: 0
Max: 40000 | Maximum number of SA messages allowed in cache | - | [          mesh_groups](## "router_msdp.vrfs.[].peers.[].mesh_groups") | List, items: Dictionary | | | | | - | [            - name](## "router_msdp.vrfs.[].peers.[].mesh_groups.[].name") | String | Required, Unique | | | Mesh group name | - | [          keepalive](## "router_msdp.vrfs.[].peers.[].keepalive") | Dictionary | | | | | - | [            keepalive_timer](## "router_msdp.vrfs.[].peers.[].keepalive.keepalive_timer") | Integer | Required | | Min: 1
Max: 65535 | | - | [            hold_timer](## "router_msdp.vrfs.[].peers.[].keepalive.hold_timer") | Integer | Required | | Min: 1
Max: 65535 | Must be greater than keepalive timer | - | [          sa_filter](## "router_msdp.vrfs.[].peers.[].sa_filter") | Dictionary | | | | | - | [            in_list](## "router_msdp.vrfs.[].peers.[].sa_filter.in_list") | String | | | | ACL to filter inbound SA messages | - | [            out_list](## "router_msdp.vrfs.[].peers.[].sa_filter.out_list") | String | | | | ACL to filter outbound SA messages | - -=== "YAML" - - ```yaml - router_msdp: - originator_id_local_interface: - rejected_limit: - forward_register_packets: - connection_retry_interval: - group_limits: - - source_prefix: - limit: - peers: - - ipv4_address: - default_peer: - enabled: - prefix_list: - local_interface: - description: - disabled: - sa_limit: - mesh_groups: - - name: - keepalive: - keepalive_timer: - hold_timer: - sa_filter: - in_list: - out_list: - vrfs: - - name: - originator_id_local_interface: - rejected_limit: - forward_register_packets: - connection_retry_interval: - group_limits: - - source_prefix: - limit: - peers: - - ipv4_address: - default_peer: - enabled: - prefix_list: - local_interface: - description: - disabled: - sa_limit: - mesh_groups: - - name: - keepalive: - keepalive_timer: - hold_timer: - sa_filter: - in_list: - out_list: - ``` - -## Router Multicast - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_multicast](## "router_multicast") | Dictionary | | | | | - | [  ipv4](## "router_multicast.ipv4") | Dictionary | | | | | - | [    counters](## "router_multicast.ipv4.counters") | Dictionary | | | | | - | [      rate_period_decay](## "router_multicast.ipv4.counters.rate_period_decay") | Integer | | | Min: 0
Max: 600 | Rate in seconds | - | [    routing](## "router_multicast.ipv4.routing") | Boolean | | | | | - | [    multipath](## "router_multicast.ipv4.multipath") | String | | | Valid Values:
- none
- deterministic
- deterministic color
- deterministic router-id | | - | [    software_forwarding](## "router_multicast.ipv4.software_forwarding") | String | | | Valid Values:
- kernel
- sfe | | - | [    rpf](## "router_multicast.ipv4.rpf") | Dictionary | | | | | - | [      routes](## "router_multicast.ipv4.rpf.routes") | List, items: Dictionary | | | | | - | [        - source_prefix](## "router_multicast.ipv4.rpf.routes.[].source_prefix") | String | Required | | | Source address A.B.C.D or Source prefix A.B.C.D/E | - | [          destinations](## "router_multicast.ipv4.rpf.routes.[].destinations") | List, items: Dictionary | Required | | | | - | [            - nexthop](## "router_multicast.ipv4.rpf.routes.[].destinations.[].nexthop") | String | Required | | | Next-hop IP address or interface name | - | [              distance](## "router_multicast.ipv4.rpf.routes.[].destinations.[].distance") | Integer | | | Min: 1
Max: 255 | Administrative distance for this route | - | [  vrfs](## "router_multicast.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "router_multicast.vrfs.[].name") | String | | | | | - | [      ipv4](## "router_multicast.vrfs.[].ipv4") | Dictionary | | | | | - | [        routing](## "router_multicast.vrfs.[].ipv4.routing") | Boolean | | | | | - -=== "YAML" - - ```yaml - router_multicast: - ipv4: - counters: - rate_period_decay: - routing: - multipath: - software_forwarding: - rpf: - routes: - - source_prefix: - destinations: - - nexthop: - distance: - vrfs: - - name: - ipv4: - routing: - ``` - -## Router OSPF Configuration - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_ospf](## "router_ospf") | Dictionary | | | | | - | [  process_ids](## "router_ospf.process_ids") | List, items: Dictionary | | | | | - | [    - id](## "router_ospf.process_ids.[].id") | Integer | Required, Unique | | | OSPF Process ID | - | [      vrf](## "router_ospf.process_ids.[].vrf") | String | | | | VRF Name for OSPF Process | - | [      passive_interface_default](## "router_ospf.process_ids.[].passive_interface_default") | Boolean | | | | | - | [      router_id](## "router_ospf.process_ids.[].router_id") | String | | | | IPv4 Address | - | [      distance](## "router_ospf.process_ids.[].distance") | Dictionary | | | | | - | [        external](## "router_ospf.process_ids.[].distance.external") | Integer | | | Min: 1
Max: 255 | | - | [        inter_area](## "router_ospf.process_ids.[].distance.inter_area") | Integer | | | Min: 1
Max: 255 | | - | [        intra_area](## "router_ospf.process_ids.[].distance.intra_area") | Integer | | | Min: 1
Max: 255 | | - | [      log_adjacency_changes_detail](## "router_ospf.process_ids.[].log_adjacency_changes_detail") | Boolean | | | | | - | [      network_prefixes](## "router_ospf.process_ids.[].network_prefixes") | List, items: Dictionary | | | | | - | [        - ipv4_prefix](## "router_ospf.process_ids.[].network_prefixes.[].ipv4_prefix") | String | Required, Unique | | | | - | [          area](## "router_ospf.process_ids.[].network_prefixes.[].area") | String | | | | | - | [      bfd_enable](## "router_ospf.process_ids.[].bfd_enable") | Boolean | | | | | - | [      bfd_adjacency_state_any](## "router_ospf.process_ids.[].bfd_adjacency_state_any") | Boolean | | | | | - | [      no_passive_interfaces](## "router_ospf.process_ids.[].no_passive_interfaces") | List, items: String | | | | | - | [        - <str>](## "router_ospf.process_ids.[].no_passive_interfaces.[].<str>") | String | | | | Interface Name | - | [      distribute_list_in](## "router_ospf.process_ids.[].distribute_list_in") | Dictionary | | | | | - | [        route_map](## "router_ospf.process_ids.[].distribute_list_in.route_map") | String | | | | | - | [      max_lsa](## "router_ospf.process_ids.[].max_lsa") | Integer | | | | | - | [      timers](## "router_ospf.process_ids.[].timers") | Dictionary | | | | | - | [        lsa](## "router_ospf.process_ids.[].timers.lsa") | Dictionary | | | | | - | [          rx_min_interval](## "router_ospf.process_ids.[].timers.lsa.rx_min_interval") | Integer | | | Min: 0
Max: 600000 | Min interval in msecs between accepting the same LSA | - | [          tx_delay](## "router_ospf.process_ids.[].timers.lsa.tx_delay") | Dictionary | | | | | - | [            initial](## "router_ospf.process_ids.[].timers.lsa.tx_delay.initial") | Integer | | | Min: 0
Max: 600000 | Delay to generate first occurrence of LSA in msecs | - | [            min](## "router_ospf.process_ids.[].timers.lsa.tx_delay.min") | Integer | | | Min: 1
Max: 600000 | Min delay between originating the same LSA in msecs | - | [            max](## "router_ospf.process_ids.[].timers.lsa.tx_delay.max") | Integer | | | Min: 1
Max: 600000 | 1-600000 Maximum delay between originating the same LSA in msec | - | [        spf_delay](## "router_ospf.process_ids.[].timers.spf_delay") | Dictionary | | | | | - | [          initial](## "router_ospf.process_ids.[].timers.spf_delay.initial") | Integer | | | Min: 0
Max: 600000 | Initial SPF schedule delay in msecs | - | [          min](## "router_ospf.process_ids.[].timers.spf_delay.min") | Integer | | | Min: 0
Max: 65535000 | Min Hold time between two SPFs in msecs | - | [          max](## "router_ospf.process_ids.[].timers.spf_delay.max") | Integer | | | Min: 0
Max: 65535000 | Max wait time between two SPFs in msecs | - | [      default_information_originate](## "router_ospf.process_ids.[].default_information_originate") | Dictionary | | | | | - | [        always](## "router_ospf.process_ids.[].default_information_originate.always") | Boolean | | | | | - | [      summary_addresses](## "router_ospf.process_ids.[].summary_addresses") | List, items: Dictionary | | | | | - | [        - prefix](## "router_ospf.process_ids.[].summary_addresses.[].prefix") | String | Required, Unique | | | Summary Prefix Address | - | [          tag](## "router_ospf.process_ids.[].summary_addresses.[].tag") | Integer | | | | | - | [          attribute_map](## "router_ospf.process_ids.[].summary_addresses.[].attribute_map") | String | | | | | - | [          not_advertise](## "router_ospf.process_ids.[].summary_addresses.[].not_advertise") | Boolean | | | | | - | [      redistribute](## "router_ospf.process_ids.[].redistribute") | Dictionary | | | | | - | [        static](## "router_ospf.process_ids.[].redistribute.static") | Dictionary | | | | | - | [          route_map](## "router_ospf.process_ids.[].redistribute.static.route_map") | String | | | | Route Map Name | - | [          include_leaked](## "router_ospf.process_ids.[].redistribute.static.include_leaked") | Boolean | | | | | - | [        connected](## "router_ospf.process_ids.[].redistribute.connected") | Dictionary | | | | | - | [          route_map](## "router_ospf.process_ids.[].redistribute.connected.route_map") | String | | | | Route Map Name | - | [          include_leaked](## "router_ospf.process_ids.[].redistribute.connected.include_leaked") | Boolean | | | | | - | [        bgp](## "router_ospf.process_ids.[].redistribute.bgp") | Dictionary | | | | | - | [          route_map](## "router_ospf.process_ids.[].redistribute.bgp.route_map") | String | | | | Route Map Name | - | [          include_leaked](## "router_ospf.process_ids.[].redistribute.bgp.include_leaked") | Boolean | | | | | - | [      auto_cost_reference_bandwidth](## "router_ospf.process_ids.[].auto_cost_reference_bandwidth") | Integer | | | | Bandwidth in mbps | - | [      areas](## "router_ospf.process_ids.[].areas") | List, items: Dictionary | | | | | - | [        - id](## "router_ospf.process_ids.[].areas.[].id") | String | Required, Unique | | | | - | [          filter](## "router_ospf.process_ids.[].areas.[].filter") | Dictionary | | | | | - | [            networks](## "router_ospf.process_ids.[].areas.[].filter.networks") | List, items: String | | | | | - | [              - <str>](## "router_ospf.process_ids.[].areas.[].filter.networks.[].<str>") | String | | | | IPv4 Prefix | - | [            prefix_list](## "router_ospf.process_ids.[].areas.[].filter.prefix_list") | String | | | | Prefix-List Name | - | [          type](## "router_ospf.process_ids.[].areas.[].type") | String | | normal | Valid Values:
- normal
- stub
- nssa | | - | [          no_summary](## "router_ospf.process_ids.[].areas.[].no_summary") | Boolean | | | | | - | [          nssa_only](## "router_ospf.process_ids.[].areas.[].nssa_only") | Boolean | | | | | - | [          default_information_originate](## "router_ospf.process_ids.[].areas.[].default_information_originate") | Dictionary | | | | | - | [            metric](## "router_ospf.process_ids.[].areas.[].default_information_originate.metric") | Integer | | | Min: 1
Max: 65535 | Metric for default route | - | [            metric_type](## "router_ospf.process_ids.[].areas.[].default_information_originate.metric_type") | Integer | | | Valid Values:
- 1
- 2 | OSPF metric type for default route | - | [      maximum_paths](## "router_ospf.process_ids.[].maximum_paths") | Integer | | | Min: 1
Max: 128 | | - | [      max_metric](## "router_ospf.process_ids.[].max_metric") | Dictionary | | | | | - | [        router_lsa](## "router_ospf.process_ids.[].max_metric.router_lsa") | Dictionary | | | | | - | [          external_lsa](## "router_ospf.process_ids.[].max_metric.router_lsa.external_lsa") | Dictionary | | | | | - | [            override_metric](## "router_ospf.process_ids.[].max_metric.router_lsa.external_lsa.override_metric") | Integer | | | Min: 1
Max: 16777215 | | - | [          include_stub](## "router_ospf.process_ids.[].max_metric.router_lsa.include_stub") | Boolean | | | | | - | [          on_startup](## "router_ospf.process_ids.[].max_metric.router_lsa.on_startup") | String | | | | "wait-for-bgp" or Integer 5-86400
Example: "wait-for-bgp" Or "222"
| - | [          summary_lsa](## "router_ospf.process_ids.[].max_metric.router_lsa.summary_lsa") | Dictionary | | | | | - | [            override_metric](## "router_ospf.process_ids.[].max_metric.router_lsa.summary_lsa.override_metric") | Integer | | | Min: 1
Max: 16777215 | | - | [      mpls_ldp_sync_default](## "router_ospf.process_ids.[].mpls_ldp_sync_default") | Boolean | | | | | - -=== "YAML" - - ```yaml - router_ospf: - process_ids: - - id: - vrf: - passive_interface_default: - router_id: - distance: - external: - inter_area: - intra_area: - log_adjacency_changes_detail: - network_prefixes: - - ipv4_prefix: - area: - bfd_enable: - bfd_adjacency_state_any: - no_passive_interfaces: - - - distribute_list_in: - route_map: - max_lsa: - timers: - lsa: - rx_min_interval: - tx_delay: - initial: - min: - max: - spf_delay: - initial: - min: - max: - default_information_originate: - always: - summary_addresses: - - prefix: - tag: - attribute_map: - not_advertise: - redistribute: - static: - route_map: - include_leaked: - connected: - route_map: - include_leaked: - bgp: - route_map: - include_leaked: - auto_cost_reference_bandwidth: - areas: - - id: - filter: - networks: - - - prefix_list: - type: - no_summary: - nssa_only: - default_information_originate: - metric: - metric_type: - maximum_paths: - max_metric: - router_lsa: - external_lsa: - override_metric: - include_stub: - on_startup: - summary_lsa: - override_metric: - mpls_ldp_sync_default: - ``` - -## Router PIM Sparse Mode - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_pim_sparse_mode](## "router_pim_sparse_mode") | Dictionary | | | | | - | [  ipv4](## "router_pim_sparse_mode.ipv4") | Dictionary | | | | | - | [    bfd](## "router_pim_sparse_mode.ipv4.bfd") | Boolean | | | | Enable/Disable BFD | - | [    ssm_range](## "router_pim_sparse_mode.ipv4.ssm_range") | String | | | | IPv4 Prefix associated with SSM | - | [    rp_addresses](## "router_pim_sparse_mode.ipv4.rp_addresses") | List, items: Dictionary | | | | | - | [      - address](## "router_pim_sparse_mode.ipv4.rp_addresses.[].address") | String | Required, Unique | | | RP Address | - | [        groups](## "router_pim_sparse_mode.ipv4.rp_addresses.[].groups") | List, items: String | | | | | - | [          - <str>](## "router_pim_sparse_mode.ipv4.rp_addresses.[].groups.[].<str>") | String | | | | | - | [        access_lists](## "router_pim_sparse_mode.ipv4.rp_addresses.[].access_lists") | List, items: String | | | | | - | [          - <str>](## "router_pim_sparse_mode.ipv4.rp_addresses.[].access_lists.[].<str>") | String | | | | | - | [        priority](## "router_pim_sparse_mode.ipv4.rp_addresses.[].priority") | Integer | | | Min: 0
Max: 255 | | - | [        hashmask](## "router_pim_sparse_mode.ipv4.rp_addresses.[].hashmask") | Integer | | | Min: 0
Max: 32 | | - | [        override](## "router_pim_sparse_mode.ipv4.rp_addresses.[].override") | Boolean | | | | | - | [    anycast_rps](## "router_pim_sparse_mode.ipv4.anycast_rps") | List, items: Dictionary | | | | | - | [      - address](## "router_pim_sparse_mode.ipv4.anycast_rps.[].address") | String | Required, Unique | | | Anycast RP Address | - | [        other_anycast_rp_addresses](## "router_pim_sparse_mode.ipv4.anycast_rps.[].other_anycast_rp_addresses") | List, items: Dictionary | | | | | - | [          - address](## "router_pim_sparse_mode.ipv4.anycast_rps.[].other_anycast_rp_addresses.[].address") | String | Required, Unique | | | Other Anycast RP Address | - | [            register_count](## "router_pim_sparse_mode.ipv4.anycast_rps.[].other_anycast_rp_addresses.[].register_count") | Integer | | | | | - | [  vrfs](## "router_pim_sparse_mode.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "router_pim_sparse_mode.vrfs.[].name") | String | | | | VRF Name | - | [      ipv4](## "router_pim_sparse_mode.vrfs.[].ipv4") | Dictionary | | | | | - | [        bfd](## "router_pim_sparse_mode.vrfs.[].ipv4.bfd") | Boolean | | | | Enable/Disable BFD | - | [        rp_addresses](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses") | List, items: Dictionary | | | | | - | [          - address](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].address") | String | Required | | | RP Address | - | [            groups](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].groups") | List, items: String | | | | | - | [              - <str>](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].groups.[].<str>") | String | | | | | - | [            access_lists](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].access_lists") | List, items: String | | | | | - | [              - <str>](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].access_lists.[].<str>") | String | | | | | - | [            priority](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].priority") | Integer | | | Min: 0
Max: 255 | | - | [            hashmask](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].hashmask") | Integer | | | Min: 0
Max: 32 | | - | [            override](## "router_pim_sparse_mode.vrfs.[].ipv4.rp_addresses.[].override") | Boolean | | | | | - -=== "YAML" - - ```yaml - router_pim_sparse_mode: - ipv4: - bfd: - ssm_range: - rp_addresses: - - address: - groups: - - - access_lists: - - - priority: - hashmask: - override: - anycast_rps: - - address: - other_anycast_rp_addresses: - - address: - register_count: - vrfs: - - name: - ipv4: - bfd: - rp_addresses: - - address: - groups: - - - access_lists: - - - priority: - hashmask: - override: - ``` - -## Router Traffic Engineering - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [router_traffic_engineering](## "router_traffic_engineering") | Dictionary | | | | | - | [  router_id](## "router_traffic_engineering.router_id") | Dictionary | | | | | - | [    ipv4](## "router_traffic_engineering.router_id.ipv4") | String | | | | | - | [    ipv6](## "router_traffic_engineering.router_id.ipv6") | String | | | | | - | [  segment_routing](## "router_traffic_engineering.segment_routing") | Dictionary | | | | | - | [    colored_tunnel_rib](## "router_traffic_engineering.segment_routing.colored_tunnel_rib") | Boolean | | | | | - | [    policy_endpoints](## "router_traffic_engineering.segment_routing.policy_endpoints") | List, items: Dictionary | | | | | - | [      - address](## "router_traffic_engineering.segment_routing.policy_endpoints.[].address") | String | | | | IPv4 or IPv6 address | - | [        colors](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors") | List, items: Dictionary | | | | | - | [          - value](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].value") | Integer | Required, Unique | | | | - | [            binding_sid](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].binding_sid") | Integer | | | | | - | [            description](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].description") | String | | | | | - | [            name](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].name") | String | | | | | - | [            sbfd_remote_discriminator](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].sbfd_remote_discriminator") | String | | | | IPv4 address or 32 bit integer | - | [            path_group](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group") | List, items: Dictionary | | | | | - | [              - preference](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].preference") | Integer | | | | | - | [                explicit_null](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].explicit_null") | String | | | Valid Values:
- ipv4
- ipv6
- ipv4 ipv6
- none | | - | [                segment_list](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].segment_list") | List, items: Dictionary | | | | | - | [                  - label_stack](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].segment_list.[].label_stack") | String | | | | Label Stack as string.
Example: "100 2000 30"
| - | [                    weight](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].segment_list.[].weight") | Integer | | | | | - | [                    index](## "router_traffic_engineering.segment_routing.policy_endpoints.[].colors.[].path_group.[].segment_list.[].index") | Integer | | | | | - -=== "YAML" - - ```yaml - router_traffic_engineering: - router_id: - ipv4: - ipv6: - segment_routing: - colored_tunnel_rib: - policy_endpoints: - - address: - colors: - - value: - binding_sid: - description: - name: - sbfd_remote_discriminator: - path_group: - - preference: - explicit_null: - segment_list: - - label_stack: - weight: - index: - ``` - -## Service Routing Configuration BGP - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [service_routing_configuration_bgp](## "service_routing_configuration_bgp") | Dictionary | | | | | - | [  no_equals_default](## "service_routing_configuration_bgp.no_equals_default") | Boolean | | | | | - -=== "YAML" - - ```yaml - service_routing_configuration_bgp: - no_equals_default: - ``` - -## Service Routing Protocols Model - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [service_routing_protocols_model](## "service_routing_protocols_model") | String | | | Valid Values:
- multi-agent
- ribd | | - -=== "YAML" - - ```yaml - service_routing_protocols_model: - ``` - -## Service Unsupported Transceiver - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [service_unsupported_transceiver](## "service_unsupported_transceiver") | Dictionary | | | | | - | [  license_name](## "service_unsupported_transceiver.license_name") | String | | | | | - | [  license_key](## "service_unsupported_transceiver.license_key") | String | | | | | - -=== "YAML" - - ```yaml - service_unsupported_transceiver: - license_name: - license_key: - ``` - -## Sflow - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [sflow](## "sflow") | Dictionary | | | | | - | [  sample](## "sflow.sample") | Integer | | | | | - | [  dangerous](## "sflow.dangerous") | Boolean | | | | | - | [  polling_interval](## "sflow.polling_interval") | Integer | | | | Polling interval in seconds | - | [  vrfs](## "sflow.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "sflow.vrfs.[].name") | String | Required, Unique | | | | - | [      destinations](## "sflow.vrfs.[].destinations") | List, items: Dictionary | | | | | - | [        - destination](## "sflow.vrfs.[].destinations.[].destination") | String | Required, Unique | | | Sflow Destination IP Address | - | [          port](## "sflow.vrfs.[].destinations.[].port") | Integer | | | | Port Number | - | [      source](## "sflow.vrfs.[].source") | String | | | | Source IP Address.
"source" and "source_interface" are mutually exclusive. If both are defined, "source_interface" takes precedence.
| - | [      source_interface](## "sflow.vrfs.[].source_interface") | String | | | | Source Interface | - | [  destinations](## "sflow.destinations") | List, items: Dictionary | | | | | - | [    - destination](## "sflow.destinations.[].destination") | String | Required, Unique | | | Sflow Destination IP Address | - | [      port](## "sflow.destinations.[].port") | Integer | | | | Port Number | - | [  source](## "sflow.source") | String | | | | Source IP Address.
"source" and "source_interface" are mutually exclusive. If both are defined, "source_interface" takes precedence.
| - | [  source_interface](## "sflow.source_interface") | String | | | | Source Interface | - | [  extensions](## "sflow.extensions") | List, items: Dictionary | | | | | - | [    - name](## "sflow.extensions.[].name") | String | Required, Unique | | | Extension Name | - | [      enabled](## "sflow.extensions.[].enabled") | Boolean | Required | | | Enable or Disable Extension | - | [  interface](## "sflow.interface") | Dictionary | | | | | - | [    disable](## "sflow.interface.disable") | Dictionary | | | | | - | [      default](## "sflow.interface.disable.default") | Boolean | | | | | - | [  run](## "sflow.run") | Boolean | | | | | - | [  hardware_acceleration](## "sflow.hardware_acceleration") | Dictionary | | | | | - | [    enabled](## "sflow.hardware_acceleration.enabled") | Boolean | | | | | - | [    sample](## "sflow.hardware_acceleration.sample") | Integer | | | | | - | [    modules](## "sflow.hardware_acceleration.modules") | List, items: Dictionary | | | | | - | [      - name](## "sflow.hardware_acceleration.modules.[].name") | String | Required, Unique | | | | - | [        enabled](## "sflow.hardware_acceleration.modules.[].enabled") | Boolean | | True | | | - -=== "YAML" - - ```yaml - sflow: - sample: - dangerous: - polling_interval: - vrfs: - - name: - destinations: - - destination: - port: - source: - source_interface: - destinations: - - destination: - port: - source: - source_interface: - extensions: - - name: - enabled: - interface: - disable: - default: - run: - hardware_acceleration: - enabled: - sample: - modules: - - name: - enabled: - ``` - -## Snmp Server - -SNMP settings - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [snmp_server](## "snmp_server") | Dictionary | | | | | - | [  engine_ids](## "snmp_server.engine_ids") | Dictionary | | | | | - | [    local](## "snmp_server.engine_ids.local") | String | | | | Engine ID in hexadecimal
| - | [    remotes](## "snmp_server.engine_ids.remotes") | List, items: Dictionary | | | | | - | [      - id](## "snmp_server.engine_ids.remotes.[].id") | String | | | | Remote engine ID in hexadecimal
| - | [        address](## "snmp_server.engine_ids.remotes.[].address") | String | | | | Hostname or IP of remote engine
| - | [        udp_port](## "snmp_server.engine_ids.remotes.[].udp_port") | Integer | | | | | - | [  contact](## "snmp_server.contact") | String | | | | SNMP contact | - | [  location](## "snmp_server.location") | String | | | | SNMP location | - | [  communities](## "snmp_server.communities") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.communities.[].name") | String | Required, Unique | | | Community name | - | [      access](## "snmp_server.communities.[].access") | String | | | Valid Values:
- ro
- rw | | - | [      access_list_ipv4](## "snmp_server.communities.[].access_list_ipv4") | Dictionary | | | | | - | [        name](## "snmp_server.communities.[].access_list_ipv4.name") | String | | | | IPv4 access list name | - | [      access_list_ipv6](## "snmp_server.communities.[].access_list_ipv6") | Dictionary | | | | | - | [        name](## "snmp_server.communities.[].access_list_ipv6.name") | String | | | | IPv6 access list name | - | [      view](## "snmp_server.communities.[].view") | String | | | | | - | [  ipv4_acls](## "snmp_server.ipv4_acls") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.ipv4_acls.[].name") | String | | | | IPv4 access list name | - | [      vrf](## "snmp_server.ipv4_acls.[].vrf") | String | | | | | - | [  ipv6_acls](## "snmp_server.ipv6_acls") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.ipv6_acls.[].name") | String | | | | IPv6 access list name | - | [      vrf](## "snmp_server.ipv6_acls.[].vrf") | String | | | | | - | [  local_interfaces](## "snmp_server.local_interfaces") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.local_interfaces.[].name") | String | Required, Unique | | | Interface name | - | [      vrf](## "snmp_server.local_interfaces.[].vrf") | String | | | | | - | [  views](## "snmp_server.views") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.views.[].name") | String | | | | SNMP view name | - | [      mib_family_name](## "snmp_server.views.[].mib_family_name") | String | | | | | - | [      included](## "snmp_server.views.[].included") | Boolean | | | | | - | [      MIB_family_name](## "snmp_server.views.[].MIB_family_name") deprecated | String | | | | This key is deprecated. Support will be removed in AVD version 5.0.0. Use mib_family_name instead. | - | [  groups](## "snmp_server.groups") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.groups.[].name") | String | | | | Group name | - | [      version](## "snmp_server.groups.[].version") | String | | | Valid Values:
- v1
- v2c
- v3 | | - | [      authentication](## "snmp_server.groups.[].authentication") | String | | | Valid Values:
- auth
- noauth
- priv | | - | [      read](## "snmp_server.groups.[].read") | String | | | | Read view | - | [      write](## "snmp_server.groups.[].write") | String | | | | Write view | - | [      notify](## "snmp_server.groups.[].notify") | String | | | | Notify view | - | [  users](## "snmp_server.users") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.users.[].name") | String | | | | Username | - | [      group](## "snmp_server.users.[].group") | String | | | | Group name | - | [      remote_address](## "snmp_server.users.[].remote_address") | String | | | | Hostname or ip of remote engine
The remote_address and udp_port are used for remote users
| - | [      udp_port](## "snmp_server.users.[].udp_port") | Integer | | | | udp_port will not be used if no remote_address is configured
| - | [      version](## "snmp_server.users.[].version") | String | | | Valid Values:
- v1
- v2c
- v3 | | - | [      localized](## "snmp_server.users.[].localized") | String | | | | Engine ID in hexadecimal for localizing auth and/or priv
| - | [      auth](## "snmp_server.users.[].auth") | String | | | | Hash algorithm
| - | [      auth_passphrase](## "snmp_server.users.[].auth_passphrase") | String | | | | Hashed authentication passphrase if localized is used else cleartext authentication passphrase
| - | [      priv](## "snmp_server.users.[].priv") | String | | | | Encryption algorithm
| - | [      priv_passphrase](## "snmp_server.users.[].priv_passphrase") | String | | | | Hashed privacy passphrase if localized is used else cleartext privacy passphrase
| - | [  hosts](## "snmp_server.hosts") | List, items: Dictionary | | | | | - | [    - host](## "snmp_server.hosts.[].host") | String | | | | Host IP address or name | - | [      vrf](## "snmp_server.hosts.[].vrf") | String | | | | | - | [      version](## "snmp_server.hosts.[].version") | String | | | Valid Values:
- 1
- 2c
- 3 | | - | [      community](## "snmp_server.hosts.[].community") | String | | | | Community name | - | [      users](## "snmp_server.hosts.[].users") | List, items: Dictionary | | | | | - | [        - username](## "snmp_server.hosts.[].users.[].username") | String | | | | | - | [          authentication_level](## "snmp_server.hosts.[].users.[].authentication_level") | String | | | Valid Values:
- auth
- noauth
- priv | | - | [  traps](## "snmp_server.traps") | Dictionary | | | | | - | [    enable](## "snmp_server.traps.enable") | Boolean | | False | | Enable or disable all snmp-traps
| - | [    snmp_traps](## "snmp_server.traps.snmp_traps") | List, items: Dictionary | | | | | - | [      - name](## "snmp_server.traps.snmp_traps.[].name") | String | | | | Enable or disable specific snmp-traps and their sub_traps
Examples:
- "bgp"
- "bgp established"
| - | [        enabled](## "snmp_server.traps.snmp_traps.[].enabled") | Boolean | | True | | | - | [  vrfs](## "snmp_server.vrfs") | List, items: Dictionary | | | | | - | [    - name](## "snmp_server.vrfs.[].name") | String | | | | VRF name | - | [      enable](## "snmp_server.vrfs.[].enable") | Boolean | | | | | - -=== "YAML" - - ```yaml - snmp_server: - engine_ids: - local: - remotes: - - id: - address: - udp_port: - contact: - location: - communities: - - name: - access: - access_list_ipv4: - name: - access_list_ipv6: - name: - view: - ipv4_acls: - - name: - vrf: - ipv6_acls: - - name: - vrf: - local_interfaces: - - name: - vrf: - views: - - name: - mib_family_name: - included: - MIB_family_name: - groups: - - name: - version: - authentication: - read: - write: - notify: - users: - - name: - group: - remote_address: - udp_port: - version: - localized: - auth: - auth_passphrase: - priv: - priv_passphrase: - hosts: - - host: - vrf: - version: - community: - users: - - username: - authentication_level: - traps: - enable: - snmp_traps: - - name: - enabled: - vrfs: - - name: - enable: - ``` - -## Spanning Tree - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [spanning_tree](## "spanning_tree") | Dictionary | | | | | - | [  root_super](## "spanning_tree.root_super") | Boolean | | | | | - | [  edge_port](## "spanning_tree.edge_port") | Dictionary | | | | | - | [    bpdufilter_default](## "spanning_tree.edge_port.bpdufilter_default") | Boolean | | | | | - | [    bpduguard_default](## "spanning_tree.edge_port.bpduguard_default") | Boolean | | | | | - | [  mode](## "spanning_tree.mode") | String | | | Valid Values:
- mstp
- rstp
- rapid-pvst
- none | | - | [  bpduguard_rate_limit](## "spanning_tree.bpduguard_rate_limit") | Dictionary | | | | | - | [    default](## "spanning_tree.bpduguard_rate_limit.default") | Boolean | | | | | - | [    count](## "spanning_tree.bpduguard_rate_limit.count") | Integer | | | | Maximum number of BPDUs per timer interval | - | [  rstp_priority](## "spanning_tree.rstp_priority") | Integer | | | | | - | [  mst](## "spanning_tree.mst") | Dictionary | | | | | - | [    pvst_border](## "spanning_tree.mst.pvst_border") | Boolean | | | | | - | [    configuration](## "spanning_tree.mst.configuration") | Dictionary | | | | | - | [      name](## "spanning_tree.mst.configuration.name") | String | | | | | - | [      revision](## "spanning_tree.mst.configuration.revision") | Integer | | | | 0-65535 | - | [      instances](## "spanning_tree.mst.configuration.instances") | List, items: Dictionary | | | | | - | [        - id](## "spanning_tree.mst.configuration.instances.[].id") | Integer | Required, Unique | | | Instance ID | - | [          vlans](## "spanning_tree.mst.configuration.instances.[].vlans") | String | | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 15,16,17,18
| - | [  mst_instances](## "spanning_tree.mst_instances") | List, items: Dictionary | | | | | - | [    - id](## "spanning_tree.mst_instances.[].id") | String | Required, Unique | | | Instance ID | - | [      priority](## "spanning_tree.mst_instances.[].priority") | Integer | | | | | - | [  no_spanning_tree_vlan](## "spanning_tree.no_spanning_tree_vlan") | String | | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 105,202,505-506
| - | [  rapid_pvst_instances](## "spanning_tree.rapid_pvst_instances") | List, items: Dictionary | | | | | - | [    - id](## "spanning_tree.rapid_pvst_instances.[].id") | String | Required, Unique | | | "< vlan_id >, < vlan_id >-< vlan_id >"
Example: 105,202,505-506
| - | [      priority](## "spanning_tree.rapid_pvst_instances.[].priority") | Integer | | | | | - -=== "YAML" - - ```yaml - spanning_tree: - root_super: - edge_port: - bpdufilter_default: - bpduguard_default: - mode: - bpduguard_rate_limit: - default: - count: - rstp_priority: - mst: - pvst_border: - configuration: - name: - revision: - instances: - - id: - vlans: - mst_instances: - - id: - priority: - no_spanning_tree_vlan: - rapid_pvst_instances: - - id: - priority: - ``` - -## Standard Access Lists - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [standard_access_lists](## "standard_access_lists") | List, items: Dictionary | | | | | - | [  - name](## "standard_access_lists.[].name") | String | Required, Unique | | | Access-list Name | - | [    counters_per_entry](## "standard_access_lists.[].counters_per_entry") | Boolean | | | | | - | [    sequence_numbers](## "standard_access_lists.[].sequence_numbers") | List, items: Dictionary | Required | | | | - | [      - sequence](## "standard_access_lists.[].sequence_numbers.[].sequence") | Integer | Required, Unique | | | Sequence ID | - | [        action](## "standard_access_lists.[].sequence_numbers.[].action") | String | Required | | | Action as string
Example: "deny ip any any" | - -=== "YAML" - - ```yaml - standard_access_lists: - - name: - counters_per_entry: - sequence_numbers: - - sequence: - action: - ``` - -## Static Routes - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [static_routes](## "static_routes") | List, items: Dictionary | | | | | - | [  - vrf](## "static_routes.[].vrf") | String | | | | VRF Name | - | [    destination_address_prefix](## "static_routes.[].destination_address_prefix") | String | | | | IPv4_network/Mask | - | [    interface](## "static_routes.[].interface") | String | | | | | - | [    gateway](## "static_routes.[].gateway") | String | | | | IPv4 Address | - | [    track_bfd](## "static_routes.[].track_bfd") | Boolean | | | | Track next-hop using BFD | - | [    distance](## "static_routes.[].distance") | Integer | | | Min: 1
Max: 255 | | - | [    tag](## "static_routes.[].tag") | Integer | | | Min: 0
Max: 4294967295 | | - | [    name](## "static_routes.[].name") | String | | | | Description | - | [    metric](## "static_routes.[].metric") | Integer | | | Min: 0
Max: 4294967295 | | - -=== "YAML" - - ```yaml - static_routes: - - vrf: - destination_address_prefix: - interface: - gateway: - track_bfd: - distance: - tag: - name: - metric: - ``` - -## Switchport Default - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [switchport_default](## "switchport_default") | Dictionary | | | | | - | [  mode](## "switchport_default.mode") | String | | | Valid Values:
- routed
- access | | - | [  phone](## "switchport_default.phone") | Dictionary | | | | | - | [    cos](## "switchport_default.phone.cos") | Integer | | | Min: 0
Max: 7 | | - | [    trunk](## "switchport_default.phone.trunk") | String | | | Valid Values:
- tagged
- untagged | | - | [    vlan](## "switchport_default.phone.vlan") | Integer | | | Min: 1
Max: 4094 | VLAN ID | - -=== "YAML" - - ```yaml - switchport_default: - mode: - phone: - cos: - trunk: - vlan: - ``` - -## System - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [system](## "system") | Dictionary | | | | | - | [  control_plane](## "system.control_plane") | Dictionary | | | | | - | [    tcp_mss](## "system.control_plane.tcp_mss") | Dictionary | | | | | - | [      ipv4](## "system.control_plane.tcp_mss.ipv4") | Integer | | | | Segment size | - | [      ipv6](## "system.control_plane.tcp_mss.ipv6") | Integer | | | | Segment size | - | [    ipv4_access_groups](## "system.control_plane.ipv4_access_groups") | List, items: Dictionary | | | | | - | [      - acl_name](## "system.control_plane.ipv4_access_groups.[].acl_name") | String | Required, Unique | | | | - | [        vrf](## "system.control_plane.ipv4_access_groups.[].vrf") | String | | | | | - | [    ipv6_access_groups](## "system.control_plane.ipv6_access_groups") | List, items: Dictionary | | | | | - | [      - acl_name](## "system.control_plane.ipv6_access_groups.[].acl_name") | String | Required, Unique | | | | - | [        vrf](## "system.control_plane.ipv6_access_groups.[].vrf") | String | | | | | - -=== "YAML" - - ```yaml - system: - control_plane: - tcp_mss: - ipv4: - ipv6: - ipv4_access_groups: - - acl_name: - vrf: - ipv6_access_groups: - - acl_name: - vrf: - ``` - -## Tacacs Servers - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [tacacs_servers](## "tacacs_servers") | Dictionary | | | | | - | [  hosts](## "tacacs_servers.hosts") | List, items: Dictionary | | | | | - | [    - host](## "tacacs_servers.hosts.[].host") | String | | | | Host IP address or name | - | [      vrf](## "tacacs_servers.hosts.[].vrf") | String | | | | | - | [      key](## "tacacs_servers.hosts.[].key") | String | | | | Encrypted key | - | [      key_type](## "tacacs_servers.hosts.[].key_type") | String | | 7 | Valid Values:
- 0
- 7
- 8a | | - | [      single_connection](## "tacacs_servers.hosts.[].single_connection") | Boolean | | | | | - | [      timeout](## "tacacs_servers.hosts.[].timeout") | Integer | | | | | - | [  policy_unknown_mandatory_attribute_ignore](## "tacacs_servers.policy_unknown_mandatory_attribute_ignore") | Boolean | | | | | - -=== "YAML" - - ```yaml - tacacs_servers: - hosts: - - host: - vrf: - key: - key_type: - single_connection: - timeout: - policy_unknown_mandatory_attribute_ignore: - ``` - -## Tap Aggregation - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [tap_aggregation](## "tap_aggregation") | Dictionary | | | | | - | [  mode](## "tap_aggregation.mode") | Dictionary | | | | | - | [    exclusive](## "tap_aggregation.mode.exclusive") | Dictionary | | | | | - | [      enabled](## "tap_aggregation.mode.exclusive.enabled") | Boolean | | | | | - | [      profile](## "tap_aggregation.mode.exclusive.profile") | String | | | | Profile Name | - | [      no_errdisable](## "tap_aggregation.mode.exclusive.no_errdisable") | List, items: String | | | | | - | [        - <str>](## "tap_aggregation.mode.exclusive.no_errdisable.[].<str>") | String | | | | Interface name e.g Ethernet1, Port-Channel1 | - | [  encapsulation_dot1br_strip](## "tap_aggregation.encapsulation_dot1br_strip") | Boolean | | | | | - | [  encapsulation_vn_tag_strip](## "tap_aggregation.encapsulation_vn_tag_strip") | Boolean | | | | | - | [  protocol_lldp_trap](## "tap_aggregation.protocol_lldp_trap") | Boolean | | | | | - | [  truncation_size](## "tap_aggregation.truncation_size") | Integer | | | | Allowed truncation_size values vary depending on the platform
| - | [  mac](## "tap_aggregation.mac") | Dictionary | | | | | - | [    timestamp](## "tap_aggregation.mac.timestamp") | Dictionary | | | | mac.timestamp.replace_source_mac and mac.timestamp.header.format are mutually exclsuive. If both are defined, replace_source_mac takes precedence
| - | [      replace_source_mac](## "tap_aggregation.mac.timestamp.replace_source_mac") | Boolean | | | | | - | [      header](## "tap_aggregation.mac.timestamp.header") | Dictionary | | | | | - | [        format](## "tap_aggregation.mac.timestamp.header.format") | String | | | Valid Values:
- 48-bit
- 64-bit | | - | [        eth_type](## "tap_aggregation.mac.timestamp.header.eth_type") | Integer | | | | EtherType | - | [    fcs_append](## "tap_aggregation.mac.fcs_append") | Boolean | | | | mac.fcs_append and mac.fcs_error are mutually exclusive. If both are defined, mac.fcs_append takes precedence
| - | [    fcs_error](## "tap_aggregation.mac.fcs_error") | String | | | Valid Values:
- correct
- discard
- pass-through | | - -=== "YAML" - - ```yaml - tap_aggregation: - mode: - exclusive: - enabled: - profile: - no_errdisable: - - - encapsulation_dot1br_strip: - encapsulation_vn_tag_strip: - protocol_lldp_trap: - truncation_size: - mac: - timestamp: - replace_source_mac: - header: - format: - eth_type: - fcs_append: - fcs_error: - ``` - -## Hardware TCAM Profiles - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [tcam_profile](## "tcam_profile") | Dictionary | | | | | - | [  system](## "tcam_profile.system") | String | | | | TCAM profile name to activate
| - | [  profiles](## "tcam_profile.profiles") | List, items: Dictionary | | | | | - | [    - name](## "tcam_profile.profiles.[].name") | String | Required, Unique | | | Tcam-Profile Name | - | [      config](## "tcam_profile.profiles.[].config") | String | Required | | | TCAM Profile Config. Since these can be very long, it is often a good idea to import the config from a file.
Example: "{{ lookup('file', 'TCAM_TRAFFIC_POLICY.conf') }}" | - -=== "YAML" - - ```yaml - tcam_profile: - system: - profiles: - - name: - config: - ``` - -## Terminal Settings - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [terminal](## "terminal") | Dictionary | | | | | - | [  length](## "terminal.length") | Integer | | | Min: 0
Max: 32767 | | - | [  width](## "terminal.width") | Integer | | | Min: 10
Max: 32767 | | - -=== "YAML" - - ```yaml - terminal: - length: - width: - ``` - -## Trackers - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [trackers](## "trackers") | List, items: Dictionary | | | | | - | [  - name](## "trackers.[].name") | String | Required, Unique | | | Name of tracker object | - | [    interface](## "trackers.[].interface") | String | Required | | | Name of tracked interface | - | [    tracked_property](## "trackers.[].tracked_property") | String | | line-protocol | | Property to track | - -=== "YAML" - - ```yaml - trackers: - - name: - interface: - tracked_property: - ``` - -## Traffic Policies - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [traffic_policies](## "traffic_policies") | Dictionary | | | | | - | [  options](## "traffic_policies.options") | Dictionary | | | | | - | [    counter_per_interface](## "traffic_policies.options.counter_per_interface") | Boolean | | | | | - | [  field_sets](## "traffic_policies.field_sets") | Dictionary | | | | | - | [    ipv4](## "traffic_policies.field_sets.ipv4") | List, items: Dictionary | | | | | - | [      - name](## "traffic_policies.field_sets.ipv4.[].name") | String | Required, Unique | | | IPv4 Prefix Field Set Name | - | [        prefixes](## "traffic_policies.field_sets.ipv4.[].prefixes") | List, items: String | | | | | - | [          - <str>](## "traffic_policies.field_sets.ipv4.[].prefixes.[].<str>") | String | | | | IPv4 Prefix | - | [    ipv6](## "traffic_policies.field_sets.ipv6") | List, items: Dictionary | | | | | - | [      - name](## "traffic_policies.field_sets.ipv6.[].name") | String | Required, Unique | | | IPv6 Prefix Field Set Name | - | [        prefixes](## "traffic_policies.field_sets.ipv6.[].prefixes") | List, items: String | | | | | - | [          - <str>](## "traffic_policies.field_sets.ipv6.[].prefixes.[].<str>") | String | | | | IPv6 Prefix | - | [    ports](## "traffic_policies.field_sets.ports") | List, items: Dictionary | | | | | - | [      - name](## "traffic_policies.field_sets.ports.[].name") | String | Required, Unique | | | L4 Port Field Set Name | - | [        port_range](## "traffic_policies.field_sets.ports.[].port_range") | String | | | | Example: '10,20,80,440-450' | - | [  policies](## "traffic_policies.policies") | List, items: Dictionary | | | | | - | [    - name](## "traffic_policies.policies.[].name") | String | Required, Unique | | | Traffic Policy Name | - | [      matches](## "traffic_policies.policies.[].matches") | List, items: Dictionary | | | | | - | [        - name](## "traffic_policies.policies.[].matches.[].name") | String | Required, Unique | | | Traffic Policy Item | - | [          type](## "traffic_policies.policies.[].matches.[].type") | String | | | Valid Values:
- ipv4
- ipv6 | | - | [          source](## "traffic_policies.policies.[].matches.[].source") | Dictionary | | | | | - | [            prefixes](## "traffic_policies.policies.[].matches.[].source.prefixes") | List, items: String | | | | | - | [              - <str>](## "traffic_policies.policies.[].matches.[].source.prefixes.[].<str>") | String | | | | IP address or prefix | - | [            prefix_lists](## "traffic_policies.policies.[].matches.[].source.prefix_lists") | List, items: String | | | | Field-set prefix lists | - | [              - <str>](## "traffic_policies.policies.[].matches.[].source.prefix_lists.[].<str>") | String | | | | | - | [          destination](## "traffic_policies.policies.[].matches.[].destination") | Dictionary | | | | | - | [            prefixes](## "traffic_policies.policies.[].matches.[].destination.prefixes") | List, items: String | | | | | - | [              - <str>](## "traffic_policies.policies.[].matches.[].destination.prefixes.[].<str>") | String | | | | IP address or prefix | - | [            prefix_lists](## "traffic_policies.policies.[].matches.[].destination.prefix_lists") | List, items: String | | | | Field-set prefix lists | - | [              - <str>](## "traffic_policies.policies.[].matches.[].destination.prefix_lists.[].<str>") | String | | | | | - | [          ttl](## "traffic_policies.policies.[].matches.[].ttl") | String | | | | TTL range | - | [          fragment](## "traffic_policies.policies.[].matches.[].fragment") | Dictionary | | | | The 'fragment' command is not supported when 'source port'
or 'destination port' command is configured
| - | [            offset](## "traffic_policies.policies.[].matches.[].fragment.offset") | String | | | | Fragment offset range | - | [          protocols](## "traffic_policies.policies.[].matches.[].protocols") | List, items: Dictionary | | | | | - | [            - protocol](## "traffic_policies.policies.[].matches.[].protocols.[].protocol") | String | Required, Unique | | | | - | [              src_port](## "traffic_policies.policies.[].matches.[].protocols.[].src_port") | String | | | | Port range | - | [              dst_port](## "traffic_policies.policies.[].matches.[].protocols.[].dst_port") | String | | | | Port range | - | [              src_field](## "traffic_policies.policies.[].matches.[].protocols.[].src_field") | String | | | | L4 port range field set | - | [              dst_field](## "traffic_policies.policies.[].matches.[].protocols.[].dst_field") | String | | | | L4 port range field set | - | [              flags](## "traffic_policies.policies.[].matches.[].protocols.[].flags") | List, items: String | | | | | - | [                - <str>](## "traffic_policies.policies.[].matches.[].protocols.[].flags.[].<str>") | String | | | Valid Values:
- established
- initial | | - | [              icmp_type](## "traffic_policies.policies.[].matches.[].protocols.[].icmp_type") | List, items: String | | | | | - | [                - <str>](## "traffic_policies.policies.[].matches.[].protocols.[].icmp_type.[].<str>") | String | | | | | - | [          actions](## "traffic_policies.policies.[].matches.[].actions") | Dictionary | | | | | - | [            dscp](## "traffic_policies.policies.[].matches.[].actions.dscp") | Integer | | | | | - | [            traffic_class](## "traffic_policies.policies.[].matches.[].actions.traffic_class") | Integer | | | | Traffic class ID | - | [            count](## "traffic_policies.policies.[].matches.[].actions.count") | String | | | | Counter name | - | [            drop](## "traffic_policies.policies.[].matches.[].actions.drop") | Boolean | | | | | - | [            log](## "traffic_policies.policies.[].matches.[].actions.log") | Boolean | | | | Only supported when action is set to drop | - | [      default_actions](## "traffic_policies.policies.[].default_actions") | Dictionary | | | | | - | [        ipv4](## "traffic_policies.policies.[].default_actions.ipv4") | Dictionary | | | | | - | [          dscp](## "traffic_policies.policies.[].default_actions.ipv4.dscp") | Integer | | | | | - | [          traffic_class](## "traffic_policies.policies.[].default_actions.ipv4.traffic_class") | Integer | | | | Traffic class ID | - | [          count](## "traffic_policies.policies.[].default_actions.ipv4.count") | String | | | | Counter name | - | [          drop](## "traffic_policies.policies.[].default_actions.ipv4.drop") | Boolean | | | | | - | [          log](## "traffic_policies.policies.[].default_actions.ipv4.log") | Boolean | | | | Only supported when action is set to drop | - | [        ipv6](## "traffic_policies.policies.[].default_actions.ipv6") | Dictionary | | | | | - | [          dscp](## "traffic_policies.policies.[].default_actions.ipv6.dscp") | Integer | | | | | - | [          traffic_class](## "traffic_policies.policies.[].default_actions.ipv6.traffic_class") | Integer | | | | Traffic class ID | - | [          count](## "traffic_policies.policies.[].default_actions.ipv6.count") | String | | | | Counter name | - | [          drop](## "traffic_policies.policies.[].default_actions.ipv6.drop") | Boolean | | | | | - | [          log](## "traffic_policies.policies.[].default_actions.ipv6.log") | Boolean | | | | Only supported when action is set to drop | - -=== "YAML" - - ```yaml - traffic_policies: - options: - counter_per_interface: - field_sets: - ipv4: - - name: - prefixes: - - - ipv6: - - name: - prefixes: - - - ports: - - name: - port_range: - policies: - - name: - matches: - - name: - type: - source: - prefixes: - - - prefix_lists: - - - destination: - prefixes: - - - prefix_lists: - - - ttl: - fragment: - offset: - protocols: - - protocol: - src_port: - dst_port: - src_field: - dst_field: - flags: - - - icmp_type: - - - actions: - dscp: - traffic_class: - count: - drop: - log: - default_actions: - ipv4: - dscp: - traffic_class: - count: - drop: - log: - ipv6: - dscp: - traffic_class: - count: - drop: - log: - ``` - -## Tunnel Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [tunnel_interfaces](## "tunnel_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "tunnel_interfaces.[].name") | String | Required, Unique | | | Tunnel Interface Name | - | [    description](## "tunnel_interfaces.[].description") | String | | | | | - | [    shutdown](## "tunnel_interfaces.[].shutdown") | Boolean | | | | | - | [    mtu](## "tunnel_interfaces.[].mtu") | Integer | | | Min: 68
Max: 65535 | | - | [    vrf](## "tunnel_interfaces.[].vrf") | String | | | | VRF Name | - | [    ip_address](## "tunnel_interfaces.[].ip_address") | String | | | Format: ipv4_cidr | IPv4_address/Mask | - | [    ipv6_enable](## "tunnel_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "tunnel_interfaces.[].ipv6_address") | String | | | Format: ipv6_cidr | IPv6_address/Mask | - | [    access_group_in](## "tunnel_interfaces.[].access_group_in") | String | | | | IPv4 ACL Name for ingress | - | [    access_group_out](## "tunnel_interfaces.[].access_group_out") | String | | | | IPv4 ACL Name for egress | - | [    ipv6_access_group_in](## "tunnel_interfaces.[].ipv6_access_group_in") | String | | | | IPv6 ACL Name for ingress | - | [    ipv6_access_group_out](## "tunnel_interfaces.[].ipv6_access_group_out") | String | | | | IPv6 ACL Name for egress | - | [    tcp_mss_ceiling](## "tunnel_interfaces.[].tcp_mss_ceiling") | Dictionary | | | | | - | [      ipv4](## "tunnel_interfaces.[].tcp_mss_ceiling.ipv4") | Integer | | | Min: 64
Max: 65495 | Segment Size for IPv4 | - | [      ipv6](## "tunnel_interfaces.[].tcp_mss_ceiling.ipv6") | Integer | | | Min: 64
Max: 65475 | Segment Size for IPv6 | - | [      direction](## "tunnel_interfaces.[].tcp_mss_ceiling.direction") | String | | | Valid Values:
- ingress
- egress | Optional direction ('ingress', 'egress') for tcp mss ceiling
| - | [    source_interface](## "tunnel_interfaces.[].source_interface") | String | | | | Tunnel Source Interface Name | - | [    destination](## "tunnel_interfaces.[].destination") | String | | | | IPv4 or IPv6 Address Tunnel Destination | - | [    path_mtu_discovery](## "tunnel_interfaces.[].path_mtu_discovery") | Boolean | | | | Enable Path MTU Discovery On Tunnel | - | [    eos_cli](## "tunnel_interfaces.[].eos_cli") | String | | | | Multiline String with EOS CLI rendered directly on the Tunnel interface in the final EOS configuration. | - -=== "YAML" - - ```yaml - tunnel_interfaces: - - name: - description: - shutdown: - mtu: - vrf: - ip_address: - ipv6_enable: - ipv6_address: - access_group_in: - access_group_out: - ipv6_access_group_in: - ipv6_access_group_out: - tcp_mss_ceiling: - ipv4: - ipv6: - direction: - source_interface: - destination: - path_mtu_discovery: - eos_cli: - ``` - -## Virtual Source Nat VRFs - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [virtual_source_nat_vrfs](## "virtual_source_nat_vrfs") | List, items: Dictionary | | | | | - | [  - name](## "virtual_source_nat_vrfs.[].name") | String | Required, Unique | | | VRF Name | - | [    ip_address](## "virtual_source_nat_vrfs.[].ip_address") | String | | | | IPv4 Address | - -=== "YAML" - - ```yaml - virtual_source_nat_vrfs: - - name: - ip_address: - ``` - -## VLAN Interfaces - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vlan_interfaces](## "vlan_interfaces") | List, items: Dictionary | | | | | - | [  - name](## "vlan_interfaces.[].name") | String | Required, Unique | | | VLAN interface name like "Vlan123" | - | [    description](## "vlan_interfaces.[].description") | String | | | | | - | [    shutdown](## "vlan_interfaces.[].shutdown") | Boolean | | | | | - | [    vrf](## "vlan_interfaces.[].vrf") | String | | | | VRF name | - | [    arp_aging_timeout](## "vlan_interfaces.[].arp_aging_timeout") | Integer | | | Min: 1
Max: 65535 | In seconds | - | [    arp_cache_dynamic_capacity](## "vlan_interfaces.[].arp_cache_dynamic_capacity") | Integer | | | Min: 0
Max: 4294967295 | | - | [    arp_gratuitous_accept](## "vlan_interfaces.[].arp_gratuitous_accept") | Boolean | | | | | - | [    arp_monitor_mac_address](## "vlan_interfaces.[].arp_monitor_mac_address") | Boolean | | | | | - | [    ip_proxy_arp](## "vlan_interfaces.[].ip_proxy_arp") | Boolean | | | | | - | [    ip_directed_broadcast](## "vlan_interfaces.[].ip_directed_broadcast") | Boolean | | | | | - | [    ip_address](## "vlan_interfaces.[].ip_address") | String | | | | IPv4_address/Mask | - | [    ip_address_secondaries](## "vlan_interfaces.[].ip_address_secondaries") | List, items: String | | | | | - | [      - <str>](## "vlan_interfaces.[].ip_address_secondaries.[].<str>") | String | | | | IPv4_address/Mask | - | [    ip_virtual_router_addresses](## "vlan_interfaces.[].ip_virtual_router_addresses") | List, items: String | | | | | - | [      - <str>](## "vlan_interfaces.[].ip_virtual_router_addresses.[].<str>") | String | | | | IPv4 address or IPv4_address/Mask | - | [    ip_address_virtual](## "vlan_interfaces.[].ip_address_virtual") | String | | | | IPv4_address/Mask | - | [    ip_address_virtual_secondaries](## "vlan_interfaces.[].ip_address_virtual_secondaries") | List, items: String | | | | | - | [      - <str>](## "vlan_interfaces.[].ip_address_virtual_secondaries.[].<str>") | String | | | | IPv4_address/Mask | - | [    ip_igmp](## "vlan_interfaces.[].ip_igmp") | Boolean | | | | | - | [    ip_igmp_version](## "vlan_interfaces.[].ip_igmp_version") | Integer | | | Min: 1
Max: 3 | | - | [    ip_helpers](## "vlan_interfaces.[].ip_helpers") | List, items: Dictionary | | | | List of DHCP servers | - | [      - ip_helper](## "vlan_interfaces.[].ip_helpers.[].ip_helper") | String | Required, Unique | | | IP address or hostname of DHCP server | - | [        source_interface](## "vlan_interfaces.[].ip_helpers.[].source_interface") | String | | | | Interface used as source for forwarded DHCP packets | - | [        vrf](## "vlan_interfaces.[].ip_helpers.[].vrf") | String | | | | VRF where DHCP server can be reached | - | [    ip_nat](## "vlan_interfaces.[].ip_nat") | Dictionary | | | | | - | [      destination](## "vlan_interfaces.[].ip_nat.destination") | Dictionary | | | | | - | [        dynamic](## "vlan_interfaces.[].ip_nat.destination.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "vlan_interfaces.[].ip_nat.destination.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "vlan_interfaces.[].ip_nat.destination.dynamic.[].comment") | String | | | | | - | [            pool_name](## "vlan_interfaces.[].ip_nat.destination.dynamic.[].pool_name") | String | Required | | | | - | [            priority](## "vlan_interfaces.[].ip_nat.destination.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "vlan_interfaces.[].ip_nat.destination.static") | List, items: Dictionary | | | | | - | [          - access_list](## "vlan_interfaces.[].ip_nat.destination.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "vlan_interfaces.[].ip_nat.destination.static.[].comment") | String | | | | | - | [            direction](## "vlan_interfaces.[].ip_nat.destination.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "vlan_interfaces.[].ip_nat.destination.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "vlan_interfaces.[].ip_nat.destination.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "vlan_interfaces.[].ip_nat.destination.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "vlan_interfaces.[].ip_nat.destination.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "vlan_interfaces.[].ip_nat.destination.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "vlan_interfaces.[].ip_nat.destination.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "vlan_interfaces.[].ip_nat.destination.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [      source](## "vlan_interfaces.[].ip_nat.source") | Dictionary | | | | | - | [        dynamic](## "vlan_interfaces.[].ip_nat.source.dynamic") | List, items: Dictionary | | | | | - | [          - access_list](## "vlan_interfaces.[].ip_nat.source.dynamic.[].access_list") | String | Required, Unique | | | | - | [            comment](## "vlan_interfaces.[].ip_nat.source.dynamic.[].comment") | String | | | | | - | [            nat_type](## "vlan_interfaces.[].ip_nat.source.dynamic.[].nat_type") | String | Required | | Valid Values:
- overload
- pool
- pool-address-only
- pool-full-cone | | - | [            pool_name](## "vlan_interfaces.[].ip_nat.source.dynamic.[].pool_name") | String | | | | required if 'nat_type' is pool, pool-address-only or pool-full-cone
ignored if 'nat_type' is overload
| - | [            priority](## "vlan_interfaces.[].ip_nat.source.dynamic.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [        static](## "vlan_interfaces.[].ip_nat.source.static") | List, items: Dictionary | | | | | - | [          - access_list](## "vlan_interfaces.[].ip_nat.source.static.[].access_list") | String | | | | 'access_list' and 'group' are mutual exclusive | - | [            comment](## "vlan_interfaces.[].ip_nat.source.static.[].comment") | String | | | | | - | [            direction](## "vlan_interfaces.[].ip_nat.source.static.[].direction") | String | | | Valid Values:
- egress
- ingress | Egress or ingress can be the default. This depends on source/destination, EOS version, and hardware platform.
EOS might remove this keyword in the configuration. So, check the configuration on targeted HW/SW.
| - | [            group](## "vlan_interfaces.[].ip_nat.source.static.[].group") | Integer | | | Min: 1
Max: 65535 | 'access_list' and 'group' are mutual exclusive | - | [            original_ip](## "vlan_interfaces.[].ip_nat.source.static.[].original_ip") | String | Required, Unique | | | IPv4 address | - | [            original_port](## "vlan_interfaces.[].ip_nat.source.static.[].original_port") | Integer | | | Min: 1
Max: 65535 | | - | [            priority](## "vlan_interfaces.[].ip_nat.source.static.[].priority") | Integer | | | Min: 0
Max: 4294967295 | | - | [            protocol](## "vlan_interfaces.[].ip_nat.source.static.[].protocol") | String | | | Valid Values:
- udp
- tcp | | - | [            translated_ip](## "vlan_interfaces.[].ip_nat.source.static.[].translated_ip") | String | Required | | | IPv4 address | - | [            translated_port](## "vlan_interfaces.[].ip_nat.source.static.[].translated_port") | Integer | | | Min: 1
Max: 65535 | requires 'original_port' | - | [    ipv6_enable](## "vlan_interfaces.[].ipv6_enable") | Boolean | | | | | - | [    ipv6_address](## "vlan_interfaces.[].ipv6_address") | String | | | | IPv6_address/Mask | - | [    ipv6_address_virtual](## "vlan_interfaces.[].ipv6_address_virtual") deprecated | String | | | | IPv6_address/Mask
If both "ipv6_address_virtual" and "ipv6_address_virtuals" are set, all addresses will be configured
This key is deprecated. Support will be removed in AVD version 5.0.0. Use ipv6_address_virtuals instead. | - | [    ipv6_address_virtuals](## "vlan_interfaces.[].ipv6_address_virtuals") | List, items: String | | | | The new "ipv6_address_virtuals" key support multiple virtual ipv6 addresses. | - | [      - <str>](## "vlan_interfaces.[].ipv6_address_virtuals.[].<str>") | String | | | | IPv6_address/Mask | - | [    ipv6_address_link_local](## "vlan_interfaces.[].ipv6_address_link_local") | String | | | | IPv6_address/Mask | - | [    ipv6_virtual_router_address](## "vlan_interfaces.[].ipv6_virtual_router_address") | String | | | | "ipv6_virtual_router_address" key will be deprecated in AVD v4.0
This should not be mixed with the new "ipv6_virtual_router_addresses" key below to avoid conflicts.
| - | [    ipv6_virtual_router_addresses](## "vlan_interfaces.[].ipv6_virtual_router_addresses") | List, items: String | | | | Improved "VARPv6" data model to support multiple VARPv6 addresses. | - | [      - <str>](## "vlan_interfaces.[].ipv6_virtual_router_addresses.[].<str>") | String | | | | IPv6 address or IPv6_address/Mask | - | [    ipv6_nd_ra_disabled](## "vlan_interfaces.[].ipv6_nd_ra_disabled") | Boolean | | | | | - | [    ipv6_nd_managed_config_flag](## "vlan_interfaces.[].ipv6_nd_managed_config_flag") | Boolean | | | | | - | [    ipv6_nd_prefixes](## "vlan_interfaces.[].ipv6_nd_prefixes") | List, items: Dictionary | | | | | - | [      - ipv6_prefix](## "vlan_interfaces.[].ipv6_nd_prefixes.[].ipv6_prefix") | String | Required, Unique | | | IPv6_address/Mask | - | [        valid_lifetime](## "vlan_interfaces.[].ipv6_nd_prefixes.[].valid_lifetime") | String | | | | In seconds <0-4294967295> or infinite | - | [        preferred_lifetime](## "vlan_interfaces.[].ipv6_nd_prefixes.[].preferred_lifetime") | String | | | | In seconds <0-4294967295> or infinite | - | [        no_autoconfig_flag](## "vlan_interfaces.[].ipv6_nd_prefixes.[].no_autoconfig_flag") | Boolean | | | | | - | [    ipv6_dhcp_relay_destinations](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations") | List, items: Dictionary | | | | | - | [      - address](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations.[].address") | String | Required, Unique | | | DHCP server's IPv6 address | - | [        vrf](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations.[].vrf") | String | | | | | - | [        local_interface](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations.[].local_interface") | String | | | | Local interface to communicate with DHCP server - mutually exclusive to source_address | - | [        source_address](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations.[].source_address") | String | | | | Source IPv6 address to communicate with DHCP server - mutually exclusive to local_interface | - | [        link_address](## "vlan_interfaces.[].ipv6_dhcp_relay_destinations.[].link_address") | String | | | | Override the default link address specified in the relayed DHCP packet | - | [    access_group_in](## "vlan_interfaces.[].access_group_in") | String | | | | IPv4 access-list name | - | [    access_group_out](## "vlan_interfaces.[].access_group_out") | String | | | | IPv4 access-list name | - | [    ipv6_access_group_in](## "vlan_interfaces.[].ipv6_access_group_in") | String | | | | IPv6 access-list name | - | [    ipv6_access_group_out](## "vlan_interfaces.[].ipv6_access_group_out") | String | | | | IPv6 access-list name | - | [    multicast](## "vlan_interfaces.[].multicast") | Dictionary | | | | | - | [      ipv4](## "vlan_interfaces.[].multicast.ipv4") | Dictionary | | | | | - | [        boundaries](## "vlan_interfaces.[].multicast.ipv4.boundaries") | List, items: Dictionary | | | | Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both | - | [          - boundary](## "vlan_interfaces.[].multicast.ipv4.boundaries.[].boundary") | String | Required, Unique | | | IPv4 access-list name or IPv4 multicast group prefix with mask | - | [            out](## "vlan_interfaces.[].multicast.ipv4.boundaries.[].out") | Boolean | | | | | - | [        source_route_export](## "vlan_interfaces.[].multicast.ipv4.source_route_export") | Dictionary | | | | | - | [          enabled](## "vlan_interfaces.[].multicast.ipv4.source_route_export.enabled") | Boolean | Required | | | | - | [          administrative_distance](## "vlan_interfaces.[].multicast.ipv4.source_route_export.administrative_distance") | Integer | | | Min: 1
Max: 255 | | - | [        static](## "vlan_interfaces.[].multicast.ipv4.static") | Boolean | | | | | - | [      ipv6](## "vlan_interfaces.[].multicast.ipv6") | Dictionary | | | | | - | [        boundaries](## "vlan_interfaces.[].multicast.ipv6.boundaries") | List, items: Dictionary | | | | Boundaries can be either 1 ACL or a list of multicast IP address_range(s)/prefix but not combination of both | - | [          - boundary](## "vlan_interfaces.[].multicast.ipv6.boundaries.[].boundary") | String | Required, Unique | | | IPv6 access-list name or IPv6 multicast group prefix with mask | - | [        source_route_export](## "vlan_interfaces.[].multicast.ipv6.source_route_export") | Dictionary | | | | | - | [          enabled](## "vlan_interfaces.[].multicast.ipv6.source_route_export.enabled") | Boolean | Required | | | | - | [          administrative_distance](## "vlan_interfaces.[].multicast.ipv6.source_route_export.administrative_distance") | Integer | | | Min: 1
Max: 255 | | - | [        static](## "vlan_interfaces.[].multicast.ipv6.static") | Boolean | | | | | - | [    ospf_network_point_to_point](## "vlan_interfaces.[].ospf_network_point_to_point") | Boolean | | | | | - | [    ospf_area](## "vlan_interfaces.[].ospf_area") | String | | | | | - | [    ospf_cost](## "vlan_interfaces.[].ospf_cost") | Integer | | | | | - | [    ospf_authentication](## "vlan_interfaces.[].ospf_authentication") | String | | | Valid Values:
- none
- simple
- message-digest | | - | [    ospf_authentication_key](## "vlan_interfaces.[].ospf_authentication_key") | String | | | | Encrypted password used for simple authentication | - | [    ospf_message_digest_keys](## "vlan_interfaces.[].ospf_message_digest_keys") | List, items: Dictionary | | | | Keys used for message-digest authentication | - | [      - id](## "vlan_interfaces.[].ospf_message_digest_keys.[].id") | Integer | Required, Unique | | | | - | [        hash_algorithm](## "vlan_interfaces.[].ospf_message_digest_keys.[].hash_algorithm") | String | | | Valid Values:
- md5
- sha1
- sha256
- sha384
- sha512 | | - | [        key](## "vlan_interfaces.[].ospf_message_digest_keys.[].key") | String | | | | Encrypted password | - | [    pim](## "vlan_interfaces.[].pim") | Dictionary | | | | | - | [      ipv4](## "vlan_interfaces.[].pim.ipv4") | Dictionary | | | | | - | [        dr_priority](## "vlan_interfaces.[].pim.ipv4.dr_priority") | Integer | | | Min: 0
Max: 429467295 | | - | [        sparse_mode](## "vlan_interfaces.[].pim.ipv4.sparse_mode") | Boolean | | | | | - | [        local_interface](## "vlan_interfaces.[].pim.ipv4.local_interface") | String | | | | | - | [    isis_enable](## "vlan_interfaces.[].isis_enable") | String | | | | ISIS instance name | - | [    isis_passive](## "vlan_interfaces.[].isis_passive") | Boolean | | | | | - | [    isis_metric](## "vlan_interfaces.[].isis_metric") | Integer | | | | | - | [    isis_network_point_to_point](## "vlan_interfaces.[].isis_network_point_to_point") | Boolean | | | | | - | [    mtu](## "vlan_interfaces.[].mtu") | Integer | | | | | - | [    no_autostate](## "vlan_interfaces.[].no_autostate") | Boolean | | | | | - | [    vrrp_ids](## "vlan_interfaces.[].vrrp_ids") | List, items: Dictionary | | | | Improved "vrrp" data model to support multiple VRRP IDs | - | [      - id](## "vlan_interfaces.[].vrrp_ids.[].id") | Integer | Required, Unique | | | VRID | - | [        priority_level](## "vlan_interfaces.[].vrrp_ids.[].priority_level") | Integer | | | | Instance priority | - | [        advertisement](## "vlan_interfaces.[].vrrp_ids.[].advertisement") | Dictionary | | | | | - | [          interval](## "vlan_interfaces.[].vrrp_ids.[].advertisement.interval") | Integer | | | | Interval in seconds | - | [        preempt](## "vlan_interfaces.[].vrrp_ids.[].preempt") | Dictionary | | | | | - | [          enabled](## "vlan_interfaces.[].vrrp_ids.[].preempt.enabled") | Boolean | Required | | | | - | [          delay](## "vlan_interfaces.[].vrrp_ids.[].preempt.delay") | Dictionary | | | | | - | [            minimum](## "vlan_interfaces.[].vrrp_ids.[].preempt.delay.minimum") | Integer | | | | Minimum preempt delay in seconds | - | [            reload](## "vlan_interfaces.[].vrrp_ids.[].preempt.delay.reload") | Integer | | | | Reload preempt delay in seconds | - | [        timers](## "vlan_interfaces.[].vrrp_ids.[].timers") | Dictionary | | | | | - | [          delay](## "vlan_interfaces.[].vrrp_ids.[].timers.delay") | Dictionary | | | | | - | [            reload](## "vlan_interfaces.[].vrrp_ids.[].timers.delay.reload") | Integer | | | | Delay after reload in seconds. | - | [        tracked_object](## "vlan_interfaces.[].vrrp_ids.[].tracked_object") | List, items: Dictionary | | | | | - | [          - name](## "vlan_interfaces.[].vrrp_ids.[].tracked_object.[].name") | String | Required, Unique | | | Tracked object name | - | [            decrement](## "vlan_interfaces.[].vrrp_ids.[].tracked_object.[].decrement") | Integer | | | Min: 1
Max: 254 | Decrement VRRP priority by 1-254 | - | [            shutdown](## "vlan_interfaces.[].vrrp_ids.[].tracked_object.[].shutdown") | Boolean | | | | | - | [        ipv4](## "vlan_interfaces.[].vrrp_ids.[].ipv4") | Dictionary | | | | | - | [          address](## "vlan_interfaces.[].vrrp_ids.[].ipv4.address") | String | Required | | | Virtual IPv4 address | - | [          version](## "vlan_interfaces.[].vrrp_ids.[].ipv4.version") | Integer | | | Valid Values:
- 2
- 3 | | - | [        ipv6](## "vlan_interfaces.[].vrrp_ids.[].ipv6") | Dictionary | | | | | - | [          address](## "vlan_interfaces.[].vrrp_ids.[].ipv6.address") | String | Required | | | Virtual IPv6 address | - | [    vrrp](## "vlan_interfaces.[].vrrp") | Dictionary | | | | "vrrp" key will be deprecated in AVD v4.0
This should not be mixed with the new "vrrp_ids" key above to avoid conflicts.
| - | [      virtual_router](## "vlan_interfaces.[].vrrp.virtual_router") | String | | | | Virtual Router ID | - | [      priority](## "vlan_interfaces.[].vrrp.priority") | Integer | | | | Instance priority | - | [      advertisement_interval](## "vlan_interfaces.[].vrrp.advertisement_interval") | Integer | | | | | - | [      preempt_delay_minimum](## "vlan_interfaces.[].vrrp.preempt_delay_minimum") | Integer | | | | | - | [      ipv4](## "vlan_interfaces.[].vrrp.ipv4") | String | | | | Virtual IPv4 address | - | [      ipv6](## "vlan_interfaces.[].vrrp.ipv6") | String | | | | Virtual IPv6 address | - | [    ip_attached_host_route_export](## "vlan_interfaces.[].ip_attached_host_route_export") | Dictionary | | | | | - | [      enabled](## "vlan_interfaces.[].ip_attached_host_route_export.enabled") | Boolean | Required | | | | - | [      distance](## "vlan_interfaces.[].ip_attached_host_route_export.distance") | Integer | | | Min: 1
Max: 255 | | - | [    bfd](## "vlan_interfaces.[].bfd") | Dictionary | | | | | - | [      echo](## "vlan_interfaces.[].bfd.echo") | Boolean | | | | | - | [      interval](## "vlan_interfaces.[].bfd.interval") | Integer | | | | Rate in milliseconds | - | [      min_rx](## "vlan_interfaces.[].bfd.min_rx") | Integer | | | | Minimum RX hold time in milliseconds | - | [      multiplier](## "vlan_interfaces.[].bfd.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [    service_policy](## "vlan_interfaces.[].service_policy") | Dictionary | | | | | - | [      pbr](## "vlan_interfaces.[].service_policy.pbr") | Dictionary | | | | | - | [        input](## "vlan_interfaces.[].service_policy.pbr.input") | String | | | | Name of policy-map used for policy based routing | - | [    pvlan_mapping](## "vlan_interfaces.[].pvlan_mapping") | String | | | | List of VLANs as string | - | [    tenant](## "vlan_interfaces.[].tenant") | String | | | | Key only used for documentation or validation purposes | - | [    tags](## "vlan_interfaces.[].tags") | List, items: String | | | | Key only used for documentation or validation purposes | - | [      - <str>](## "vlan_interfaces.[].tags.[].<str>") | String | | | | | - | [    type](## "vlan_interfaces.[].type") | String | | | | Key only used for documentation or validation purposes | - | [    eos_cli](## "vlan_interfaces.[].eos_cli") | String | | | | Multiline EOS CLI rendered directly on the VLAN interface in the final EOS configuration | - -=== "YAML" - - ```yaml - vlan_interfaces: - - name: - description: - shutdown: - vrf: - arp_aging_timeout: - arp_cache_dynamic_capacity: - arp_gratuitous_accept: - arp_monitor_mac_address: - ip_proxy_arp: - ip_directed_broadcast: - ip_address: - ip_address_secondaries: - - - ip_virtual_router_addresses: - - - ip_address_virtual: - ip_address_virtual_secondaries: - - - ip_igmp: - ip_igmp_version: - ip_helpers: - - ip_helper: - source_interface: - vrf: - ip_nat: - destination: - dynamic: - - access_list: - comment: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - source: - dynamic: - - access_list: - comment: - nat_type: - pool_name: - priority: - static: - - access_list: - comment: - direction: - group: - original_ip: - original_port: - priority: - protocol: - translated_ip: - translated_port: - ipv6_enable: - ipv6_address: - ipv6_address_virtual: - ipv6_address_virtuals: - - - ipv6_address_link_local: - ipv6_virtual_router_address: - ipv6_virtual_router_addresses: - - - ipv6_nd_ra_disabled: - ipv6_nd_managed_config_flag: - ipv6_nd_prefixes: - - ipv6_prefix: - valid_lifetime: - preferred_lifetime: - no_autoconfig_flag: - ipv6_dhcp_relay_destinations: - - address: - vrf: - local_interface: - source_address: - link_address: - access_group_in: - access_group_out: - ipv6_access_group_in: - ipv6_access_group_out: - multicast: - ipv4: - boundaries: - - boundary: - out: - source_route_export: - enabled: - administrative_distance: - static: - ipv6: - boundaries: - - boundary: - source_route_export: - enabled: - administrative_distance: - static: - ospf_network_point_to_point: - ospf_area: - ospf_cost: - ospf_authentication: - ospf_authentication_key: - ospf_message_digest_keys: - - id: - hash_algorithm: - key: - pim: - ipv4: - dr_priority: - sparse_mode: - local_interface: - isis_enable: - isis_passive: - isis_metric: - isis_network_point_to_point: - mtu: - no_autostate: - vrrp_ids: - - id: - priority_level: - advertisement: - interval: - preempt: - enabled: - delay: - minimum: - reload: - timers: - delay: - reload: - tracked_object: - - name: - decrement: - shutdown: - ipv4: - address: - version: - ipv6: - address: - vrrp: - virtual_router: - priority: - advertisement_interval: - preempt_delay_minimum: - ipv4: - ipv6: - ip_attached_host_route_export: - enabled: - distance: - bfd: - echo: - interval: - min_rx: - multiplier: - service_policy: - pbr: - input: - pvlan_mapping: - tenant: - tags: - - - type: - eos_cli: - ``` - -## VLAN Internal Order - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vlan_internal_order](## "vlan_internal_order") | Dictionary | | | | | - | [  allocation](## "vlan_internal_order.allocation") | String | Required | | Valid Values:
- ascending
- descending | | - | [  range](## "vlan_internal_order.range") | Dictionary | Required | | | | - | [    beginning](## "vlan_internal_order.range.beginning") | Integer | Required | | Min: 2
Max: 4094 | First VLAN ID. | - | [    ending](## "vlan_internal_order.range.ending") | Integer | Required | | Min: 2
Max: 4094 | Last VLAN ID. | - -=== "YAML" - - ```yaml - vlan_internal_order: - allocation: - range: - beginning: - ending: - ``` - -## VLANs - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vlans](## "vlans") | List, items: Dictionary | | | | | - | [  - id](## "vlans.[].id") | Integer | Required, Unique | | | VLAN ID | - | [    name](## "vlans.[].name") | String | | | | VLAN Name | - | [    state](## "vlans.[].state") | String | | | Valid Values:
- active
- suspend | | - | [    trunk_groups](## "vlans.[].trunk_groups") | List, items: String | | | | | - | [      - <str>](## "vlans.[].trunk_groups.[].<str>") | String | | | | Trunk Group Name | - | [    private_vlan](## "vlans.[].private_vlan") | Dictionary | | | | | - | [      type](## "vlans.[].private_vlan.type") | String | | | Valid Values:
- community
- isolated | | - | [      primary_vlan](## "vlans.[].private_vlan.primary_vlan") | Integer | | | | Primary VLAN ID | - | [    tenant](## "vlans.[].tenant") | String | | | | Key only used for documentation or validation purposes | - -=== "YAML" - - ```yaml - vlans: - - id: - name: - state: - trunk_groups: - - - private_vlan: - type: - primary_vlan: - tenant: - ``` - -## VMTracer Sessions - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vmtracer_sessions](## "vmtracer_sessions") | List, items: Dictionary | | | | | - | [  - name](## "vmtracer_sessions.[].name") | String | Required, Unique | | | Vmtracer Session Name | - | [    url](## "vmtracer_sessions.[].url") | String | | | | | - | [    username](## "vmtracer_sessions.[].username") | String | | | | | - | [    password](## "vmtracer_sessions.[].password") | String | | | | Type 7 Password Hash | - | [    autovlan_disable](## "vmtracer_sessions.[].autovlan_disable") | Boolean | | | | | - | [    source_interface](## "vmtracer_sessions.[].source_interface") | String | | | | | - -=== "YAML" - - ```yaml - vmtracer_sessions: - - name: - url: - username: - password: - autovlan_disable: - source_interface: - ``` - -## VRFs - -These keys are ignored if the name of the vrf is 'default' - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vrfs](## "vrfs") | List, items: Dictionary | | | | | - | [  - name](## "vrfs.[].name") | String | Required, Unique | | | VRF Name | - | [    description](## "vrfs.[].description") | String | | | | | - | [    ip_routing](## "vrfs.[].ip_routing") | Boolean | | | | | - | [    ipv6_routing](## "vrfs.[].ipv6_routing") | Boolean | | | | | - | [    ip_routing_ipv6_interfaces](## "vrfs.[].ip_routing_ipv6_interfaces") | Boolean | | | | | - | [    tenant](## "vrfs.[].tenant") | String | | | | Key only used for documentation or validation purposes | - -=== "YAML" - - ```yaml - vrfs: - - name: - description: - ip_routing: - ipv6_routing: - ip_routing_ipv6_interfaces: - tenant: - ``` - -## VxLAN Interface - -=== "Table" - - | Variable | Type | Required | Default | Value Restrictions | Description | - | -------- | ---- | -------- | ------- | ------------------ | ----------- | - | [vxlan_interface](## "vxlan_interface") | Dictionary | | | | | - | [  Vxlan1](## "vxlan_interface.Vxlan1") | Dictionary | | | | | - | [    description](## "vxlan_interface.Vxlan1.description") | String | | | | | - | [    vxlan](## "vxlan_interface.Vxlan1.vxlan") | Dictionary | | | | | - | [      source_interface](## "vxlan_interface.Vxlan1.vxlan.source_interface") | String | | | | Source Interface Name | - | [      controller_client](## "vxlan_interface.Vxlan1.vxlan.controller_client") | Dictionary | | | | Client to CVX Controllers | - | [        enabled](## "vxlan_interface.Vxlan1.vxlan.controller_client.enabled") | Boolean | | | | | - | [      mlag_source_interface](## "vxlan_interface.Vxlan1.vxlan.mlag_source_interface") | String | | | | | - | [      udp_port](## "vxlan_interface.Vxlan1.vxlan.udp_port") | Integer | | | | | - | [      virtual_router_encapsulation_mac_address](## "vxlan_interface.Vxlan1.vxlan.virtual_router_encapsulation_mac_address") | String | | | | "mlag-system-id" or ethernet_address (H.H.H)
| - | [      bfd_vtep_evpn](## "vxlan_interface.Vxlan1.vxlan.bfd_vtep_evpn") | Dictionary | | | | | - | [        interval](## "vxlan_interface.Vxlan1.vxlan.bfd_vtep_evpn.interval") | Integer | | | | | - | [        min_rx](## "vxlan_interface.Vxlan1.vxlan.bfd_vtep_evpn.min_rx") | Integer | | | | | - | [        multiplier](## "vxlan_interface.Vxlan1.vxlan.bfd_vtep_evpn.multiplier") | Integer | | | Min: 3
Max: 50 | | - | [        prefix_list](## "vxlan_interface.Vxlan1.vxlan.bfd_vtep_evpn.prefix_list") | String | | | | | - | [      qos](## "vxlan_interface.Vxlan1.vxlan.qos") | Dictionary | | | | For the Traffic Class to be derived based on the outer DSCP field of the incoming VxLan packet, the core ports must be in "DSCP Trust" mode.
!!!Warning, only few hardware types with software version >= 4.26.0 support the below knobs to configure Vxlan DSCP mapping.
| - | [        dscp_propagation_encapsulation](## "vxlan_interface.Vxlan1.vxlan.qos.dscp_propagation_encapsulation") | Boolean | | | | | - | [        map_dscp_to_traffic_class_decapsulation](## "vxlan_interface.Vxlan1.vxlan.qos.map_dscp_to_traffic_class_decapsulation") | Boolean | | | | | - | [      vlans](## "vxlan_interface.Vxlan1.vxlan.vlans") | List, items: Dictionary | | | | | - | [        - id](## "vxlan_interface.Vxlan1.vxlan.vlans.[].id") | Integer | Required, Unique | | | VLAN ID | - | [          vni](## "vxlan_interface.Vxlan1.vxlan.vlans.[].vni") | Integer | | | | | - | [          multicast_group](## "vxlan_interface.Vxlan1.vxlan.vlans.[].multicast_group") | String | | | | IP Multicast Group Address | - | [          flood_vteps](## "vxlan_interface.Vxlan1.vxlan.vlans.[].flood_vteps") | List, items: String | | | | | - | [            - <str>](## "vxlan_interface.Vxlan1.vxlan.vlans.[].flood_vteps.[].<str>") | String | | | | Remote VTEP IP Address | - | [      vrfs](## "vxlan_interface.Vxlan1.vxlan.vrfs") | List, items: Dictionary | | | | | - | [        - name](## "vxlan_interface.Vxlan1.vxlan.vrfs.[].name") | String | Required, Unique | | | VRF Name | - | [          vni](## "vxlan_interface.Vxlan1.vxlan.vrfs.[].vni") | Integer | | | | | - | [          multicast_group](## "vxlan_interface.Vxlan1.vxlan.vrfs.[].multicast_group") | String | | | | IP Multicast Group Address | - | [      flood_vteps](## "vxlan_interface.Vxlan1.vxlan.flood_vteps") | List, items: String | | | | | - | [        - <str>](## "vxlan_interface.Vxlan1.vxlan.flood_vteps.[].<str>") | String | | | | Remote VTEP IP Address | - | [      flood_vtep_learned_data_plane](## "vxlan_interface.Vxlan1.vxlan.flood_vtep_learned_data_plane") | Boolean | | | | | - | [    eos_cli](## "vxlan_interface.Vxlan1.eos_cli") | String | | | | Multiline String with EOS CLI rendered directly on the Vxlan interface in the final EOS configuration. | - -=== "YAML" - - ```yaml - vxlan_interface: - Vxlan1: - description: - vxlan: - source_interface: - controller_client: - enabled: - mlag_source_interface: - udp_port: - virtual_router_encapsulation_mac_address: - bfd_vtep_evpn: - interval: - min_rx: - multiplier: - prefix_list: - qos: - dscp_propagation_encapsulation: - map_dscp_to_traffic_class_decapsulation: - vlans: - - id: - vni: - multicast_group: - flood_vteps: - - - vrfs: - - name: - vni: - multicast_group: - flood_vteps: - - - flood_vtep_learned_data_plane: - eos_cli: - ``` diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md index ffab153abd4..3cc080bdb7f 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md @@ -22,6 +22,10 @@ roles/eos_cli_config_gen/docs/tables/role-input-validation.md - The order of custom templates in the list can be important if they overlap. - It is recommenended to use a `!` delimiter at the top of each custom template. +!!! tip + The templates will have any host or group variable available to it. + If adding custom keys to an existing AVD data model, start the key with an underscore `_`, so it will be ignored by schema validation. + --8<-- roles/eos_cli_config_gen/docs/tables/custom-templates.md --8<-- diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md b/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md index c9f10f30cca..259632b623e 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md @@ -146,7 +146,7 @@ AVD provides the capability to customize your node types, supporting a variety o ??? example "Default value for design `l3ls-evpn`" ```yaml - node_type:keys: + node_type_keys: - key: spine type: spine @@ -184,7 +184,7 @@ AVD provides the capability to customize your node types, supporting a variety o ??? example "Default value for design `l2ls`" ```yaml - node_type:keys: + node_type_keys: - key: l3spine type: l3spine @@ -218,7 +218,7 @@ AVD provides the capability to customize your node types, supporting a variety o ??? example "Default value for design `mpls`" ```yaml - node_type:keys: + node_type_keys: - key: p type: p @@ -259,6 +259,102 @@ AVD provides the capability to customize your node types, supporting a variety o roles/eos_designs/docs/tables/node-type-keys.md --8<-- +### Context for ip_addressing templates + +To help calculate the custom IP addressing, the following contextual variables are available to the custom templates: + +router_id: + +- `{{ switch_id }}` +- `{{ loopback_ipv4_pool }}` +- `{{ loopback_ipv4_offset }}` +- All group/hostvars + +mlag_ip_primary & mlag_ip_secondary: + +- `{{ mlag_primary_id }}` +- `{{ mlag_secondary_id }}` +- `{{ switch_data.combined.mlag_peer_ipv4_pool }}` +- All group/hostvars + +mlag_l3_ip_primary & mlag_l3_ip_secondary: + +- `{{ mlag_primary_id }}` +- `{{ mlag_secondary_id }}` +- `{{ switch_data.combined.mlag_peer_l3_ipv4_pool }}` +- All group/hostvars + +p2p_uplinks_ip & p2p_uplinks_peer_ip: + +- `{{ switch.uplink_ipv4_pool }}` +- `{{ switch.id }}` +- `{{ switch.max_uplink_switches }}` +- `{{ switch.max_parallel_uplinks }}` +- `{{ uplink_switch_index }}` +- All group/hostvars + +vtep_ip_mlag: + +- `{{ switch_vtep_loopback_ipv4_pool }}` +- `{{ mlag_primary_id }}` +- `{{ loopback_ipv4_offset }}` +- All group/hostvars + +vtep_ip: + +- `{{ switch_vtep_loopback_ipv4_pool }}` +- `{{ switch_id }}` +- `{{ loopback_ipv4_offset }}` +- All group/hostvars + +While all templates can leverage the internal switch facts (switch.*) to customize the interface descriptions, +the values are not part of the officially supported data models, and may change without notice. + +### Context for interface_descriptions templates + +To help format the custom interface descriptions, the following contextual variables are available to the custom templates: + +underlay_ethernet_interfaces: + +- `{{ link.peer }}` +- `{{ link.peer_interface }}` +- `{{ link.type }} (underlay_p2p or underlay_l2)` +- All group/hostvars + +underlay_port_channel_interfaces: + +- `{{ link.channel_description }}` +- `{{ link.channel_group_id }}` +- `{{ link.peer_channel_group_id }}` +- All group/hostvars + +mlag_ethernet_interfaces: + +- `{{ mlag_interface }}` +- `{{ mlag_peer }}` +- All group/hostvars + +mlag_port_channel_interfaces: + +- `{{ mlag_interfaces }}` +- `{{ mlag_peer }}` +- All group/hostvars + +connected_endpoints_ethernet_interfaces: + +- `{{ peer }}` +- `{{ peer_interface }}` +- All group/hostvars + +connected_endpoints_port_channel_interfaces: + +- `{{ peer }}` +- `{{ adapter_port_channel_description }}` +- All group/hostvars + +While all templates can leverage the internal switch facts (switch.*) to customize the interface descriptions, +the values are not part of the officially supported data models and may change without notice. + ## Type setting - The `type:` variable needs to be defined for each device in the fabric. @@ -297,6 +393,13 @@ roles/eos_designs/docs/tables/type-setting.md ## Default node types settings +Node types can be defined statically on each node or in each group of nodes. By leveraging `default_node_types`, regular expressions can be used to determine the node type based +on the hostname. + +!!! warning + Please note that using the `default_node_types` functionality will cause certain tests in the eos_validate_state role to not be executed. + This functionality will be restored as part of a later update to eos_validate_state and this note will then be removed. + --8<-- roles/eos_designs/docs/tables/default-node-types.md --8<-- @@ -927,7 +1030,7 @@ roles/eos_designs/docs/tables/connected-endpoints-keys.md ## Network Services -The network services variabless provide an abstracted model to define network services across the fabric. +The network services variables provide an abstracted model to define network services across the fabric. The network services are grouped by tenants. The definition of a tenant may vary between organizations. E.g. tenants can be organizations or departments. The filtering models defined under [Node type network services configuration](#node-type-network-services-configuration) allows diff --git a/mkdocs.yml b/mkdocs.yml index 5b4140576d5..4a30f446c2b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -125,11 +125,12 @@ nav: - Home: README.md - Getting Started: - Introduction to Ansible and AVD: docs/getting-started/intro-to-ansible-and-avd.md - - Example for Single DC L3LS: examples/single-dc-l3ls/README.md - - Example for Dual DC L3LS: examples/dual-dc-l3ls/README.md - - Example for L2LS Fabric: examples/l2ls-fabric/README.md - - Example for Campus Fabric: examples/campus-fabric/README.md - - Example for ISIS-LDP IPVPN: examples/isis-ldp-ipvpn/README.md + - Examples: + - Single DC L3LS: examples/single-dc-l3ls/README.md + - Dual DC L3LS: examples/dual-dc-l3ls/README.md + - L2LS Fabric: examples/l2ls-fabric/README.md + - Campus Fabric: examples/campus-fabric/README.md + - ISIS-LDP IPVPN: examples/isis-ldp-ipvpn/README.md - Installation: - Collection Installation: docs/installation/collection-installation.md - Roles Documentation: