diff options
Diffstat (limited to '')
-rw-r--r-- | docs/getting-started.md | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 0000000..fd147e7 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,301 @@ +<!-- + ~ Copyright (c) 2023-2024 Arista Networks, Inc. + ~ Use of this source code is governed by the Apache License 2.0 + ~ that can be found in the LICENSE file. + --> + +# Getting Started + +This section shows how to use ANTA with basic configuration. All examples are based on Arista Test Drive (ATD) topology you can access by reaching out to your preferred SE. + +## Installation + +The easiest way to intall ANTA package is to run Python (`>=3.8`) and its pip package to install: + +```bash +pip install anta +``` + +For more details about how to install package, please see the [requirements and intallation](./requirements-and-installation.md) section. + +## Configure Arista EOS devices + +For ANTA to be able to connect to your target devices, you need to configure your management interface + +```eos +vrf instance MGMT +! +interface Management0 + description oob_management + vrf MGMT + ip address 192.168.0.10/24 +! +``` + +Then, configure access to eAPI: + +```eos +! +management api http-commands + protocol https port 443 + no shutdown + vrf MGMT + no shutdown + ! +! +``` + +## Create your inventory + +ANTA uses an inventory to list the target devices for the tests. You can create a file manually with this format: + +```yaml +anta_inventory: + hosts: + - host: 192.168.0.10 + name: spine01 + tags: ['fabric', 'spine'] + - host: 192.168.0.11 + name: spine02 + tags: ['fabric', 'spine'] + - host: 192.168.0.12 + name: leaf01 + tags: ['fabric', 'leaf'] + - host: 192.168.0.13 + name: leaf02 + tags: ['fabric', 'leaf'] + - host: 192.168.0.14 + name: leaf03 + tags: ['fabric', 'leaf'] + - host: 192.168.0.15 + name: leaf04 + tags: ['fabric', 'leaf'] +``` + +> You can read more details about how to build your inventory [here](usage-inventory-catalog.md#create-an-inventory-file) + +## Test Catalog + +To test your network, ANTA relies on a test catalog to list all the tests to run against your inventory. A test catalog references python functions into a yaml file. + +The structure to follow is like: + +```yaml +<anta_tests_submodule>: + - <anta_tests_submodule function name>: + <test function option>: + <test function option value> +``` + +> You can read more details about how to build your catalog [here](usage-inventory-catalog.md#test-catalog) + +Here is an example for basic tests: + +```yaml +# Load anta.tests.software +anta.tests.software: + - VerifyEOSVersion: # Verifies the device is running one of the allowed EOS version. + versions: # List of allowed EOS versions. + - 4.25.4M + - 4.26.1F + - '4.28.3M-28837868.4283M (engineering build)' + - VerifyTerminAttrVersion: + versions: + - v1.22.1 + +anta.tests.system: + - VerifyUptime: # Verifies the device uptime is higher than a value. + minimum: 1 + - VerifyNTP: + - VerifySyslog: + +anta.tests.mlag: + - VerifyMlagStatus: + - VerifyMlagInterfaces: + - VerifyMlagConfigSanity: + +anta.tests.configuration: + - VerifyZeroTouch: # Verifies ZeroTouch is disabled. + - VerifyRunningConfigDiffs: +``` + +## Test your network + +ANTA comes with a generic CLI entrypoint to run tests in your network. It requires an inventory file as well as a test catalog. + +This entrypoint has multiple options to manage test coverage and reporting. + +```bash +# Generic ANTA options +$ anta +--8<-- "anta_help.txt" +``` + +```bash +# NRFU part of ANTA +Usage: anta nrfu [OPTIONS] COMMAND [ARGS]... + + Run ANTA tests on devices + +Options: + -u, --username TEXT Username to connect to EOS [env var: ANTA_USERNAME; + required] + -p, --password TEXT Password to connect to EOS that must be provided. It + can be prompted using '--prompt' option. [env var: + ANTA_PASSWORD] + --enable-password TEXT Password to access EOS Privileged EXEC mode. It can + be prompted using '--prompt' option. Requires '-- + enable' option. [env var: ANTA_ENABLE_PASSWORD] + --enable Some commands may require EOS Privileged EXEC mode. + This option tries to access this mode before sending + a command to the device. [env var: ANTA_ENABLE] + -P, --prompt Prompt for passwords if they are not provided. [env + var: ANTA_PROMPT] + --timeout INTEGER Global connection timeout [env var: ANTA_TIMEOUT; + default: 30] + --insecure Disable SSH Host Key validation [env var: + ANTA_INSECURE] + --disable-cache Disable cache globally [env var: + ANTA_DISABLE_CACHE] + -i, --inventory FILE Path to the inventory YAML file [env var: + ANTA_INVENTORY; required] + -t, --tags TEXT List of tags using comma as separator: + tag1,tag2,tag3 [env var: ANTA_TAGS] + -c, --catalog FILE Path to the test catalog YAML file [env var: + ANTA_CATALOG; required] + --ignore-status Always exit with success [env var: + ANTA_NRFU_IGNORE_STATUS] + --ignore-error Only report failures and not errors [env var: + ANTA_NRFU_IGNORE_ERROR] + --help Show this message and exit. + +Commands: + json ANTA command to check network state with JSON result + table ANTA command to check network states with table result + text ANTA command to check network states with text result + tpl-report ANTA command to check network state with templated report +``` + +To run the NRFU, you need to select an output format amongst ["json", "table", "text", "tpl-report"]. For a first usage, `table` is recommended. By default all test results for all devices are rendered but it can be changed to a report per test case or per host + +### Default report using table + +```bash +anta nrfu \ + --username tom \ + --password arista123 \ + --enable \ + --enable-password t \ + --inventory .personal/inventory_atd.yml \ + --catalog .personal/tests-bases.yml \ + table --tags leaf + + +╭────────────────────── Settings ──────────────────────╮ +│ Running ANTA tests: │ +│ - ANTA Inventory contains 6 devices (AsyncEOSDevice) │ +│ - Tests catalog contains 10 tests │ +╰──────────────────────────────────────────────────────╯ +[10:17:24] INFO Running ANTA tests... runner.py:75 + • Running NRFU Tests...100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40/40 • 0:00:02 • 0:00:00 + + All tests results +┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +┃ Device IP ┃ Test Name ┃ Test Status ┃ Message(s) ┃ Test description ┃ Test category ┃ +┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +│ leaf01 │ VerifyEOSVersion │ success │ │ Verifies the device is running one of the allowed EOS version. │ software │ +│ leaf01 │ VerifyTerminAttrVersion │ success │ │ Verifies the device is running one of the allowed TerminAttr │ software │ +│ │ │ │ │ version. │ │ +│ leaf01 │ VerifyUptime │ success │ │ Verifies the device uptime is higher than a value. │ system │ +│ leaf01 │ VerifyNTP │ success │ │ Verifies NTP is synchronised. │ system │ +│ leaf01 │ VerifySyslog │ success │ │ Verifies the device had no syslog message with a severity of warning │ system │ +│ │ │ │ │ (or a more severe message) during the last 7 days. │ │ +│ leaf01 │ VerifyMlagStatus │ skipped │ MLAG is disabled │ This test verifies the health status of the MLAG configuration. │ mlag │ +│ leaf01 │ VerifyMlagInterfaces │ skipped │ MLAG is disabled │ This test verifies there are no inactive or active-partial MLAG │ mlag │ +[...] +│ leaf04 │ VerifyMlagConfigSanity │ skipped │ MLAG is disabled │ This test verifies there are no MLAG config-sanity inconsistencies. │ mlag │ +│ leaf04 │ VerifyZeroTouch │ success │ │ Verifies ZeroTouch is disabled. │ configuration │ +│ leaf04 │ VerifyRunningConfigDiffs │ success │ │ │ configuration │ +└───────────┴──────────────────────────┴─────────────┴──────────────────┴──────────────────────────────────────────────────────────────────────┴───────────────┘ +``` + +### Report in text mode + +```bash +$ anta nrfu \ + --username tom \ + --password arista123 \ + --enable \ + --enable-password t \ + --inventory .personal/inventory_atd.yml \ + --catalog .personal/tests-bases.yml \ + text --tags leaf + +╭────────────────────── Settings ──────────────────────╮ +│ Running ANTA tests: │ +│ - ANTA Inventory contains 6 devices (AsyncEOSDevice) │ +│ - Tests catalog contains 10 tests │ +╰──────────────────────────────────────────────────────╯ +[10:20:47] INFO Running ANTA tests... runner.py:75 + • Running NRFU Tests...100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40/40 • 0:00:01 • 0:00:00 +leaf01 :: VerifyEOSVersion :: SUCCESS +leaf01 :: VerifyTerminAttrVersion :: SUCCESS +leaf01 :: VerifyUptime :: SUCCESS +leaf01 :: VerifyNTP :: SUCCESS +leaf01 :: VerifySyslog :: SUCCESS +leaf01 :: VerifyMlagStatus :: SKIPPED (MLAG is disabled) +leaf01 :: VerifyMlagInterfaces :: SKIPPED (MLAG is disabled) +leaf01 :: VerifyMlagConfigSanity :: SKIPPED (MLAG is disabled) +[...] +``` + +### Report in JSON format + +```bash +$ anta nrfu \ + --username tom \ + --password arista123 \ + --enable \ + --enable-password t \ + --inventory .personal/inventory_atd.yml \ + --catalog .personal/tests-bases.yml \ + json --tags leaf + +╭────────────────────── Settings ──────────────────────╮ +│ Running ANTA tests: │ +│ - ANTA Inventory contains 6 devices (AsyncEOSDevice) │ +│ - Tests catalog contains 10 tests │ +╰──────────────────────────────────────────────────────╯ +[10:21:51] INFO Running ANTA tests... runner.py:75 + • Running NRFU Tests...100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40/40 • 0:00:02 • 0:00:00 +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ JSON results of all tests │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +[ + { + "name": "leaf01", + "test": "VerifyEOSVersion", + "categories": [ + "software" + ], + "description": "Verifies the device is running one of the allowed EOS version.", + "result": "success", + "messages": [], + "custom_field": "None", + }, + { + "name": "leaf01", + "test": "VerifyTerminAttrVersion", + "categories": [ + "software" + ], + "description": "Verifies the device is running one of the allowed TerminAttr version.", + "result": "success", + "messages": [], + "custom_field": "None", + }, +[...] +] +``` + +You can find more information under the __usage__ section of the website |