From 11b7a06e60f0bf14720607c802b3e5903d424371 Mon Sep 17 00:00:00 2001 From: Carl Buchmann Date: Fri, 24 Jan 2025 10:43:28 -0500 Subject: [PATCH] Doc: Move docs folder to root of repo (#4923) Co-authored-by: Guillaume Mulocher --- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- .github/ISSUE_TEMPLATE/feature-request.yml | 2 +- .../pull_request_template.md | 2 +- .../schema_eos_cli_config_gen.md | 2 +- .github/pull_request_template.md | 2 +- .pre-commit-config.yaml | 22 +- ansible_collections/arista/avd/CNAME | 2 +- .../arista/avd/docs/requirements.txt | 1 + .../avd/examples/campus-fabric/README.md | 44 +-- ...nstallation.md => example-installation.md} | 2 +- .../avd/examples/cv-pathfinder/README.md | 30 +- .../avd/examples/dual-dc-l3ls/README.md | 32 +- .../avd/examples/isis-ldp-ipvpn/README.md | 20 +- .../arista/avd/examples/l2ls-fabric/README.md | 34 +- .../avd/examples/single-dc-l3ls/README.md | 42 +-- .../arista/avd/plugins/modules/cv_workflow.py | 6 +- .../avd/roles/build_output_folders/README.md | 2 +- .../arista/avd/roles/cv_deploy/README.md | 16 +- .../avd/roles/cvp_configlet_upload/README.md | 8 +- .../avd/roles/dhcp_provisioner/README.md | 4 +- .../avd/roles/eos_cli_config_gen/README.md | 8 +- .../docs/how-to/custom-templates.md | 2 +- .../docs/input-variables.md | 336 +++++++++--------- .../docs/role-configuration.md | 10 +- .../avd/roles/eos_config_deploy_cvp/README.md | 10 +- .../docs/avd-to-cvaas.md | 6 +- .../roles/eos_config_deploy_eapi/README.md | 10 +- .../arista/avd/roles/eos_designs/README.md | 18 +- .../how-to/custom-structured-configuration.md | 6 +- .../docs/how-to/custom-templates.md | 2 +- .../avd/roles/eos_designs/docs/how-to/ptp.md | 4 +- .../avd/roles/eos_designs/docs/how-to/wan.md | 22 +- .../roles/eos_designs/docs/input-variables.md | 162 ++++----- .../eos_designs/docs/role-configuration.md | 8 +- .../eos_designs/docs/tables/network-ports.md | 4 +- .../arista/avd/roles/eos_snapshot/README.md | 8 +- .../avd/roles/eos_validate_state/README.md | 8 +- .../_media}/5-stage-topology.gif | Bin .../avd-eos-cli-config-gen-doc-overview.png | Bin .../_media/avd-eos-lab-topology-overview.gif | Bin .../avd/media => docs/_media}/avd-logo.png | Bin .../docs => docs}/_media/avd_roles_dark.svg | 0 .../docs => docs}/_media/avd_roles_light.svg | 0 .../_media/avd_workflow_eapi_dark.svg | 0 .../_media/avd_workflow_eapi_light.svg | 0 .../_media/awx-create-inventory.png | Bin .../_media/awx-create-project-venv.png | Bin .../_media/awx-create-source.png | Bin .../_media/awx-create-template.png | Bin .../_media/awx-inventory-add-source.png | Bin .../_media/awx-inventory-list-devices.png | Bin .../_media/awx-inventory-sync-source.png | Bin .../docs => docs}/_media/awx-playbook-run.png | Bin .../_media/cloudvision-deployed-configlet.png | Bin .../_media/cloudvision-device-topology.png | Bin .../_media/cloudvision-initial-configlet.png | Bin .../cloudvision-uploaded-configlets.png | Bin .../_media/cloudvision-ztpd-devices.png | Bin .../docs => docs}/_media/cv_ansible_logo.png | Bin .../docs => docs}/_media/cv_deploy_dark.svg | 0 .../docs => docs}/_media/cv_deploy_light.svg | 0 .../_media/cvp_configlet_upload_dark.svg | 0 .../_media/cvp_configlet_upload_light.svg | 0 .../media => docs/_media}/dissag-topology.gif | Bin .../_media}/enable_trunk_groups.png | Bin .../_media/eos_cli_config_gen_dark.svg | 0 .../_media/eos_cli_config_gen_light.svg | 0 .../_media/eos_config_deploy_cvp_dark.svg | 0 .../_media/eos_config_deploy_cvp_light.svg | 0 .../_media/eos_config_deploy_eapi_dark.svg | 0 .../_media/eos_config_deploy_eapi_light.svg | 0 .../docs => docs}/_media/eos_designs_dark.svg | 0 .../_media/eos_designs_light.svg | 0 .../_media/eos_snapshot_dark.svg | 0 .../_media/eos_snapshot_light.svg | 0 .../_media/eos_validate_state_dark.svg | 0 .../_media/eos_validate_state_light.svg | 0 .../_media}/example-playbook-deploy-cvp.gif | Bin .../_media}/example-playbook-deploy-eapi.gif | Bin .../_media/excalidraw/avd_roles.excalidraw | 0 .../excalidraw/avd_workflow_eapi.excalidraw | 0 .../cvp_configlet_upload.excalidraw | 0 .../_media/excalidraw/deploy_to_cv.excalidraw | 0 .../excalidraw/eos_cli_config_gen.excalidraw | 0 .../eos_config_deploy_cvp.excalidraw | 0 .../eos_config_deploy_eapi.excalidraw | 0 .../_media/excalidraw/eos_designs.excalidraw | 0 .../_media/excalidraw/eos_snapshot.excalidraw | 0 .../excalidraw/eos_validate_state.excalidraw | 0 .../excalidraw/pyavd_functions.excalidraw | 0 .../avd/docs => docs}/_media/favicon.ico | Bin .../figure-2-cloudvision-change-control.png | Bin .../_media/first-cvp-avd-topology.png | Bin .../getting-started/aap-avd/aap-cvp-eos.svg | 0 .../aap-avd/aap-dashboardpng.png | Bin .../getting-started/aap-avd/add-template.png | Bin .../getting-started/aap-avd/all-hosts.png | Bin .../getting-started/aap-avd/create-ee.png | Bin .../getting-started/aap-avd/create-source.png | Bin .../_media/getting-started/aap-avd/cvp-cc.png | Bin .../aap-avd/inv-job-output.png | Bin .../getting-started/aap-avd/inv-job-sync.png | Bin .../getting-started/aap-avd/inv-sync.png | Bin .../getting-started/aap-avd/job-output.png | Bin .../getting-started/aap-avd/job-updates.png | Bin .../getting-started/aap-avd/run-job.png | Bin .../getting-started/aap-avd/save-inv.png | Bin .../getting-started/aap-avd/save-project.png | Bin .../getting-started/aap-avd/select-add-ee.png | Bin .../aap-avd/select-add-inv.png | Bin .../aap-avd/select-add-project.png | Bin .../getting-started/aap-avd/select-ee.png | Bin .../getting-started/aap-avd/select-inv.png | Bin .../aap-avd/select-projects.png | Bin .../aap-avd/select-sources.png | Bin .../aap-avd/select-templates.png | Bin .../aap-avd/survey-enabled.png | Bin .../getting-started/aap-avd/survey-save.png | Bin .../getting-started/aap-avd/template-save.png | Bin .../aap-avd/template-survey.png | Bin .../_media/getting-started/collections.svg | 0 .../group-vars-folder-structure.png | Bin .../_media/getting-started/groups.svg | 0 .../inventory-folder-structure.png | Bin .../_media/getting-started/requirements.svg | 0 .../_media/getting-started/single-dc.svg | 0 .../docs => docs}/_media/git-structure.gif | Bin .../media => docs/_media}/l2ls-topology.svg | 0 .../_media/lab-nat-topology-example.png | Bin .../media => docs/_media}/mpls-topology.svg | 0 .../_media}/only_local_vlan_trunk_groups.png | Bin .../_media/pyavd_functions_dark.svg | 0 .../_media/pyavd_functions_light.svg | 0 .../_media}/role_eos_designs.gif | Bin .../media => docs/_media}/serviceaccount1.png | Bin .../media => docs/_media}/serviceaccount2.png | Bin .../media => docs/_media}/serviceaccount3.png | Bin .../_media/streaming-inventory.png | Bin .../studios_end_to_end_provisioning.png | Bin .../_media}/variables_precedence.png | Bin .../_media/vscode-container-demo-overview.png | Bin .../media => docs/_media}/wan-topology.svg | 0 .../_media}/wan_direct_ha_no_lan.png | Bin .../media => docs/_media}/wan_ebgp_lan_ha.png | Bin .../_media}/wan_ebgp_lan_ha_direct.png | Bin .../_media}/wan_ebgp_lan_single_router.png | Bin .../media => docs/_media}/wan_lan_common.png | Bin .../avd/docs => docs}/_overrides/main.html | 0 .../avd/docs => docs}/containers/overview.md | 0 .../authoring_eos_cli_config_gen.md | 0 .../contribution/development-tooling.md | 0 .../eos_designs_internal_notes.md | 2 +- .../contribution/input-variable-validation.md | 0 .../docs => docs}/contribution/overview.md | 0 .../docs => docs}/contribution/style-guide.md | 0 .../docs => docs}/getting-started/avd-aap.md | 2 +- .../intro-to-ansible-and-avd.md | 22 +- .../installation/collection-installation.md | 5 + .../plugins/Filter_plugins/add_md_toc.md | 0 .../plugins/Filter_plugins/decrypt.md | 0 .../plugins/Filter_plugins/default.md | 0 .../plugins/Filter_plugins/encrypt.md | 0 .../plugins/Filter_plugins/hide_passwords.md | 0 .../plugins/Filter_plugins/is_in_filter.md | 0 .../plugins/Filter_plugins/list_compress.md | 0 .../plugins/Filter_plugins/natural_sort.md | 0 .../plugins/Filter_plugins/range_expand.md | 0 .../plugins/Filter_plugins/snmp_hash.md | 0 .../plugins/Filter_plugins/status_render.md | 0 .../configlet_build_config.md | 0 .../Modules_and_action_plugins/cv_workflow.md | 6 +- .../eos_cli_config_gen.md | 0 .../eos_designs_documentation.md | 0 .../eos_designs_facts.md | 0 .../eos_designs_structured_config.md | 0 .../eos_validate_state_reports.md | 0 .../eos_validate_state_runner.md | 0 .../inventory_to_container.md | 0 .../Modules_and_action_plugins/set_vars.md | 0 .../verify_requirements.md | 0 .../plugins/Test_plugins/contains.md | 0 .../plugins/Test_plugins/defined.md | 0 .../plugins/Vars_plugins/global_vars.md | 0 .../avd/docs => docs}/porting-guides/4.x.x.md | 6 +- .../avd/docs => docs}/porting-guides/5.x.x.md | 2 +- .../arista/avd/docs => docs/pyavd}/pyavd.md | 10 +- .../avd/docs => docs}/release-notes/1.0.x.md | 0 .../avd/docs => docs}/release-notes/1.1.x.md | 0 .../avd/docs => docs}/release-notes/2.x.x.md | 0 .../avd/docs => docs}/release-notes/3.x.x.md | 2 +- .../avd/docs => docs}/release-notes/4.x.x.md | 0 .../avd/docs => docs}/release-notes/5.x.x.md | 0 docs/requirements.txt | 12 + .../stylesheets/extra.ivory.css.backup | 0 .../stylesheets/extra.material.css | 0 .../avd/docs => docs}/stylesheets/tables.js | 0 .../templates/avd_schema_table.j2 | 0 .../docs => docs}/templates/plugin-docs.j2 | 0 .../versioning}/semantic-versioning.md | 0 .../arista/avd/index.md => index.md | 14 +- media/example-playbook-deploy-cvp.gif | Bin 69708 -> 0 bytes media/example-playbook-deploy-eapi.gif | Bin 56753 -> 0 bytes mkdocs.yml | 124 ++++--- .../pyavd/_eos_designs/schema/__init__.py | 12 +- .../schema/eos_designs.schema.yml | 2 +- .../schema_fragments/network_ports.schema.yml | 2 +- 206 files changed, 580 insertions(+), 542 deletions(-) rename ansible_collections/arista/avd/examples/common/{installation.md => example-installation.md} (93%) rename {ansible_collections/arista/avd/media => docs/_media}/5-stage-topology.gif (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd-eos-cli-config-gen-doc-overview.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd-eos-lab-topology-overview.gif (100%) rename {ansible_collections/arista/avd/media => docs/_media}/avd-logo.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd_roles_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd_roles_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd_workflow_eapi_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/avd_workflow_eapi_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-create-inventory.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-create-project-venv.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-create-source.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-create-template.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-inventory-add-source.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-inventory-list-devices.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-inventory-sync-source.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/awx-playbook-run.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cloudvision-deployed-configlet.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cloudvision-device-topology.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cloudvision-initial-configlet.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cloudvision-uploaded-configlets.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cloudvision-ztpd-devices.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cv_ansible_logo.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cv_deploy_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cv_deploy_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cvp_configlet_upload_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/cvp_configlet_upload_light.svg (100%) rename {ansible_collections/arista/avd/media => docs/_media}/dissag-topology.gif (100%) rename {ansible_collections/arista/avd/media => docs/_media}/enable_trunk_groups.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_cli_config_gen_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_cli_config_gen_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_config_deploy_cvp_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_config_deploy_cvp_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_config_deploy_eapi_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_config_deploy_eapi_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_designs_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_designs_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_snapshot_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_snapshot_light.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_validate_state_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/eos_validate_state_light.svg (100%) rename {ansible_collections/arista/avd/media => docs/_media}/example-playbook-deploy-cvp.gif (100%) rename {ansible_collections/arista/avd/media => docs/_media}/example-playbook-deploy-eapi.gif (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/avd_roles.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/avd_workflow_eapi.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/cvp_configlet_upload.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/deploy_to_cv.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_cli_config_gen.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_config_deploy_cvp.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_config_deploy_eapi.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_designs.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_snapshot.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/eos_validate_state.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/excalidraw/pyavd_functions.excalidraw (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/favicon.ico (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/figure-2-cloudvision-change-control.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/first-cvp-avd-topology.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/aap-cvp-eos.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/aap-dashboardpng.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/add-template.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/all-hosts.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/create-ee.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/create-source.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/cvp-cc.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/inv-job-output.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/inv-job-sync.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/inv-sync.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/job-output.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/job-updates.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/run-job.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/save-inv.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/save-project.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-add-ee.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-add-inv.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-add-project.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-ee.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-inv.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-projects.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-sources.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/select-templates.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/survey-enabled.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/survey-save.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/template-save.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/aap-avd/template-survey.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/collections.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/group-vars-folder-structure.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/groups.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/inventory-folder-structure.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/requirements.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/getting-started/single-dc.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/git-structure.gif (100%) rename {ansible_collections/arista/avd/media => docs/_media}/l2ls-topology.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/lab-nat-topology-example.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/mpls-topology.svg (100%) rename {ansible_collections/arista/avd/media => docs/_media}/only_local_vlan_trunk_groups.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/pyavd_functions_dark.svg (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/pyavd_functions_light.svg (100%) rename {ansible_collections/arista/avd/media => docs/_media}/role_eos_designs.gif (100%) rename {ansible_collections/arista/avd/media => docs/_media}/serviceaccount1.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/serviceaccount2.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/serviceaccount3.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/streaming-inventory.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/studios_end_to_end_provisioning.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/variables_precedence.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_media/vscode-container-demo-overview.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan-topology.svg (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan_direct_ha_no_lan.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan_ebgp_lan_ha.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan_ebgp_lan_ha_direct.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan_ebgp_lan_single_router.png (100%) rename {ansible_collections/arista/avd/media => docs/_media}/wan_lan_common.png (100%) rename {ansible_collections/arista/avd/docs => docs}/_overrides/main.html (100%) rename {ansible_collections/arista/avd/docs => docs}/containers/overview.md (100%) rename {ansible_collections/arista/avd/docs => docs}/contribution/authoring_eos_cli_config_gen.md (100%) rename {ansible_collections/arista/avd/docs => docs}/contribution/development-tooling.md (100%) rename {ansible_collections/arista/avd/docs => docs}/contribution/eos_designs_internal_notes.md (99%) rename {ansible_collections/arista/avd/docs => docs}/contribution/input-variable-validation.md (100%) rename {ansible_collections/arista/avd/docs => docs}/contribution/overview.md (100%) rename {ansible_collections/arista/avd/docs => docs}/contribution/style-guide.md (100%) rename {ansible_collections/arista/avd/docs => docs}/getting-started/avd-aap.md (99%) rename {ansible_collections/arista/avd/docs => docs}/getting-started/intro-to-ansible-and-avd.md (95%) rename {ansible_collections/arista/avd/docs => docs}/installation/collection-installation.md (95%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/add_md_toc.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/decrypt.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/default.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/encrypt.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/hide_passwords.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/is_in_filter.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/list_compress.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/natural_sort.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/range_expand.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/snmp_hash.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Filter_plugins/status_render.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/configlet_build_config.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/cv_workflow.md (96%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_cli_config_gen.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_designs_documentation.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_designs_facts.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_designs_structured_config.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_validate_state_reports.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/eos_validate_state_runner.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/inventory_to_container.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/set_vars.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Modules_and_action_plugins/verify_requirements.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Test_plugins/contains.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Test_plugins/defined.md (100%) rename {ansible_collections/arista/avd/docs => docs}/plugins/Vars_plugins/global_vars.md (100%) rename {ansible_collections/arista/avd/docs => docs}/porting-guides/4.x.x.md (98%) rename {ansible_collections/arista/avd/docs => docs}/porting-guides/5.x.x.md (99%) rename {ansible_collections/arista/avd/docs => docs/pyavd}/pyavd.md (89%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/1.0.x.md (100%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/1.1.x.md (100%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/2.x.x.md (100%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/3.x.x.md (99%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/4.x.x.md (100%) rename {ansible_collections/arista/avd/docs => docs}/release-notes/5.x.x.md (100%) create mode 100644 docs/requirements.txt rename {ansible_collections/arista/avd/docs => docs}/stylesheets/extra.ivory.css.backup (100%) rename {ansible_collections/arista/avd/docs => docs}/stylesheets/extra.material.css (100%) rename {ansible_collections/arista/avd/docs => docs}/stylesheets/tables.js (100%) rename {ansible_collections/arista/avd/docs => docs}/templates/avd_schema_table.j2 (100%) rename {ansible_collections/arista/avd/docs => docs}/templates/plugin-docs.j2 (100%) rename {ansible_collections/arista/avd/docs => docs/versioning}/semantic-versioning.md (100%) rename ansible_collections/arista/avd/index.md => index.md (84%) delete mode 100644 media/example-playbook-deploy-cvp.gif delete mode 100644 media/example-playbook-deploy-eapi.gif diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 873aa1dbdd8..568094bf105 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -64,7 +64,7 @@ body: id: terms attributes: label: Contributing Guide - description: By submitting this issue, you agree to follow our [Contributing Guide](https://avd.sh/en/latest/docs/contribution/overview.html) + description: By submitting this issue, you agree to follow our [Contributing Guide](https://avd.arista.com/devel/docs/contribution/overview.html) options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index 4e204cf1ad5..9b479eecf9f 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -71,7 +71,7 @@ body: id: terms attributes: label: Contributing Guide - description: By submitting this issue, you agree to follow our [Contributing Guide](https://avd.sh/en/latest/docs/contribution/overview.html) + description: By submitting this issue, you agree to follow our [Contributing Guide](https://avd.arista.com/devel/docs/contribution/overview.html) options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index a7138e66e87..71ac12705bd 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -30,6 +30,6 @@ Fixes # - [ ] My code has been rebased from devel before I start -- [ ] I have read the [**CONTRIBUTING**](https://avd.sh/en/latest/docs/contribution/overview.html) document. +- [ ] I have read the [**CONTRIBUTING**](https://avd.arista.com/devel/docs/contribution/overview.html) document. - [ ] My change requires a change to the documentation and documentation have been updated accordingly. - [ ] I have updated [molecule CI](https://github.com/aristanetworks/avd/tree/devel/ansible_collections/arista/avd/molecule) testing accordingly. (check the box if not applicable) diff --git a/.github/PULL_REQUEST_TEMPLATE/schema_eos_cli_config_gen.md b/.github/PULL_REQUEST_TEMPLATE/schema_eos_cli_config_gen.md index 158a471d107..272b840fa23 100644 --- a/.github/PULL_REQUEST_TEMPLATE/schema_eos_cli_config_gen.md +++ b/.github/PULL_REQUEST_TEMPLATE/schema_eos_cli_config_gen.md @@ -10,7 +10,7 @@ - README.md is most complete with all keys. README_v4.0 includes partial data models after conversion to lists. - Schema fragment path is `roles/eos_cli_config_gen/schemas/schema_fragments/.schema.yml`. - Copy line 1-5 from another schema (comments and outer type:dict). - - Refer to [schema documentation](https://avd.sh/en/devel/docs/input-variable-validation.html) for syntax and/or use YAML Lint plugin from Redhat in VSCode. + - Refer to [schema documentation](https://avd.arista.com/devel/docs/contribution/input-variable-validation.html) for syntax and/or use YAML Lint plugin from Redhat in VSCode. - Use `convert_types` on value that could be mixed type or misinterpreted like integers and numeric strings. - [ ] If the data model has been converted from wildcard dicts: - Add `convert_types: ['dict']` to the schema. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a7138e66e87..3b7190587ac 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -30,6 +30,6 @@ Fixes # - [ ] My code has been rebased from devel before I start -- [ ] I have read the [**CONTRIBUTING**](https://avd.sh/en/latest/docs/contribution/overview.html) document. +- [ ] I have read the [**CONTRIBUTING**](https://avd.arista.com/stable/docs/contribution/overview.html) document. - [ ] My change requires a change to the documentation and documentation have been updated accordingly. - [ ] I have updated [molecule CI](https://github.com/aristanetworks/avd/tree/devel/ansible_collections/arista/avd/molecule) testing accordingly. (check the box if not applicable) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index edefb38cca7..9c10809c62b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -139,7 +139,7 @@ repos: python-avd/pyavd/.*/schema/.*schema\.yml| # Exclude YAML schemas file python-avd/pyavd/_cv/api/.*| # Exclude auto generated files for CV API python-avd/pyavd/_cv/extra_cv_protos/.*| # Exclude extra CV proto files - ansible-avd/ansible_collections/arista/avd/docs/plugins/.* | # Excluded auto generated doc for Ansible plugins + docs/plugins/.* | # Excluded auto generated doc for Ansible plugins )$ - repo: local @@ -148,8 +148,8 @@ repos: - id: docs-plugin-modules name: Build documentation for collection modules and action plugins. entry: >- - ansible-doc-extractor --template ansible_collections/arista/avd/docs/templates/plugin-docs.j2 - --markdown "ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/" + ansible-doc-extractor --template docs/templates/plugin-docs.j2 + --markdown "docs/plugins/Modules_and_action_plugins/" language: python types: [python] additional_dependencies: ['ansible-doc-extractor>=0.1.10', 'ansible-core>=2.16.0,<2.19.0'] @@ -158,8 +158,8 @@ repos: - id: docs-plugin-filter name: Build documentation for collection filter plugins. entry: >- - ansible-doc-extractor --template ansible_collections/arista/avd/docs/templates/plugin-docs.j2 - --markdown "ansible_collections/arista/avd/docs/plugins/Filter_plugins/" + ansible-doc-extractor --template docs/templates/plugin-docs.j2 + --markdown "docs/plugins/Filter_plugins/" language: python types_or: [python, yaml] additional_dependencies: ['ansible-doc-extractor>=0.1.10', 'ansible-core>=2.16.0,<2.19.0'] @@ -169,8 +169,8 @@ repos: - id: docs-plugin-lookup name: Build documentation for collection lookup plugins. entry: >- - ansible-doc-extractor --template ansible_collections/arista/avd/docs/templates/plugin-docs.j2 - --markdown "ansible_collections/arista/avd/docs/plugins/Lookup_plugins/" + ansible-doc-extractor --template docs/templates/plugin-docs.j2 + --markdown "docs/plugins/Lookup_plugins/" language: python types: [python] additional_dependencies: ['ansible-doc-extractor>=0.1.10', 'ansible-core>=2.16.0,<2.19.0'] @@ -179,8 +179,8 @@ repos: - id: docs-plugin-test name: Build documentation for collection test plugins. entry: >- - ansible-doc-extractor --template ansible_collections/arista/avd/docs/templates/plugin-docs.j2 - --markdown "ansible_collections/arista/avd/docs/plugins/Test_plugins/" + ansible-doc-extractor --template docs/templates/plugin-docs.j2 + --markdown "docs/plugins/Test_plugins/" language: python types: [python] additional_dependencies: ['ansible-doc-extractor>=0.1.10', 'ansible-core>=2.16.0,<2.19.0'] @@ -189,8 +189,8 @@ repos: - id: docs-plugin-vars name: Build documentation for collection var plugins. entry: >- - ansible-doc-extractor --template ansible_collections/arista/avd/docs/templates/plugin-docs.j2 - --markdown "ansible_collections/arista/avd/docs/plugins/Vars_plugins/" + ansible-doc-extractor --template docs/templates/plugin-docs.j2 + --markdown "docs/plugins/Vars_plugins/" language: python types: [python] additional_dependencies: ['ansible-doc-extractor>=0.1.10', 'ansible-core>=2.16.0,<2.19.0'] diff --git a/ansible_collections/arista/avd/CNAME b/ansible_collections/arista/avd/CNAME index 1e6b3114baa..c306847ed7b 100644 --- a/ansible_collections/arista/avd/CNAME +++ b/ansible_collections/arista/avd/CNAME @@ -1 +1 @@ -www.avd.sh +avd.arista.com diff --git a/ansible_collections/arista/avd/docs/requirements.txt b/ansible_collections/arista/avd/docs/requirements.txt index 28737438922..b459f90129f 100644 --- a/ansible_collections/arista/avd/docs/requirements.txt +++ b/ansible_collections/arista/avd/docs/requirements.txt @@ -1,6 +1,7 @@ mkdocs mkdocs-material<10 mkdocs-material-extensions +mkdocs-same-dir pymdown-extensions mdx_truly_sane_lists mike==1.1.2 diff --git a/ansible_collections/arista/avd/examples/campus-fabric/README.md b/ansible_collections/arista/avd/examples/campus-fabric/README.md index fa42c392d36..3a8d3b71a29 100644 --- a/ansible_collections/arista/avd/examples/campus-fabric/README.md +++ b/ansible_collections/arista/avd/examples/campus-fabric/README.md @@ -17,7 +17,7 @@ This example describes and includes all the AVD files used to build a Campus Fab ## Installation & Requirements --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ``` shell @@ -69,7 +69,7 @@ Below is the basic configuration file for SPINE1: ``` shell --8<-- -examples/campus-fabric/switch-basic-configurations/SPINE1.cfg +ansible_collections/arista/avd/examples/campus-fabric/switch-basic-configurations/SPINE1.cfg --8<-- ``` @@ -106,7 +106,7 @@ If DNS is unavailable, define the variable ansible_host as an IP address for eac ``` yaml --8<-- -examples/campus-fabric/inventory.yml +ansible_collections/arista/avd/examples/campus-fabric/inventory.yml --8<-- ``` @@ -172,7 +172,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1.yml --8<-- ``` @@ -185,7 +185,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1_FABRIC.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1_FABRIC.yml --8<-- ``` @@ -194,7 +194,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1_SPINES.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1_SPINES.yml --8<-- ``` @@ -203,7 +203,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1_LEAFS.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1_LEAFS.yml --8<-- ``` @@ -212,16 +212,16 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1_NETWORK_SERVICES.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1_NETWORK_SERVICES.yml --8<-- ``` === "DC1_NETWORK_PORTS" - Our fabric would not be complete without connecting some devices to it. Therefore, we define port profiles and network port ranges in the **group_vars/DC1_NETWORKS_PORTS.yml** file. A single port_profile may be used across several switches and port ranges. In our example, we create a port profile called `PP-DOT1X` to define generic 802.1x (NAC) settings we wish to apply to a range of ports. The `network_ports` data model defines which switches and ports to apply the port profile. This data model allows a single regex statement to define a list of switches. In addition, the variable `switch_ports` expands into a range of ports. You can view more details of the `range_expand` filter [here](../../docs/plugins/Filter_plugins/range_expand.md). These variables are applied to the spine and leaf nodes since they are a part of this inventory group. + Our fabric would not be complete without connecting some devices to it. Therefore, we define port profiles and network port ranges in the **group_vars/DC1_NETWORKS_PORTS.yml** file. A single port_profile may be used across several switches and port ranges. In our example, we create a port profile called `PP-DOT1X` to define generic 802.1x (NAC) settings we wish to apply to a range of ports. The `network_ports` data model defines which switches and ports to apply the port profile. This data model allows a single regex statement to define a list of switches. In addition, the variable `switch_ports` expands into a range of ports. You can view more details of the `range_expand` filter [here](../../../../../docs/plugins/Filter_plugins/range_expand.md). These variables are applied to the spine and leaf nodes since they are a part of this inventory group. ``` yaml --8<-- - examples/campus-fabric/group_vars/DC1_NETWORK_PORTS.yml + ansible_collections/arista/avd/examples/campus-fabric/group_vars/DC1_NETWORK_PORTS.yml --8<-- ``` @@ -276,7 +276,7 @@ Now that we have defined all of our Ansible variables (AVD inputs), it is time t ``` yaml --8<-- - examples/campus-fabric/build.yml + ansible_collections/arista/avd/examples/campus-fabric/build.yml --8<-- ``` @@ -284,7 +284,7 @@ Now that we have defined all of our Ansible variables (AVD inputs), it is time t ``` yaml --8<-- - examples/campus-fabric/deploy.yml + ansible_collections/arista/avd/examples/campus-fabric/deploy.yml --8<-- ``` @@ -314,7 +314,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/SPINE1.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/SPINE1.cfg --8<-- ``` @@ -322,7 +322,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/SPINE2.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/SPINE2.cfg --8<-- ``` @@ -330,7 +330,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF1A.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF1A.cfg --8<-- ``` @@ -338,7 +338,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF1B.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF1B.cfg --8<-- ``` @@ -346,7 +346,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF2A.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF2A.cfg --8<-- ``` @@ -354,7 +354,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF3A.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF3A.cfg --8<-- ``` @@ -362,7 +362,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF3B.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF3B.cfg --8<-- ``` @@ -370,7 +370,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF3C.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF3C.cfg --8<-- ``` @@ -378,7 +378,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF3D.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF3D.cfg --8<-- ``` @@ -386,7 +386,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/campus-fabric/intended/configs/LEAF3E.cfg + ansible_collections/arista/avd/examples/campus-fabric/intended/configs/LEAF3E.cfg --8<-- ``` diff --git a/ansible_collections/arista/avd/examples/common/installation.md b/ansible_collections/arista/avd/examples/common/example-installation.md similarity index 93% rename from ansible_collections/arista/avd/examples/common/installation.md rename to ansible_collections/arista/avd/examples/common/example-installation.md index 6a2bcbf37c4..4d0ef6c03ba 100644 --- a/ansible_collections/arista/avd/examples/common/installation.md +++ b/ansible_collections/arista/avd/examples/common/example-installation.md @@ -6,7 +6,7 @@ Requirements to use this example: -- Follow the [installation guide](../../docs/installation/collection-installation.md) for AVD +- Follow the [installation guide](../../../../../docs/installation/collection-installation.md) for AVD - Run the following playbook to copy the AVD **examples** to your current working directory, for example `ansible-avd-examples`: ```shell diff --git a/ansible_collections/arista/avd/examples/cv-pathfinder/README.md b/ansible_collections/arista/avd/examples/cv-pathfinder/README.md index b6eff246f79..a3e451112b2 100644 --- a/ansible_collections/arista/avd/examples/cv-pathfinder/README.md +++ b/ansible_collections/arista/avd/examples/cv-pathfinder/README.md @@ -34,7 +34,7 @@ This example will go over the following: ## Installation --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ```shell @@ -172,7 +172,7 @@ In this example, we consider that no DNS entry is available to reach the devices ```yaml title="inventory.yml" --8<-- -examples/cv-pathfinder/inventory.yml +ansible_collections/arista/avd/examples/cv-pathfinder/inventory.yml --8<-- ``` @@ -182,7 +182,7 @@ when required to decrypt files or inline variables. ```yaml title="ansible.cfg" --8<-- -examples/cv-pathfinder/ansible.cfg +ansible_collections/arista/avd/examples/cv-pathfinder/ansible.cfg --8<-- ``` @@ -201,7 +201,7 @@ As discussed in the single DC example, basic connectivity between the Ansible ho ```eos title="site1-border1-basic-configuration.txt" --8<-- -examples/cv-pathfinder/switch-basic-configurations/site1-border1-basic-configuration.txt +ansible_collections/arista/avd/examples/cv-pathfinder/switch-basic-configurations/site1-border1-basic-configuration.txt --8<-- ``` @@ -214,7 +214,7 @@ To define device types, required by AVD, this example leverages the `default_nod ```yaml title="groups_vars/all.yml" --8<-- -examples/cv-pathfinder/group_vars/all.yml:19: +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/all.yml:19: --8<-- ``` @@ -266,7 +266,7 @@ The `management.yml` file contains the configuration for: ```yaml title="group_vars/WAN/management.yml" --8<-- -examples/cv-pathfinder/group_vars/WAN//management.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/WAN//management.yml --8<-- ``` @@ -276,7 +276,7 @@ The `ansible-avd-examples/cv-pathfinder/group_vars/WAN/cv_pathfinder_settings.ym ```yaml title="group_vars/WAN/cv_pathfinder_settings.yml" --8<-- -examples/cv-pathfinder/group_vars/WAN//cv_pathfinder_settings.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/WAN//cv_pathfinder_settings.yml --8<-- ``` @@ -369,7 +369,7 @@ apply common configurations. ```yaml title="group_vars/WAN/l3_interface_profiles.yml" --8<-- -examples/cv-pathfinder/group_vars/WAN//l3_interface_profiles.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/WAN//l3_interface_profiles.yml --8<-- ``` @@ -385,7 +385,7 @@ used for DPS. ```yaml title="group_vars/WAN/tenants.yml" --8<-- -examples/cv-pathfinder/group_vars/WAN//tenants.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/WAN//tenants.yml --8<-- ``` @@ -395,7 +395,7 @@ The pathfinder configuration can be found in `group_vars/PATHFINDERS.yml`: ```yaml title="group_vars/PATHFINDERS.yml" --8<-- -examples/cv-pathfinder/group_vars/PATHFINDERS.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/PATHFINDERS.yml --8<-- ``` @@ -433,7 +433,7 @@ The following diagrams describe the connectivity of Site 1's physical, LAN, and ```yaml title="group_vars/SITE1.yml" --8<-- -examples/cv-pathfinder/group_vars/SITE1.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/SITE1.yml --8<-- ``` @@ -460,7 +460,7 @@ The following diagrams describe the Site2 physical, LAN and HA tunnels connectiv ```yaml title="group_vars/SITE2.yml" --8<-- -examples/cv-pathfinder/group_vars/SITE2.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/SITE2.yml --8<-- ``` @@ -478,7 +478,7 @@ The following diagrams describe the Site3 physical and LAN connectivity. ```yaml title="group_vars/SITE3.yml" --8<-- -examples/cv-pathfinder/group_vars/SITE3.yml +ansible_collections/arista/avd/examples/cv-pathfinder/group_vars/SITE3.yml --8<-- ``` @@ -494,7 +494,7 @@ Example of using this playbook without devices (local tasks): ```yaml --8<-- - examples/cv-pathfinder/build.yml + ansible_collections/arista/avd/examples/cv-pathfinder/build.yml --8<-- ``` @@ -523,7 +523,7 @@ To build and deploy the configurations to CVaaS, run first the `build.yml` playb ```yaml --8<-- - examples/cv-pathfinder/deploy.yml + ansible_collections/arista/avd/examples/cv-pathfinder/deploy.yml --8<-- ``` diff --git a/ansible_collections/arista/avd/examples/dual-dc-l3ls/README.md b/ansible_collections/arista/avd/examples/dual-dc-l3ls/README.md index 84983c0268b..afe567f4afb 100644 --- a/ansible_collections/arista/avd/examples/dual-dc-l3ls/README.md +++ b/ansible_collections/arista/avd/examples/dual-dc-l3ls/README.md @@ -43,7 +43,7 @@ There are two playbooks included in this example to show the following: ## Installation --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ```shell @@ -162,7 +162,7 @@ In this example, we will consider that no DNS is available and define the IPs th ```yaml --8<-- - examples/dual-dc-l3ls/inventory.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/inventory.yml --8<-- ``` @@ -174,7 +174,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC1_SPINES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC1_SPINES.yml --8<-- ``` @@ -182,7 +182,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC1_L3_LEAVES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC1_L3_LEAVES.yml --8<-- ``` @@ -190,7 +190,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC1_L2_LEAVES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC1_L2_LEAVES.yml --8<-- ``` @@ -198,7 +198,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC2_SPINES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC2_SPINES.yml --8<-- ``` @@ -206,7 +206,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC2_L3_LEAVES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC2_L3_LEAVES.yml --8<-- ``` @@ -214,7 +214,7 @@ As discussed in the single DC scenario, all device types must be explicitly defi ```yaml --8<-- - examples/dual-dc-l3ls/group_vars/DC2_L2_LEAVES.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC2_L2_LEAVES.yml --8<-- ``` @@ -226,7 +226,7 @@ In this section, only additions to the previous example will be discussed. The o ```yaml title="FABRIC.yml" --8<-- - examples/dual-dc-l3ls/group_vars/FABRIC.yml:70:91 + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/FABRIC.yml:70:91 --8<-- ``` @@ -356,7 +356,7 @@ Since we are adding the EVPN DC GW functionality in DC2, we must also add it in ```yaml title="DC1.yml" --8<-- - examples/dual-dc-l3ls/group_vars/DC1.yml:82:111 + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC1.yml:82:111 --8<-- ``` @@ -364,7 +364,7 @@ Finally, the definition in DC2 for the L2 leaf switches: ```yaml title="DC2.yml" --8<-- - examples/dual-dc-l3ls/group_vars/DC2.yml:113:138 + ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/DC2.yml:113:138 --8<-- ``` @@ -376,7 +376,7 @@ It is important to consider adding the new leaves to the Inventory as described ```yaml title="NETWORK_SERVICES.yml" --8<-- -examples/dual-dc-l3ls/group_vars/NETWORK_SERVICES.yml +ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/NETWORK_SERVICES.yml --8<-- ``` @@ -386,7 +386,7 @@ After the previous section, all VRFs and VLANs across the fabric are now defined ```yaml title="CONNECTED_ENDPOINTS.yml" --8<-- -examples/dual-dc-l3ls/group_vars/CONNECTED_ENDPOINTS.yml +ansible_collections/arista/avd/examples/dual-dc-l3ls/group_vars/CONNECTED_ENDPOINTS.yml --8<-- ``` @@ -404,7 +404,7 @@ Example of using this playbook without devices (local tasks): ```yaml --8<-- - examples/dual-dc-l3ls/build.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/build.yml --8<-- ``` @@ -418,7 +418,7 @@ To build and deploy the configurations to your switches directly, using eAPI, ru ```yaml --8<-- - examples/dual-dc-l3ls/deploy.yml + ansible_collections/arista/avd/examples/dual-dc-l3ls/deploy.yml --8<-- ``` @@ -447,7 +447,7 @@ ok: [dc1-leaf1a -> localhost] => (item=/home/user/Documents/git_projects/ansible If similar output is not shown, make sure: -1. The documented [requirements](../../docs/installation/collection-installation.md) are met. +1. The documented [requirements](../../../../../docs/installation/collection-installation.md) are met. 2. The latest `arista.avd` collection is installed. ## Troubleshooting diff --git a/ansible_collections/arista/avd/examples/isis-ldp-ipvpn/README.md b/ansible_collections/arista/avd/examples/isis-ldp-ipvpn/README.md index a2f3920d821..b2c4f8e2efe 100644 --- a/ansible_collections/arista/avd/examples/isis-ldp-ipvpn/README.md +++ b/ansible_collections/arista/avd/examples/isis-ldp-ipvpn/README.md @@ -12,7 +12,7 @@ title: AVD example for a MPLS-VPN based WAN Network ## Introduction -This example is the logical second step in introducing AVD to new users, following the [Introduction to Ansible and AVD](../../docs/getting-started/intro-to-ansible-and-avd.md) section. New users with access to virtual routers (using Arista vEOS-lab or cEOS) can learn how to generate configuration and documentation for a complete fabric environment. Users with access to physical routers will have to adapt a few settings. This is all documented inline in the comments included in the YAML files. If a lab with virtual or physical routers is not accessible, this example can also be used to only generate the output from AVD if desired. +This example is the logical second step in introducing AVD to new users, following the [Introduction to Ansible and AVD](../../../../../docs/getting-started/intro-to-ansible-and-avd.md) section. New users with access to virtual routers (using Arista vEOS-lab or cEOS) can learn how to generate configuration and documentation for a complete fabric environment. Users with access to physical routers will have to adapt a few settings. This is all documented inline in the comments included in the YAML files. If a lab with virtual or physical routers is not accessible, this example can also be used to only generate the output from AVD if desired. The example includes and describes all the AVD files and their content used to build a MPLS-VPN WAN network covering two sites using the following: @@ -25,7 +25,7 @@ This example does not include Integration with CloudVision to keep everything as ## Installation --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ```shell @@ -98,7 +98,7 @@ Below is the basic configuration file for `p1`: ```eos title="p1-basic-configuration.txt" --8<-- -examples/isis-ldp-ipvpn/switch-basic-configurations/p1-basic-configuration.txt +ansible_collections/arista/avd/examples/isis-ldp-ipvpn/switch-basic-configurations/p1-basic-configuration.txt --8<-- ``` @@ -230,7 +230,7 @@ Since this example covers building a MPLS WAN network, AVD must know about the d ```yaml --8<-- - examples/isis-ldp-ipvpn/group_vars/WAN1_P_ROUTERS.yml + ansible_collections/arista/avd/examples/isis-ldp-ipvpn/group_vars/WAN1_P_ROUTERS.yml --8<-- ``` @@ -238,7 +238,7 @@ Since this example covers building a MPLS WAN network, AVD must know about the d ```yaml --8<-- - examples/isis-ldp-ipvpn/group_vars/WAN1_PE_ROUTERS.yml + ansible_collections/arista/avd/examples/isis-ldp-ipvpn/group_vars/WAN1_PE_ROUTERS.yml --8<-- ``` @@ -246,7 +246,7 @@ Since this example covers building a MPLS WAN network, AVD must know about the d ```yaml --8<-- - examples/isis-ldp-ipvpn/group_vars/WAN1_RR_ROUTERS.yml + ansible_collections/arista/avd/examples/isis-ldp-ipvpn/group_vars/WAN1_RR_ROUTERS.yml --8<-- ``` @@ -441,7 +441,7 @@ core_interfaces: ```yaml title="NETWORK_SERVICES.yml" --8<-- -examples/isis-ldp-ipvpn/group_vars/NETWORK_SERVICES.yml +ansible_collections/arista/avd/examples/isis-ldp-ipvpn/group_vars/NETWORK_SERVICES.yml --8<-- ``` @@ -480,7 +480,7 @@ In this example, the deploy playbook looks like the following: ```yaml title="deploy.yml" --8<-- -examples/isis-ldp-ipvpn/deploy.yml +ansible_collections/arista/avd/examples/isis-ldp-ipvpn/deploy.yml --8<-- ``` @@ -495,7 +495,7 @@ Example of using the build playbook without devices (local tasks): ```yaml title="build.yml" --8<-- -examples/isis-ldp-ipvpn/build.yml +ansible_collections/arista/avd/examples/isis-ldp-ipvpn/build.yml --8<-- ``` @@ -523,7 +523,7 @@ ok: [p1 -> localhost] => (item=/home/user/Documents/git_projects/ansible-avd-exa If similar output is not shown, make sure: -1. The documented [requirements](../../docs/installation/collection-installation.md) are met. +1. The documented [requirements](../../../../../docs/installation/collection-installation.md) are met. 2. The latest `arista.avd` collection is installed. ## Troubleshooting diff --git a/ansible_collections/arista/avd/examples/l2ls-fabric/README.md b/ansible_collections/arista/avd/examples/l2ls-fabric/README.md index b1661b4f877..6cc05ce5481 100644 --- a/ansible_collections/arista/avd/examples/l2ls-fabric/README.md +++ b/ansible_collections/arista/avd/examples/l2ls-fabric/README.md @@ -28,7 +28,7 @@ The example is meant as a starting foundation. You may build more advanced fabri ## Installation & Requirements --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ``` shell @@ -75,7 +75,7 @@ Below is the basic configuration file for SPINE1: ``` shell --8<-- -examples/l2ls-fabric/switch-basic-configurations/SPINE1.cfg +ansible_collections/arista/avd/examples/l2ls-fabric/switch-basic-configurations/SPINE1.cfg --8<-- ``` @@ -112,7 +112,7 @@ Alternatively, if DNS is unavailable, define the ansible_host variable as an IP ``` yaml --8<-- -examples/l2ls-fabric/inventory.yml +ansible_collections/arista/avd/examples/l2ls-fabric/inventory.yml --8<-- ``` @@ -138,7 +138,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1.yml --8<-- ``` @@ -151,7 +151,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1_FABRIC.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1_FABRIC.yml --8<-- ``` @@ -160,7 +160,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1_SPINES.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1_SPINES.yml --8<-- ``` @@ -169,7 +169,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1_LEAFS.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1_LEAFS.yml --8<-- ``` @@ -178,7 +178,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1_NETWORK_SERVICES.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1_NETWORK_SERVICES.yml --8<-- ``` @@ -187,7 +187,7 @@ The tabs below show the Ansible **group_vars** used in this example. ``` yaml --8<-- - examples/l2ls-fabric/group_vars/DC1_NETWORK_PORTS.yml + ansible_collections/arista/avd/examples/l2ls-fabric/group_vars/DC1_NETWORK_PORTS.yml --8<-- ``` @@ -199,7 +199,7 @@ Now that we have defined all of our Ansible variables (AVD inputs), it is time t ``` yaml --8<-- - examples/l2ls-fabric/build.yml + ansible_collections/arista/avd/examples/l2ls-fabric/build.yml --8<-- ``` @@ -207,7 +207,7 @@ Now that we have defined all of our Ansible variables (AVD inputs), it is time t ``` yaml --8<-- - examples/l2ls-fabric/deploy.yml + ansible_collections/arista/avd/examples/l2ls-fabric/deploy.yml --8<-- ``` @@ -237,7 +237,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/SPINE1.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/SPINE1.cfg --8<-- ``` @@ -245,7 +245,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/SPINE2.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/SPINE2.cfg --8<-- ``` @@ -253,7 +253,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/LEAF1.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/LEAF1.cfg --8<-- ``` @@ -261,7 +261,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/LEAF2.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/LEAF2.cfg --8<-- ``` @@ -269,7 +269,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/LEAF3.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/LEAF3.cfg --8<-- ``` @@ -277,7 +277,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/l2ls-fabric/intended/configs/LEAF4.cfg + ansible_collections/arista/avd/examples/l2ls-fabric/intended/configs/LEAF4.cfg --8<-- ``` diff --git a/ansible_collections/arista/avd/examples/single-dc-l3ls/README.md b/ansible_collections/arista/avd/examples/single-dc-l3ls/README.md index f750aec50ac..84fc9039198 100644 --- a/ansible_collections/arista/avd/examples/single-dc-l3ls/README.md +++ b/ansible_collections/arista/avd/examples/single-dc-l3ls/README.md @@ -12,7 +12,7 @@ title: AVD example for a single data center using L3LS ## Introduction -This example is meant to be used as the logical second step in introducing AVD to new users, directly following the [Introduction to Ansible and AVD](../../docs/getting-started/intro-to-ansible-and-avd.md) section. New users with access to virtual switches (using Arista vEOS-lab or cEOS) can learn how to generate configuration and documentation for a complete fabric environment. Users with access to physical switches will have to adapt a few settings. This is all documented inline in the comments included in the YAML files. If a lab with virtual or physical switches is not accessible, this example can be used only to generate the output from AVD if required. +This example is meant to be used as the logical second step in introducing AVD to new users, directly following the [Introduction to Ansible and AVD](../../../../../docs/getting-started/intro-to-ansible-and-avd.md) section. New users with access to virtual switches (using Arista vEOS-lab or cEOS) can learn how to generate configuration and documentation for a complete fabric environment. Users with access to physical switches will have to adapt a few settings. This is all documented inline in the comments included in the YAML files. If a lab with virtual or physical switches is not accessible, this example can be used only to generate the output from AVD if required. The example includes and describes all the AVD files and their content used to build an L3LS EVPN/VXLAN Symmetric IRB network covering a single DC using the following: @@ -29,7 +29,7 @@ Ansible playbooks are included to show the following: ## Installation --8<-- -examples/common/installation.md +ansible_collections/arista/avd/examples/common/example-installation.md --8<-- ```shell @@ -108,7 +108,7 @@ Below is the basic configuration file for `dc1-leaf1a`: ```eos title="dc1-leaf1a-basic-configuration.txt" --8<-- -examples/single-dc-l3ls/switch-basic-configurations/dc1-leaf1a-basic-configuration.txt +ansible_collections/arista/avd/examples/single-dc-l3ls/switch-basic-configurations/dc1-leaf1a-basic-configuration.txt --8<-- ``` @@ -161,7 +161,7 @@ Alternatively, if there is no DNS available, or if devices need to be reached us ```yaml title="inventory.yml" --8<-- -examples/single-dc-l3ls/inventory.yml +ansible_collections/arista/avd/examples/single-dc-l3ls/inventory.yml --8<-- ``` @@ -222,7 +222,7 @@ all: - Please note that the username (`ansible`) and password (`ansible`) defined here must exist in CloudVision. - - More information is available [here](https://avd.sh/en/stable/roles/eos_config_deploy_cvp/index.html?h=is_deployed#inputs) + - More information is available [here](https://avd.arista.com/stable/roles/eos_config_deploy_cvp/index.html?h=is_deployed#inputs) 2. `NETWORK_SERVICES` @@ -244,7 +244,7 @@ Since this example covers building an L3LS network, AVD must know about the devi ```yaml --8<-- - examples/single-dc-l3ls/group_vars/DC1_SPINES.yml + ansible_collections/arista/avd/examples/single-dc-l3ls/group_vars/DC1_SPINES.yml --8<-- ``` @@ -252,7 +252,7 @@ Since this example covers building an L3LS network, AVD must know about the devi ```yaml --8<-- - examples/single-dc-l3ls/group_vars/DC1_L3_LEAVES.yml + ansible_collections/arista/avd/examples/single-dc-l3ls/group_vars/DC1_L3_LEAVES.yml --8<-- ``` @@ -260,7 +260,7 @@ Since this example covers building an L3LS network, AVD must know about the devi ```yaml --8<-- - examples/single-dc-l3ls/group_vars/DC1_L2_LEAVES.yml + ansible_collections/arista/avd/examples/single-dc-l3ls/group_vars/DC1_L2_LEAVES.yml --8<-- ``` @@ -569,7 +569,7 @@ After the previous section, all VRFs and VLANs across the fabric are now defined ```yaml title="CONNECTED_ENDPOINTS.yml" --8<-- -examples/single-dc-l3ls/group_vars/CONNECTED_ENDPOINTS.yml +ansible_collections/arista/avd/examples/single-dc-l3ls/group_vars/CONNECTED_ENDPOINTS.yml --8<-- ``` @@ -622,7 +622,7 @@ The `build.yml` playbook looks like the following: ```yaml title="build.yml" --8<-- -examples/single-dc-l3ls/build.yml +ansible_collections/arista/avd/examples/single-dc-l3ls/build.yml --8<-- ``` @@ -634,7 +634,7 @@ The `deploy.yml` playbook looks like the following: ```yaml title="deploy.yml" --8<-- -examples/single-dc-l3ls/deploy.yml +ansible_collections/arista/avd/examples/single-dc-l3ls/deploy.yml --8<-- ``` @@ -645,7 +645,7 @@ The `deploy-cvp.yml` playbook looks like the following: ```yaml title="deploy-cvp.yml" --8<-- -examples/single-dc-l3ls/deploy-cvp.yml +ansible_collections/arista/avd/examples/single-dc-l3ls/deploy-cvp.yml --8<-- ``` @@ -704,7 +704,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-spine1.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-spine1.cfg --8<-- ``` @@ -712,7 +712,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-spine2.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-spine2.cfg --8<-- ``` @@ -720,7 +720,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf1a.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf1a.cfg --8<-- ``` @@ -728,7 +728,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf1b.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf1b.cfg --8<-- ``` @@ -736,7 +736,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf1c.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf1c.cfg --8<-- ``` @@ -744,7 +744,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf2a.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf2a.cfg --8<-- ``` @@ -752,7 +752,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf2b.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf2b.cfg --8<-- ``` @@ -760,7 +760,7 @@ Your configuration files should be similar to these. ``` shell --8<-- - examples/single-dc-l3ls/intended/configs/dc1-leaf2c.cfg + ansible_collections/arista/avd/examples/single-dc-l3ls/intended/configs/dc1-leaf2c.cfg --8<-- ``` @@ -782,7 +782,7 @@ ok: [dc1-leaf1a -> localhost] => (item=/home/user/Documents/git_projects/ansible If similar output is not shown, make sure: -1. The documented [requirements](../../docs/installation/collection-installation.md) are met. +1. The documented [requirements](../../../../../docs/installation/collection-installation.md) are met. 2. The latest `arista.avd` collection is installed. ## Troubleshooting diff --git a/ansible_collections/arista/avd/plugins/modules/cv_workflow.py b/ansible_collections/arista/avd/plugins/modules/cv_workflow.py index 31eda6d0ad9..62ee4e91dce 100644 --- a/ansible_collections/arista/avd/plugins/modules/cv_workflow.py +++ b/ansible_collections/arista/avd/plugins/modules/cv_workflow.py @@ -138,10 +138,12 @@ - |- When interacting with CVaaS the regional URL where the tenant is deployed should be used, e.g: `cv_servers: [ www.cv-prod-euwest-2.arista.io ]` - To see the full list of regional URLs, please visit the [cv_deploy](../../../roles/cv_deploy/README.md#overview) + To see the full list of regional URLs, please visit the + [cv_deploy](../../../ansible_collections/arista/avd/roles/cv_deploy/README.md#overview) role documentation. - |- - To generate service accounts check [cv_deploy](../../../roles/cv_deploy/README.md#steps-to-create-service-accounts-on-cloudvision) + To generate service accounts check + [cv_deploy](../../../ansible_collections/arista/avd/roles/cv_deploy/README.md#steps-to-create-service-accounts-on-cloudvision) role documentation or the CloudVision Help Center. """ diff --git a/ansible_collections/arista/avd/roles/build_output_folders/README.md b/ansible_collections/arista/avd/roles/build_output_folders/README.md index 1ec8afa9dc2..118fba42fa3 100644 --- a/ansible_collections/arista/avd/roles/build_output_folders/README.md +++ b/ansible_collections/arista/avd/roles/build_output_folders/README.md @@ -81,4 +81,4 @@ Below is an example to use in your playbook to build output folders using defaul ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/cv_deploy/README.md b/ansible_collections/arista/avd/roles/cv_deploy/README.md index 517eef7eecd..9fb65b29146 100644 --- a/ansible_collections/arista/avd/roles/cv_deploy/README.md +++ b/ansible_collections/arista/avd/roles/cv_deploy/README.md @@ -55,7 +55,7 @@ The API to CloudVision is using gRPC over encrypted HTTP/2. - Configuration deployment is based on the "Static Configuration Studio" which was a Beta feature on CloudVision 2024.1.0. Make sure to enable "Studios - End-to-End Provisioning" under Settings, Features. - ![Figure 1: Ansible Role arista.avd.cv_deploy](../../docs/_media/studios_end_to_end_provisioning.png) + ![Figure 1: Ansible Role arista.avd.cv_deploy](../../../../../docs/_media/studios_end_to_end_provisioning.png) - Currently only the first of the given cv_servers is being used. ## Roadmap @@ -96,8 +96,8 @@ The workspace will be built and submitted, and a change control will be created Figure 2 below provides a visualization of the role's inputs, outputs executed by the role. -![Figure 2: Ansible Role arista.avd.cv_deploy](../../docs/_media/cv_deploy_dark.svg#only-dark) -![Figure 2: Ansible Role arista.avd.cv_deploy](../../docs/_media/cv_deploy_light.svg#only-light) +![Figure 2: Ansible Role arista.avd.cv_deploy](../../../../../docs/_media/cv_deploy_dark.svg#only-dark) +![Figure 2: Ansible Role arista.avd.cv_deploy](../../../../../docs/_media/cv_deploy_light.svg#only-light) ### Inputs @@ -253,7 +253,7 @@ The directories are configured with the same variables as for the other AVD role ```yaml --8<-- -roles/cv_deploy/defaults/main/directories.yml +ansible_collections/arista/avd/roles/cv_deploy/defaults/main/directories.yml --8<-- ``` @@ -270,9 +270,9 @@ Make sure to copy the generated password. You only get view it once. Click "Save" to exit the dialogue box. ``` -![Figure: 1](../../media/serviceaccount1.png) -![Figure: 2](../../media/serviceaccount2.png) -![Figure: 3](../../media/serviceaccount3.png) +![Figure: 1](../../../../../docs/_media/serviceaccount1.png) +![Figure: 2](../../../../../docs/_media/serviceaccount2.png) +![Figure: 3](../../../../../docs/_media/serviceaccount3.png) !!! note The name of the service account must match a username configured to be authorized on @@ -280,4 +280,4 @@ Click "Save" to exit the dialogue box. ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/cvp_configlet_upload/README.md b/ansible_collections/arista/avd/roles/cvp_configlet_upload/README.md index 5f64f99494a..ba214e7f568 100644 --- a/ansible_collections/arista/avd/roles/cvp_configlet_upload/README.md +++ b/ansible_collections/arista/avd/roles/cvp_configlet_upload/README.md @@ -26,8 +26,8 @@ ansible-galaxy collection install arista.cvp Figure 1 below provides a visualization of the role's inputs, outputs, and tasks in order executed by the role. -![Figure 1: Ansible Role cvp_configlet_upload](../../docs/_media/cvp_configlet_upload_dark.svg#only-dark) -![Figure 1: Ansible Role cvp_configlet_upload](../../docs/_media/cvp_configlet_upload_light.svg#only-light) +![Figure 1: Ansible Role cvp_configlet_upload](../../../../../docs/_media/cvp_configlet_upload_dark.svg#only-dark) +![Figure 1: Ansible Role cvp_configlet_upload](../../../../../docs/_media/cvp_configlet_upload_light.svg#only-light) 1. Read content of `{{ configlet_directory }}` and create **cv_configlet** input structure. 2. Collect CloudVision facts. @@ -101,8 +101,8 @@ ansible-playbook playbook.to.deploy.with.cvp.yml --tags "provision" ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/dhcp_provisioner/README.md b/ansible_collections/arista/avd/roles/dhcp_provisioner/README.md index ab784e40aac..b5d47f92704 100644 --- a/ansible_collections/arista/avd/roles/dhcp_provisioner/README.md +++ b/ansible_collections/arista/avd/roles/dhcp_provisioner/README.md @@ -129,8 +129,8 @@ custom_structured_configuration_daemon_terminattr: ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md index bed4372c3e5..ace1426f6fc 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md @@ -24,8 +24,8 @@ The **eos_cli_config_gen** role: Figure 1 below provides a visualization of the roles inputs, and outputs and tasks in order executed by the role. -![Figure 1: Ansible Role eos_cli_config_gen](../../docs/_media/eos_cli_config_gen_dark.svg#only-dark) -![Figure 1: Ansible Role eos_cli_config_gen](../../docs/_media/eos_cli_config_gen_light.svg#only-light) +![Figure 1: Ansible Role eos_cli_config_gen](../../../../../docs/_media/eos_cli_config_gen_dark.svg#only-dark) +![Figure 1: Ansible Role eos_cli_config_gen](../../../../../docs/_media/eos_cli_config_gen_light.svg#only-light) **Inputs:** @@ -44,7 +44,7 @@ Figure 1 below provides a visualization of the roles inputs, and outputs and tas ## Requirements -Requirements are located in the [collection installation guide](../../docs/installation/collection-installation.md) +Requirements are located in the [collection installation guide](../../../../../docs/installation/collection-installation.md) ## Input Variables @@ -58,4 +58,4 @@ Role configuration settings can be set either as regular inventory variables or ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/how-to/custom-templates.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/how-to/custom-templates.md index 32f1ce190e3..698b6d351be 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/how-to/custom-templates.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/how-to/custom-templates.md @@ -41,7 +41,7 @@ custom_templates: - custom_template_name.j2 ``` -For more details, see [Extensibility with Custom Templates](https://avd.sh/en/stable/roles/eos_cli_config_gen/docs/role-configuration.html#extensibility-with-custom-templates) +For more details, see [Extensibility with Custom Templates](https://avd.arista.com/stable/roles/eos_cli_config_gen/docs/role-configuration.html#extensibility-with-custom-templates) ## Adding the Custom Template to the `eos_cli_config_gen` Role 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 index 3f23f535102..e8abfc8148c 100644 --- 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 @@ -12,7 +12,7 @@ title: Input variables for eos_cli_config_gen This document describes the supported input variables for the role `arista.avd.eos_cli_config_gen`. -Since several data models have changed between AVD versions 4.x and 5.x, it is recommended to study the [Porting Guide for AVD 5.x.x](../../../docs/porting-guides/5.x.x.md) for existing deployments. +Since several data models have changed between AVD versions 4.x and 5.x, it is recommended to study the [Porting Guide for AVD 5.x.x](../../../../../../docs/porting-guides/5.x.x.md) for existing deployments. The input variables are documented below in tables and YAML. @@ -29,73 +29,73 @@ All values are optional. ### AAA accounting --8<-- -roles/eos_cli_config_gen/docs/tables/aaa-accounting.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aaa-accounting.md --8<-- ### AAA authentication --8<-- -roles/eos_cli_config_gen/docs/tables/aaa-authentication.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aaa-authentication.md --8<-- ### AAA authorization --8<-- -roles/eos_cli_config_gen/docs/tables/aaa-authorization.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aaa-authorization.md --8<-- ### AAA root --8<-- -roles/eos_cli_config_gen/docs/tables/aaa-root.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aaa-root.md --8<-- ### AAA server groups --8<-- -roles/eos_cli_config_gen/docs/tables/aaa-server-groups.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aaa-server-groups.md --8<-- ### Enable password --8<-- -roles/eos_cli_config_gen/docs/tables/enable-password.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/enable-password.md --8<-- ### IP radius source-interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ip-radius-source-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-radius-source-interfaces.md --8<-- ### IP tacacs source-interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ip-tacacs-source-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-tacacs-source-interfaces.md --8<-- ### Local users --8<-- -roles/eos_cli_config_gen/docs/tables/local-users.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/local-users.md --8<-- ### Radius server --8<-- -roles/eos_cli_config_gen/docs/tables/radius-server.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/radius-server.md --8<-- ### Roles --8<-- -roles/eos_cli_config_gen/docs/tables/roles.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/roles.md --8<-- ### Tacacs servers --8<-- -roles/eos_cli_config_gen/docs/tables/tacacs-servers.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/tacacs-servers.md --8<-- ## ACLs @@ -113,13 +113,13 @@ Access list names must be unique. The legacy data model supports simplified ACL definition with `sequence` to `action` mapping: --8<-- -roles/eos_cli_config_gen/docs/tables/access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/access-lists.md --8<-- The improved data model has a more sophisticated design documented below: --8<-- -roles/eos_cli_config_gen/docs/tables/ip-access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-access-lists.md --8<-- The improved data model allows to limit the number of ACL entries that AVD is allowed to generate by defining `ip_access_lists_max_entries`. @@ -128,31 +128,31 @@ If the number is above the limit, the playbook will fail. This provides a simpli 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. --8<-- -roles/eos_cli_config_gen/docs/tables/ip-access-lists-max-entries.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-access-lists-max-entries.md --8<-- ### IPv6 access-lists --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-access-lists.md --8<-- ### IPv6 standard access-lists --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-standard-access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-standard-access-lists.md --8<-- ### MAC access-lists --8<-- -roles/eos_cli_config_gen/docs/tables/mac-access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mac-access-lists.md --8<-- ### Standard access-lists --8<-- -roles/eos_cli_config_gen/docs/tables/standard-access-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/standard-access-lists.md --8<-- ## Endpoint Security @@ -160,19 +160,19 @@ roles/eos_cli_config_gen/docs/tables/standard-access-lists.md ### Address-locking --8<-- -roles/eos_cli_config_gen/docs/tables/address-locking.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/address-locking.md --8<-- ### Dot1x --8<-- -roles/eos_cli_config_gen/docs/tables/dot1x.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dot1x.md --8<-- ### MAC security --8<-- -roles/eos_cli_config_gen/docs/tables/mac-security.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mac-security.md --8<-- ## Filters and policies @@ -180,19 +180,19 @@ roles/eos_cli_config_gen/docs/tables/mac-security.md ### AS path --8<-- -roles/eos_cli_config_gen/docs/tables/as-path.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/as-path.md --8<-- ### Class-maps --8<-- -roles/eos_cli_config_gen/docs/tables/class-maps.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/class-maps.md --8<-- ### Dynamic prefix lists --8<-- -roles/eos_cli_config_gen/docs/tables/dynamic-prefix-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dynamic-prefix-lists.md --8<-- ### IP community lists @@ -208,73 +208,73 @@ 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: --8<-- -roles/eos_cli_config_gen/docs/tables/community-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/community-lists.md --8<-- The improved data model has a better design documented below: --8<-- -roles/eos_cli_config_gen/docs/tables/ip-community-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-community-lists.md --8<-- ### IP extcommunity-lists --8<-- -roles/eos_cli_config_gen/docs/tables/ip-extcommunity-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-extcommunity-lists.md --8<-- ### IP extcommunity-lists-regexp --8<-- -roles/eos_cli_config_gen/docs/tables/ip-extcommunity-lists-regexp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-extcommunity-lists-regexp.md --8<-- ### IPv6 prefix-lists --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-prefix-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-prefix-lists.md --8<-- ### Match list input --8<-- -roles/eos_cli_config_gen/docs/tables/match-list-input.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/match-list-input.md --8<-- ### Peer-filters --8<-- -roles/eos_cli_config_gen/docs/tables/peer-filters.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/peer-filters.md --8<-- ### Policy-maps --8<-- -roles/eos_cli_config_gen/docs/tables/policy-maps.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/policy-maps.md --8<-- ### Prefix-lists --8<-- -roles/eos_cli_config_gen/docs/tables/prefix-lists.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/prefix-lists.md --8<-- ### Route-maps --8<-- -roles/eos_cli_config_gen/docs/tables/route-maps.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/route-maps.md --8<-- ### Trackers --8<-- -roles/eos_cli_config_gen/docs/tables/trackers.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/trackers.md --8<-- ### Traffic policies --8<-- -roles/eos_cli_config_gen/docs/tables/traffic-policies.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/traffic-policies.md --8<-- ## Interfaces @@ -282,109 +282,109 @@ roles/eos_cli_config_gen/docs/tables/traffic-policies.md ### DPS interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/dps-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dps-interfaces.md --8<-- ### Errdisable --8<-- -roles/eos_cli_config_gen/docs/tables/errdisable.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/errdisable.md --8<-- ### Ethernet interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ethernet-interfaces.md --8<-- ### Interface defaults --8<-- -roles/eos_cli_config_gen/docs/tables/interface-defaults.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/interface-defaults.md --8<-- ### Interface profiles --8<-- -roles/eos_cli_config_gen/docs/tables/interface-profiles.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/interface-profiles.md --8<-- ### LACP --8<-- -roles/eos_cli_config_gen/docs/tables/lacp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/lacp.md --8<-- ### Link tracking groups --8<-- -roles/eos_cli_config_gen/docs/tables/link-tracking-groups.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/link-tracking-groups.md --8<-- ### LLDP --8<-- -roles/eos_cli_config_gen/docs/tables/lldp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/lldp.md --8<-- ### Loopback interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/loopback-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/loopback-interfaces.md --8<-- ### Management interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/management-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-interfaces.md --8<-- ### Patch panel --8<-- -roles/eos_cli_config_gen/docs/tables/patch-panel.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/patch-panel.md --8<-- ### Port-channel interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/port-channel-interfaces.md --8<-- ### Switchport default --8<-- -roles/eos_cli_config_gen/docs/tables/switchport-default.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/switchport-default.md --8<-- ### Switchport port security --8<-- -roles/eos_cli_config_gen/docs/tables/switchport-port-security.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/switchport-port-security.md --8<-- ### Transceiver QSFP default mode 4x10 --8<-- -roles/eos_cli_config_gen/docs/tables/transceiver-qsfp-default-mode-4x10.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/transceiver-qsfp-default-mode-4x10.md --8<-- ### Tunnel interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/tunnel-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/tunnel-interfaces.md --8<-- ### VLAN interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/vlan-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vlan-interfaces.md --8<-- ### VXLAN interface --8<-- -roles/eos_cli_config_gen/docs/tables/vxlan-interface.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vxlan-interface.md --8<-- ## Maintenance Mode @@ -392,19 +392,19 @@ roles/eos_cli_config_gen/docs/tables/vxlan-interface.md ### BGP groups --8<-- -roles/eos_cli_config_gen/docs/tables/bgp-groups.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/bgp-groups.md --8<-- ### Interface groups --8<-- -roles/eos_cli_config_gen/docs/tables/interface-groups.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/interface-groups.md --8<-- ### Maintenance --8<-- -roles/eos_cli_config_gen/docs/tables/maintenance.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/maintenance.md --8<-- ## Management @@ -412,139 +412,139 @@ roles/eos_cli_config_gen/docs/tables/maintenance.md ### Aliases --8<-- -roles/eos_cli_config_gen/docs/tables/aliases.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/aliases.md --8<-- ### Banners --8<-- -roles/eos_cli_config_gen/docs/tables/banners.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/banners.md --8<-- ### Boot --8<-- -roles/eos_cli_config_gen/docs/tables/boot.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/boot.md --8<-- ### Clock --8<-- -roles/eos_cli_config_gen/docs/tables/clock.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/clock.md --8<-- ### DNS domain --8<-- -roles/eos_cli_config_gen/docs/tables/dns-domain.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dns-domain.md --8<-- ### Domain-list --8<-- -roles/eos_cli_config_gen/docs/tables/domain-list.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/domain-list.md --8<-- ### Hostname --8<-- -roles/eos_cli_config_gen/docs/tables/hostname.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/hostname.md --8<-- ### IP domain lookup --8<-- -roles/eos_cli_config_gen/docs/tables/ip-domain-lookup.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-domain-lookup.md --8<-- ### IP HTTP client source-interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ip-http-client-source-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-http-client-source-interfaces.md --8<-- ### IP name servers --8<-- -roles/eos_cli_config_gen/docs/tables/ip-name-servers.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-name-servers.md --8<-- ### IP SSH client source-interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ip-ssh-client-source-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-ssh-client-source-interfaces.md --8<-- ### Management accounts --8<-- -roles/eos_cli_config_gen/docs/tables/management-accounts.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-accounts.md --8<-- ### Management API HTTP --8<-- -roles/eos_cli_config_gen/docs/tables/management-api-http.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-api-http.md --8<-- ### Management API models --8<-- -roles/eos_cli_config_gen/docs/tables/management-api-models.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-api-models.md --8<-- ### Management console --8<-- -roles/eos_cli_config_gen/docs/tables/management-console.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-console.md --8<-- ### Management defaults --8<-- -roles/eos_cli_config_gen/docs/tables/management-defaults.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-defaults.md --8<-- ### Management security --8<-- -roles/eos_cli_config_gen/docs/tables/management-security.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-security.md --8<-- ### Management SSH --8<-- -roles/eos_cli_config_gen/docs/tables/management-ssh.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-ssh.md --8<-- ### Management tech-support --8<-- -roles/eos_cli_config_gen/docs/tables/management-tech-support.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-tech-support.md --8<-- ### NTP --8<-- -roles/eos_cli_config_gen/docs/tables/ntp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ntp.md --8<-- ### Prompt --8<-- -roles/eos_cli_config_gen/docs/tables/prompt.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/prompt.md --8<-- ### Terminal --8<-- -roles/eos_cli_config_gen/docs/tables/terminal.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/terminal.md --8<-- ### Virtual source NAT VRFs --8<-- -roles/eos_cli_config_gen/docs/tables/virtual-source-nat-vrfs.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/virtual-source-nat-vrfs.md --8<-- ## Miscellaneous @@ -552,43 +552,43 @@ roles/eos_cli_config_gen/docs/tables/virtual-source-nat-vrfs.md ### Config comment --8<-- -roles/eos_cli_config_gen/docs/tables/config-comment.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/config-comment.md --8<-- ### Config end --8<-- -roles/eos_cli_config_gen/docs/tables/config-end.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/config-end.md --8<-- ### CVX --8<-- -roles/eos_cli_config_gen/docs/tables/cvx.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/cvx.md --8<-- ### EOS cli --8<-- -roles/eos_cli_config_gen/docs/tables/eos-cli.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/eos-cli.md --8<-- ### Is deployed --8<-- -roles/eos_cli_config_gen/docs/tables/is-deployed.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/is-deployed.md --8<-- ### Management CVX --8<-- -roles/eos_cli_config_gen/docs/tables/management-cvx.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-cvx.md --8<-- ### MCS client --8<-- -roles/eos_cli_config_gen/docs/tables/mcs-client.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mcs-client.md --8<-- ## Monitoring @@ -596,103 +596,103 @@ roles/eos_cli_config_gen/docs/tables/mcs-client.md ### Daemons --8<-- -roles/eos_cli_config_gen/docs/tables/daemons.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/daemons.md --8<-- ### Daemon terminattr --8<-- -roles/eos_cli_config_gen/docs/tables/daemon-terminattr.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/daemon-terminattr.md --8<-- ### Event handlers --8<-- -roles/eos_cli_config_gen/docs/tables/event-handlers.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/event-handlers.md --8<-- ### Event monitor --8<-- -roles/eos_cli_config_gen/docs/tables/event-monitor.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/event-monitor.md --8<-- ### Flow tracking --8<-- -roles/eos_cli_config_gen/docs/tables/flow-tracking.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/flow-tracking.md --8<-- ### Load interval --8<-- -roles/eos_cli_config_gen/docs/tables/load-interval.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/load-interval.md --8<-- ### Logging --8<-- -roles/eos_cli_config_gen/docs/tables/logging.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/logging.md --8<-- ### Management API gNMI --8<-- -roles/eos_cli_config_gen/docs/tables/management-api-gnmi.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/management-api-gnmi.md --8<-- ### Monitor connectivity --8<-- -roles/eos_cli_config_gen/docs/tables/monitor-connectivity.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/monitor-connectivity.md --8<-- ### Monitor server Radius --8<-- -roles/eos_cli_config_gen/docs/tables/monitor-server-radius.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/monitor-server-radius.md --8<-- ### Monitor sessions --8<-- -roles/eos_cli_config_gen/docs/tables/monitor-sessions.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/monitor-sessions.md --8<-- ### Monitor layer 1 --8<-- -roles/eos_cli_config_gen/docs/tables/monitor-layer1.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/monitor-layer1.md --8<-- ### Monitor telemetry --8<-- -roles/eos_cli_config_gen/docs/tables/monitor-telemetry.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/monitor-telemetry.md --8<-- ### SFLOW --8<-- -roles/eos_cli_config_gen/docs/tables/sflow.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/sflow.md --8<-- ### SNMP server --8<-- -roles/eos_cli_config_gen/docs/tables/snmp-server.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/snmp-server.md --8<-- ### Tap aggregation --8<-- -roles/eos_cli_config_gen/docs/tables/tap-aggregation.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/tap-aggregation.md --8<-- ### VM tracer-sessions --8<-- -roles/eos_cli_config_gen/docs/tables/vmtracer-sessions.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vmtracer-sessions.md --8<-- ## Multicast @@ -700,31 +700,31 @@ roles/eos_cli_config_gen/docs/tables/vmtracer-sessions.md ### IP IGMP snooping --8<-- -roles/eos_cli_config_gen/docs/tables/ip-igmp-snooping.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-igmp-snooping.md --8<-- ### Router IGMP --8<-- -roles/eos_cli_config_gen/docs/tables/router-igmp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-igmp.md --8<-- ### Router MSDP --8<-- -roles/eos_cli_config_gen/docs/tables/router-msdp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-msdp.md --8<-- ### Router multicast --8<-- -roles/eos_cli_config_gen/docs/tables/router-multicast.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-multicast.md --8<-- ### Router PIM sparse-mode --8<-- -roles/eos_cli_config_gen/docs/tables/router-pim-sparse-mode.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-pim-sparse-mode.md --8<-- ## Quality of Service @@ -732,37 +732,37 @@ roles/eos_cli_config_gen/docs/tables/router-pim-sparse-mode.md ### Priority flow control --8<-- -roles/eos_cli_config_gen/docs/tables/priority-flow-control.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/priority-flow-control.md --8<-- ### QoS --8<-- -roles/eos_cli_config_gen/docs/tables/qos.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/qos.md --8<-- ### QoS profiles --8<-- -roles/eos_cli_config_gen/docs/tables/qos-profiles.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/qos-profiles.md --8<-- ### Queue monitor-length --8<-- -roles/eos_cli_config_gen/docs/tables/queue-monitor-length.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/queue-monitor-length.md --8<-- ### Queue monitor-streaming --8<-- -roles/eos_cli_config_gen/docs/tables/queue-monitor-streaming.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/queue-monitor-streaming.md --8<-- ### Application traffic recognition --8<-- -roles/eos_cli_config_gen/docs/tables/application-traffic-recognition.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/application-traffic-recognition.md --8<-- ## Routing @@ -770,187 +770,187 @@ roles/eos_cli_config_gen/docs/tables/application-traffic-recognition.md ### ARP --8<-- -roles/eos_cli_config_gen/docs/tables/arp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/arp.md --8<-- ### DHCP relay --8<-- -roles/eos_cli_config_gen/docs/tables/dhcp-relay.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dhcp-relay.md --8<-- ### IP DHCP relay --8<-- -roles/eos_cli_config_gen/docs/tables/ip-dhcp-relay.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-dhcp-relay.md --8<-- ### IP DHCP Snooping --8<-- -roles/eos_cli_config_gen/docs/tables/ip-dhcp-snooping.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-dhcp-snooping.md --8<-- ### DHCP Servers --8<-- -roles/eos_cli_config_gen/docs/tables/dhcp-servers.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/dhcp-servers.md --8<-- ### IP ICMP redirect --8<-- -roles/eos_cli_config_gen/docs/tables/ip-icmp-redirect.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-icmp-redirect.md --8<-- ### IP NAT --8<-- -roles/eos_cli_config_gen/docs/tables/ip-nat.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-nat.md --8<-- ### IP routing IPv6 interfaces --8<-- -roles/eos_cli_config_gen/docs/tables/ip-routing-ipv6-interfaces.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-routing-ipv6-interfaces.md --8<-- ### IP routing --8<-- -roles/eos_cli_config_gen/docs/tables/ip-routing.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-routing.md --8<-- ### IP virtual router MAC address --8<-- -roles/eos_cli_config_gen/docs/tables/ip-virtual-router-mac-address.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-virtual-router-mac-address.md --8<-- ### IPv6 DHCP relay --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-dhcp-relay.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-dhcp-relay.md --8<-- ### IPv6 ICMP redirects --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-icmp-redirect.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-icmp-redirect.md --8<-- ### IPv6 static routes --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-static-routes.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-static-routes.md --8<-- ### IPv6 unicast routing --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-unicast-routing.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-unicast-routing.md --8<-- ### MPLS --8<-- -roles/eos_cli_config_gen/docs/tables/mpls.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mpls.md --8<-- ### Router adaptive virtual topology --8<-- -roles/eos_cli_config_gen/docs/tables/router-adaptive-virtual-topology.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-adaptive-virtual-topology.md --8<-- ### Router BFD --8<-- -roles/eos_cli_config_gen/docs/tables/router-bfd.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bfd.md --8<-- ### Router BGP --8<-- -roles/eos_cli_config_gen/docs/tables/router-bgp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md --8<-- ### Router general --8<-- -roles/eos_cli_config_gen/docs/tables/router-general.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-general.md --8<-- ### Router internet-exit --8<-- -roles/eos_cli_config_gen/docs/tables/router-internet-exit.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-internet-exit.md --8<-- ### Router ISIS --8<-- -roles/eos_cli_config_gen/docs/tables/router-isis.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-isis.md --8<-- ### Router L2 VPN --8<-- -roles/eos_cli_config_gen/docs/tables/router-l2-vpn.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-l2-vpn.md --8<-- ### Router OSPF --8<-- -roles/eos_cli_config_gen/docs/tables/router-ospf.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-ospf.md --8<-- ### Router path selection --8<-- -roles/eos_cli_config_gen/docs/tables/router-path-selection.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-path-selection.md --8<-- ### Router service-insertion --8<-- -roles/eos_cli_config_gen/docs/tables/router-service-insertion.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-service-insertion.md --8<-- ### Router traffic engineering --8<-- -roles/eos_cli_config_gen/docs/tables/router-traffic-engineering.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-traffic-engineering.md --8<-- ### Service routing configuration bgp --8<-- -roles/eos_cli_config_gen/docs/tables/service-routing-configuration-bgp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/service-routing-configuration-bgp.md --8<-- ### Service routing protocols model --8<-- -roles/eos_cli_config_gen/docs/tables/service-routing-protocols-model.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/service-routing-protocols-model.md --8<-- ### Static routes --8<-- -roles/eos_cli_config_gen/docs/tables/static-routes.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/static-routes.md --8<-- ### STUN --8<-- -roles/eos_cli_config_gen/docs/tables/stun.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/stun.md --8<-- ### VRFs --8<-- -roles/eos_cli_config_gen/docs/tables/vrfs.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vrfs.md --8<-- ## Security @@ -958,13 +958,13 @@ roles/eos_cli_config_gen/docs/tables/vrfs.md ### IP Security --8<-- -roles/eos_cli_config_gen/docs/tables/ip-security.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-security.md --8<-- ### Router segment-security --8<-- -roles/eos_cli_config_gen/docs/tables/router-segment-security.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-segment-security.md --8<-- ## Switching @@ -972,25 +972,25 @@ roles/eos_cli_config_gen/docs/tables/router-segment-security.md ### MLAG configuration --8<-- -roles/eos_cli_config_gen/docs/tables/mlag-configuration.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mlag-configuration.md --8<-- ### Spanning-tree --8<-- -roles/eos_cli_config_gen/docs/tables/spanning-tree.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/spanning-tree.md --8<-- ### VLAN internal order --8<-- -roles/eos_cli_config_gen/docs/tables/vlan-internal-order.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vlan-internal-order.md --8<-- ### VLANs --8<-- -roles/eos_cli_config_gen/docs/tables/vlans.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/vlans.md --8<-- ## System settings @@ -998,79 +998,79 @@ roles/eos_cli_config_gen/docs/tables/vlans.md ### Agents --8<-- -roles/eos_cli_config_gen/docs/tables/agents.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/agents.md --8<-- ### Hardware counters --8<-- -roles/eos_cli_config_gen/docs/tables/hardware-counters.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/hardware-counters.md --8<-- ### Hardware --8<-- -roles/eos_cli_config_gen/docs/tables/hardware.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/hardware.md --8<-- ### IP hardware --8<-- -roles/eos_cli_config_gen/docs/tables/ip-hardware.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ip-hardware.md --8<-- ### IPv6 hardware --8<-- -roles/eos_cli_config_gen/docs/tables/ipv6-hardware.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ipv6-hardware.md --8<-- ### L2 protocol --8<-- -roles/eos_cli_config_gen/docs/tables/l2-protocol.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/l2-protocol.md --8<-- ### MAC address-table --8<-- -roles/eos_cli_config_gen/docs/tables/mac-address-table.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/mac-address-table.md --8<-- ### Platform --8<-- -roles/eos_cli_config_gen/docs/tables/platform.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/platform.md --8<-- ### PoE --8<-- -roles/eos_cli_config_gen/docs/tables/poe.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/poe.md --8<-- ### PTP --8<-- -roles/eos_cli_config_gen/docs/tables/ptp.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/ptp.md --8<-- ### Redundancy --8<-- -roles/eos_cli_config_gen/docs/tables/redundancy.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/redundancy.md --8<-- ### System --8<-- -roles/eos_cli_config_gen/docs/tables/system.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/system.md --8<-- ### TCAM profile --8<-- -roles/eos_cli_config_gen/docs/tables/tcam-profile.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/tcam-profile.md --8<-- ## Metadata @@ -1078,5 +1078,5 @@ roles/eos_cli_config_gen/docs/tables/tcam-profile.md These fields are not generating any configuration. They are meant to be used by tools that parse structured configuration. --8<-- -roles/eos_cli_config_gen/docs/tables/metadata.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/metadata.md --8<-- 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 91964495699..7d8e12e282f 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 @@ -18,7 +18,7 @@ Default output directories can be updated by modifying the default role variable ``` yaml --8<-- -roles/eos_cli_config_gen/defaults/main/output_directories.yml +ansible_collections/arista/avd/roles/eos_cli_config_gen/defaults/main/output_directories.yml --8<-- ``` @@ -40,7 +40,7 @@ This behavior can be adjusted by setting the variable described below. If the validation mode is set to `warning`, execution will continue with invalid data, which can lead to hard-to-read errors or incorrect behavior. --8<-- -roles/eos_cli_config_gen/docs/tables/role-input-validation.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/role-input-validation.md --8<-- ## Extensibility with Custom Templates @@ -62,7 +62,7 @@ roles/eos_cli_config_gen/docs/tables/role-input-validation.md 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 +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/custom-templates.md --8<-- ## Generation of device configuration and documentation @@ -70,7 +70,7 @@ roles/eos_cli_config_gen/docs/tables/custom-templates.md The following settings can be leveraged to control generation of device configuration and documentation. --8<-- -roles/eos_cli_config_gen/docs/tables/role-settings.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/role-settings.md --8<-- ### Generate default config @@ -90,5 +90,5 @@ The following commands will be generated when `generate_default_config` is set t - End of configuration delimiter --8<-- -roles/eos_cli_config_gen/docs/tables/generate-default-config.md +ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/generate-default-config.md --8<-- diff --git a/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md b/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md index a89c68cf576..b364e0f84ef 100644 --- a/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md +++ b/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md @@ -33,8 +33,8 @@ ansible-galaxy collection install arista.cvp Figure 1 below provides a visualization of the role's inputs, outputs, and tasks in order executed by the role. -![Figure 1: Ansible Role eos_config_deploy_eapi](../../docs/_media/eos_config_deploy_cvp_dark.svg#only-dark) -![Figure 1: Ansible Role eos_config_deploy_eapi](../../docs/_media/eos_config_deploy_cvp_light.svg#only-light) +![Figure 1: Ansible Role eos_config_deploy_eapi](../../../../../docs/_media/eos_config_deploy_cvp_dark.svg#only-dark) +![Figure 1: Ansible Role eos_config_deploy_eapi](../../../../../docs/_media/eos_config_deploy_cvp_light.svg#only-light) 1. Read inventory 1. Build containers topology @@ -78,7 +78,7 @@ Default output directories can be updated by modifying the default role variable ``` yaml --8<-- -roles/eos_config_deploy_cvp/defaults/main/output_directories.yml +ansible_collections/arista/avd/roles/eos_config_deploy_cvp/defaults/main/output_directories.yml --8<-- ``` @@ -308,8 +308,8 @@ ansible-playbook playbook.to.deploy.with.cvp.yml --skip-tags "containers,apply" ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md b/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md index bfa74f6f6db..a777e0cbb3f 100644 --- a/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md +++ b/ansible_collections/arista/avd/roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md @@ -36,9 +36,9 @@ Make sure to copy the generated password. You only get view it once. Click "Save" to exit the dialogue box. ``` -![Figure: 1](../../../media/serviceaccount1.png) -![Figure: 2](../../../media/serviceaccount2.png) -![Figure: 3](../../../media/serviceaccount3.png) +![Figure: 1](../../../../../../docs/_media/serviceaccount1.png) +![Figure: 2](../../../../../../docs/_media/serviceaccount2.png) +![Figure: 3](../../../../../../docs/_media/serviceaccount3.png) !!! note The name of the service account must match a username configured to be authorized on diff --git a/ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md b/ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md index 1ea0d9439ac..289236d3142 100644 --- a/ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md +++ b/ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md @@ -23,8 +23,8 @@ The **eos_config_deploy_eapi** role: Figure 1 below provides a visualization of the role's inputs, outputs, and tasks in order executed by the role. -![Figure 1: Ansible Role eos_config_deploy_eapi](../../docs/_media/eos_config_deploy_eapi_dark.svg#only-dark) -![Figure 1: Ansible Role eos_config_deploy_eapi](../../docs/_media/eos_config_deploy_eapi_light.svg#only-light) +![Figure 1: Ansible Role eos_config_deploy_eapi](../../../../../docs/_media/eos_config_deploy_eapi_dark.svg#only-dark) +![Figure 1: Ansible Role eos_config_deploy_eapi](../../../../../docs/_media/eos_config_deploy_eapi_light.svg#only-light) **Inputs:** @@ -47,14 +47,14 @@ Figure 1 below provides a visualization of the role's inputs, outputs, and tasks ``` yaml --8<-- -roles/eos_config_deploy_eapi/defaults/main.yml +ansible_collections/arista/avd/roles/eos_config_deploy_eapi/defaults/main.yml --8<-- ``` ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_designs/README.md b/ansible_collections/arista/avd/roles/eos_designs/README.md index ac0e7a9adc3..049cbd78428 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/README.md +++ b/ansible_collections/arista/avd/roles/eos_designs/README.md @@ -30,8 +30,8 @@ The **eos_designs** role: Figure 1 below provides a visualization of the role's inputs, outputs, and tasks in order executed by the role. -![EOS Designs Overview](../../docs/_media/eos_designs_dark.svg#only-dark) -![EOS Designs Overview](../../docs/_media/eos_designs_light.svg#only-light) +![EOS Designs Overview](../../../../../docs/_media/eos_designs_dark.svg#only-dark) +![EOS Designs Overview](../../../../../docs/_media/eos_designs_light.svg#only-light) **Inputs:** @@ -93,13 +93,13 @@ Across all designs, the following functionality is provided: **5 Stage topology example:**
- 5 Stage topology example + 5 Stage topology example
**Disaggregated topology example:**
- Disaggregated topology example + Disaggregated topology example
### Layer 2 Leaf Spine @@ -115,7 +115,7 @@ Across all designs, the following functionality is provided: **L2LS topology example:**
- L2LS topology example + L2LS topology example
### MPLS Core with MPLS EVPN, VPN-IPv4, VPN-IPv6 @@ -130,7 +130,7 @@ Across all designs, the following functionality is provided: **MPLS topology example:**
- MPLS topology example + MPLS topology example
### WAN AutoVPN / CV Pathfinder @@ -143,12 +143,12 @@ Across all designs, the following functionality is provided: **WAN topology example:**
- WAN topology example + WAN topology example
## Requirements -Requirements are located in the [collection installation guide](../../docs/installation/collection-installation.md) +Requirements are located in the [collection installation guide](../../../../../docs/installation/collection-installation.md) ## Input Variables @@ -187,4 +187,4 @@ bfd_multihop: ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-structured-configuration.md b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-structured-configuration.md index 7638e1dd664..b59cf5902e4 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-structured-configuration.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-structured-configuration.md @@ -31,10 +31,10 @@ However if there is no clash, then the value of the variable will be the one def The consequence is that upgrading AVD to a newer version for instance, or configuring additional `eos_designs` functionality in an existing AVD project, could lead to additional variable keys being generated by `eos_designs` in the structured_config, overwriting previously working `eos_cli_config_gen` keys. - +
- Variable Precedence logical diagram + Variable Precedence logical diagram
The recommendation is to use `custom_structured_configuration` as described below. This configuration will be merged on top of the `eos_designs` generated variables. @@ -308,7 +308,7 @@ overwrite list data unintentionally. So going forward `replace` should be avoide ### Variables and Options --8<-- -roles/eos_designs/docs/tables/custom-structured-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/custom-structured-configuration.md --8<-- ### Examples diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-templates.md b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-templates.md index 85f1847ae59..f8ed3f300f0 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-templates.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-templates.md @@ -55,7 +55,7 @@ eos_designs_custom_templates: strip_empty_keys: false ``` -For more details, see [Custom Templates](https://avd.arista.com/4.3/roles/eos_designs/docs/role-configuration.html#custom-templates). +For more details, see [Custom Templates](https://avd.arista.com/stable/roles/eos_designs/docs/role-configuration.html#custom-templates). ## Adding the Custom Template to the `eos-designs` Role diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/ptp.md b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/ptp.md index cf6e9efef24..7496354460f 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/ptp.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/ptp.md @@ -77,7 +77,7 @@ spine: Common PTP settings can be specified for the entire topology to greatly simplify the configuration of PTP: --8<-- -roles/eos_designs/docs/tables/ptp.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/ptp.md --8<-- These settings can also be defined on a more specific group_vars level, if the network design requires this. @@ -299,7 +299,7 @@ ptp monitor threshold missing-message sync 3 sequence-ids All parameters can be overridden if required: --8<-- -roles/eos_designs/docs/tables/node-type-ptp-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-ptp-configuration.md --8<-- ### Setting PTP DSCP values diff --git a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/wan.md b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/wan.md index f4d46b5dcec..8fb877adec1 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/wan.md +++ b/ansible_collections/arista/avd/roles/eos_designs/docs/how-to/wan.md @@ -709,10 +709,10 @@ interaction to help understand how everything fits together. This diagram represents the common scenario for a single router, without any LAN. It will be reused when adding LAN protocols to help understand the changes. - +
- WAN LAN Common design + WAN LAN Common design
#### LAN HA common configuration @@ -781,10 +781,10 @@ From a configuration standpoint: The following diagram represents this scenario: - +
- WAN Direct HA + WAN Direct HA
#### EBGP LAN @@ -800,10 +800,10 @@ The following diagram represents this scenario: The following diagram shows the additional route-maps configured to support eBGP on LAN: - +
- WAN eBGP LAN Single Router + WAN eBGP LAN Single Router
##### HA (PREVIEW) @@ -825,20 +825,20 @@ for eBGP LAN routing protocol the following is done to enable HA: This is described in the following diagram: - +
- WAN eBGP LAN with HA + WAN eBGP LAN with HA
##### HA with Direct Link (PREVIEW) In the situation where the LAN is EBGP but HA is configured over a direct link, there is no peering with the HA peer required via the LAN and the configuration is simplified as follow: - +
- WAN eBGP LAN with Direct HA link + WAN eBGP LAN with Direct HA link
!!! warning @@ -906,7 +906,7 @@ The tags will only be generated when `wan_mode` is set to `cv-pathfinder`. As described in the design principles, the goal is to be able to distribute the WAN routers in separate Ansible inventories. -When leveraging multiple inventories, the arista.avd collection provide capabilities to create [global variables](../../../../docs/plugins/Vars_plugins/global_vars.md). +When leveraging multiple inventories, the arista.avd collection provide capabilities to create [global variables](../../../../../../../docs/plugins/Vars_plugins/global_vars.md). The following example will be leveraging this capability to share required WAN variables across multiple inventories. This example contains contains two sites, SITE1 and SITE2 and a dedicate inventory for pathfinder nodes. 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 b476bf0c80f..46e8aabe365 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 @@ -12,7 +12,7 @@ title: Input variables for eos_designs This document describes the supported input variables for the role `arista.avd.eos_designs`. -Since several data models have changed between AVD versions 4.x and 5.x, it is recommended to study the [Porting Guide for AVD 5.x.x](../../../docs/porting-guides/5.x.x.md) for existing deployments. +Since several data models have changed between AVD versions 4.x and 5.x, it is recommended to study the [Porting Guide for AVD 5.x.x](../../../../../../docs/porting-guides/5.x.x.md) for existing deployments. The input variables are documented below in tables and YAML. @@ -36,7 +36,7 @@ The input variables are documented below in tables and YAML. The default [Node Type Variables](#node-type-variables) can be used with all designs. --8<-- -roles/eos_designs/docs/tables/design.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/design.md --8<-- ### 3-stage clos topology support (Leaf & Spine) @@ -109,7 +109,7 @@ For more information please read the [WAN how-to guide](./how-to/wan.md). ## Fabric topology hierarchy
- 5 stage topology + 5 stage topology
As per the diagram above, the topology hierarchy is the following: @@ -121,13 +121,13 @@ As per the diagram above, the topology hierarchy is the following: You **must** define the `fabric_name` variable and it **must** match the Ansible inventory group name covering all devices in scope of the fabric. --8<-- -roles/eos_designs/docs/tables/fabric-topology.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-topology.md --8<-- ## Fabric IP Addressing --8<-- -roles/eos_designs/docs/tables/fabric-ip-addressing.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-ip-addressing.md --8<-- ## Node Type Variables @@ -355,7 +355,7 @@ The default value of `node_type_keys` depend on the `design.type` setting which ``` --8<-- -roles/eos_designs/docs/tables/node-type-keys.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-keys.md --8<-- ### Context for ip_addressing templates @@ -508,7 +508,7 @@ the values are not part of the officially supported data models and may change w ``` --8<-- -roles/eos_designs/docs/tables/type-setting.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/type-setting.md --8<-- ## Default node types settings @@ -521,7 +521,7 @@ on the hostname. 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 +ansible_collections/arista/avd/roles/eos_designs/docs/tables/default-node-types.md --8<-- ## Node type settings @@ -542,7 +542,7 @@ defaults <- node_group <- node_group.node <- node Define common node settings under defaults. This reduces user input requirements, limiting errors. --8<-- -roles/eos_designs/docs/tables/node-type-structure.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-structure.md --8<-- ### Node type common configuration @@ -556,13 +556,13 @@ Define your nodes, id, management and common configuration elements. A static unique identifier (id) is assigned to each device. This is leveraged to derive the IP address assignment from each summary defined in the Fabric Underlay and Overlay Topology Variables. --8<-- -roles/eos_designs/docs/tables/node-type-common-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-common-configuration.md --8<-- ### Node type inband management --8<-- -roles/eos_designs/docs/tables/node-type-inband-management-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-inband-management-configuration.md --8<-- ### Node type uplink management @@ -574,7 +574,7 @@ Source uplink interfaces and parent interfaces are defined on the child. Leverage [`default_interfaces`](#default-interface-settings) data model to auto define uplink and downlink interfaces based on the node id. --8<-- -roles/eos_designs/docs/tables/node-type-uplink-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-uplink-configuration.md --8<-- ### Node type L2 and MLAG configuration @@ -583,67 +583,67 @@ roles/eos_designs/docs/tables/node-type-uplink-configuration.md Alternate addressing schemes are available at [`fabric_ip_addressing`](#fabric-ip-addressing). --8<-- -roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l2-mlag-configuration.md --8<-- ### Node type Loopback and VTEP configuration --8<-- -roles/eos_designs/docs/tables/node-type-loopback-vtep-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-loopback-vtep-configuration.md --8<-- ### Node type L3 interfaces configuration --8<-- -roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-l3-interfaces-configuration.md --8<-- ### Node type BGP configuration --8<-- -roles/eos_designs/docs/tables/node-type-bgp-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-bgp-configuration.md --8<-- ### Node type network services configuration --8<-- -roles/eos_designs/docs/tables/node-type-evpn-services-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-evpn-services-configuration.md --8<-- ### Node type EVPN gateway configuration --8<-- -roles/eos_designs/docs/tables/node-type-evpn-ipvpn-gateway-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-evpn-ipvpn-gateway-configuration.md --8<-- ### Node type EVPN multi-domain gateway configuration --8<-- -roles/eos_designs/docs/tables/node-type-evpn-multi-domain-gateway-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-evpn-multi-domain-gateway-configuration.md --8<-- ### Node type ISIS Configuration --8<-- -roles/eos_designs/docs/tables/node-type-isis-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-isis-configuration.md --8<-- ### Node type MPLS configuration --8<-- -roles/eos_designs/docs/tables/node-type-mpls-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-mpls-configuration.md --8<-- ### Node type WAN configuration --8<-- -roles/eos_designs/docs/tables/node-type-wan-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-wan-configuration.md --8<-- ### Node type PTP configuration --8<-- -roles/eos_designs/docs/tables/node-type-ptp-configuration.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/node-type-ptp-configuration.md --8<-- ## Default interface settings @@ -674,7 +674,7 @@ roles/eos_designs/docs/tables/node-type-ptp-configuration.md ``` --8<-- -roles/eos_designs/docs/tables/default-interfaces.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/default-interfaces.md --8<-- ## L3 edge and DCI settings @@ -687,7 +687,7 @@ For BGP peerings the AS number must be specified. If the AS number is different Make sure to configure the variables in a group_vars file covering all devices mentioned in the data model. --8<-- -roles/eos_designs/docs/tables/l3-edge.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/l3-edge.md --8<-- ## Core interfaces settings @@ -700,7 +700,7 @@ For BGP peerings the AS number must be specified. If the AS number is different Make sure to configure the variables in a group_vars file covering all devices mentioned in the data model. --8<-- -roles/eos_designs/docs/tables/core-interfaces.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/core-interfaces.md --8<-- ## Flagging a device as not deployed @@ -712,7 +712,7 @@ roles/eos_designs/docs/tables/core-interfaces.md - To overcome this and shutdown interfaces towards undeployed peers, the variable `shutdown_interfaces_towards_undeployed_peers` can be used, satisfying the `eos_validate_state` role interface and lldp_topology tests. Again, this is only an issue if `eos_config_deploy_cvp` is used and the devices are not present in the network. --8<-- -roles/eos_designs/docs/tables/is-deployed.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/is-deployed.md --8<-- ## Fabric settings @@ -745,7 +745,7 @@ The following underlay routing protocols are supported: - The port-channel towards the L2 switch will be assigned to this trunk group only - Add `UPLINK` Trunk Group to all vlans on the L2 Switch and assign this to the uplink port-channel - ![Figure: Enable Trunk Groups](../../../media/enable_trunk_groups.png) + ![Figure: Enable Trunk Groups](../../../../../../docs/_media/enable_trunk_groups.png) While it is recommended for consistency to set `enable_trunk_groups` for all devices in the fabric, it can also be set in group_vars or host_vars since trunk-groups are only local to a switch. @@ -761,52 +761,52 @@ The following underlay routing protocols are supported: Using the figure under [Details on `enable_trunk_groups`](#details-on-enable_trunk_groups) as basis enabling with feature would remove the unmatched trunk groups like this: - ![Figure: Enable only_local_vlan_trunk_groups](../../../media/only_local_vlan_trunk_groups.png) + ![Figure: Enable only_local_vlan_trunk_groups](../../../../../../docs/_media/only_local_vlan_trunk_groups.png) --8<-- -roles/eos_designs/docs/tables/fabric-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/fabric-settings.md --8<-- ## Management interface settings --8<-- -roles/eos_designs/docs/tables/management-interface-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-interface-settings.md --8<-- ## BFD settings --8<-- -roles/eos_designs/docs/tables/bfd-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/bfd-settings.md --8<-- ## BGP settings --8<-- -roles/eos_designs/docs/tables/bgp-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/bgp-settings.md --8<-- ## IPv4 ACL settings --8<-- -roles/eos_designs/docs/tables/ipv4-acls.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/ipv4-acls.md --8<-- ### IPv4 Prefix-List Catalog settings --8<-- -roles/eos_designs/docs/tables/ipv4-prefix-list-catalog.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/ipv4-prefix-list-catalog.md --8<-- ## OSPF settings --8<-- -roles/eos_designs/docs/tables/ospf-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/ospf-settings.md --8<-- ## ISIS settings --8<-- -roles/eos_designs/docs/tables/isis-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/isis-settings.md --8<-- ## Overlay settings @@ -823,13 +823,13 @@ The following overlay routing protocols are supported: ² By setting `overlay_routing_protocol:HER`, `eos_designs` will configure static VXLAN flood-lists instead of using a dynamic overlay protocol. --8<-- -roles/eos_designs/docs/tables/overlay-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/overlay-settings.md --8<-- ## EVPN settings --8<-- -roles/eos_designs/docs/tables/evpn-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/evpn-settings.md --8<-- ## WAN Settings @@ -837,7 +837,7 @@ roles/eos_designs/docs/tables/evpn-settings.md ### WAN generic settings --8<-- -roles/eos_designs/docs/tables/wan-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-settings.md --8<-- ### WAN hierarchy @@ -847,19 +847,19 @@ roles/eos_designs/docs/tables/wan-settings.md This section is only relevant for CV Pathfinder and not for AutoVPN --8<-- -roles/eos_designs/docs/tables/wan-cv-pathfinder-regions.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-cv-pathfinder-regions.md --8<-- ### WAN path-groups and carriers --8<-- -roles/eos_designs/docs/tables/wan-path-groups-and-carriers.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-path-groups-and-carriers.md --8<-- ### WAN route-servers --8<-- -roles/eos_designs/docs/tables/wan-route-servers.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-route-servers.md --8<-- ### WAN Virtual topologies @@ -867,13 +867,13 @@ roles/eos_designs/docs/tables/wan-route-servers.md WAN virtual topologies leverage Deep Packet Inspection Engine to match traffic. --8<-- -roles/eos_designs/docs/tables/wan-virtual-topologies.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/wan-virtual-topologies.md --8<-- #### Application Classification --8<-- -roles/eos_designs/docs/tables/application-classification.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/application-classification.md --8<-- #### Internet Exit policies @@ -883,7 +883,7 @@ roles/eos_designs/docs/tables/application-classification.md This section is only relevant for CV Pathfinder and not for AutoVPN --8<-- -roles/eos_designs/docs/tables/cv-pathfinder-internet-exit-policies.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/cv-pathfinder-internet-exit-policies.md --8<-- ##### Zscaler Internet Exit @@ -894,37 +894,37 @@ roles/eos_designs/docs/tables/cv-pathfinder-internet-exit-policies.md See the top level key description for more information. --8<-- -roles/eos_designs/docs/tables/zscaler-endpoints.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/zscaler-endpoints.md --8<-- ## Management settings --8<-- -roles/eos_designs/docs/tables/management-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-settings.md --8<-- ### Source-interfaces settings --8<-- -roles/eos_designs/docs/tables/management-source-interfaces-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-source-interfaces-settings.md --8<-- ### sFlow settings --8<-- -roles/eos_designs/docs/tables/management-sflow-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-sflow-settings.md --8<-- ### Flow Tracking Settings --8<-- -roles/eos_designs/docs/tables/management-flow-tracking-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-flow-tracking-settings.md --8<-- ### SNMP settings --8<-- -roles/eos_designs/docs/tables/management-snmp-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/management-snmp-settings.md --8<-- ## Monitoring @@ -932,13 +932,13 @@ roles/eos_designs/docs/tables/management-snmp-settings.md ### Event monitor --8<-- -roles/eos_designs/docs/tables/event-monitor.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/event-monitor.md --8<-- ### Load interval --8<-- -roles/eos_designs/docs/tables/load-interval.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/load-interval.md --8<-- ## Quality of Service @@ -946,19 +946,19 @@ roles/eos_designs/docs/tables/load-interval.md ### Queue monitor-streaming --8<-- -roles/eos_designs/docs/tables/queue-monitor-streaming.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/queue-monitor-streaming.md --8<-- ## System settings --8<-- -roles/eos_designs/docs/tables/system-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/system-settings.md --8<-- ## CloudVision Settings --8<-- -roles/eos_designs/docs/tables/cloudvision-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/cloudvision-settings.md --8<-- ## Endpoint connectivity @@ -1145,7 +1145,7 @@ Both data models support variable inheritance from profiles defined under [`port ``` --8<-- -roles/eos_designs/docs/tables/connected-endpoints.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints.md --8<-- ### Connected endpoints default description or description template settings @@ -1153,7 +1153,7 @@ roles/eos_designs/docs/tables/connected-endpoints.md Connected endpoints support the customization of generated descriptions with a static value or template. --8<-- -roles/eos_designs/docs/tables/default-connected-endpoints-description.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/default-connected-endpoints-description.md --8<-- ### Network ports settings @@ -1312,7 +1312,7 @@ All ranges defined under `switch_ports` will be expanded to individual port conf To leverage automatic channel-id computation and configure port-channel with multiple members, `connected_endpoints` should be used. --8<-- -roles/eos_designs/docs/tables/network-ports.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-ports.md --8<-- ### Network ports default description or description template settings @@ -1320,7 +1320,7 @@ roles/eos_designs/docs/tables/network-ports.md Network ports support the customization of generated descriptions with a static value or template. --8<-- -roles/eos_designs/docs/tables/default-network-ports-description.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/default-network-ports-description.md --8<-- ### Port profiles settings @@ -1331,7 +1331,7 @@ Keys are the same as used under endpoint adapters. Keys defined under endpoints A port profile can refer to another port profile using `parent_profile` to inherit settings in up to two levels (adapter->profile->parent_profile). --8<-- -roles/eos_designs/docs/tables/port-profiles.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/port-profiles.md --8<-- ### Connected endpoints keys settings @@ -1347,7 +1347,7 @@ The keys can be customized to provide a better better organization or grouping o The default values will be overridden if defining this key, so it is recommended to copy the defaults and modify them. --8<-- -roles/eos_designs/docs/tables/connected-endpoints-keys.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/connected-endpoints-keys.md --8<-- ## Network Services @@ -1381,29 +1381,29 @@ The keys used to define network services are configurable using [`network_servic The default available keys is `tenants`. --8<-- -roles/eos_designs/docs/tables/network-services.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services.md --8<-- --8<-- -roles/eos_designs/docs/tables/new-network-services-bgp-vrf-config.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/new-network-services-bgp-vrf-config.md --8<-- #### Network services VRFs configuration --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-settings.md --8<-- #### Network services VRF SVIs configuration --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-svis-settings.md --8<-- #### Network services VRF L3 Interfaces configuration --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-l3-interfaces-settings.md --8<-- #### Network services VRF Loopbacks configuration @@ -1414,37 +1414,37 @@ Loopbacks are usually configured with `vtep_diagnostic` which supports IP pools IP addresses on individual nodes. --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-loopbacks-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-loopbacks-settings.md --8<-- #### Network services VRF BGP configuration --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-bgp-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-bgp-settings.md --8<-- #### Network services VRF OSPF configuration --8<-- -roles/eos_designs/docs/tables/network-services-vrfs-ospf-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-vrfs-ospf-settings.md --8<-- #### Network services L2 VLANs configuration --8<-- -roles/eos_designs/docs/tables/network-services-l2vlans-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-l2vlans-settings.md --8<-- #### Network services point-to-point services configuration --8<-- -roles/eos_designs/docs/tables/network-services-point-to-point-services-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-point-to-point-services-settings.md --8<-- #### Network services multicast configuration --8<-- -roles/eos_designs/docs/tables/network-services-multicast-settings.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/network-services-multicast-settings.md --8<-- ### SVI profiles settings @@ -1463,7 +1463,7 @@ SVI profiles can be leveraged to share common settings between SVIs. 6. svi_parent_profile.structured_config --8<-- -roles/eos_designs/docs/tables/svi-profiles.md +ansible_collections/arista/avd/roles/eos_designs/docs/tables/svi-profiles.md --8<-- ### EVPN VLAN aware bundles settings @@ -1474,7 +1474,7 @@ or `[].vrfs[].svis[].evpn_vlan_bundle` or `      - <str>](## "network_ports.[].switches.[]") | String | | | | | | [    platforms](## "network_ports.[].platforms") | List, items: String | | | Min Length: 1 | Regex matching the full platform name of one or more switches. If used in combination with switch hostname matching, both criteria must match for configuration.
If you need to add custom platforms to match specific port quantities, create them under `custom_platform_settings`. Entries under `custom_platform_settings` should
match the platform match criteria.

For example, `720XP-48Y6` would require a custom platform type:

platforms:
- 720XP
- 720XP-48Y6 | | [      - <str>](## "network_ports.[].platforms.[]") | String | | | | | - | [    switch_ports](## "network_ports.[].switch_ports") | List, items: String | | | | List of ranges using AVD range_expand syntax.
For example:

switch_ports:
- Ethernet1
- Ethernet2-48

All switch_ports ranges are expanded into individual port configurations.

For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../docs/plugins/Filter_plugins/range_expand.md).
| + | [    switch_ports](## "network_ports.[].switch_ports") | List, items: String | | | | List of ranges using AVD range_expand syntax.
For example:

switch_ports:
- Ethernet1
- Ethernet2-48

All switch_ports ranges are expanded into individual port configurations.

For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md).
| | [      - <str>](## "network_ports.[].switch_ports.[]") | String | | | | | | [    description](## "network_ports.[].description") | String | | | | Description or description template to be used on all ports.
This can be a template using the AVD string formatter syntax: https://avd.arista.com/devel/roles/eos_designs/docs/how-to/custom-descriptions-names.html#avd-string-formatter-syntax.
The available template fields are:
- `endpoint_type` - always set to `network_port`.
- `endpoint` - content of the `endpoint` key if set.
- `port_channel_id`: The port-channel number for the switch.

The default description is set by `default_network_ports_description`.
By default the description is templated from the `endpoint` key if set. | | [    endpoint](## "network_ports.[].endpoint") | String | | | | Name or description of the endpoints connected to these ports. | @@ -215,7 +215,7 @@ # # All switch_ports ranges are expanded into individual port configurations. # - # For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../docs/plugins/Filter_plugins/range_expand.md). + # For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md). switch_ports: - diff --git a/ansible_collections/arista/avd/roles/eos_snapshot/README.md b/ansible_collections/arista/avd/roles/eos_snapshot/README.md index 259d3177c39..2fa5508f2b0 100644 --- a/ansible_collections/arista/avd/roles/eos_snapshot/README.md +++ b/ansible_collections/arista/avd/roles/eos_snapshot/README.md @@ -19,8 +19,8 @@ It supports reports with the following format: text, markdown, JSON, and YAML. Figure 1 below visualizes the role's inputs, outputs, and tasks. -![Figure 1: Ansible Role eos_snapshot](../../docs/_media/eos_snapshot_dark.svg#only-dark) -![Figure 1: Ansible Role eos_snapshot](../../docs/_media/eos_snapshot_light.svg#only-light) +![Figure 1: Ansible Role eos_snapshot](../../../../../docs/_media/eos_snapshot_dark.svg#only-dark) +![Figure 1: Ansible Role eos_snapshot](../../../../../docs/_media/eos_snapshot_light.svg#only-light) **Inputs:** @@ -74,7 +74,7 @@ commands_list: ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## Example Playbook @@ -153,4 +153,4 @@ ansible-playbook playbooks/pb_collect_yml --inventory inventory/inventory.yml ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/ansible_collections/arista/avd/roles/eos_validate_state/README.md b/ansible_collections/arista/avd/roles/eos_validate_state/README.md index 36358c74229..9df583de268 100644 --- a/ansible_collections/arista/avd/roles/eos_validate_state/README.md +++ b/ansible_collections/arista/avd/roles/eos_validate_state/README.md @@ -33,8 +33,8 @@ ansible-playbook playbooks/fabric-validate.yaml --check Figure 1 below provides a visualization of the role's inputs, outputs, and tasks in order executed by the role. -![Figure 1: Ansible Role eos_validate_state](../../docs/_media/eos_validate_state_dark.svg#only-dark) -![Figure 1: Ansible Role eos_validate_state](../../docs/_media/eos_validate_state_light.svg#only-light) +![Figure 1: Ansible Role eos_validate_state](../../../../../docs/_media/eos_validate_state_dark.svg#only-dark) +![Figure 1: Ansible Role eos_validate_state](../../../../../docs/_media/eos_validate_state_light.svg#only-light) **Inputs:** @@ -217,7 +217,7 @@ The variable `only_failed_tests` is used to limit the number of tests shown in t ## Requirements -Requirements are located here: [avd-requirements](../../docs/installation/collection-installation.md#python-requirements-installation) +Requirements are located here: [avd-requirements](../../../../../docs/installation/collection-installation.md#python-requirements-installation) ## Custom ANTA catalog @@ -353,7 +353,7 @@ ansible-playbook playbooks/pb_validate_yml --inventory inventory/inventory.yml ## License -Project is published under [Apache 2.0 License](../../LICENSE) +Project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) ## Known issues diff --git a/ansible_collections/arista/avd/media/5-stage-topology.gif b/docs/_media/5-stage-topology.gif similarity index 100% rename from ansible_collections/arista/avd/media/5-stage-topology.gif rename to docs/_media/5-stage-topology.gif diff --git a/ansible_collections/arista/avd/docs/_media/avd-eos-cli-config-gen-doc-overview.png b/docs/_media/avd-eos-cli-config-gen-doc-overview.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd-eos-cli-config-gen-doc-overview.png rename to docs/_media/avd-eos-cli-config-gen-doc-overview.png diff --git a/ansible_collections/arista/avd/docs/_media/avd-eos-lab-topology-overview.gif b/docs/_media/avd-eos-lab-topology-overview.gif similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd-eos-lab-topology-overview.gif rename to docs/_media/avd-eos-lab-topology-overview.gif diff --git a/ansible_collections/arista/avd/media/avd-logo.png b/docs/_media/avd-logo.png similarity index 100% rename from ansible_collections/arista/avd/media/avd-logo.png rename to docs/_media/avd-logo.png diff --git a/ansible_collections/arista/avd/docs/_media/avd_roles_dark.svg b/docs/_media/avd_roles_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd_roles_dark.svg rename to docs/_media/avd_roles_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/avd_roles_light.svg b/docs/_media/avd_roles_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd_roles_light.svg rename to docs/_media/avd_roles_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/avd_workflow_eapi_dark.svg b/docs/_media/avd_workflow_eapi_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd_workflow_eapi_dark.svg rename to docs/_media/avd_workflow_eapi_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/avd_workflow_eapi_light.svg b/docs/_media/avd_workflow_eapi_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/avd_workflow_eapi_light.svg rename to docs/_media/avd_workflow_eapi_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/awx-create-inventory.png b/docs/_media/awx-create-inventory.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-create-inventory.png rename to docs/_media/awx-create-inventory.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-create-project-venv.png b/docs/_media/awx-create-project-venv.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-create-project-venv.png rename to docs/_media/awx-create-project-venv.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-create-source.png b/docs/_media/awx-create-source.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-create-source.png rename to docs/_media/awx-create-source.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-create-template.png b/docs/_media/awx-create-template.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-create-template.png rename to docs/_media/awx-create-template.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-inventory-add-source.png b/docs/_media/awx-inventory-add-source.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-inventory-add-source.png rename to docs/_media/awx-inventory-add-source.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-inventory-list-devices.png b/docs/_media/awx-inventory-list-devices.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-inventory-list-devices.png rename to docs/_media/awx-inventory-list-devices.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-inventory-sync-source.png b/docs/_media/awx-inventory-sync-source.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-inventory-sync-source.png rename to docs/_media/awx-inventory-sync-source.png diff --git a/ansible_collections/arista/avd/docs/_media/awx-playbook-run.png b/docs/_media/awx-playbook-run.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/awx-playbook-run.png rename to docs/_media/awx-playbook-run.png diff --git a/ansible_collections/arista/avd/docs/_media/cloudvision-deployed-configlet.png b/docs/_media/cloudvision-deployed-configlet.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cloudvision-deployed-configlet.png rename to docs/_media/cloudvision-deployed-configlet.png diff --git a/ansible_collections/arista/avd/docs/_media/cloudvision-device-topology.png b/docs/_media/cloudvision-device-topology.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cloudvision-device-topology.png rename to docs/_media/cloudvision-device-topology.png diff --git a/ansible_collections/arista/avd/docs/_media/cloudvision-initial-configlet.png b/docs/_media/cloudvision-initial-configlet.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cloudvision-initial-configlet.png rename to docs/_media/cloudvision-initial-configlet.png diff --git a/ansible_collections/arista/avd/docs/_media/cloudvision-uploaded-configlets.png b/docs/_media/cloudvision-uploaded-configlets.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cloudvision-uploaded-configlets.png rename to docs/_media/cloudvision-uploaded-configlets.png diff --git a/ansible_collections/arista/avd/docs/_media/cloudvision-ztpd-devices.png b/docs/_media/cloudvision-ztpd-devices.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cloudvision-ztpd-devices.png rename to docs/_media/cloudvision-ztpd-devices.png diff --git a/ansible_collections/arista/avd/docs/_media/cv_ansible_logo.png b/docs/_media/cv_ansible_logo.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cv_ansible_logo.png rename to docs/_media/cv_ansible_logo.png diff --git a/ansible_collections/arista/avd/docs/_media/cv_deploy_dark.svg b/docs/_media/cv_deploy_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cv_deploy_dark.svg rename to docs/_media/cv_deploy_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/cv_deploy_light.svg b/docs/_media/cv_deploy_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cv_deploy_light.svg rename to docs/_media/cv_deploy_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/cvp_configlet_upload_dark.svg b/docs/_media/cvp_configlet_upload_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cvp_configlet_upload_dark.svg rename to docs/_media/cvp_configlet_upload_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/cvp_configlet_upload_light.svg b/docs/_media/cvp_configlet_upload_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/cvp_configlet_upload_light.svg rename to docs/_media/cvp_configlet_upload_light.svg diff --git a/ansible_collections/arista/avd/media/dissag-topology.gif b/docs/_media/dissag-topology.gif similarity index 100% rename from ansible_collections/arista/avd/media/dissag-topology.gif rename to docs/_media/dissag-topology.gif diff --git a/ansible_collections/arista/avd/media/enable_trunk_groups.png b/docs/_media/enable_trunk_groups.png similarity index 100% rename from ansible_collections/arista/avd/media/enable_trunk_groups.png rename to docs/_media/enable_trunk_groups.png diff --git a/ansible_collections/arista/avd/docs/_media/eos_cli_config_gen_dark.svg b/docs/_media/eos_cli_config_gen_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_cli_config_gen_dark.svg rename to docs/_media/eos_cli_config_gen_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_cli_config_gen_light.svg b/docs/_media/eos_cli_config_gen_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_cli_config_gen_light.svg rename to docs/_media/eos_cli_config_gen_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_config_deploy_cvp_dark.svg b/docs/_media/eos_config_deploy_cvp_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_config_deploy_cvp_dark.svg rename to docs/_media/eos_config_deploy_cvp_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_config_deploy_cvp_light.svg b/docs/_media/eos_config_deploy_cvp_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_config_deploy_cvp_light.svg rename to docs/_media/eos_config_deploy_cvp_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_config_deploy_eapi_dark.svg b/docs/_media/eos_config_deploy_eapi_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_config_deploy_eapi_dark.svg rename to docs/_media/eos_config_deploy_eapi_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_config_deploy_eapi_light.svg b/docs/_media/eos_config_deploy_eapi_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_config_deploy_eapi_light.svg rename to docs/_media/eos_config_deploy_eapi_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_designs_dark.svg b/docs/_media/eos_designs_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_designs_dark.svg rename to docs/_media/eos_designs_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_designs_light.svg b/docs/_media/eos_designs_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_designs_light.svg rename to docs/_media/eos_designs_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_snapshot_dark.svg b/docs/_media/eos_snapshot_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_snapshot_dark.svg rename to docs/_media/eos_snapshot_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_snapshot_light.svg b/docs/_media/eos_snapshot_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_snapshot_light.svg rename to docs/_media/eos_snapshot_light.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_validate_state_dark.svg b/docs/_media/eos_validate_state_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_validate_state_dark.svg rename to docs/_media/eos_validate_state_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/eos_validate_state_light.svg b/docs/_media/eos_validate_state_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/eos_validate_state_light.svg rename to docs/_media/eos_validate_state_light.svg diff --git a/ansible_collections/arista/avd/media/example-playbook-deploy-cvp.gif b/docs/_media/example-playbook-deploy-cvp.gif similarity index 100% rename from ansible_collections/arista/avd/media/example-playbook-deploy-cvp.gif rename to docs/_media/example-playbook-deploy-cvp.gif diff --git a/ansible_collections/arista/avd/media/example-playbook-deploy-eapi.gif b/docs/_media/example-playbook-deploy-eapi.gif similarity index 100% rename from ansible_collections/arista/avd/media/example-playbook-deploy-eapi.gif rename to docs/_media/example-playbook-deploy-eapi.gif diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/avd_roles.excalidraw b/docs/_media/excalidraw/avd_roles.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/avd_roles.excalidraw rename to docs/_media/excalidraw/avd_roles.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/avd_workflow_eapi.excalidraw b/docs/_media/excalidraw/avd_workflow_eapi.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/avd_workflow_eapi.excalidraw rename to docs/_media/excalidraw/avd_workflow_eapi.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/cvp_configlet_upload.excalidraw b/docs/_media/excalidraw/cvp_configlet_upload.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/cvp_configlet_upload.excalidraw rename to docs/_media/excalidraw/cvp_configlet_upload.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/deploy_to_cv.excalidraw b/docs/_media/excalidraw/deploy_to_cv.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/deploy_to_cv.excalidraw rename to docs/_media/excalidraw/deploy_to_cv.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_cli_config_gen.excalidraw b/docs/_media/excalidraw/eos_cli_config_gen.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_cli_config_gen.excalidraw rename to docs/_media/excalidraw/eos_cli_config_gen.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_config_deploy_cvp.excalidraw b/docs/_media/excalidraw/eos_config_deploy_cvp.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_config_deploy_cvp.excalidraw rename to docs/_media/excalidraw/eos_config_deploy_cvp.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_config_deploy_eapi.excalidraw b/docs/_media/excalidraw/eos_config_deploy_eapi.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_config_deploy_eapi.excalidraw rename to docs/_media/excalidraw/eos_config_deploy_eapi.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_designs.excalidraw b/docs/_media/excalidraw/eos_designs.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_designs.excalidraw rename to docs/_media/excalidraw/eos_designs.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_snapshot.excalidraw b/docs/_media/excalidraw/eos_snapshot.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_snapshot.excalidraw rename to docs/_media/excalidraw/eos_snapshot.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/eos_validate_state.excalidraw b/docs/_media/excalidraw/eos_validate_state.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/eos_validate_state.excalidraw rename to docs/_media/excalidraw/eos_validate_state.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw b/docs/_media/excalidraw/pyavd_functions.excalidraw similarity index 100% rename from ansible_collections/arista/avd/docs/_media/excalidraw/pyavd_functions.excalidraw rename to docs/_media/excalidraw/pyavd_functions.excalidraw diff --git a/ansible_collections/arista/avd/docs/_media/favicon.ico b/docs/_media/favicon.ico similarity index 100% rename from ansible_collections/arista/avd/docs/_media/favicon.ico rename to docs/_media/favicon.ico diff --git a/ansible_collections/arista/avd/docs/_media/figure-2-cloudvision-change-control.png b/docs/_media/figure-2-cloudvision-change-control.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/figure-2-cloudvision-change-control.png rename to docs/_media/figure-2-cloudvision-change-control.png diff --git a/ansible_collections/arista/avd/docs/_media/first-cvp-avd-topology.png b/docs/_media/first-cvp-avd-topology.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/first-cvp-avd-topology.png rename to docs/_media/first-cvp-avd-topology.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/aap-cvp-eos.svg b/docs/_media/getting-started/aap-avd/aap-cvp-eos.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/aap-cvp-eos.svg rename to docs/_media/getting-started/aap-avd/aap-cvp-eos.svg diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/aap-dashboardpng.png b/docs/_media/getting-started/aap-avd/aap-dashboardpng.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/aap-dashboardpng.png rename to docs/_media/getting-started/aap-avd/aap-dashboardpng.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/add-template.png b/docs/_media/getting-started/aap-avd/add-template.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/add-template.png rename to docs/_media/getting-started/aap-avd/add-template.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/all-hosts.png b/docs/_media/getting-started/aap-avd/all-hosts.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/all-hosts.png rename to docs/_media/getting-started/aap-avd/all-hosts.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/create-ee.png b/docs/_media/getting-started/aap-avd/create-ee.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/create-ee.png rename to docs/_media/getting-started/aap-avd/create-ee.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/create-source.png b/docs/_media/getting-started/aap-avd/create-source.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/create-source.png rename to docs/_media/getting-started/aap-avd/create-source.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/cvp-cc.png b/docs/_media/getting-started/aap-avd/cvp-cc.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/cvp-cc.png rename to docs/_media/getting-started/aap-avd/cvp-cc.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-job-output.png b/docs/_media/getting-started/aap-avd/inv-job-output.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-job-output.png rename to docs/_media/getting-started/aap-avd/inv-job-output.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-job-sync.png b/docs/_media/getting-started/aap-avd/inv-job-sync.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-job-sync.png rename to docs/_media/getting-started/aap-avd/inv-job-sync.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-sync.png b/docs/_media/getting-started/aap-avd/inv-sync.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/inv-sync.png rename to docs/_media/getting-started/aap-avd/inv-sync.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/job-output.png b/docs/_media/getting-started/aap-avd/job-output.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/job-output.png rename to docs/_media/getting-started/aap-avd/job-output.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/job-updates.png b/docs/_media/getting-started/aap-avd/job-updates.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/job-updates.png rename to docs/_media/getting-started/aap-avd/job-updates.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/run-job.png b/docs/_media/getting-started/aap-avd/run-job.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/run-job.png rename to docs/_media/getting-started/aap-avd/run-job.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/save-inv.png b/docs/_media/getting-started/aap-avd/save-inv.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/save-inv.png rename to docs/_media/getting-started/aap-avd/save-inv.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/save-project.png b/docs/_media/getting-started/aap-avd/save-project.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/save-project.png rename to docs/_media/getting-started/aap-avd/save-project.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-ee.png b/docs/_media/getting-started/aap-avd/select-add-ee.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-ee.png rename to docs/_media/getting-started/aap-avd/select-add-ee.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-inv.png b/docs/_media/getting-started/aap-avd/select-add-inv.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-inv.png rename to docs/_media/getting-started/aap-avd/select-add-inv.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-project.png b/docs/_media/getting-started/aap-avd/select-add-project.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-add-project.png rename to docs/_media/getting-started/aap-avd/select-add-project.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-ee.png b/docs/_media/getting-started/aap-avd/select-ee.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-ee.png rename to docs/_media/getting-started/aap-avd/select-ee.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-inv.png b/docs/_media/getting-started/aap-avd/select-inv.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-inv.png rename to docs/_media/getting-started/aap-avd/select-inv.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-projects.png b/docs/_media/getting-started/aap-avd/select-projects.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-projects.png rename to docs/_media/getting-started/aap-avd/select-projects.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-sources.png b/docs/_media/getting-started/aap-avd/select-sources.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-sources.png rename to docs/_media/getting-started/aap-avd/select-sources.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-templates.png b/docs/_media/getting-started/aap-avd/select-templates.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/select-templates.png rename to docs/_media/getting-started/aap-avd/select-templates.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/survey-enabled.png b/docs/_media/getting-started/aap-avd/survey-enabled.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/survey-enabled.png rename to docs/_media/getting-started/aap-avd/survey-enabled.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/survey-save.png b/docs/_media/getting-started/aap-avd/survey-save.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/survey-save.png rename to docs/_media/getting-started/aap-avd/survey-save.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/template-save.png b/docs/_media/getting-started/aap-avd/template-save.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/template-save.png rename to docs/_media/getting-started/aap-avd/template-save.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/template-survey.png b/docs/_media/getting-started/aap-avd/template-survey.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/aap-avd/template-survey.png rename to docs/_media/getting-started/aap-avd/template-survey.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/collections.svg b/docs/_media/getting-started/collections.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/collections.svg rename to docs/_media/getting-started/collections.svg diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/group-vars-folder-structure.png b/docs/_media/getting-started/group-vars-folder-structure.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/group-vars-folder-structure.png rename to docs/_media/getting-started/group-vars-folder-structure.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/groups.svg b/docs/_media/getting-started/groups.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/groups.svg rename to docs/_media/getting-started/groups.svg diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/inventory-folder-structure.png b/docs/_media/getting-started/inventory-folder-structure.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/inventory-folder-structure.png rename to docs/_media/getting-started/inventory-folder-structure.png diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/requirements.svg b/docs/_media/getting-started/requirements.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/requirements.svg rename to docs/_media/getting-started/requirements.svg diff --git a/ansible_collections/arista/avd/docs/_media/getting-started/single-dc.svg b/docs/_media/getting-started/single-dc.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/getting-started/single-dc.svg rename to docs/_media/getting-started/single-dc.svg diff --git a/ansible_collections/arista/avd/docs/_media/git-structure.gif b/docs/_media/git-structure.gif similarity index 100% rename from ansible_collections/arista/avd/docs/_media/git-structure.gif rename to docs/_media/git-structure.gif diff --git a/ansible_collections/arista/avd/media/l2ls-topology.svg b/docs/_media/l2ls-topology.svg similarity index 100% rename from ansible_collections/arista/avd/media/l2ls-topology.svg rename to docs/_media/l2ls-topology.svg diff --git a/ansible_collections/arista/avd/docs/_media/lab-nat-topology-example.png b/docs/_media/lab-nat-topology-example.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/lab-nat-topology-example.png rename to docs/_media/lab-nat-topology-example.png diff --git a/ansible_collections/arista/avd/media/mpls-topology.svg b/docs/_media/mpls-topology.svg similarity index 100% rename from ansible_collections/arista/avd/media/mpls-topology.svg rename to docs/_media/mpls-topology.svg diff --git a/ansible_collections/arista/avd/media/only_local_vlan_trunk_groups.png b/docs/_media/only_local_vlan_trunk_groups.png similarity index 100% rename from ansible_collections/arista/avd/media/only_local_vlan_trunk_groups.png rename to docs/_media/only_local_vlan_trunk_groups.png diff --git a/ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg b/docs/_media/pyavd_functions_dark.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/pyavd_functions_dark.svg rename to docs/_media/pyavd_functions_dark.svg diff --git a/ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg b/docs/_media/pyavd_functions_light.svg similarity index 100% rename from ansible_collections/arista/avd/docs/_media/pyavd_functions_light.svg rename to docs/_media/pyavd_functions_light.svg diff --git a/ansible_collections/arista/avd/media/role_eos_designs.gif b/docs/_media/role_eos_designs.gif similarity index 100% rename from ansible_collections/arista/avd/media/role_eos_designs.gif rename to docs/_media/role_eos_designs.gif diff --git a/ansible_collections/arista/avd/media/serviceaccount1.png b/docs/_media/serviceaccount1.png similarity index 100% rename from ansible_collections/arista/avd/media/serviceaccount1.png rename to docs/_media/serviceaccount1.png diff --git a/ansible_collections/arista/avd/media/serviceaccount2.png b/docs/_media/serviceaccount2.png similarity index 100% rename from ansible_collections/arista/avd/media/serviceaccount2.png rename to docs/_media/serviceaccount2.png diff --git a/ansible_collections/arista/avd/media/serviceaccount3.png b/docs/_media/serviceaccount3.png similarity index 100% rename from ansible_collections/arista/avd/media/serviceaccount3.png rename to docs/_media/serviceaccount3.png diff --git a/ansible_collections/arista/avd/docs/_media/streaming-inventory.png b/docs/_media/streaming-inventory.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/streaming-inventory.png rename to docs/_media/streaming-inventory.png diff --git a/ansible_collections/arista/avd/docs/_media/studios_end_to_end_provisioning.png b/docs/_media/studios_end_to_end_provisioning.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/studios_end_to_end_provisioning.png rename to docs/_media/studios_end_to_end_provisioning.png diff --git a/ansible_collections/arista/avd/media/variables_precedence.png b/docs/_media/variables_precedence.png similarity index 100% rename from ansible_collections/arista/avd/media/variables_precedence.png rename to docs/_media/variables_precedence.png diff --git a/ansible_collections/arista/avd/docs/_media/vscode-container-demo-overview.png b/docs/_media/vscode-container-demo-overview.png similarity index 100% rename from ansible_collections/arista/avd/docs/_media/vscode-container-demo-overview.png rename to docs/_media/vscode-container-demo-overview.png diff --git a/ansible_collections/arista/avd/media/wan-topology.svg b/docs/_media/wan-topology.svg similarity index 100% rename from ansible_collections/arista/avd/media/wan-topology.svg rename to docs/_media/wan-topology.svg diff --git a/ansible_collections/arista/avd/media/wan_direct_ha_no_lan.png b/docs/_media/wan_direct_ha_no_lan.png similarity index 100% rename from ansible_collections/arista/avd/media/wan_direct_ha_no_lan.png rename to docs/_media/wan_direct_ha_no_lan.png diff --git a/ansible_collections/arista/avd/media/wan_ebgp_lan_ha.png b/docs/_media/wan_ebgp_lan_ha.png similarity index 100% rename from ansible_collections/arista/avd/media/wan_ebgp_lan_ha.png rename to docs/_media/wan_ebgp_lan_ha.png diff --git a/ansible_collections/arista/avd/media/wan_ebgp_lan_ha_direct.png b/docs/_media/wan_ebgp_lan_ha_direct.png similarity index 100% rename from ansible_collections/arista/avd/media/wan_ebgp_lan_ha_direct.png rename to docs/_media/wan_ebgp_lan_ha_direct.png diff --git a/ansible_collections/arista/avd/media/wan_ebgp_lan_single_router.png b/docs/_media/wan_ebgp_lan_single_router.png similarity index 100% rename from ansible_collections/arista/avd/media/wan_ebgp_lan_single_router.png rename to docs/_media/wan_ebgp_lan_single_router.png diff --git a/ansible_collections/arista/avd/media/wan_lan_common.png b/docs/_media/wan_lan_common.png similarity index 100% rename from ansible_collections/arista/avd/media/wan_lan_common.png rename to docs/_media/wan_lan_common.png diff --git a/ansible_collections/arista/avd/docs/_overrides/main.html b/docs/_overrides/main.html similarity index 100% rename from ansible_collections/arista/avd/docs/_overrides/main.html rename to docs/_overrides/main.html diff --git a/ansible_collections/arista/avd/docs/containers/overview.md b/docs/containers/overview.md similarity index 100% rename from ansible_collections/arista/avd/docs/containers/overview.md rename to docs/containers/overview.md diff --git a/ansible_collections/arista/avd/docs/contribution/authoring_eos_cli_config_gen.md b/docs/contribution/authoring_eos_cli_config_gen.md similarity index 100% rename from ansible_collections/arista/avd/docs/contribution/authoring_eos_cli_config_gen.md rename to docs/contribution/authoring_eos_cli_config_gen.md diff --git a/ansible_collections/arista/avd/docs/contribution/development-tooling.md b/docs/contribution/development-tooling.md similarity index 100% rename from ansible_collections/arista/avd/docs/contribution/development-tooling.md rename to docs/contribution/development-tooling.md diff --git a/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md b/docs/contribution/eos_designs_internal_notes.md similarity index 99% rename from ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md rename to docs/contribution/eos_designs_internal_notes.md index 0371cbb97f8..b0e1e76133b 100644 --- a/ansible_collections/arista/avd/docs/contribution/eos_designs_internal_notes.md +++ b/docs/contribution/eos_designs_internal_notes.md @@ -47,7 +47,7 @@ The module is used in `arista.avd.eos_designs` to set facts for devices, which a cprofile_file: ``` -See the full argument spec [here](../../plugins/modules/eos_designs_facts.py) +See the full argument spec [here](../plugins/Modules_and_action_plugins/eos_designs_facts.md) #### Output data model diff --git a/ansible_collections/arista/avd/docs/contribution/input-variable-validation.md b/docs/contribution/input-variable-validation.md similarity index 100% rename from ansible_collections/arista/avd/docs/contribution/input-variable-validation.md rename to docs/contribution/input-variable-validation.md diff --git a/ansible_collections/arista/avd/docs/contribution/overview.md b/docs/contribution/overview.md similarity index 100% rename from ansible_collections/arista/avd/docs/contribution/overview.md rename to docs/contribution/overview.md diff --git a/ansible_collections/arista/avd/docs/contribution/style-guide.md b/docs/contribution/style-guide.md similarity index 100% rename from ansible_collections/arista/avd/docs/contribution/style-guide.md rename to docs/contribution/style-guide.md diff --git a/ansible_collections/arista/avd/docs/getting-started/avd-aap.md b/docs/getting-started/avd-aap.md similarity index 99% rename from ansible_collections/arista/avd/docs/getting-started/avd-aap.md rename to docs/getting-started/avd-aap.md index 64fa1ae23ba..0811b6c8f17 100644 --- a/ansible_collections/arista/avd/docs/getting-started/avd-aap.md +++ b/docs/getting-started/avd-aap.md @@ -11,7 +11,7 @@ This guide will walk you through the steps required to get up and running with A ## Requirements to get started - An accessible lab topology running Arista EOS. -- An AVD project or Git repository with playbooks and an inventory. To get started, you may also use any of our [example topologies](../../examples/single-dc-l3ls/README.md). +- An AVD project or Git repository with playbooks and an inventory. To get started, you may also use any of our [example topologies](../../ansible_collections/arista/avd/examples/single-dc-l3ls/README.md). - A RHEL instance running AAP. - If you need access to a RHEL instance, you can join the [developer program](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/developer-program) to get a copy. - To get started, you may also sign up for a 60-day [trial license](https://www.redhat.com/en/technologies/management/ansible/trial) for AAP. diff --git a/ansible_collections/arista/avd/docs/getting-started/intro-to-ansible-and-avd.md b/docs/getting-started/intro-to-ansible-and-avd.md similarity index 95% rename from ansible_collections/arista/avd/docs/getting-started/intro-to-ansible-and-avd.md rename to docs/getting-started/intro-to-ansible-and-avd.md index e7e602f02a2..cf24929c4ec 100644 --- a/ansible_collections/arista/avd/docs/getting-started/intro-to-ansible-and-avd.md +++ b/docs/getting-started/intro-to-ansible-and-avd.md @@ -329,10 +329,10 @@ Following the scope definition, the ***tasks*** are then defined. In this example, the play executes two tasks: -1. Import a ***role*** called [***arista.avd.eos_designs***](../../roles/eos_designs/README.md). -2. Import a ***role*** called [***arista.avd.eos_cli_config_gen***](../../roles/eos_cli_config_gen/README.md). +1. Import a ***role*** called [***arista.avd.eos_designs***](../../ansible_collections/arista/avd/roles/eos_designs/README.md). +2. Import a ***role*** called [***arista.avd.eos_cli_config_gen***](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md). -The ***arista.avd.eos_designs*** role takes inputs from a number of [places](../../roles/eos_designs/README.md#role-inputs-and-outputs): +The ***arista.avd.eos_designs*** role takes inputs from a number of [places](../../ansible_collections/arista/avd/roles/eos_designs/README.md#role-inputs-and-outputs): - role/defaults definitions - group_vars @@ -344,7 +344,7 @@ Based on some or all of these inputs, it generates the following output: - Fabric Documentation in Markdown format. - Leaf and Spine Topology summary in CSV format. -The second role, ***arista.avd.eos_cli_config_gen*** uses the structured EOS configuration in YAML format as its [input](../../roles/eos_cli_config_gen/README.md#role-inputs-and-outputs) +The second role, ***arista.avd.eos_cli_config_gen*** uses the structured EOS configuration in YAML format as its [input](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md#role-inputs-and-outputs) (generated by arista.avd.eos_designs) and outputs the following: - EOS configuration in CLI format. @@ -352,8 +352,8 @@ The second role, ***arista.avd.eos_cli_config_gen*** uses the structured EOS con Running the play described above would result in several files containing the configuration and documentation for the devices in scope - in this case, DC1_FABRIC. Then, to apply the configuration to the actual devices, you would run additional roles such as: -- [eos_config_deploy_cvp](../../roles/eos_config_deploy_cvp/README.md), which deploys the EOS configuration via the CloudVision Management platform, including change control with RBAC and full rollback capability. -- [eos_config_deploy_eapi](../../roles/eos_config_deploy_eapi/README.md), which deploys the EOS configuration directly to Arista devices using config replace. This option provides no change control and no rollback capability. +- [eos_config_deploy_cvp](../../ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md), which deploys the EOS configuration via the CloudVision Management platform, including change control with RBAC and full rollback capability. +- [eos_config_deploy_eapi](../../ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md), which deploys the EOS configuration directly to Arista devices using config replace. This option provides no change control and no rollback capability. While this play shows both the `eos_designs` and `eos_cli_config_gen` roles used together, it's entirely possible to make use of just `eos_cli_config_gen` by itself - this would allow (for example) generation of management configuration that could potentially be merged into an existing network as discussed earlier. @@ -369,8 +369,8 @@ This System of Record means you have a complete overview of your designed networ Below you will find two examples of documentation automatically created by Ansible AVD: -- [Documentation for L3LS fabric](../../examples/single-dc-l3ls/documentation/fabric/FABRIC-documentation.md) -- [A single leaf inside the fabric above](../../examples/single-dc-l3ls/documentation/devices/dc1-leaf1a.md) +- [Documentation for L3LS fabric](../../ansible_collections/arista/avd/examples/single-dc-l3ls/documentation/fabric/FABRIC-documentation.md) +- [A single leaf inside the fabric above](../../ansible_collections/arista/avd/examples/single-dc-l3ls/documentation/devices/dc1-leaf1a.md) ## How do I use AVD? @@ -694,10 +694,10 @@ This takes place without manual intervention and with very little chance for hum Below are a number of links to additional documentation about Ansible AVD and Ansible in general: -- [Role documentation for eos_design](../../roles/eos_designs/README.md) -- [Role documentation for eos_cli_config_gen](../../roles/eos_cli_config_gen/README.md) +- [Role documentation for eos_design](../../ansible_collections/arista/avd/roles/eos_designs/README.md) +- [Role documentation for eos_cli_config_gen](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md) - [RedHat Ansible Tower Documentation](https://docs.ansible.com/ansible/latest/reference_appendices/tower.html) -- [Role documentation for eos_config_deploy_cvp](../../roles/eos_config_deploy_cvp/README.md) / [eos_config_deploy_eapi](../../roles/eos_config_deploy_eapi/README.md) +- [Role documentation for eos_config_deploy_cvp](../../ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md) / [eos_config_deploy_eapi](../../ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md) ## Next steps diff --git a/ansible_collections/arista/avd/docs/installation/collection-installation.md b/docs/installation/collection-installation.md similarity index 95% rename from ansible_collections/arista/avd/docs/installation/collection-installation.md rename to docs/installation/collection-installation.md index f107c49a3df..35ca24689c2 100644 --- a/ansible_collections/arista/avd/docs/installation/collection-installation.md +++ b/docs/installation/collection-installation.md @@ -118,3 +118,8 @@ If you leverage [CloudVision](https://www.arista.com/en/products/eos/eos-cloudvi !!! note When using ansible-cvp modules, the user who is executing the ansible-playbook must have access to both CVP and the EOS CLI. + +## Ansible Documentation + +- [Ansible Collection User Guide](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) +- [Ansible User Guide](https://docs.ansible.com/ansible/latest/user_guide/index.html) diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/add_md_toc.md b/docs/plugins/Filter_plugins/add_md_toc.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/add_md_toc.md rename to docs/plugins/Filter_plugins/add_md_toc.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/decrypt.md b/docs/plugins/Filter_plugins/decrypt.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/decrypt.md rename to docs/plugins/Filter_plugins/decrypt.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/default.md b/docs/plugins/Filter_plugins/default.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/default.md rename to docs/plugins/Filter_plugins/default.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/encrypt.md b/docs/plugins/Filter_plugins/encrypt.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/encrypt.md rename to docs/plugins/Filter_plugins/encrypt.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/hide_passwords.md b/docs/plugins/Filter_plugins/hide_passwords.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/hide_passwords.md rename to docs/plugins/Filter_plugins/hide_passwords.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/is_in_filter.md b/docs/plugins/Filter_plugins/is_in_filter.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/is_in_filter.md rename to docs/plugins/Filter_plugins/is_in_filter.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/list_compress.md b/docs/plugins/Filter_plugins/list_compress.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/list_compress.md rename to docs/plugins/Filter_plugins/list_compress.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/natural_sort.md b/docs/plugins/Filter_plugins/natural_sort.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/natural_sort.md rename to docs/plugins/Filter_plugins/natural_sort.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/range_expand.md b/docs/plugins/Filter_plugins/range_expand.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/range_expand.md rename to docs/plugins/Filter_plugins/range_expand.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/snmp_hash.md b/docs/plugins/Filter_plugins/snmp_hash.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/snmp_hash.md rename to docs/plugins/Filter_plugins/snmp_hash.md diff --git a/ansible_collections/arista/avd/docs/plugins/Filter_plugins/status_render.md b/docs/plugins/Filter_plugins/status_render.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Filter_plugins/status_render.md rename to docs/plugins/Filter_plugins/status_render.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/configlet_build_config.md b/docs/plugins/Modules_and_action_plugins/configlet_build_config.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/configlet_build_config.md rename to docs/plugins/Modules_and_action_plugins/configlet_build_config.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/cv_workflow.md b/docs/plugins/Modules_and_action_plugins/cv_workflow.md similarity index 96% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/cv_workflow.md rename to docs/plugins/Modules_and_action_plugins/cv_workflow.md index 2143e7362b5..164f56816d2 100644 --- a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/cv_workflow.md +++ b/docs/plugins/Modules_and_action_plugins/cv_workflow.md @@ -60,9 +60,11 @@ The `arista.avd.cv_workflow` module is an Ansible Action Plugin providing the fo - When interacting with CVaaS the regional URL where the tenant is deployed should be used, e.g: `cv_servers: [ www.cv-prod-euwest-2.arista.io ]` - To see the full list of regional URLs, please visit the [cv_deploy](../../../roles/cv_deploy/README.md#overview) + To see the full list of regional URLs, please visit the + [cv_deploy](../../../ansible_collections/arista/avd/roles/cv_deploy/README.md#overview) role documentation. -- To generate service accounts check [cv_deploy](../../../roles/cv_deploy/README.md#steps-to-create-service-accounts-on-cloudvision) +- To generate service accounts check + [cv_deploy](../../../ansible_collections/arista/avd/roles/cv_deploy/README.md#steps-to-create-service-accounts-on-cloudvision) role documentation or the CloudVision Help Center. ## Examples diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_cli_config_gen.md b/docs/plugins/Modules_and_action_plugins/eos_cli_config_gen.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_cli_config_gen.md rename to docs/plugins/Modules_and_action_plugins/eos_cli_config_gen.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_documentation.md b/docs/plugins/Modules_and_action_plugins/eos_designs_documentation.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_documentation.md rename to docs/plugins/Modules_and_action_plugins/eos_designs_documentation.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_facts.md b/docs/plugins/Modules_and_action_plugins/eos_designs_facts.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_facts.md rename to docs/plugins/Modules_and_action_plugins/eos_designs_facts.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_structured_config.md b/docs/plugins/Modules_and_action_plugins/eos_designs_structured_config.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_designs_structured_config.md rename to docs/plugins/Modules_and_action_plugins/eos_designs_structured_config.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_validate_state_reports.md b/docs/plugins/Modules_and_action_plugins/eos_validate_state_reports.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_validate_state_reports.md rename to docs/plugins/Modules_and_action_plugins/eos_validate_state_reports.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_validate_state_runner.md b/docs/plugins/Modules_and_action_plugins/eos_validate_state_runner.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/eos_validate_state_runner.md rename to docs/plugins/Modules_and_action_plugins/eos_validate_state_runner.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/inventory_to_container.md b/docs/plugins/Modules_and_action_plugins/inventory_to_container.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/inventory_to_container.md rename to docs/plugins/Modules_and_action_plugins/inventory_to_container.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/set_vars.md b/docs/plugins/Modules_and_action_plugins/set_vars.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/set_vars.md rename to docs/plugins/Modules_and_action_plugins/set_vars.md diff --git a/ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/verify_requirements.md b/docs/plugins/Modules_and_action_plugins/verify_requirements.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Modules_and_action_plugins/verify_requirements.md rename to docs/plugins/Modules_and_action_plugins/verify_requirements.md diff --git a/ansible_collections/arista/avd/docs/plugins/Test_plugins/contains.md b/docs/plugins/Test_plugins/contains.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Test_plugins/contains.md rename to docs/plugins/Test_plugins/contains.md diff --git a/ansible_collections/arista/avd/docs/plugins/Test_plugins/defined.md b/docs/plugins/Test_plugins/defined.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Test_plugins/defined.md rename to docs/plugins/Test_plugins/defined.md diff --git a/ansible_collections/arista/avd/docs/plugins/Vars_plugins/global_vars.md b/docs/plugins/Vars_plugins/global_vars.md similarity index 100% rename from ansible_collections/arista/avd/docs/plugins/Vars_plugins/global_vars.md rename to docs/plugins/Vars_plugins/global_vars.md diff --git a/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md b/docs/porting-guides/4.x.x.md similarity index 98% rename from ansible_collections/arista/avd/docs/porting-guides/4.x.x.md rename to docs/porting-guides/4.x.x.md index 2cf68026fce..a326ba08852 100644 --- a/ansible_collections/arista/avd/docs/porting-guides/4.x.x.md +++ b/docs/porting-guides/4.x.x.md @@ -153,7 +153,7 @@ 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.md#bgp-settings) +See the full data model in the [documentation](../../ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md#bgp-settings) === "Removed keys" @@ -542,14 +542,14 @@ The `hardware_counters.features` model has been improved to allow more options. direction: in ``` -See the full data model in the [documentation](../../roles/eos_cli_config_gen/docs/input-variables.md#hardware-counters) +See the full data model in the [documentation](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/input-variables.md#hardware-counters) ### ip_name_servers The `name_server` key has been deprecated in favor of `ip_name_servers`, more aligned with the EOS CLI. -See the full data model in the [documentation](../../roles/eos_cli_config_gen/docs/input-variables.md#ip-name-servers) +See the full data model in the [documentation](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/input-variables.md#ip-name-servers) === "3.x" diff --git a/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md b/docs/porting-guides/5.x.x.md similarity index 99% rename from ansible_collections/arista/avd/docs/porting-guides/5.x.x.md rename to docs/porting-guides/5.x.x.md index 9ee76cf3393..f01554483a6 100644 --- a/ansible_collections/arista/avd/docs/porting-guides/5.x.x.md +++ b/docs/porting-guides/5.x.x.md @@ -1646,4 +1646,4 @@ and the following command line: ansible-playbook playbooks/fabric-validate.yaml ``` -The test categories are listed in the [role documentation](../../roles/eos_validate_state/README.md#test-categories) +The test categories are listed in the [role documentation](../../ansible_collections/arista/avd/roles/eos_validate_state/README.md#test-categories) diff --git a/ansible_collections/arista/avd/docs/pyavd.md b/docs/pyavd/pyavd.md similarity index 89% rename from ansible_collections/arista/avd/docs/pyavd.md rename to docs/pyavd/pyavd.md index 2fb5f7daa45..927f8a9a769 100644 --- a/ansible_collections/arista/avd/docs/pyavd.md +++ b/docs/pyavd/pyavd.md @@ -12,9 +12,9 @@ PyAVD does not provide any inventory or variable management, so PyAVD cannot rep Supported features: -- Validation of inputs based on the [`eos_designs` input schema](../roles/eos_designs/docs/input-variables.md). +- Validation of inputs based on the [`eos_designs` input schema](../../ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md). - Generation of "avd_facts" and "structured config" to be used in other PyAVD functions. -- Validation of "structured config" based on the [`eos_cli_config_gen` input schema](../roles/eos_cli_config_gen/docs/input-variables.md). +- Validation of "structured config" based on the [`eos_cli_config_gen` input schema](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/input-variables.md). - Generation of device configuration. - Generation of device documentation. @@ -22,8 +22,8 @@ Feedback is very welcome. Please use [GitHub discussions](https://github.com/ari ## Functions overview -![Arista AVD Overview](_media/pyavd_functions_dark.svg#only-dark) -![Arista AVD Overview](_media/pyavd_functions_light.svg#only-light) +![Arista AVD Overview](../_media/pyavd_functions_dark.svg#only-dark) +![Arista AVD Overview](../_media/pyavd_functions_light.svg#only-light) ## Known limitations @@ -67,7 +67,7 @@ Python dependencies are automatically installed with above command. ### Optional requirements -To install Ansible [AVD collection Python requirements](installation/collection-installation.md#python-requirements-installation) install with extra `ansible`: +To install Ansible [AVD collection Python requirements](../installation/collection-installation.md#python-requirements-installation) install with extra `ansible`: ```sh pip install pyavd[ansible] diff --git a/ansible_collections/arista/avd/docs/release-notes/1.0.x.md b/docs/release-notes/1.0.x.md similarity index 100% rename from ansible_collections/arista/avd/docs/release-notes/1.0.x.md rename to docs/release-notes/1.0.x.md diff --git a/ansible_collections/arista/avd/docs/release-notes/1.1.x.md b/docs/release-notes/1.1.x.md similarity index 100% rename from ansible_collections/arista/avd/docs/release-notes/1.1.x.md rename to docs/release-notes/1.1.x.md diff --git a/ansible_collections/arista/avd/docs/release-notes/2.x.x.md b/docs/release-notes/2.x.x.md similarity index 100% rename from ansible_collections/arista/avd/docs/release-notes/2.x.x.md rename to docs/release-notes/2.x.x.md diff --git a/ansible_collections/arista/avd/docs/release-notes/3.x.x.md b/docs/release-notes/3.x.x.md similarity index 99% rename from ansible_collections/arista/avd/docs/release-notes/3.x.x.md rename to docs/release-notes/3.x.x.md index c8d7471ca6d..46e2574dd3c 100644 --- a/ansible_collections/arista/avd/docs/release-notes/3.x.x.md +++ b/docs/release-notes/3.x.x.md @@ -157,7 +157,7 @@ ## Release 3.8.0 - Version 3.8.0 includes input data validation for `eos_cli_config_gen` based on data model schemas. - By default data issues will be reported as warnings and will not block the playbook. See details [here](../../roles/eos_cli_config_gen/docs/role-configuration.md#input-variables-validation-settings). + By default data issues will be reported as warnings and will not block the playbook. See details [here](../../ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md#input-variables-validation-settings). Please report any problems on [Github discussions](https://github.com/aristanetworks/avd/discussions/categories/data-model-schemas), if it seems like the schema is wrong or too restrictive. Other feedback is also most welcome. diff --git a/ansible_collections/arista/avd/docs/release-notes/4.x.x.md b/docs/release-notes/4.x.x.md similarity index 100% rename from ansible_collections/arista/avd/docs/release-notes/4.x.x.md rename to docs/release-notes/4.x.x.md diff --git a/ansible_collections/arista/avd/docs/release-notes/5.x.x.md b/docs/release-notes/5.x.x.md similarity index 100% rename from ansible_collections/arista/avd/docs/release-notes/5.x.x.md rename to docs/release-notes/5.x.x.md diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000000..b459f90129f --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,12 @@ +mkdocs +mkdocs-material<10 +mkdocs-material-extensions +mkdocs-same-dir +pymdown-extensions +mdx_truly_sane_lists +mike==1.1.2 +mkdocs-git-revision-date-localized-plugin +mkdocs-git-revision-date-plugin +mkdocs-exclude +mkdocs-include-dir-to-nav +mkdocstrings[python] diff --git a/ansible_collections/arista/avd/docs/stylesheets/extra.ivory.css.backup b/docs/stylesheets/extra.ivory.css.backup similarity index 100% rename from ansible_collections/arista/avd/docs/stylesheets/extra.ivory.css.backup rename to docs/stylesheets/extra.ivory.css.backup diff --git a/ansible_collections/arista/avd/docs/stylesheets/extra.material.css b/docs/stylesheets/extra.material.css similarity index 100% rename from ansible_collections/arista/avd/docs/stylesheets/extra.material.css rename to docs/stylesheets/extra.material.css diff --git a/ansible_collections/arista/avd/docs/stylesheets/tables.js b/docs/stylesheets/tables.js similarity index 100% rename from ansible_collections/arista/avd/docs/stylesheets/tables.js rename to docs/stylesheets/tables.js diff --git a/ansible_collections/arista/avd/docs/templates/avd_schema_table.j2 b/docs/templates/avd_schema_table.j2 similarity index 100% rename from ansible_collections/arista/avd/docs/templates/avd_schema_table.j2 rename to docs/templates/avd_schema_table.j2 diff --git a/ansible_collections/arista/avd/docs/templates/plugin-docs.j2 b/docs/templates/plugin-docs.j2 similarity index 100% rename from ansible_collections/arista/avd/docs/templates/plugin-docs.j2 rename to docs/templates/plugin-docs.j2 diff --git a/ansible_collections/arista/avd/docs/semantic-versioning.md b/docs/versioning/semantic-versioning.md similarity index 100% rename from ansible_collections/arista/avd/docs/semantic-versioning.md rename to docs/versioning/semantic-versioning.md diff --git a/ansible_collections/arista/avd/index.md b/index.md similarity index 84% rename from ansible_collections/arista/avd/index.md rename to index.md index f9a293b3e3c..86a3d4ad738 100644 --- a/ansible_collections/arista/avd/index.md +++ b/index.md @@ -6,7 +6,7 @@ # Arista Validated Designs -
Arista AVD Overview
+
Arista AVD Overview
Arista Validated Designs (AVD) is an extensible data model that defines Arista's Unified Cloud Network architecture as "code". @@ -24,10 +24,10 @@ Arista Validated Designs (AVD) is an extensible data model that defines Arista's ## Reference designs -- [L3LS VXLAN-EVPN](roles/eos_designs/README.md#layer-3-leaf-spine-with-vxlan-evpn) -- [L2LS](roles/eos_designs/README.md#layer-2-leaf-spine) -- [MPLS](roles/eos_designs/README.md#mpls-core-with-mpls-evpn-vpn-ipv4-vpn-ipv6) -- [WAN AutoVPN/CV Pathfinder](roles/eos_designs/README.md#wan-autovpn-cv-pathfinder) +- [L3LS VXLAN-EVPN](ansible_collections/arista/avd/roles/eos_designs/README.md#layer-3-leaf-spine-with-vxlan-evpn) +- [L2LS](ansible_collections/arista/avd/roles/eos_designs/README.md#layer-2-leaf-spine) +- [MPLS](ansible_collections/arista/avd/roles/eos_designs/README.md#mpls-core-with-mpls-evpn-vpn-ipv4-vpn-ipv6) +- [WAN AutoVPN/CV Pathfinder](ansible_collections/arista/avd/roles/eos_designs/README.md#wan-autovpn-cv-pathfinder) ## AVD Ansible Collection @@ -76,6 +76,6 @@ You can also open an [issue](https://github.com/aristanetworks/avd/issues) to re ## License -Copyright (c) 2019-2024 Arista Networks, Inc. +Copyright (c) 2019-2025 Arista Networks, Inc. -The project is published under [Apache 2.0 License](LICENSE) +The project is published under [Apache 2.0 License](https://github.com/aristanetworks/avd/blob/devel/LICENSE) diff --git a/media/example-playbook-deploy-cvp.gif b/media/example-playbook-deploy-cvp.gif deleted file mode 100644 index c28afb551c3ee39d8d0af0512ff64db16493dbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69708 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 Z%ekHFxt|NVp)0za>oupav@#J806Q0D?->99 diff --git a/media/example-playbook-deploy-eapi.gif b/media/example-playbook-deploy-eapi.gif deleted file mode 100644 index cbba5f77d8fa1983f958324b59098b3a943edfdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56753 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 @YE(*L|4>*L~4uJNcK0-EqKT$M?w7IhU64%Y*q> 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 %Wg+jdK2jrbRb{gZV!gz= z?dL0tHdytyNpf>3yfZ4d>A0A6KElOk&sFU9l|i|cZ#z#nDa)h{n>KJq;NrQ$cf zXD86-e6&ofo*K5Una-#J(W^Lcm&8E@5#oQH5UQUwkMDx`-_chF@Wt^`#fy6~eF*pQ za#e@m3y1_aLaQ)mtLI1^;cUN;g>9{b;^oD3kWsx*o>YsOr2IR^;C=ZzIm#9Ox#D;H zu`z?wpRceeKkk41)W{dO8l-vs>$@{Q<Ri zPlcwRxF+{<+~GQ_`xP~o2QYS2=GIwdT6k&3E8>ROsNv?ym6X5cc1^Zl+aMJ2*D#!j z`)S1cJxsKb@A*gDIdS*225&kCU}cZ4LU9-3Q@9#iAXQSlu)0jQg2uL#M{m2)J`Y?p zu&g~)z1Or;1|-@Ee1y9rDC?x9@4D-Ud%6WO%G69VrN~NhR;>(`odR+gFI5fx*c=U^ zflaKaVSRjLvgxw*n^Nu5&K*)hItBL6FWnby`Iz1+rj8 z=)mTR>a4r*vttOwZ05ORl;{k*_IoqqDc$<>Sp(SwUI_}1_Wd#*Y$o#t7PL~X%T9{R z-5F9^G=c)|Ca^U0{J-+;8=E+}cb_%k%5>l9FbThSW5SEFT6Xy7^nvl*fiyByF!>%F zA&0$E;1|GkY+kw?9)iM74x=kxPrakuIOQfTD=)fZwR@6UbM>Evm|cAf9$RY9>WN__ zjlnvj{A^zhv-kHvQSZOVwz<77`HYaKG|$-!&~0BnL7D0ks$(sb*Z_+DJ^KlF=~V!x ziV2M(OH@%1Y^E~F9LGqr88A00p3sXbMv~f%kx9oxy@f15c4-s6UpqOlM9n6%?;;?z z1@pX>Vq-_3JHHEs7q+*Ss1Qg3<>pdl+~W_83Z*-PSD6JiqoOW}rk(xzu?6T$qyIS; zYHYQeP9%tBdA}>{lnXHz<8r9DeX`-GKzdn%CKjaICOLVt6C93{k@a__oR;;0soI@# zTaZj%Jq=F)$vDF zcf6bd2D$f4xJmMWs>ery1wPghW8#_NTE3|oS{ViNQmJG}cx1P>RjI2tS%1j$Mc!Z1X(vD_oj_szY?b5qE z#D(G`Q5^)Wa*@};7yNlq7w%s$OLa7{l=tbCj|ZSP9L%h}I>Jf6-8%(SrF23&OH}|k zF6=I8H}BkLyYFQRFO5nXqVn$kXF6bxcLzZAN0g8cE|q|nScR69j$hyMAtLdXL=ZBQ zsT&Vgp_2G_70EPKQz%Jb=sU@qYN9AD=y4YoD`jzE@?10k0Yh2n$1hw2>qJq3QB*7M zgvLB2i>B|?PdJW;GBTC4s{oE}v#}{S<`D_FdbyI6xo{@27g)_a)5}6}4$yjzH(op1 zND)xqEYl&(^ppMRW9At+LfdO=n5Yw)6X?4Uf;@EWm_V_^M1g`YkC4bbD+G?Jp}lf^PwB23nU zF>>k76UpV!2am{N?o@#&a~n>ub8gUyWspFwFVtB;$kOt|xUFqjV`7&5FQT>mHvYGzRg|xlN0y^aLhpM73S)5g-V7R1&#w-BT(M_YNhP}~V z(xuii!t**^7TH^vlH6H9T=Xjr*?TJfUs6cUpH8C1gJbSM)G7&GMG@^JOUuVA__izi z@?enWx&lng5Y2w5>Vdp;FNXr-Bgfgvql;hbp|*lnKITb1$wFR0>(gH zkyOGR*7!b;gaB}2$xO|fB_gntA8k?RbJD1a6zSZ7nCH>ipu*=!QUeZGf={dGh9(Un z-(4-yzhHjTGpLps>fQ{p8=SUcBurO!NIQbORMCb_3SOTcX0DVic=GBD%|Gq0J4FJy zg{RJbs0#r6Jh{A-U?!MmG3-MVFL$ z@LASUwimE}MFx%@BCVodOL3pzXxe z?9N`T)&SF3N%40F(BSCZjt|$m-g|c1)D2gFtzkY%G!KiQ+{9$3uYH392N>AEU}`DV z8-12_YtmP}(?ZRisyUY+5n^s)$EsXw7s+im9f%j;nyX((&=4S(9i~p{DgUe+HerxO z2vom$5}FMV`+SfSMS-ikFF(jKt&I=t_(MnCQTdV`S`fcznh6TZR+04nnce4S!y%W= zJb3_AmDmj}{iz}WQ!SgJy2!`7f4ijc&tk<)R>Vuob-B)Aqb_0h@Tw5ipw9DriIPqh z5zeG&E7saLhjpe>c$-E{^?_je0h|Q9^}rP$C4>N|y|**N>)(|t7=vYMC1(S6ch0Hs z)Z=K4P-k^?n;J4v=*7CH8h%wh`aZ5UzfDT*>Ymz5J?i(e8XIRKoI=8@i(fW06G)WR z)Xs$IYikv)T66V}gEB>38AOW~hUa!55)|azWUd})cE5o2p~?Jcr~n!;?QSC+Q^w+G@Vt2NlBosAdG@l< zg1OP$`*H+Ws&h~}lSkbVB((t4t>lqd0BRO*j@tuu!SN-YWO=tP`7_o@7aBeN)>kHV zDUlHlu@MQ05fv<-OH>LBcKdfMD5gK}^xk93wg`Vsae+@j-BR4)QmM;_^n494cGU0Z zRD{&I=_5ZipZR8xE=2>7ItkbIJEB{|f&;XzIrlf?uO*KuDP0RQxYucrLz*5wsoXB0 zBq6ls};aV)^+gT5>|~>ZyVRd>~0`H$hmRrMv~eMVblDkq#$P58Sunv4Asa zPG(nBtPXx+!pyNf>86wk+{s7316QoyF~!@#I9n#rvH{ZJAeBsD zK(?P z>DP5(UrikNk8b|%PLcgxknyR&_}jl*7O)1LvFEwi-y7u2oH&ck_yEbR?C)ibFb?yL z83VdS#(O^t3hT@_AMn2@XGHj+a(i3(_O;H~nm@RZD@i^cPPoqM>AbIgRA4(%e&d{30Z)hMJi?4@Bu~xveFBeUW`OQY zF^WmFn1Y>fyPJnxx#JiIeT#z~yk#JNSZB>$vP|zzjJg>=+svf);38`!QV&4UNqiP^ zEdYCsp7H?8hF_gwS99C~b1@7a#W{-bTs$I*tb2gY0|cdVzuh(s*?QYYnv8u#N_=IN zvS`c*6=FOwVS?THT-2UYO`Ml-8s;Vw9Y!GqmzH_>d$-;kvwUmb`&N7JF04&a<1f^4z-O92KFf_;kXB5(Jxuk|#oMqMk8RW^>0)au(3pXhfC8#hRa zKKqLb^4GARm^K(>sO&p~n(R@n5r@hmwp(TD}*f?PAieRx~TqxO?0 zZl23Ux9JP2GGG!xWM}QI$0ca`7Bv0E4881uydft*y3Kd}M`;Z3bC2|yh1Hzsa2OTXYkZ+!(AP|D6MR&fTmGhH zmG@WbxoT*oP(bfBWfCw*JuY40?Q0&qG|Q^x z`z37{$PucDzQ*5GP`ytH$aG!z2q-N4R-kl0BsNPf*J$5kt~@rK^NVZ(*bsg+Mf178 z2rCP1HFE|(QJt--Hem=_3KS;(sC(&ZfpMe@oo{b=(n_o*TC#mlN~kjcDPccneJ?8S zy=(`f^nFwE^AgLot?uk3KFK(I(_354zA-XQRX%SH011wvQb2qo7x0O!8)PyFR_9*T zqwyGV1&oS}pI&LW-cfUE7*H06i|ph?Y=UeCF~)cVU^Yri!zCw9Cf= zIiel`O`8pIsj}W-TXbii;QJ$tZgfTH`w**V5aX6$l;tQeaeyWG%tc0h9zQG67gBxB zS{9Bk7_;0u*)HBJr^>!OOCF07ca$)fUT4or{e`9LrasMdQt={a$Lm!ET7zW^hD<|P z=?uKoNP+?C;PQA?rbTo4u%&GH2k88D@F=M**hYPmq=Z_4=4%I^1bClt54 z)ec8v53BTnvc~(AOr{^lZLw_1I~?Jzm3S+|2>E9@m5Z_dHg?&8IRezdm0$}UbZ&~1up`XB|&pmJ!(T$hw{Zt73I+ShIp5s&f*`_3>@9zVDw4M%$$H%%;S=qw+ z_vwVv%cO(+Ct8|jvj&Oh20}oVO+^|vfh1RXjzqC})Y$}(BAo@^0pQP&`~?%UsQioi zJ(F*(Dh?I{_Eyz`^(fV7EqN$fvc!V({ajMU*^%J1}dY76{ zQi0p+pU-)Xw|_>_?KrqkNA&R5@<)ybdXHDsrcg%yajhs)rctqK}!qJz1K51gnF>0*E;KthBC zcU_Gao$!U4inR0RuOj+2`gw&TL-Ar@2r+VyrC`qs{}Xy2Qw$tZ zT@K*Ki&*HIP|_+#R6%XbPH3GTGoxU+JM(6`GwOHt2_l0^JW=y5pBh+nSX3l#^~Zzl ziL=iJ>HR*M=I9yUG&^^H{xsr!VLB5e7<(X=(;~r&oP;}CdOc1~)`fx{i#5)!2VX*6 zg{C#k(U?C%S73)+9dD?9o_Ri;_?dm}n=4dnLM)2Qkc7cp!+&_)O+^m8I^=Bf@`s>+ z%t@BZpA)&n_&_CL)jOap>1#9Rwe*czWY%?aZ++)qmWmj0a_ljSE%}i~0YKhd>oDGN z8aF`wQ@Mutru-`WyoE}U)r+6;mJ%!_H$x4ZFsars1k#e@Q;X)-_6LxBq6GR+`Me#wx6X)*rQb=%1X)S19zjbbK9xBcv_Xh-0q z2KGzsc{@QzXIEje@DAJ032}O^NfoxW*hwCy!Yy<_{Ck2LhO`7#{alD*0pMh4?UkH| zxp&f|)BDn6v%(iy4~r>JbZXaA498!J9EWhbH8%z#UroJ^{W5w!$>(OCkfQ4+?CmNR z60&K1mR<^_26WXmW6q?40`xn3XRbEijb5%u>@2T6ykCYo-ee|zH-uNAY7Jxh!4K`V z3aRR`i{9597^#YEq}(k zd@^)pNawNgOx9Z+Z(?BIrVq=`tll{QF3ns53F3Y!gj9$n%V2hVr43o{qI`kLRFo_e zPUC^6FDZEbP!Rg1Qr)c~|4aGYTM$ z^mABb;o(0LbDP!WQuHzm&|%30;4hoJ>P&$$e7jX2xi7KM3UYjtJb{e_YBj{LNa+nrW_({BzM7(guU4ewlA~px1$o_y1wghSpu%{qw z#gZ7CJ}5#pYqr`tOY{=;d;eo8;34Gns`P*_k84oUz6_|1;4bDX1eO7E)?}My&TgzG zccK-$S;8AKjRLUm1ZAOOmS}&H>b~!S$;pKSsV%bXr)(mma#`Y3cD*8iay$tCR2CB} z=g**^aLEvVKanUVxW!L(-cLd-LFt9L^kInNWLau{_~+#iQO{}2hOh8GMKaS5w+|5b z#3Rv0mQtR^)s*9<=M;LX)VS05E(>s5mcXg@-OBP&3j%NX6WDz^{2-5R0Dkx~9hM8w zumM0EHMznGe1~fIc|$JCrt_v6Q1$%z|A6fcmmO()s!Z)&l0>WsJ8=8SO?OCqE^g-@~A@X2;QYR|Jb^XJvNl+}B*6kOXu zjs=uOWn_>3Qiqwn9+VbbUZA8M5vUs_Pg0KEk?qU=QQO$P>&d7FUI=*>hIAPTtBY# zK|;WH(Ob*#RXeVo$wz>o#k>7*$*cMJ>iub@Am54R*%Uhnd^23UDQE(jmkJ(4Yu2kC zwtc3`C)wn8w~a?q)kVCDdP;3jL`Mzs@zJLDMSGA6>Flo)mw=F54x;Wrfg}l3&|NOm z;kg8aap2+4xEG{yK8Yu2R}TI@1!*0MTjJo?E#L%#xg?W6!UAsW&(+HE-;Q^Z4JWx) z03=4Ziz0Zb$R`-x`u7Kk_m3nxtcCOh@J}Xhv#4C*S&u= zx>gWep7C=inr=@w5%)PKK3(;CC3w2RM&ih`6XHUO)z0dUehm_?3eV&HR}SMtXqnYa z@Z@j*cfDW>nBnz`Z1nXM>mW9l zX(}h7AMoOkSH+jgB>(W(RhS9Xk`T27)Q4H^5#Bn^lJR2vdEdsif>Lhk+&IWqwoLjJF3#IOK`XJ6Eos0v-yv6e!ydk8TY1=Lq1Wk*MR z_)@Pva%P4O`7{OQ5(C|4h4w*g-zoJ({G5k;n)ss#r_1 z*Z?U0GgC*_U09!t=q8=tMqGGz?81q&xDcKSsMd!0U6-rB!B7cb+-kCrgx@uN_@q=M zZ$XAF!XG!o2i51fG<^-Heh<`2iFQc4*vbT@{#B4r%2nOKr`I5tm>Ac4xw{mk@r>XB zJThJ$D+Y|zl(n--Px1<@QXTRe7~q)F ztF=|`37(~Fgg&X}b|&ncXlAkv-tc2>!*TY5Tv7 zsEqiJS)zL#q)0`6T0w-A@tq{){K*%5@I2#y#jQ^{meLr`;Me3t#%3@bp1ebnk=$PC!~mi@)8W;nM#*$=p@Q~Oa&WlRfTNEyT~p(L(_Po0Sw5>oP|;4QMQ zooPn})4>s5FRmB8xH10XEJ2t|g6ora3M%c?nf&N&^VzUwKT5Kp4U&iT+s=Pq2CnM)Qss{}fYR0Ph0kwlMzJ`<&?;qodg)D9Fjx2~+ zZK56A( zE6%%;L?MH6NU(_F8}gIwukWWMKFmr$bLlU0YarGD`g`M(uCn*%hg(y_z^){F5`Z^C z+)fH;`O@3gmGf@T+m_qiHXxZJ=k428Sq{^0x16yUlxuGti|{!rd(tyY&WEnL%lYs- z_Sm+!?5;PlFP6>g&pOfuk(|ipC*(ZexmirF3A%aQsjNNv=#4TK9LC`*n*UPM&R71^ z7Y9kAaRRrU{pYbM#77zevcz)|1%e5hjQ|fEs0Ral-&!uH--6wzVn30j_gP21{c!87 zcZSoFCRCYk985F4|Di0}*bBcYsZKVM>!m{?{(&JrFW_%ppx%HX`{0OiUT%lkf6|Z?76A;-W~u^{-Y61~_r|*22pp{IL|k0B7_>(wR#j zymIUlI!BB~a*Jh3&^RC*_0|S|N@|w`ZZ<_nu|V7?ge#*tNlm@uNU8Im=%G)*{cyK} zQQ0!m!G6KnGRS=yq4H^2KpCV>R5gS$^*Um$V`NG*UbJd-OtExbZEB3vRR3vY{YdHW zCl^&^OMjb}uKyst_cN1x;I?rpF8uc!Rh=`NmQ!!an-&Xyeh;gV8l{hZ6c(Eq`e;Q3 z6cajvr}UDkodSSa#X702B)~cpKFZuKiCc`A-hOPl^O(C`Gqv*-@b78dqLs|QubhK* zrGMNG?!UgcT@AC{r&GI+-^Lv-KmYXY9;O`$BlKUBG^-<*eRvGopFTV(Ovs+w?om8; zR7w&&{Db+Uv?GQ4$8z_ty_L|-eb>RY=O2Y7t?@l%;G#n^GLBn5*q6D`4`%F>!qa-J|zxEij_|s#@iVr%P$E$~H+)EWBvY*#{srT(j zm$YrJ{rb$Ghkp89^V9JcjwSN(YTEWG5Er{Bzm9t->D08HKYRaZcYWVn;gb%|87-Uc zxXnE(BoQ4k)t@2$C8Og@Vj3DY!UqoQ*- z7j-QPIP0eNZ~*^tZR%*=;qXeQa>*omLAj*55b#)9Xr)Y-kd8@Ku5)1lfNtl!qCDbi z0#TWxSqO#Zd0HtxnWIJU!rv>uwiFV-(sU@lFD&J>M^L^y;*r87*K1$D+{aKy#!z&CGH>JFYu|lN>+=1xAg4iq-3Gw*kmk;lqQ>0uU=g#9)(SvOIEs~DWg?x`fIyABqr!{4d(*=TU9@%G8X=5z0^uP}nt>M*~>*6LZF znS!`-{=T(mQr~O;jGehX@MrvF3G%vEY)Kac0E;?u-L0d53IKqeU;pJ~JUG$f^+lPW zf5$pJ$5tYCIj1krzz%R*n4hGH#Mr;%I$ua}>J!UquM}U-d)iuAx3l!5qx_v*cVJ%M z%#i4tWo1LDx_@JKD|N3X-rW6W{>Co|$Xo+6$}X>>hjXlgAq=_qRkJcJpG_k zz3q*5$86M`bAj~1b}`o!jPbLw7h3KeO-WtQeL3c4!95sPg_L5QXpPKLhKc2>rJ*%b z;50_1LUkXXTw=Kp%fIW8VtUG9-P-o5?vrM7GIF=rApjm8rl7_MBSW_~1usVIl)ocu zcrHF5+fei9ksW@uc@mcb<+jKZn;BAyQ8Ls!-xE!od2W1J0O&Z9Ni+P7)R@{b0+s_R zUL*=DI#T3ud400O<~%%Ym8t=|cxS--H z%g;Fa!J8CFR>hLGIHJ@yro|DGrrZ! zb@pT)#BE3xJUVf!P{8Ss|B$-waEZuuLslVfvr1F*9PLw*v%G546U+V})TW!mK|Eu) zTT=CIZuM|U#PBg|ks!BITb~W!3I9l~5U0dKYS;3NL?PiaENr}CBY_;G2bj?|` z^hRWTnBS7ZO=Y3#4~OuUAobrrt4D1=FuZ)K+C9bp>4g+O34 z$`AgcOCwS(YV%tZ#H}O*=+X=23bcnoewH8OM~W|gX$==Y9CiEi7XMyY1A@*xxr>@9S^FWm zi(s+#+Q}#&z?Zmb$fxCu9o0T?-KHM1o52-rbt>C8q`M8w2))|sBHn4p449aNpW0Fn z+Y55-iMS0n7WRJCra7)|Jn1BH7ln+irQI6{ER;X|%Hhz3AMO%Jt*FqJK503vC@PFH zF^v(FWHuHQP5kE~HlmJJD9r7#(>i1>9MGGvK5oc7p*Oz$9%W4w7>>!;jkB%3KAB&X z=G8rW+T(gEirZ9PRy2F&kC6Ii0Y$Up`K)Eic{Xd$YlEi#*4kn06aCQz_p&~}Mq~vj zCfT*ZyyTmC%2?F?Z>>MO152KF1>0*nbvD5!S*Zk4_ zEB|2lBKEX6r=-VMBSu6940s0ro}_p3-?-z7+G97Hpa$R8LvMMnzxZ&`QzOtQg_Tq8 zGkhZKa$_0Kc>Y35pRC_SgIANw&zj4fE|*x!-$m(Ae*7F@L3m*j9PIU3qFG+5|1pCp z5Aye>q(BexW4j*9cMk0p9Lc=#V`WzPY)DL6p9s&Z-EYLZ+cz~E05-i7d6YjP~AK-eP`!{9sBys*DHa=+i&);(^n$zF)U5 z=GAD=gBj$(;SM}T0`-2lhKr*B@FA}zzT5w89pC#IbyjoY_lLi4{_Xuz_5lC^4pD+d zR7~l7>x}SSy|A2bPd=8j21GFHDH^RqxgXo+%hID8c5gUQCfjIc4?O!a_BX2Hs_J?U z)OZ)eP3ZHsa&cPJ==lC0&)qh6pVCU5S(885>*K#t9AX9X|D}lh&8p9kuC(8<~|8Hd^fxEl#Me^y}_V4n~P4_CN8@U%UmR&mD za`(4hc>L{KUyxih;a-rrwQqiF3UUz;MS-RINOqq7Z6zjoj}k5u2O!1uTE$?as3Q78 zd*20XpagP0l}F?#cM*Ai^+ ze>pbNFUG)KXy!=#P;eYMD$zPsX#DDtKB(ZEV`63Z5*-F@HieQ-MkTq6;44;nyqm*( z8*W|jg9POyO+dr(#Du_tRlaFIh7+s7$&W@eL<{)Vk0b|DJs-Pf z6kbR90KCr3gA^&rZxaFK3mKmZD2v~c&&y^8tx-l(5H?5173|xhE;m2x-_h@tyd7`- zA>>B3FL2QPs1F4k*K1~FeP_e{u5td&%YeHo0@`b-W~7k208tu2B<)|6_uEc^J!M)a z;wA0=_jDEcYJw9rgSW!XN13$=0-kktf42pAkzbd^ZFi9XfTRH{Nr_W>W ztC+Nv{i{p#0FipYO1*mR?3LaFE653UYPQMC=$BZHSVDGdfS4rBIz1STV&6e^W;lX_ zO-1uE&U)iX*_+x3NeZ|-%4__dnd8gjr&aR&Z7%97xZ>sElHsYgR%g8`1Mfv92Z-L= z>?TWznm!KBv%Q9baV%>WEN7JOQEc)}y3I~T<{S}9Rmn}Y(YZ_Iel5s=M33d2au>>1 z*|?V&NWD{7X#Fi0S$X+Ha5hRl)+?~^zQ_Fwidlz-?#(6@8qDTj0%tuEE%JxlGt^YANb-7acK&`<9OZ2E3hw`h4(rKn#eFw;Y_d=<8sU=l`$o*qPmVN1Si zmxPtwAGum=GgsmmcwWp-gomIL} z4Bt%#Tx<+sbX>iYRJu>7%n0Yp;FS8M-kw#cFw#P+-+%avfF|w;ECSFR8nT{_8lWNj zIH&<%)W(t?^=jj404SM?O2a(B*!!CXdJ6o^FsGp+8>{p-fme03FA{ zbTeV00K@_b*-Apu35c|6z5zpcHw_)$*d6TH$3al zTk_d5K#l1&&FN4h1}~LS^I8n`lHs}N%WJd>E@$vMFyK*G7?lWb>aU4npynM>VM{`5 z)#NkLwOpz5u3f6~@9sl5{dHU>BFFLRIsiRMM~{y^t))TY7167x&H z0Qio+5-R^%QjFjqScN{@VLUU0zd*dq`oY&mFwv$qc`*@GM@SBh;qc?R5f(N`LA=DC zavNtnS4D7JpL?+pZJv;ACThYFl_4$^JWkT7Zf?8boR;x;@rl51CVG*M=5QLh1!98H zI|gXYwyqm(t>G;pYp*(=H`LPVZ8?nBVhs+&8sLu_HU(KAj=%p3?!e%!&48AAL2Acq zwtdm_^izwJ*F{*^f41=Xnm7A9_1h#OTm}E~9ckk0EAZ~|AwFSr1~iTa33G&@cbV7& zLh?E^jt>3w4^vL8;XBZfCs-J7S%F&U$~hrute1GrOTJgUb+6!K?`kT&P#v7iFYlgH z8Q=#-@J2)U)IaR(Kg=?z2I(b-^r~^7gP)7Rw&}z$ekQEx74L56kaPPbDl}{r7Dj}G zuELUNU597zr!PP~yCfdfn64qflPW1aE_FTy7ekcQdxQa>Ol+F^M*9Zr9LBk#2l`>G< zj^F?SuWNWWTISu$iMot%D3|^28U@YeyjwYr7$gq3`VLUTdu$)|*zi3^|6l}BpkCuO z7)|SK8fG^9{Wb$t>C5+;%{RbA_LKS^UFiE>toRdve(j4~t3^$+kxQidN5%b~bDeeE zVs;$(-FbePE2FBIfEjcIk8!Z)i4eg(cqrlheJpC+5&SiFKvNU$%C0M>p~nHBp@X)F z2vIwM2<4!-Y_B72xw zCLB$LvsVXYZVzxtpTt+N=Lk?P_MkraLK&a_`hL+q{rSj6-f_G3|7!cWzD4z`h+-l< z?>#)3{xpZiO&t6xVwsJ zV@z;4h$;5FAtJguTd{#TdXn5#z1NGk7K6CN6kmtUr*yVCWHJY0@(lM6QIV1 z=siBz7?ZDH6?2pLnN1s|Q#w{wu(`hYFyiM304DOO>TMEgkPTBe8SS89im|h{#Myx9 z=^KK~H6zUW@<)0x@&G0@NkjeOj8z;(jnO$su1P&cYP!$2A8yIAF101qN*6-uXJ8djm(0JtS#;SE;zJPC2I3Y*R0+bhDn zaRiI*V0BF(Nz8=^z(Ud_f9fSZOX5P?>H_}uTqyt7i5I99$KeB9^NcV0Jq5WyL!Q3K zan(eB@#X8H&Hp9V|Dti;VF#M_1y&qUzi7xI65j;9e3pZH$40zaMX#!T=aRk;R7^+R zT3M_39+Cx#3Lm^igIHc3)Xauh5}=9w_+~NuT|kcozuYAH=e)_!xl2DSoxuMUeO^`l z%85iR`68JI1>%j__T}p#p@w$>Zvzf5e_2Hjg)jH*qi31O9s*(zu)=hipJ%TQ(U9-i zYfk})B457uOccwfdFPJlwL2@ScTLA`2_*p#V$#30xJ5_SvGi345(!mZXA(7jqa1#3 zp_`PXEkDzK)U&@Wlhx;+K2&W*&k#(Gy+?(-S(7Y9W{a(}n5b%?;O6Rl-74aV93qF= zo(zDMGU3gu<&dZ5eXZ-4;`9%N2@N^^4w69-->OAANM1H|wY!CSPy5jv{%w`GtGT?gx;fbj4{(5AXT#2h@iAR6Y!2tEFN}T$8bRc}?#uV97FF-~ zJcPXRD&c+@m%B6czW^>A(c=^MkopLWQ2Vxj`;RcfN-_5_;i>lh`@sJccF#4rLifH8 z{K!uhd*4-k9}inj4b3nP^)SQxnya_^uL0}ATkjB%pAXsK*__}Aj<5%g&WzE)$Sr1w}bLQTm zZMg63+@CLl*2VvuSMT0`Uik0@99ZyR!i5bVMx0pjV#bXfKZYDx@?^&|^UnLDFP%Kj z^8C${x7pa7KAT`dlqgEqKYguR`)lnP)S87JK_&%8Y?(=hqFS+btq-<7*=r`%wM<$0 z^1yd_nhU$l)+Xw#nm%QPr_7`oQ}Kw}vbF2iwGQ*q%x4a!T65go!)16rW_rHPncvTu zYXW}${r&$3FhBtZB(OjO55zCIx-bhZop~N?#hZE1Ne7rUZi&M*kN)`0A=TzdXEV;g z2@xE5C^@8$+8iS0jXz#|vBTa#(M&{nC``vh6c<^MCj}7%vN8K~g07u+s&V9#I~=(V zswcJ(We5K}CXq5quH<8=9cauEB@i#a3}li&ytK+oTWaCvrEBCOOC3tU3}nhL%M8;O zUiQ&z$RH`3AeTM=1T;`V2PL#nLk~sNqaS_3thIl%@dlhfjL`-*V%9k1kTpQ@s2|&O zAq5`Ja(7?k3h;;!YVwTh;yqQXo&`zG#%P!7+!{9w;88)*aVLy z$_VobdZjHR8fB2d6E9$W9gGhz04BI#gAYbHVTBh~j8~o-r8Ny>S^b= zNwxofe9mXOlJ7m?I6|I_4B)MdqQTl}$iF=bzbFPD4hW9A@~?e{C{n z%l6z`=N@D5*rMsC?R`?JsCA8t-D`K4;R*26eu}!Q zrHrN;X#Dh7sG#$@MgjQl=DTmd{{}p8!5h|V9!0c~0*{C$eKZXzw9yA0biDbaV_jNF zV-jN0$&461(f|bV1U`3uk=81R{bVe^-!<~R09LS+-0*kG-+JY;e ze71>3_-#nBrI%iqVMdvJ%IcS)tF4-9iy0@=UQnr~?%Z?oA(Q#<$3K7l_vc?w+;f5$CGY?WMf{@`c%TF^&;br@G_Z0uQ4QuM zVGK~1#u$nK-Hp7V4p8_Ef|twO#1>)CSFEDT;e!ST=^V=O5}| zMlXy(i(Wu#gY5v~-lq30JYa0k zc&g|WrirT;|JVnf;s=v-ylV^Gl2RF-BCoBKAs?}ni~Pnoj1H)WlE*}5GL^Z^gZ+;t z^I#q`jPVC*7~>!ZS;pvevCTg;uz{j_iN|2_899PO9k4KDPFUeVhmdoQ>d-|xZ^z90 zSn?BMlz1#M^*^%G`n!J26pgD$jz2VGF(4`Xeq%;;~wBx-VT$ejRk@Oi0#-1V|izd zeKbRwz35~zBnOUcyd#J!?O!6Cz+DD6*uf9(-*!EcQ%-TBa{JR%bqI4aDhEzA!Vv!$haBu6k9^1h4xIYLHS$q}G3=CT5>atESo{x5$l)I~ zwu3hQ@dr4Fj1N!JU7AQ3!aDKpPKYv&f*^w%?|8>Jm~o6(MB^Q8fr)#YvB_5; zgD9Ychb_jzmi*qN9oMLbCTZb{YnTHW$UsLjeo>FUUX~|W_S-NfVCXA1+R=~yhBTq9 z>=0(`)En>M#ywyFiu7zl4kG)999DA;OZ?*wCqD6R{}Bi){KgUTh(-~p!H_kKLCK#; zL(Vh-jcr8P$1s_M6)FslaloJ$47tM?W=)DTC^;6q*s+wU9Fs{$8YYO&i8;2x4Pq1| z8O>-$GHkX9Pm04UFR6xkjq!?KJntUaKuR-yS7)2F!y5H41~FbS4!PvR7R#VUHOA3b z_U;7RcQZ!^UTSTIH{9V5XHK;lQfVm^@E?6xgFJju>NS9R8fYQ4sdXxaC#X8uX`t~x z!jOi4#G)Ojur-Wzg$Z8!+6u~j2_>wM2ByZr$gAK6FO>a{d+6%f(cbCVv|%D~h#&kW zL}`aBUU9iiOoBRhXaqv#43lXzgBZnl1vg4*BwFak7H6h6@1~IqYP@2+)fDsl` z*2U=zs~^PmzIVR&9WYF122X9h<3c#(6UQ0FKc>M8bCkNoTOhf~lgcSxtf0fBP)Cia zF^+fSL!&hBwH20dbC^&fsUq`55iSpoe5`>QVa`Xjj$Q;Qj2???^?Oe4UXvmT_Mv{L z!yTru2V1zJ7i~|oIKo?uYK+|+1^L8U%ux^h(&Wy~Cw1KIScE^whgd+veDH;6@P##Sg$#oPUkI$!>k)^LK;g;zjsuLJDGFg;&^xO>hK5_=HbrhPwNSPAr&QFacxQ#AbBHXOtE%j*Bz|;9G-X{DfYRHw2p>Wn{*Jl*yT-N&aEFbZCW~1cf&!1^-a+$)5yD zpTvkX5QU-?g?VrYP|&KNDukkns-kjApkl`~umY#qf){%UrL-=hYDznJN~p{#tzyTj zbQ%aW!Gb)L5Jw3g779Iq=sbh%w)(urDF(xAkEt-hSNmN z(;Nw47#(6LB+>+@aUxBMp@!5@FsZHCwO=19sVkjh?piTVD&;9htNrJ|-6pU)%tG1X+b0~*k2u4GY z134InTNFv7;VW)f2TUu)hmwOS_=I~HPrxb9^IXpoHPI6lkoNqC_XJS+)X&ioO%DkP zlAzHS-6qoM&zzvm8lBG@EgiMu%>pG+%BY6lG1B%JhjO@sH6R67s0Rv#iQYNVqk*iA zBn4!6LYy$rLNNyupc@ng(=Zj&h%1~l=*gf&)1Ms3tenwSbkk+9(QR6W9L0&-(2X~R zQ`WrEIR(<3P*H2!Qo!(?DgB*l*aic;Go0XtK_%2?$k6Ev(FeZi(k~s;O4GH}OFfJ~ zrI zRTzQwk1iDienr@Xl}v!;8-`^tf<+jJ#SdaiJcYH`i)}`Swang(Rc-~CQBXLH71G&} zRljKDSeTO7opW!k0%T9buUl=WCHbpjfQOsB=#tc6;>v4;eR1i=_u&pO&(8C%6j+NIUn zv{hSrlGm;U007W|0C|Q3kOi)Uck6q*d^cc{Tq4x0=R7mdtiXNbzb%Thf|nd zez<|bJ%s?M+f#^J_H|$RRb2WVTk=`1pGx{+8vCr?X2)66bR0XVekRI zHQx)yV4*dP+lAct?O=xZg6aK-(WPFmJz$6ETo4Z3uKn5&Zrl^T-AE8zhTz`@zT3v& zhb%bWT}X_s{ourq;GejLDrf-v$>1YKVt@hI87^JIy@A?=Vd0%y_ic#MjpA;g|KHjr z;M`^4`|aN!{<|B_329J)w{-w2)(PVcfJR6FFn$U8&D{Wqg2ufGANE`zMqL3h2R2ZE zgH7T;24wa;j064x?xo)LrC~%K;lxeh&*k14USxQHWDmY$hG=9Lw&BUm3FFOOH@=DV z9b7xE2{`8B0k#QIR*WFliF)9J24Dl84dhssh6L-y2~@`8 zK#_z7@PgKz<#lFf{uozI7GdmF;3ocM-7RDge%lY0=ekW_dk$a`e&4rMmf(7pgC~CG zg3P-#K3;9kVcZ1(7~o<0t$;!CkAKurD!vD-yDA1D9Gqs zz5xK31W~qQi5}@Q<_Q8=*8>@a2|$88Zs(om>BWHNg86Bh@{64iV2QZse8%FH=Hdz< z2c^bnjZWS;rsAWX-s;U>csOb~&}e6NX^lSWg(eaL*ppnK0Wa9a;_$_Q#DF331A z1EPlChTvcxmWBkNT{xBlc;Mj3<>nHG+}X8X-F1ksPF#M71;u>^jh@{B*o7R{>H)|B z!S?IOed!wrfa9oZ2F{6LXaFF|1QVEmPDty~Chf*pYhO9-m>LBW*onoiSf@>}wfLCzp zt443+wr!10U^E`=4PR(ZMrx}DfX5E*h5l-l=3;RU76gFh<;VpmK!7-?X$jZy9mk37 zMid{Xr%s>&o`{9t#&68lVUM0;kfv=9S8t8Z><;Jv7WlEFE`o?oatFwP4kqK1PU*-k z>Mjp}f>!AOSc8h@;hZQx0Qu|*KwBP%^ElT;3YW=*ri?GRY-ET96)^C{Q0|?m2L({) z$uI}$rfxY$^hAFNAU707XD0nnjuzKu#rSibSabZy1SDwi2Uqk?Cv8XX3F9^7#RX`e z0QF@WYRc&Hw`GAecZ^EM322yr9FL4)r~(A=0ZEtwaZmr}bqKFE?3HSUxM)MJUQ=#} zi)QXR_F7Bs^OpejtBzm%C1K>KNd%{)gj+buxQ14406`e^UI%wy?}=$|2*9@FCm&o} zmWbOeW*DGjoM>cvjtO#iUZ$?!yg2n`G6$D3qk6FO$f$=zpaBH%f@}}>gNO4;(`6c7 zc45EwM)rsqt_yj$iG_Cv7RGnUe9Y<&qiZmMH-C&#uyH3yaD+Gcgy#v2cL;eO-Puic z=k;Vx9$?;$g{!veNHAt#pJ-!OdAX+BWv<>*KTFB%(!U6!o1W&!sE15&0s{DWT0i-y zzwSxH?YLd|6HZ@aCuWZbaRRR0*-c!GS9$;KdYAuScV9+fMxNeaw)i=pOfOJ?5!)ZK zHi2(n-9+#K0`P%EfO@I-`_i5?c@O5{*5bXs_=YEZhv!~grtD>3X5y9jNe<|@4c+G* zT^KIlAf-%bK!OH{1A`A7a}fB@ZVYG;1QQ?tC&+|d|NGWQ>q(>cWwvB6mU!FEd=&m* zjK5+^CT1_TU0!YodI#VG#%;~^Q}rAMGiZPYKms;kgHeF~=$HQKr~c}<{_Ds7?AQM7 zpME}I125=+)GztO7zQ?&00pQ5j(7d_7k8bo_`!E#V_*2%pMB5ueU&d=5@z8`E_I6s z2zv=435@jb)PQdP7BXz;@F9SQ5+_ouXz@ZK#*7*_a_s1l<1k5V*qA73@+8WXDp#^> z>GCB^lwR2ILG{t2xlC0QG+>kKCeWZlhY~Gn^eED#N|!Qi>hvkpsQ*%@QmtzBDpsix zHx_ir??%FfUlQ^IB5NU{unoTiIQtJ#n^OP`3T(6R84HE~zUcV()$TvM-A=XL3!rbq zt_=l0J8-tKTaR0_Qm$pAw0;oNA z;aA&;58AE(PvRHdXl(<2>)Y=Qx&zVr&J93La)*Q?GlzHT_*>hBH_C?X{X2N9sN&E7 zKqJo2@aosIZ}0v+{P^ znd(s~<(Xxw2~|iz4q0SqYsxt%opsuICq`*Hx#KW+`pHo)k_1UW14wlFC!&ce|GFrn zDeBpzjOLiY28xaTnM)#G2sweFqts(5sG*8FDygbH%H)pqu%UnxUX~hWJ);OxMF#*( z-~=D8zPc-~z54pAP^Y3Mkd0VTX-*<05P*areFFQUIiv6qBmxAOP=z2iJ-aQp-Fo|~ zu%{8LS5|tOBS{qvAb>=!-}*R89GVhftruM$=`Ozc>bq~5;Z8+kaTbkRS-96oqN%N& zR?6>pv1Y=C6UriBf*H9k%rM3oYrL_F1bk{5z!?opnZFGMI;gc(bQvedmt8YTB5e4e zthGL{k%*@)>%241J;&F8vlg9FfOcm|14L~Oob^=&ix92!KSw9M^bHkcrg7LmPEYMz zZIMU~0Mt>d06+k1Bv33vxf#S;Us{7L3)5Hk1DcPZ8dhob!`>Il0fHV-Jl!iy^(XeZE}!q zo9Uf0w|wv<2gawj9r?62LQXwFotqL%*cQr`}411-D)+nOKhANcAZ-291mj=he zInuF?c3em+~04~#>2A^%Y8YrpZw4vU^mPPnDqz1Z>>MmFepb1hxN zO-M&d&PdiK3Xr6TB#e+HC|DVcx{bs3YAm?5A>9m!Bz0>;iM03|jHXeaz&c`t`j zwW?O_-Zd1!PKU5%63B>!3Y5vB3GDMrwe%-iIT(kd8a1tMeQO7=D%ZKv)s9}^14TeL zJJT@pnoh}ST>~rF!4fu9^-#c6AA(W6WMYFO}9L!MK)v~s=u60ipydWh$VDYuKy)ABYn;Aa%fN(vk2NGnf+u;(o zxW+|FCMFQRBxRxjpgk^hqbuF%N(35CaBgQ)B#8<5;F#3?E_lQ1+F>AJSvbpXgSJ>+ zB$QRW?tL$OF6-vJX6xWEQJFoF}T-~}_d!4BSD HKmY(cZ+-Z) diff --git a/mkdocs.yml b/mkdocs.yml index 5956d09e32a..4e57c7b7099 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,7 @@ site_name: Arista AVD site_author: Arista Ansible Team site_description: Arista Validated Designs documentation -copyright: Copyright © 2019 - 2023 Arista Networks +copyright: Copyright © 2019 - 2025 Arista Networks strict: true exclude_docs: | /README.md @@ -13,10 +13,9 @@ repo_url: https://github.com/aristanetworks/avd # Configuration use_directory_urls: false -edit_uri: edit/devel/ansible_collections/arista/avd/ +edit_uri: edit/devel/ theme: name: material - # custom_dir: ansible_collections/arista/avd/docs/_overrides features: - content.code.annotate - content.code.copy @@ -73,25 +72,47 @@ extra_javascript: plugins: - exclude: glob: - - .* - - changelogs/* - - molecule/* - - tests/* - - plugins/README.md + - README.md + - contributing.md + - ansible_collections/arista/avd/bindep.txt + - ansible_collections/arista/avd/CHANGELOG.rst + - ansible_collections/arista/avd/CNAME + - ansible_collections/arista/avd/collections.yml + - ansible_collections/arista/avd/galaxy.yml + - ansible_collections/arista/avd/LICENSE + - ansible_collections/arista/avd/pylintrc + - ansible_collections/arista/avd/pytest.ini + - ansible_collections/arista/avd/README.md + - ansible_collections/arista/avd/requirements-dev.txt + - ansible_collections/arista/avd/requirements.txt + - ansible_collections/arista/avd/meta/* + - ansible_collections/arista/avd/playbooks/* + - ansible_collections/arista/avd/plugins/* + - ansible_collections/arista/avd/changelogs/* + - ansible_collections/arista/avd/molecule/* + - ansible_collections/arista/avd/tests/* + - ansible_collections/arista/avd/plugins/README.md - docs/release-notes/1.0.x.md - docs/release-notes/1.1.x.md - docs/release-notes/2.x.x.md - docs/release-notes/3.x.x.md - - docs/*/4.x.x.md - - roles/*/docs/tables/* + - docs/release-notes/4.x.x.md + - docs/porting-guides/4.x.x.md + - ansible_collections/arista/avd/roles/*/docs/tables/* + - development/* + - galaxy-importer/* + - python-avd/* regex: # Exclude examples common md snippets - - '^examples\/common/.*' + - 'ansible_collections\/arista\/avd\/examples\/common/.*' # Exclude all examples but single-dc-l3ls which is referenced in getting getting-started - - '^examples\/((?!single-dc-l3ls).*)\/documentation\/.*' + - 'ansible_collections\/arista\/avd\/examples\/((?!single-dc-l3ls).*)\/documentation\/.*' # Exclude all single-dc-l3ls files not referenced in getting getting-started - - '^examples\/single-dc-l3ls\/documentation\/fabric\/((?!FABRIC-documentation.md).*)' - - '^examples\/single-dc-l3ls\/documentation\/devices\/((?!dc1-leaf1a.md).*)' + - 'ansible_collections\/arista\/avd\/examples\/single-dc-l3ls\/documentation\/fabric\/((?!FABRIC-documentation.md).*)' + - 'ansible_collections\/arista\/avd\/examples\/single-dc-l3ls\/documentation\/devices\/((?!dc1-leaf1a.md).*)' + - '.*.py$' + - '.*.pyc$' + - '.*.j2$' - include_dir_to_nav - git-revision-date-localized: type: date @@ -102,6 +123,8 @@ plugins: python: paths: - python-avd + - same-dir + markdown_extensions: - admonition - attr_list @@ -121,7 +144,8 @@ markdown_extensions: - pymdownx.smartsymbols: fractions: false - pymdownx.snippets: - base_path: 'ansible_collections/arista/avd/' + base_path: + - './' - pymdownx.superfences: custom_fences: - name: mermaid @@ -139,49 +163,49 @@ markdown_extensions: permalink: true # TOC -docs_dir: ansible_collections/arista/avd/ +docs_dir: . nav: - Home: index.md - Getting Started: - Introduction to Ansible and AVD: docs/getting-started/intro-to-ansible-and-avd.md - AVD and Ansible Automation Platform: docs/getting-started/avd-aap.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 - - CV Pathfinder: examples/cv-pathfinder/README.md + - Single DC L3LS: ansible_collections/arista/avd/examples/single-dc-l3ls/README.md + - Dual DC L3LS: ansible_collections/arista/avd/examples/dual-dc-l3ls/README.md + - L2LS Fabric: ansible_collections/arista/avd/examples/l2ls-fabric/README.md + - Campus Fabric: ansible_collections/arista/avd/examples/campus-fabric/README.md + - ISIS-LDP IPVPN: ansible_collections/arista/avd/examples/isis-ldp-ipvpn/README.md + - CV Pathfinder: ansible_collections/arista/avd/examples/cv-pathfinder/README.md - Installation: - Collection Installation: docs/installation/collection-installation.md - Ansible Collection Roles: - eos_designs: - - Overview: roles/eos_designs/README.md - - Role Configuration: roles/eos_designs/docs/role-configuration.md - - Input Variables: roles/eos_designs/docs/input-variables.md + - Overview: ansible_collections/arista/avd/roles/eos_designs/README.md + - Role Configuration: ansible_collections/arista/avd/roles/eos_designs/docs/role-configuration.md + - Input Variables: ansible_collections/arista/avd/roles/eos_designs/docs/input-variables.md - How-To Guides: - - Configuring PTP: roles/eos_designs/docs/how-to/ptp.md - - Configuring WAN: roles/eos_designs/docs/how-to/wan.md - - Custom descriptions and names: roles/eos_designs/docs/how-to/custom-descriptions-names.md - - Custom Structured Configuration: roles/eos_designs/docs/how-to/custom-structured-configuration.md - - Custom Templates: roles/eos_designs/docs/how-to/custom-templates.md - - Generate CloudVision Tags Preview: roles/eos_designs/docs/how-to/cloudvision-tags-preview.md + - Configuring PTP: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/ptp.md + - Configuring WAN: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/wan.md + - Custom descriptions and names: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-descriptions-names.md + - Custom Structured Configuration: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-structured-configuration.md + - Custom Templates: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/custom-templates.md + - Generate CloudVision Tags Preview: ansible_collections/arista/avd/roles/eos_designs/docs/how-to/cloudvision-tags-preview.md - eos_cli_config_gen: - - Overview: roles/eos_cli_config_gen/README.md - - Role Configuration: roles/eos_cli_config_gen/docs/role-configuration.md - - Input Variables: roles/eos_cli_config_gen/docs/input-variables.md + - Overview: ansible_collections/arista/avd/roles/eos_cli_config_gen/README.md + - Role Configuration: ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/role-configuration.md + - Input Variables: ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/input-variables.md - How-To Guides: - - Custom Templates: roles/eos_cli_config_gen/docs/how-to/custom-templates.md - - cvp_configlet_upload: roles/cvp_configlet_upload/README.md + - Custom Templates: ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/how-to/custom-templates.md + - cvp_configlet_upload: ansible_collections/arista/avd/roles/cvp_configlet_upload/README.md - eos_config_deploy_cvp: - - Overview: roles/eos_config_deploy_cvp/README.md - - Integrating AVD with CVaaS: roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md - - eos_config_deploy_eapi: roles/eos_config_deploy_eapi/README.md - - eos_validate_state: roles/eos_validate_state/README.md - - eos_snapshot: roles/eos_snapshot/README.md - - dhcp_provisioner: roles/dhcp_provisioner/README.md - - build_output_folders: roles/build_output_folders/README.md - - cv_deploy: roles/cv_deploy/README.md + - Overview: ansible_collections/arista/avd/roles/eos_config_deploy_cvp/README.md + - Integrating AVD with CVaaS: ansible_collections/arista/avd/roles/eos_config_deploy_cvp/docs/avd-to-cvaas.md + - eos_config_deploy_eapi: ansible_collections/arista/avd/roles/eos_config_deploy_eapi/README.md + - eos_validate_state: ansible_collections/arista/avd/roles/eos_validate_state/README.md + - eos_snapshot: ansible_collections/arista/avd/roles/eos_snapshot/README.md + - dhcp_provisioner: ansible_collections/arista/avd/roles/dhcp_provisioner/README.md + - build_output_folders: ansible_collections/arista/avd/roles/build_output_folders/README.md + - cv_deploy: ansible_collections/arista/avd/roles/cv_deploy/README.md - Ansible Collection Plugins: docs/plugins/ - Contributing to AVD: - Overview: docs/contribution/overview.md @@ -190,17 +214,9 @@ nav: - Validation of Input Variables: docs/contribution/input-variable-validation.md - EOS Designs internal notes: docs/contribution/eos_designs_internal_notes.md - Authoring eos_cli_config_gen Role Guide: docs/contribution/authoring_eos_cli_config_gen.md - - External Resources: - - Ansible Collection User Guide: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html - - Ansible User Guide: https://docs.ansible.com/ansible/latest/user_guide/index.html - Release Notes: docs/release-notes/5.x.x.md - Porting Guide: docs/porting-guides/5.x.x.md - - PyAVD: docs/pyavd.md - - Versioning: docs/semantic-versioning.md + - PyAVD: docs/pyavd/pyavd.md + - Versioning: docs/versioning/semantic-versioning.md - AVD Dev Containers: - Overview: docs/containers/overview.md - - About: - - AVD on Ansible Galaxy: https://galaxy.ansible.com/arista/avd - - Arista CVP Collection: https://cvp.avd.sh/en/latest/ - - Arista Installation Script: https://github.com/arista-netdevops-community/avd-install - - Arista NetDevOps Community: https://aristanetworks.github.io/netdevops-examples/ diff --git a/python-avd/pyavd/_eos_designs/schema/__init__.py b/python-avd/pyavd/_eos_designs/schema/__init__.py index f11983019d3..3e5e412f13e 100644 --- a/python-avd/pyavd/_eos_designs/schema/__init__.py +++ b/python-avd/pyavd/_eos_designs/schema/__init__.py @@ -8234,11 +8234,11 @@ class StructuredConfig(EosCliConfigGen.EthernetInterfacesItem): For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` - documentation](../../../docs/plugins/Filter_plugins/range_expand.md). + documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md). - Subclass of AvdList with - `str` items. + Subclass of AvdList + with `str` items. """ description: str | None """ @@ -8492,11 +8492,11 @@ def __init__( For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` - documentation](../../../docs/plugins/Filter_plugins/range_expand.md). + documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md). - Subclass of AvdList with - `str` items. + Subclass of AvdList + with `str` items. description: Description or description template to be used on all ports. This can be a template using the AVD diff --git a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml index 2236585b9c9..f7b0fa48b76 100644 --- a/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/eos_designs.schema.yml @@ -2335,7 +2335,7 @@ keys: description: "List of ranges using AVD range_expand syntax.\nFor example:\n\nswitch_ports:\n \ - Ethernet1\n - Ethernet2-48\n\nAll switch_ports ranges are expanded into individual port configurations.\n\nFor more details and examples - of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../docs/plugins/Filter_plugins/range_expand.md).\n" + of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md).\n" items: type: str description: diff --git a/python-avd/pyavd/_eos_designs/schema/schema_fragments/network_ports.schema.yml b/python-avd/pyavd/_eos_designs/schema/schema_fragments/network_ports.schema.yml index e63b894ade5..a5758d57a45 100644 --- a/python-avd/pyavd/_eos_designs/schema/schema_fragments/network_ports.schema.yml +++ b/python-avd/pyavd/_eos_designs/schema/schema_fragments/network_ports.schema.yml @@ -48,7 +48,7 @@ keys: All switch_ports ranges are expanded into individual port configurations. - For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../docs/plugins/Filter_plugins/range_expand.md). + For more details and examples of the `range_expand` syntax, see the [`arista.avd.range_expand` documentation](../../../../../../docs/plugins/Filter_plugins/range_expand.md). items: type: str description: