Merging upstream version 1.3.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-03-17 07:33:51 +01:00
parent 5b922100c9
commit 8a6a3342fc
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
337 changed files with 16571 additions and 4891 deletions

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -14,8 +14,8 @@ ANTA is a Python library that can be used in user applications. This section des
A device is represented in ANTA as a instance of a subclass of the [AntaDevice](../api/device.md#anta.device.AntaDevice) abstract class.
There are few abstract methods that needs to be implemented by child classes:
- The [collect()](../api/device.md#anta.device.AntaDevice.collect) coroutine is in charge of collecting outputs of [AntaCommand](../api/models.md#anta.models.AntaCommand) instances.
- The [refresh()](../api/device.md#anta.device.AntaDevice.refresh) coroutine is in charge of updating attributes of the [AntaDevice](../api/device.md#anta.device.AntaDevice) instance. These attributes are used by [AntaInventory](../api/inventory.md#anta.inventory.AntaInventory) to filter out unreachable devices or by [AntaTest](../api/models.md#anta.models.AntaTest) to skip devices based on their hardware models.
- The [collect()](../api/device.md#anta.device.AntaDevice.collect) coroutine is in charge of collecting outputs of [AntaCommand](../api/commands.md#anta.models.AntaCommand) instances.
- The [refresh()](../api/device.md#anta.device.AntaDevice.refresh) coroutine is in charge of updating attributes of the [AntaDevice](../api/device.md#anta.device.AntaDevice) instance. These attributes are used by [AntaInventory](../api/inventory.md#anta.inventory.AntaInventory) to filter out unreachable devices or by [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) to skip devices based on their hardware models.
The [copy()](../api/device.md#anta.device.AntaDevice.copy) coroutine is used to copy files to and from the device. It does not need to be implemented if tests are not using it.
@ -24,7 +24,7 @@ The [copy()](../api/device.md#anta.device.AntaDevice.copy) coroutine is used to
The [AsyncEOSDevice](../api/device.md#anta.device.AsyncEOSDevice) class is an implementation of [AntaDevice](../api/device.md#anta.device.AntaDevice) for Arista EOS.
It uses the [aio-eapi](https://github.com/jeremyschulman/aio-eapi) eAPI client and the [AsyncSSH](https://github.com/ronf/asyncssh) library.
- The [_collect()](../api/device.md#anta.device.AsyncEOSDevice._collect) coroutine collects [AntaCommand](../api/models.md#anta.models.AntaCommand) outputs using eAPI.
- The [\_collect()](../api/device.md#anta.device.AsyncEOSDevice._collect) coroutine collects [AntaCommand](../api/models.md#anta.models.AntaCommand) outputs using eAPI.
- The [refresh()](../api/device.md#anta.device.AsyncEOSDevice.refresh) coroutine tries to open a TCP connection on the eAPI port and update the `is_online` attribute accordingly. If the TCP connection succeeds, it sends a `show version` command to gather the hardware model of the device and updates the `established` and `hw_model` attributes.
- The [copy()](../api/device.md#anta.device.AsyncEOSDevice.copy) coroutine copies files to and from the device using the SCP protocol.

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -8,30 +8,17 @@ ANTA is a streamlined Python framework designed for efficient interaction with n
## Configuration
By default, ANTA utilizes [aiocache](https://github.com/aio-libs/aiocache)'s memory cache backend, also called [`SimpleMemoryCache`](https://aiocache.aio-libs.org/en/v0.12.2/caches.html#simplememorycache). This library aims for simplicity and supports asynchronous operations to go along with Python `asyncio` used in ANTA.
The `_init_cache()` method of the [AntaDevice](../api/device.md#anta.device.AntaDevice) abstract class initializes the cache. Child classes can override this method to tweak the cache configuration:
```python
def _init_cache(self) -> None:
"""
Initialize cache for the device, can be overridden by subclasses to manipulate how it works
"""
self.cache = Cache(cache_class=Cache.MEMORY, ttl=60, namespace=self.name, plugins=[HitMissRatioPlugin()])
self.cache_locks = defaultdict(asyncio.Lock)
```
The cache is also configured with `aiocache`'s [`HitMissRatioPlugin`](https://aiocache.aio-libs.org/en/v0.12.2/plugins.html#hitmissratioplugin) plugin to calculate the ratio of hits the cache has and give useful statistics for logging purposes in ANTA.
## Cache key design
The cache is initialized per `AntaDevice` and uses the following cache key design:
`<device_name>:<uid>`
The `uid` is an attribute of [AntaCommand](../api/models.md#anta.models.AntaCommand), which is a unique identifier generated from the command, version, revision and output format.
The `uid` is an attribute of [AntaCommand](../api/commands.md#anta.models.AntaCommand), which is a unique identifier generated from the command, version, revision and output format.
Each UID has its own asyncio lock. This design allows coroutines that need to access the cache for different UIDs to do so concurrently. The locks are managed by the `self.cache_locks` dictionary.
Each UID has its own asyncio lock. This design allows coroutines that need to access the cache for different UIDs to do so concurrently. The locks are managed by the `AntaCache.locks` dictionary.
## Mechanisms
@ -45,37 +32,37 @@ There might be scenarios where caching is not wanted. You can disable caching in
1. Caching can be disabled globally, for **ALL** commands on **ALL** devices, using the `--disable-cache` global flag when invoking anta at the [CLI](../cli/overview.md#invoking-anta-cli):
```bash
anta --disable-cache --username arista --password arista nrfu table
```
```bash
anta --disable-cache --username arista --password arista nrfu table
```
2. Caching can be disabled per device, network or range by setting the `disable_cache` key to `True` when defining the ANTA [Inventory](../usage-inventory-catalog.md#device-inventory) file:
```yaml
anta_inventory:
hosts:
- host: 172.20.20.101
name: DC1-SPINE1
tags: ["SPINE", "DC1"]
disable_cache: True # Set this key to True
- host: 172.20.20.102
name: DC1-SPINE2
tags: ["SPINE", "DC1"]
disable_cache: False # Optional since it's the default
```yaml
anta_inventory:
hosts:
- host: 172.20.20.101
name: DC1-SPINE1
tags: ["SPINE", "DC1"]
disable_cache: True # Set this key to True
- host: 172.20.20.102
name: DC1-SPINE2
tags: ["SPINE", "DC1"]
disable_cache: False # Optional since it's the default
networks:
- network: "172.21.21.0/24"
disable_cache: True
networks:
- network: "172.21.21.0/24"
disable_cache: True
ranges:
- start: 172.22.22.10
end: 172.22.22.19
disable_cache: True
```
ranges:
- start: 172.22.22.10
end: 172.22.22.19
disable_cache: True
```
This approach effectively disables caching for **ALL** commands sent to devices targeted by the `disable_cache` key.
This approach effectively disables caching for **ALL** commands sent to devices targeted by the `disable_cache` key.
3. For tests developers, caching can be disabled for a specific [`AntaCommand`](../api/models.md#anta.models.AntaCommand) or [`AntaTemplate`](../api/models.md#anta.models.AntaTemplate) by setting the `use_cache` attribute to `False`. That means the command output will always be collected on the device and therefore, never use caching.
3. For tests developers, caching can be disabled for a specific [`AntaCommand`](../api/commands.md#anta.models.AntaCommand) or [`AntaTemplate`](../api/commands.md#anta.models.AntaTemplate) by setting the `use_cache` attribute to `False`. That means the command output will always be collected on the device and therefore, never use caching.
### Disable caching in a child class of `AntaDevice`

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -13,7 +13,7 @@ ANTA is not only a Python library with a CLI and a collection of built-in tests,
A test is a Python class where a test function is defined and will be run by the framework.
ANTA provides an abstract class [AntaTest](../api/models.md#anta.models.AntaTest). This class does the heavy lifting and provide the logic to define, collect and test data. The code below is an example of a simple test in ANTA, which is an [AntaTest](../api/models.md#anta.models.AntaTest) subclass:
ANTA provides an abstract class [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest). This class does the heavy lifting and provide the logic to define, collect and test data. The code below is an example of a simple test in ANTA, which is an [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) subclass:
````python
from anta.models import AntaTest, AntaCommand
@ -51,18 +51,18 @@ class VerifyTemperature(AntaTest):
self.result.is_failure(f"Device temperature exceeds acceptable limits. Current system status: '{temperature_status}'")
````
[AntaTest](../api/models.md#anta.models.AntaTest) also provide more advanced capabilities like [AntaCommand](../api/models.md#anta.models.AntaCommand) templating using the [AntaTemplate](../api/models.md#anta.models.AntaTemplate) class or test inputs definition and validation using [AntaTest.Input](../api/models.md#anta.models.AntaTest.Input) [pydantic](https://docs.pydantic.dev/latest/) model. This will be discussed in the sections below.
[AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) also provide more advanced capabilities like [AntaCommand](../api/commands.md#anta.models.AntaCommand) templating using the [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) class or test inputs definition and validation using [AntaTest.Input](../api/tests/anta_test.md#anta.models.AntaTest.Input) [pydantic](https://docs.pydantic.dev/latest/) model. This will be discussed in the sections below.
## AntaTest structure
Full AntaTest API documentation is available in the [API documentation section](../api/models.md#anta.models.AntaTest)
Full AntaTest API documentation is available in the [API documentation section](../api/tests/anta_test.md#anta.models.AntaTest)
### Class Attributes
- `name` (`str`, `optional`): Name of the test. Used during reporting. By default set to the Class name.
- `description` (`str`, `optional`): A human readable description of your test. By default set to the first line of the docstring.
- `categories` (`list[str]`): A list of categories in which the test belongs.
- `commands` (`[list[AntaCommand | AntaTemplate]]`): A list of command to collect from devices. This list **must** be a list of [AntaCommand](../api/models.md#anta.models.AntaCommand) or [AntaTemplate](../api/models.md#anta.models.AntaTemplate) instances. Rendering [AntaTemplate](../api/models.md#anta.models.AntaTemplate) instances will be discussed later.
- `commands` (`[list[AntaCommand | AntaTemplate]]`): A list of command to collect from devices. This list **must** be a list of [AntaCommand](../api/commands.md#anta.models.AntaCommand) or [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) instances. Rendering [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) instances will be discussed later.
> [!INFO]
> All these class attributes are mandatory. If any attribute is missing, a `NotImplementedError` exception will be raised during class instantiation.
@ -86,7 +86,7 @@ Full AntaTest API documentation is available in the [API documentation section](
>
> - **Logger object**
>
> ANTA already provides comprehensive logging at every steps of a test execution. The [AntaTest](../api/models.md#anta.models.AntaTest) class also provides a `logger` attribute that is a Python logger specific to the test instance. See [Python documentation](https://docs.python.org/3/library/logging.html) for more information.
> ANTA already provides comprehensive logging at every steps of a test execution. The [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) class also provides a `logger` attribute that is a Python logger specific to the test instance. See [Python documentation](https://docs.python.org/3/library/logging.html) for more information.
>
> - **AntaDevice object**
>
@ -94,13 +94,13 @@ Full AntaTest API documentation is available in the [API documentation section](
### Test Inputs
[AntaTest.Input](../api/models.md#anta.models.AntaTest.Input) is a [pydantic model](https://docs.pydantic.dev/latest/usage/models/) that allow test developers to define their test inputs. [pydantic](https://docs.pydantic.dev/latest/) provides out of the box [error handling](https://docs.pydantic.dev/latest/usage/models/#error-handling) for test input validation based on the type hints defined by the test developer.
[AntaTest.Input](../api/tests/anta_test.md#anta.models.AntaTest.Input) is a [pydantic model](https://docs.pydantic.dev/latest/usage/models/) that allow test developers to define their test inputs. [pydantic](https://docs.pydantic.dev/latest/) provides out of the box [error handling](https://docs.pydantic.dev/latest/usage/models/#error-handling) for test input validation based on the type hints defined by the test developer.
The base definition of [AntaTest.Input](../api/models.md#anta.models.AntaTest.Input) provides common test inputs for all [AntaTest](../api/models.md#anta.models.AntaTest) instances:
The base definition of [AntaTest.Input](../api/tests/anta_test.md#anta.models.AntaTest.Input) provides common test inputs for all [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) instances:
#### Input model
Full `Input` model documentation is available in [API documentation section](../api/models.md#anta.models.AntaTest.Input)
Full `Input` model documentation is available in [API documentation section](../api/tests/anta_test.md#anta.models.AntaTest.Input)
::: anta.models.AntaTest.Input
options:
@ -118,7 +118,7 @@ Full `Input` model documentation is available in [API documentation section](../
#### ResultOverwrite model
Full `ResultOverwrite` model documentation is available in [API documentation section](../api/models.md#anta.models.AntaTest.Input.ResultOverwrite)
Full `ResultOverwrite` model documentation is available in [API documentation section](../api/tests/anta_test.md#anta.models.AntaTest.Input.ResultOverwrite)
::: anta.models.AntaTest.Input.ResultOverwrite
options:
@ -138,31 +138,31 @@ Full `ResultOverwrite` model documentation is available in [API documentation se
### Methods
- [test(self) -> None](../api/models.md#anta.models.AntaTest.test): This is an abstract method that **must** be implemented. It contains the test logic that can access the collected command outputs using the `instance_commands` instance attribute, access the test inputs using the `inputs` instance attribute and **must** set the `result` instance attribute accordingly. It must be implemented using the `AntaTest.anta_test` decorator that provides logging and will collect commands before executing the `test()` method.
- [render(self, template: AntaTemplate) -> list[AntaCommand]](../api/models.md#anta.models.AntaTest.render): This method only needs to be implemented if [AntaTemplate](../api/models.md#anta.models.AntaTemplate) instances are present in the `commands` class attribute. It will be called for every [AntaTemplate](../api/models.md#anta.models.AntaTemplate) occurrence and **must** return a list of [AntaCommand](../api/models.md#anta.models.AntaCommand) using the [AntaTemplate.render()](../api/models.md#anta.models.AntaTemplate.render) method. It can access test inputs using the `inputs` instance attribute.
- [test(self) -> None](../api/tests/anta_test.md#anta.models.AntaTest.test): This is an abstract method that **must** be implemented. It contains the test logic that can access the collected command outputs using the `instance_commands` instance attribute, access the test inputs using the `inputs` instance attribute and **must** set the `result` instance attribute accordingly. It must be implemented using the `AntaTest.anta_test` decorator that provides logging and will collect commands before executing the `test()` method.
- [render(self, template: AntaTemplate) -> list[AntaCommand]](../api/tests/anta_test.md#anta.models.AntaTest.render): This method only needs to be implemented if [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) instances are present in the `commands` class attribute. It will be called for every [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) occurrence and **must** return a list of [AntaCommand](../api/commands.md#anta.models.AntaCommand) using the [AntaTemplate.render()](../api/commands.md#anta.models.AntaTemplate.render) method. It can access test inputs using the `inputs` instance attribute.
## Test execution
Below is a high level description of the test execution flow in ANTA:
1. ANTA will parse the test catalog to get the list of [AntaTest](../api/models.md#anta.models.AntaTest) subclasses to instantiate and their associated input values. We consider a single [AntaTest](../api/models.md#anta.models.AntaTest) subclass in the following steps.
1. ANTA will parse the test catalog to get the list of [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) subclasses to instantiate and their associated input values. We consider a single [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) subclass in the following steps.
2. ANTA will instantiate the [AntaTest](../api/models.md#anta.models.AntaTest) subclass and a single device will be provided to the test instance. The `Input` model defined in the class will also be instantiated at this moment. If any [ValidationError](https://docs.pydantic.dev/latest/errors/errors/) is raised, the test execution will be stopped.
2. ANTA will instantiate the [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) subclass and a single device will be provided to the test instance. The `Input` model defined in the class will also be instantiated at this moment. If any [ValidationError](https://docs.pydantic.dev/latest/errors/errors/) is raised, the test execution will be stopped.
3. If there is any [AntaTemplate](../api/models.md#anta.models.AntaTemplate) instance in the `commands` class attribute, [render()](../api/models.md#anta.models.AntaTest.render) will be called for every occurrence. At this moment, the `instance_commands` attribute has been initialized. If any rendering error occurs, the test execution will be stopped.
3. If there is any [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) instance in the `commands` class attribute, [render()](../api/tests/anta_test.md#anta.models.AntaTest.render) will be called for every occurrence. At this moment, the `instance_commands` attribute has been initialized. If any rendering error occurs, the test execution will be stopped.
4. The `AntaTest.anta_test` decorator will collect the commands from the device and update the `instance_commands` attribute with the outputs. If any collection error occurs, the test execution will be stopped.
5. The [test()](../api/models.md#anta.models.AntaTest.test) method is executed.
5. The [test()](../api/tests/anta_test.md#anta.models.AntaTest.test) method is executed.
## Writing an AntaTest subclass
In this section, we will go into all the details of writing an [AntaTest](../api/models.md#anta.models.AntaTest) subclass.
In this section, we will go into all the details of writing an [AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) subclass.
### Class definition
Import [anta.models.AntaTest](../api/models.md#anta.models.AntaTest) and define your own class.
Define the mandatory class attributes using [anta.models.AntaCommand](../api/models.md#anta.models.AntaCommand), [anta.models.AntaTemplate](../api/models.md#anta.models.AntaTemplate) or both.
Import [anta.models.AntaTest](../api/tests/anta_test.md#anta.models.AntaTest) and define your own class.
Define the mandatory class attributes using [anta.models.AntaCommand](../api/commands.md#anta.models.AntaCommand), [anta.models.AntaTemplate](../api/commands.md#anta.models.AntaTemplate) or both.
> [!NOTE]
> Caching can be disabled per `AntaCommand` or `AntaTemplate` by setting the `use_cache` argument to `False`. For more details about how caching is implemented in ANTA, please refer to [Caching in ANTA](../advanced_usages/caching.md).
@ -244,7 +244,7 @@ class <YourTestName>(AntaTest):
```
To define an input field type, refer to the [pydantic documentation](https://docs.pydantic.dev/latest/usage/types/types/) about types.
You can also leverage [anta.custom_types](../api/types.md) that provides reusable types defined in ANTA tests.
You can also leverage [anta.custom_types](../api/tests/types.md) that provides reusable types defined in ANTA tests.
Regarding required, optional and nullable fields, refer to this [documentation](https://docs.pydantic.dev/latest/migration/#required-optional-and-nullable-fields) on how to define them.
@ -253,7 +253,7 @@ Regarding required, optional and nullable fields, refer to this [documentation](
### Template rendering
Define the `render()` method if you have [AntaTemplate](../api/models.md#anta.models.AntaTemplate) instances in your `commands` class attribute:
Define the `render()` method if you have [AntaTemplate](../api/commands.md#anta.models.AntaTemplate) instances in your `commands` class attribute:
```python
class <YourTestName>(AntaTest):
@ -262,7 +262,7 @@ class <YourTestName>(AntaTest):
return [template.render(<template param>=input_value) for input_value in self.inputs.<input_field>]
```
You can access test inputs and render as many [AntaCommand](../api/models.md#anta.models.AntaCommand) as desired.
You can access test inputs and render as many [AntaCommand](../api/commands.md#anta.models.AntaCommand) as desired.
### Test definition
@ -282,7 +282,7 @@ The logic usually includes the following different stages:
2. If needed, access the test inputs using the `self.inputs` instance attribute and write your conditional logic.
3. Set the `result` instance attribute to reflect the test result by either calling `self.result.is_success()` or `self.result.is_failure("<FAILURE REASON>")`. Sometimes, setting the test result to `skipped` using `self.result.is_skipped("<SKIPPED REASON>")` can make sense (e.g. testing the OSPF neighbor states but no neighbor was found). However, you should not need to catch any exception and set the test result to `error` since the error handling is done by the framework, see below.
The example below is based on the [VerifyTemperature](../api/tests.hardware.md#anta.tests.hardware.VerifyTemperature) test.
The example below is based on the [VerifyTemperature](../api/tests/hardware.md#anta.tests.hardware.VerifyTemperature) test.
```python
class VerifyTemperature(AntaTest):

View file

@ -1,14 +1,14 @@
---
anta_title: ANTA Catalog API
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
### ::: anta.catalog.AntaCatalog
::: anta.catalog.AntaCatalog
options:
filters: ["!^_[^_]", "!__str__"]
::: anta.catalog.AntaTestDefinition
### ::: anta.catalog.AntaTestDefinition
### ::: anta.catalog.AntaCatalogFile
::: anta.catalog.AntaCatalogFile

15
docs/api/class-diagram.md Normal file
View file

@ -0,0 +1,15 @@
---
anta_title: ANTA Class Diagram
---
<!--
~ Copyright (c) 2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
!!! info
The classes colored in pink :fontawesome-solid-square-full:{ .pydantic_pink } are [:simple-pydantic:{ .pydantic_pink } pydantic models](https://docs.pydantic.dev/latest/concepts/models/).
``` mermaid
--8<-- "api/class-diagram.mmd"
```

189
docs/api/class-diagram.mmd Normal file
View file

@ -0,0 +1,189 @@
classDiagram
class AntaDevice {
<<Abstract>>
name : str
tags : Optional[set[str]]
hw_model : str | None
established : bool
is_online : bool
cache_statistics : dict[str, Any]
collect(command: AntaCommand) None
collect_commands(commands: list[AntaCommand]) None
copy(sources: list[Path], destination: Path, direction: Literal['to', 'from']) None
refresh()* None
_collect(command: AntaCommand)* None
}
class AntaTest {
<<Abstract>>
name : str$
description : str$
categories : list[str]$
commands : list[AntaTemplate | AntaCommand]$
device : AntaDevice
inputs : Input
result : TestResult
instance_commands : list[AntaCommand]
failed_commands : list[AntaCommand]
collected : bool
blocked : bool
module : str
logger : Logger
anta_test(function: F) Callable[..., Coroutine[Any, Any, TestResult]]$
save_commands_data(eos_data: list[dict[str, Any] | str]) None
render(template: AntaTemplate) list[AntaCommand]
test() None*
}
class AntaCommand:::pydantic {
command : str
version : Literal[1, 'latest']
revision : Revision | None
ofmt : Literal['json', 'text']
output : dict[str, Any] | str | None
json_output : dict[str, Any]
text_output : str
uid : str
template : AntaTemplate | None
params : AntaParamsBaseModel
errors : list[str]
error : bool
use_cache : bool
collected : bool
requires_privileges : bool
returned_known_eos_error : bool
supported : bool
}
class AntaTemplate {
template : str
version : Literal[1, 'latest']
revision : Revision | None
ofmt : Literal['json', 'text']
use_cache : bool
render() AntaCommand
}
class AntaTestStatus {
<<Enumeration>>
UNSET
SUCCESS
FAILURE
ERROR
SKIPPED
}
class Input:::pydantic {
filters : Filters | None
result_overwrite : ResultOverwrite | None
}
class ResultManager {
results : list[TestResult]
status: AntaTestStatus
error_status : bool
results_by_status: dict[AntaTestStatus, list[TestResult]]
sorted_category_stats: dict[str, CategoryStats]
dump: list[dict[str, Any]]
json : str
test_stats: dict[str, TestStats]
device_stats: dict[str, DeviceStats]
category_stats: dict[str, CategoryStats]
add(result: TestResult) None
filter(hide: set[AntaTestStatus]) ResultManager
filter_by_devices(devices: set[str]) ResultManager
filter_by_tests(tests: set[str]) ResultManager
get_results(status: set[AntaTestStatus] | None, sort_by: list[str] | None) list[TestResult]
get_total_results(status: set[AntaTestStatus] | None) int
get_status() str
get_tests() set[str]
get_devices() set[str]
reset() None
}
class AsyncEOSDevice {
enable : bool
copy(sources: list[Path], destination: Path, direction: Literal['to', 'from']) None
refresh() None
_collect(command: AntaCommand) None
}
class TestResult:::pydantic {
name : str
test : str
categories : list[str]
description : str
messages : list[str]
result : AntaTestStatus
custom_field : str | None
is_error(message: str | None) None
is_failure(message: str | None) None
is_skipped(message: str | None) None
is_success(message: str | None) None
}
class AntaCatalog {
tests : list[AntaTestDefinition]
filename: Path | None
indexes_built : bool
tag_to_tests : defaultdict[str | None, set[AntaTestDefinition]]
parse(filename: str | Path, file_format: Literal['yaml', 'json']) AntaCatalog$
from_dict(data: RawCatalogInput, filename: str | Path | None) AntaCatalog$
from_list(data: ListAntaTestTuples) AntaCatalog$
build_indexes(filtered_tests: set[str] | None) None
clear_indexes() None
get_tests_by_tags(tags: set[str]) set[AntaTestDefinition]
merge_catalogs(catalogs: list[AntaCatalog]) AntaCatalog
dump() AntaCatalogFile
}
class AntaCatalogFile:::pydantic {
root : dict[ImportString[Any], list[AntaTestDefinition]]
yaml() str
}
class AntaTestDefinition:::pydantic {
inputs : Input
test : type[AntaTest]
check_inputs() Self
instantiate_inputs(data: AntaTest.Input | dict[str, Any] | None, info: ValidationInfo) AntaTest.Input
serialize_model() dict[str, AntaTest.Input]
}
class AntaInventory {
devices : list[AntaDevice]
parse(filename: str | Path, username: str, password: str, enable_password: str | None, timeout: float | None) AntaInventory$
add_device(device: AntaDevice) None
connect_inventory() None
get_inventory() AntaInventory
}
class AntaInventoryHost:::pydantic {
disable_cache : bool
host : Hostname | IPvAnyAddress
name : str | None
port : Port | None
tags : set[str] | None
}
class AntaInventoryInput:::pydantic {
hosts : list[AntaInventoryHost] | None
networks : list[AntaInventoryNetwork] | None
ranges : list[AntaInventoryRange] | None
yaml() str
}
class AntaInventoryNetwork:::pydantic {
disable_cache : bool
network : IPvAnyNetwork, str
tags : set[str] | None
}
class AntaInventoryRange:::pydantic {
disable_cache : bool
end : IPvAnyAddress, str
start : IPvAnyAddress, str
tags : set[str] | None
}
AsyncEOSDevice --|> AntaDevice
Input --* AntaTestDefinition : inputs
Input --* AntaTest : inputs
AntaTestStatus --* ResultManager : status
AntaTestStatus --* TestResult : result
TestResult --* AntaTest : result
AntaDevice --o AntaTest : device
AntaTestDefinition --o AntaCatalog : tests
AntaCommand --o AntaTest : commands
AntaTemplate ..> AntaCommand : render()
AntaTemplate --o AntaTest : commands
AntaDevice --o AntaInventory : devices
AntaCatalog ..> AntaCatalogFile
AntaInventory ..> AntaInventoryInput
AntaInventoryInput ..> AntaInventoryHost
AntaInventoryInput ..> AntaInventoryNetwork
AntaInventoryInput ..> AntaInventoryRange
classDef pydantic fill:#D63965

29
docs/api/commands.md Normal file
View file

@ -0,0 +1,29 @@
---
anta_title: ANTA Commands API
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
## ::: anta.models.AntaCommand
## ::: anta.models.AntaTemplate
## EOS Commands Error Handling
::: anta.constants.UNSUPPORTED_PLATFORM_ERRORS
options:
heading_level: 7
show_labels: false
::: anta.constants.EOS_BLACKLIST_CMDS
options:
heading_level: 7
show_labels: false
::: anta.constants.KNOWN_EOS_ERRORS
options:
heading_level: 7
show_labels: false

View file

@ -1,25 +1,18 @@
---
anta_title: ANTA Device API
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# AntaDevice base class
![AntaDevice UML model](../imgs/uml/anta.device.AntaDevice.jpeg)
## ::: anta.device.AntaDevice
::: anta.device.AntaDevice
options:
filters: ["!^_[^_]", "!__(eq|rich_repr)__", "_collect"]
# Async EOS device class
![AsyncEOSDevice UML model](../imgs/uml/anta.device.AsyncEOSDevice.jpeg)
filters: ["!^_", "_collect"]
<!-- _collect must be last to be kept -->
## ::: anta.device.AsyncEOSDevice
::: anta.device.AsyncEOSDevice
options:
filters: ["!^_[^_]", "!__(eq|rich_repr)__", "_collect"]
filters: ["!^_", "_collect"]

View file

@ -1,12 +1,20 @@
---
anta_title: ANTA Inventory API
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
### ::: anta.inventory.AntaInventory
::: anta.inventory.AntaInventory
options:
filters: ["!^_[^_]", "!__str__"]
::: anta.inventory.models.AntaInventoryInput
### ::: anta.inventory.exceptions
::: anta.inventory.models.AntaInventoryHost
::: anta.inventory.models.AntaInventoryNetwork
::: anta.inventory.models.AntaInventoryRange
::: anta.inventory.exceptions

View file

@ -1,13 +0,0 @@
<!--
~ 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.
-->
### ::: anta.inventory.models.AntaInventoryInput
### ::: anta.inventory.models.AntaInventoryHost
### ::: anta.inventory.models.AntaInventoryNetwork
### ::: anta.inventory.models.AntaInventoryRange

View file

@ -1,33 +0,0 @@
<!--
~ 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.
-->
# Test definition
![AntaTest UML model](../imgs/uml/anta.models.AntaTest.jpeg)
## ::: anta.models.AntaTest
options:
filters: ["!^_[^_]", "!__init_subclass__", "!update_progress"]
# Command definition
![AntaCommand UML model](../imgs/uml/anta.models.AntaCommand.jpeg)
## ::: anta.models.AntaCommand
!!! warning
CLI commands are protected to avoid execution of critical commands such as `reload` or `write erase`.
- Reload command: `^reload\s*\w*`
- Configure mode: `^conf\w*\s*(terminal|session)*`
- Write: `^wr\w*\s*\w+`
# Template definition
![AntaTemplate UML model](../imgs/uml/anta.models.AntaTemplate.jpeg)
## ::: anta.models.AntaTemplate

View file

@ -2,7 +2,7 @@
anta_title: CSV Reporter
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -0,0 +1,10 @@
---
anta_title: Jinja Reporter
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.reporter.ReportJinja

View file

@ -2,7 +2,7 @@
anta_title: Markdown Reporter
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -0,0 +1,10 @@
---
anta_title: Table Reporter
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.reporter.ReportTable

View file

@ -1,10 +0,0 @@
<!--
~ 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.
-->
::: anta.reporter
options:
show_root_heading: false
show_root_toc_entry: false

13
docs/api/result.md Normal file
View file

@ -0,0 +1,13 @@
---
anta_title: ANTA Result API
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.result_manager.ResultManager
options:
extensions: [griffe_warnings_deprecated]
::: anta.result_manager.models.TestResult

View file

@ -1,14 +0,0 @@
<!--
~ 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.
-->
# Result Manager definition
![ResultManager UML model](../imgs/uml/anta.result_manager.ResultManager.jpeg)
## ::: anta.result_manager.ResultManager
options:
filters: ["!^_[^_]", "!^__len__"]

View file

@ -1,14 +0,0 @@
<!--
~ 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.
-->
# Test Result model
![TestResult UML model](../imgs/uml/anta.result_manager.models.TestResult.jpeg)
## ::: anta.result_manager.models.TestResult
options:
filters: ["!^_[^_]", "!__str__"]

View file

@ -1,10 +1,15 @@
---
anta_title: ANTA Runner API
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
Refer to the [Getting started - Basic usage in a Python script](../getting-started.md/#basic-usage-in-a-python-script) section for a usage example.
### ::: anta.runner
options:
filters: ["!^_[^_]", "!__str__"]
show_root_full_path: true

View file

@ -1,20 +0,0 @@
---
anta_title: ANTA catalog for flow tracking tests
---
<!--
~ 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.
-->
::: anta.tests.flow_tracking
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"

View file

@ -1,20 +0,0 @@
---
anta_title: ANTA catalog for logging tests
---
<!--
~ 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.
-->
::: anta.tests.logging
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"

View file

@ -1,8 +1,8 @@
---
anta_title: ANTA Tests Landing Page
anta_title: ANTA Tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -13,37 +13,37 @@ This section describes all the available tests provided by the ANTA package.
Here are the tests that we currently provide:
- [AAA](tests.aaa.md)
- [Adaptive Virtual Topology](tests.avt.md)
- [BFD](tests.bfd.md)
- [Configuration](tests.configuration.md)
- [Connectivity](tests.connectivity.md)
- [CVX](tests.cvx.md)
- [Field Notices](tests.field_notices.md)
- [Flow Tracking](tests.flow_tracking.md)
- [GreenT](tests.greent.md)
- [Hardware](tests.hardware.md)
- [Interfaces](tests.interfaces.md)
- [LANZ](tests.lanz.md)
- [Logging](tests.logging.md)
- [MLAG](tests.mlag.md)
- [Multicast](tests.multicast.md)
- [Profiles](tests.profiles.md)
- [PTP](tests.ptp.md)
- [Router Path Selection](tests.path_selection.md)
- [Routing Generic](tests.routing.generic.md)
- [Routing BGP](tests.routing.bgp.md)
- [Routing ISIS](tests.routing.isis.md)
- [Routing OSPF](tests.routing.ospf.md)
- [Security](tests.security.md)
- [Services](tests.services.md)
- [SNMP](tests.snmp.md)
- [Software](tests.software.md)
- [STP](tests.stp.md)
- [STUN](tests.stun.md)
- [System](tests.system.md)
- [VLAN](tests.vlan.md)
- [VXLAN](tests.vxlan.md)
- [AAA](tests/aaa.md)
- [Adaptive Virtual Topology](tests/avt.md)
- [BFD](tests/bfd.md)
- [Configuration](tests/configuration.md)
- [Connectivity](tests/connectivity.md)
- [CVX](tests/cvx.md)
- [Field Notices](tests/field_notices.md)
- [Flow Tracking](tests/flow_tracking.md)
- [GreenT](tests/greent.md)
- [Hardware](tests/hardware.md)
- [Interfaces](tests/interfaces.md)
- [LANZ](tests/lanz.md)
- [Logging](tests/logging.md)
- [MLAG](tests/mlag.md)
- [Multicast](tests/multicast.md)
- [Profiles](tests/profiles.md)
- [PTP](tests/ptp.md)
- [Router Path Selection](tests/path_selection.md)
- [Routing Generic](tests/routing.generic.md)
- [Routing BGP](tests/routing.bgp.md)
- [Routing ISIS](tests/routing.isis.md)
- [Routing OSPF](tests/routing.ospf.md)
- [Security](tests/security.md)
- [Services](tests/services.md)
- [SNMP](tests/snmp.md)
- [Software](tests/software.md)
- [STP](tests/stp.md)
- [STUN](tests/stun.md)
- [System](tests/system.md)
- [VLAN](tests/vlan.md)
- [VXLAN](tests/vxlan.md)
!!! tip

View file

@ -1,20 +0,0 @@
---
anta_title: ANTA catalog for Router path-selection tests
---
<!--
~ 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.
-->
::: anta.tests.path_selection
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"

View file

@ -1,22 +0,0 @@
---
anta_title: ANTA catalog for IS-IS tests
---
<!--
~ 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.
-->
::: anta.tests.routing.isis
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
- "!^_[^_]"

View file

@ -1,20 +0,0 @@
---
anta_title: ANTA catalog for SNMP tests
---
<!--
~ 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.
-->
::: anta.tests.snmp
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for AAA tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.aaa
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -0,0 +1,10 @@
---
anta_title: ANTA Test API
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.models.AntaTest

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for Adaptive Virtual Topology (AVT) tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,27 +13,31 @@ anta_title: ANTA catalog for Adaptive Virtual Topology (AVT) tests
::: anta.tests.avt
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.avt
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
anta_hide_test_module_description: true
merge_init_into_class: false
show_labels: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for BFD tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,30 @@ anta_title: ANTA catalog for BFD tests
::: anta.tests.bfd
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
show_labels: true
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.bfd
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for device configuration tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.configuration
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for connectivity tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,30 @@ anta_title: ANTA catalog for connectivity tests
::: anta.tests.connectivity
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.connectivity
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for CVX tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.cvx
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for Field Notices tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.field_notices
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -0,0 +1,44 @@
---
anta_title: ANTA catalog for flow tracking tests
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# Tests
::: anta.tests.flow_tracking
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
- "!validate_exporters"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.flow_tracking
options:
anta_hide_test_module_description: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for GreenT tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.greent
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for hardware tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.hardware
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for interfaces tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,30 @@ anta_title: ANTA catalog for interfaces tests
::: anta.tests.interfaces
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.interfaces
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for LANZ tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.lanz
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

43
docs/api/tests/logging.md Normal file
View file

@ -0,0 +1,43 @@
---
anta_title: ANTA catalog for logging tests
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# Tests
::: anta.tests.logging
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.logging
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for MLAG tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.mlag
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for multicast and IGMP tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.multicast
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -0,0 +1,42 @@
---
anta_title: ANTA catalog for Router path-selection tests
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# Tests
::: anta.tests.path_selection
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.path_selection
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for profiles tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.profiles
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for PTP tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.ptp
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,45 +1,55 @@
---
anta_title: ANTA catalog for BGP tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
!!! info "`multi-agent` Service Routing Protocols Model Requirements"
The BGP tests in this section are only supported on switches running the `multi-agent` routing protocols model. Starting from EOS version 4.30.1F, `service routing protocols model` is set to `multi-agent` by default. These BGP commands may **not** be compatible with switches running the legacy `ribd` routing protocols model and may fail if attempted.
!!! info "BGP Test Compatibility Note"
ANTA BGP tests are designed for the `multi-agent` routing protocol model. Starting from EOS 4.30.1F, `service routing protocols models` is set to `multi-agent` by default, and from EOS 4.32.0F it becomes the only supported model.
The following tests are available for devices using the legacy `ribd` model on earlier EOS versions:
- `VerifyBGPPeerSessionRibd`
- `VerifyBGPPeersHealthRibd`
# Tests
::: anta.tests.routing.bgp
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
- "!^_[^_]"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.routing.bgp
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
anta_hide_test_module_description: true
merge_init_into_class: false
show_labels: true
filters:
- "!^__init__"
- "!^__str__"
- "!AFI_SAFI_EOS_KEY"
- "!eos_key"
- "!BgpAfi"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for generic routing tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,30 @@ anta_title: ANTA catalog for generic routing tests
::: anta.tests.routing.generic
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.routing.generic
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -0,0 +1,44 @@
---
anta_title: ANTA catalog for IS-IS tests
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# Tests
::: anta.tests.routing.isis
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
- "!^_[^_]"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.routing.isis
options:
anta_hide_test_module_description: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for OSPF tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -10,13 +11,15 @@ anta_title: ANTA catalog for OSPF tests
::: anta.tests.routing.ospf
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
- "!^_[^_]"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for security tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,27 +13,31 @@ anta_title: ANTA catalog for security tests
::: anta.tests.security
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.security
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for services tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,31 @@ anta_title: ANTA catalog for services tests
::: anta.tests.services
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.services
options:
anta_hide_test_module_description: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

42
docs/api/tests/snmp.md Normal file
View file

@ -0,0 +1,42 @@
---
anta_title: ANTA catalog for SNMP tests
---
<!--
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
# Tests
::: anta.tests.snmp
options:
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.snmp
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for Software tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.software
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for STP tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.stp
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for STUN tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -10,28 +11,33 @@ anta_title: ANTA catalog for STUN tests
# Tests
::: anta.tests.stun
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.stun
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters:
- "!^__init__"
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,8 +1,9 @@
---
anta_title: ANTA catalog for System tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -12,25 +13,30 @@ anta_title: ANTA catalog for System tests
::: anta.tests.system
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
show_labels: true
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false
# Input models
::: anta.input_models.system
options:
anta_hide_test_module_description: true
filters:
- "!^__str__"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
anta_hide_test_module_description: true
show_labels: true
filters: ["!^__str__"]
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,5 +1,8 @@
---
anta_title: ANTA Input Types
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for VLAN tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.vlan
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
show_labels: true
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -1,20 +1,24 @@
---
anta_title: ANTA catalog for VXLAN tests
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
::: anta.tests.vxlan
options:
show_root_heading: false
show_root_toc_entry: false
show_bases: false
merge_init_into_class: false
show_labels: true
anta_hide_test_module_description: true
filters:
- "!test"
- "!render"
merge_init_into_class: false
show_bases: false
show_labels: true
show_root_heading: false
show_root_toc_entry: false
show_symbol_type_heading: false
show_symbol_type_toc: false

View file

@ -2,7 +2,7 @@
anta_title: ANTA check commands
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: ANTA debug commands
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: Executing Commands on Devices
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: Retrieving Inventory Information
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -11,7 +11,7 @@ The ANTA CLI offers multiple commands to access data from your local inventory.
## List devices in inventory
This command will list all devices available in the inventory. Using the `--tags` option, you can filter this list to only include devices with specific tags (visit [this page](tag-management.md) to learn more about tags). The `--connected` option allows to display only the devices where a connection has been established.
This command will list all devices available in the inventory. Using the `--tags` option, you can filter this list to only include devices with specific tags (visit [this page](tag-management.md) to learn more about tags). The `--connected` option allows to display only the devices where a connection has been established.
### Command overview

View file

@ -2,7 +2,7 @@
anta_title: Retrieving Tests information
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: Create an Inventory from Ansible inventory
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: Create an Inventory from CloudVision
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -2,7 +2,7 @@
anta_title: Execute Network Readiness For Use (NRFU) Testing
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -48,12 +48,7 @@ The `text` subcommand provides a straightforward text report for each test execu
### Command overview
```bash
Usage: anta nrfu text [OPTIONS]
ANTA command to check network states with text result.
Options:
--help Show this message and exit.
--8<-- "anta_nrfu_text_help.txt"
```
### Example
@ -71,13 +66,7 @@ The `table` command under the `anta nrfu` namespace offers a clear and organized
### Command overview
```bash
Usage: anta nrfu table [OPTIONS]
ANTA command to check network states with table result.
Options:
--group-by [device|test] Group result by test or device.
--help Show this message and exit.
--8<-- "anta_nrfu_table_help.txt"
```
The `--group-by` option show a summarized view of the test results per host or per test.
@ -125,15 +114,7 @@ The JSON rendering command in NRFU testing will generate an output of all test r
### Command overview
```bash
anta nrfu json --help
Usage: anta nrfu json [OPTIONS]
ANTA command to check network state with JSON result.
Options:
-o, --output FILE Path to save report as a JSON file [env var:
ANTA_NRFU_JSON_OUTPUT]
--help Show this message and exit.
--8<-- "anta_nrfu_json_help.txt"
```
The `--output` option allows you to save the JSON report as a file. If specified, no output will be displayed in the terminal. This is useful for further processing or integration with other tools.
@ -153,15 +134,7 @@ The `csv` command in NRFU testing is useful for generating a CSV file with all t
### Command overview
```bash
anta nrfu csv --help
Usage: anta nrfu csv [OPTIONS]
ANTA command to check network states with CSV result.
Options:
--csv-output FILE Path to save report as a CSV file [env var:
ANTA_NRFU_CSV_CSV_OUTPUT]
--help Show this message and exit.
--8<-- "anta_nrfu_csv_help.txt"
```
### Example
@ -175,16 +148,7 @@ The `md-report` command in NRFU testing generates a comprehensive Markdown repor
### Command overview
```bash
anta nrfu md-report --help
Usage: anta nrfu md-report [OPTIONS]
ANTA command to check network state with Markdown report.
Options:
--md-output FILE Path to save the report as a Markdown file [env var:
ANTA_NRFU_MD_REPORT_MD_OUTPUT; required]
--help Show this message and exit.
--8<-- "anta_nrfu_mdreport_help.txt"
```
### Example
@ -198,17 +162,7 @@ ANTA offers a CLI option for creating custom reports. This leverages the Jinja2
### Command overview
```bash
anta nrfu tpl-report --help
Usage: anta nrfu tpl-report [OPTIONS]
ANTA command to check network state with templated report
Options:
-tpl, --template FILE Path to the template to use for the report [env var:
ANTA_NRFU_TPL_REPORT_TEMPLATE; required]
-o, --output FILE Path to save report as a file [env var:
ANTA_NRFU_TPL_REPORT_OUTPUT]
--help Show this message and exit.
--8<-- "anta_nrfu_tplreport_help.txt"
```
The `--template` option is used to specify the Jinja2 template file for generating the custom report.
@ -231,7 +185,7 @@ The template `./custom_template.j2` is a simple Jinja2 template:
{% endfor %}
```
The Jinja2 template has access to all `TestResult` elements and their values, as described in this [documentation](../api/result_manager_models.md#anta.result_manager.models.TestResult).
The Jinja2 template has access to all `TestResult` elements and their values, as described in this [documentation](../api/result.md#anta.result_manager.models.TestResult).
You can also save the report result to a file using the `--output` option:

View file

@ -2,7 +2,7 @@
anta_title: Overview of ANTA's Command-Line Interface (CLI)
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -52,17 +52,24 @@ anta nrfu
Below are the environment variables usable with the `anta nrfu` command:
| Variable Name | Purpose | Required |
| ------------- | ------- |----------|
| ANTA_USERNAME | The username to use in the inventory to connect to devices. | Yes |
| ANTA_PASSWORD | The password to use in the inventory to connect to devices. | Yes |
| ANTA_INVENTORY | The path to the inventory file. | Yes |
| ANTA_CATALOG | The path to the catalog file. | Yes |
| ANTA_PROMPT | The value to pass to the prompt for password is password is not provided | No |
| ANTA_INSECURE | Whether or not using insecure mode when connecting to the EOS devices HTTP API. | No |
| ANTA_DISABLE_CACHE | A variable to disable caching for all ANTA tests (enabled by default). | No |
| ANTA_ENABLE | Whether it is necessary to go to enable mode on devices. | No |
| ANTA_ENABLE_PASSWORD | The optional enable password, when this variable is set, ANTA_ENABLE or `--enable` is required. | No |
| Variable Name | Purpose | Required | Default |
| ------------- | ------- |----------| ------- |
| ANTA_USERNAME | The username to use in the inventory to connect to devices. | Yes | - |
| ANTA_PASSWORD | The password to use in the inventory to connect to devices. | Yes | - |
| ANTA_INVENTORY | The path to the inventory file. | Yes | - |
| ANTA_CATALOG | The path to the catalog file. | Yes | - |
| ANTA_ENABLE_PASSWORD | The optional enable password, when this variable is set, ANTA_ENABLE or `--enable` is required. | No | - |
| ANTA_ENABLE | Whether it is necessary to go to enable mode on devices. | No | False |
| ANTA_PROMPT | Prompt for passwords if they are not provided. | No | False |
| ANTA_TIMEOUT | The global timeout value for API calls. | No | 30.0 |
| ANTA_INSECURE | Whether or not using insecure mode when connecting to the EOS devices HTTP API. | No | False |
| ANTA_DISABLE_CACHE | A variable to disable caching for all ANTA tests (enabled by default). | No | False |
| ANTA_INVENTORY_FORMAT | Format of the inventory file. `json` or `yaml`. | No | `yaml` |
| ANTA_CATALOG_FORMAT | Format of the catalog file. `json` or `yaml`. | No | `yaml` |
| ANTA_TAGS | A list of tags to filter which tests to run on which devices. | No | - |
| ANTA_NRFU_IGNORE_STATUS | Exit code will always be 0. | No | False |
| ANTA_NRFU_IGNORE_ERROR | Exit code will be 0 if all tests succeeded or 1 if any test failed. | No | False |
| ANTA_NRFU_DRY_RUN | Run `anta nrfu` command but stop before running the tests. | No | False |
> [!NOTE]
> Caching can be disabled with the global parameter `--disable-cache`. For more details about how caching is implemented in ANTA, please refer to [Caching in ANTA](../advanced_usages/caching.md).

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -64,15 +64,14 @@ Tags can be defined in the test catalog to restrict tests to tagged devices:
anta.tests.system:
- VerifyUptime:
minimum: 10
filters:
tags: ['spine']
filters: tags: [spine]
- VerifyUptime:
minimum: 9
filters:
tags: ['leaf']
tags: [leaf]
- VerifyReloadCause:
filters:
tags: ['spine', 'leaf']
tags: [spine, leaf]
- VerifyCoredump:
- VerifyAgentLogs:
- VerifyCPUUtilization:
@ -83,13 +82,13 @@ anta.tests.system:
anta.tests.mlag:
- VerifyMlagStatus:
filters:
tags: ['leaf']
tags: [leaf]
anta.tests.interfaces:
- VerifyL3MTU:
mtu: 1500
filters:
tags: ['spine']
tags: [spine]
```
> [!TIP]
@ -204,35 +203,7 @@ As most ANTA commands accommodate tag filtering, this command is useful for enum
### Command overview
```bash
Usage: anta get tags [OPTIONS]
Get list of configured tags in user inventory.
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 FLOAT Global API timeout. This value will be used for all
devices. [env var: ANTA_TIMEOUT; default: 30.0]
--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]
--tags TEXT List of tags using comma as separator:
tag1,tag2,tag3. [env var: ANTA_TAGS]
--help Show this message and exit.
--8<-- anta_get_tags_help.txt
```
### Example

View file

@ -2,7 +2,7 @@
anta_title: How to contribute to ANTA
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -29,7 +29,7 @@ $ pip install -e .[dev,cli]
$ pip list -e
Package Version Editable project location
------- ------- -------------------------
anta 1.2.0 /mnt/lab/projects/anta
anta 1.3.0 /mnt/lab/projects/anta
```
Then, [`tox`](https://tox.wiki/) is configured with few environments to run CI locally:

View file

@ -3,7 +3,7 @@ toc_depth: 3
anta_title: Frequently Asked Questions (FAQ)
---
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -86,12 +86,14 @@ This entrypoint has multiple options to manage test coverage and reporting.
--8<-- "anta_help.txt"
```
To run the NRFU, you need to select an output format amongst [`csv`, `json`, `md-report`, `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
```bash
--8<-- "anta_nrfu_help.txt"
```
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
!!! Note
The following examples shows how to pass all the CLI options.

View file

@ -0,0 +1,100 @@
<svg class="rich-terminal" viewBox="0 0 1482 318.4" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-2846493834-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-2846493834-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-2846493834-r1 { fill: #c5c8c6 }
.terminal-2846493834-r2 { fill: #c5c8c6;font-weight: bold }
.terminal-2846493834-r3 { fill: #d0b344 }
</style>
<defs>
<clipPath id="terminal-2846493834-clip-terminal">
<rect x="0" y="0" width="1463.0" height="267.4" />
</clipPath>
<clipPath id="terminal-2846493834-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2846493834-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="316.4" rx="8"/><text class="terminal-2846493834-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;debug&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-2846493834-clip-terminal)">
<g class="terminal-2846493834-matrix">
<text class="terminal-2846493834-r1" x="0" y="20" textLength="219.6" clip-path="url(#terminal-2846493834-line-0)">Usage:&#160;anta&#160;debug&#160;</text><text class="terminal-2846493834-r2" x="219.6" y="20" textLength="12.2" clip-path="url(#terminal-2846493834-line-0)">[</text><text class="terminal-2846493834-r1" x="231.8" y="20" textLength="85.4" clip-path="url(#terminal-2846493834-line-0)">OPTIONS</text><text class="terminal-2846493834-r2" x="317.2" y="20" textLength="12.2" clip-path="url(#terminal-2846493834-line-0)">]</text><text class="terminal-2846493834-r1" x="329.4" y="20" textLength="109.8" clip-path="url(#terminal-2846493834-line-0)">&#160;COMMAND&#160;</text><text class="terminal-2846493834-r2" x="439.2" y="20" textLength="12.2" clip-path="url(#terminal-2846493834-line-0)">[</text><text class="terminal-2846493834-r1" x="451.4" y="20" textLength="48.8" clip-path="url(#terminal-2846493834-line-0)">ARGS</text><text class="terminal-2846493834-r2" x="500.2" y="20" textLength="12.2" clip-path="url(#terminal-2846493834-line-0)">]</text><text class="terminal-2846493834-r3" x="512.4" y="20" textLength="36.6" clip-path="url(#terminal-2846493834-line-0)">...</text><text class="terminal-2846493834-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-2846493834-line-0)">
</text><text class="terminal-2846493834-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-2846493834-line-1)">
</text><text class="terminal-2846493834-r1" x="0" y="68.8" textLength="646.6" clip-path="url(#terminal-2846493834-line-2)">&#160;&#160;Commands&#160;to&#160;execute&#160;EOS&#160;commands&#160;on&#160;remote&#160;devices.</text><text class="terminal-2846493834-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-2846493834-line-2)">
</text><text class="terminal-2846493834-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-2846493834-line-3)">
</text><text class="terminal-2846493834-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-2846493834-line-4)">Options:</text><text class="terminal-2846493834-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-2846493834-line-4)">
</text><text class="terminal-2846493834-r1" x="0" y="142" textLength="451.4" clip-path="url(#terminal-2846493834-line-5)">&#160;&#160;--help&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-2846493834-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-2846493834-line-5)">
</text><text class="terminal-2846493834-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-2846493834-line-6)">
</text><text class="terminal-2846493834-r1" x="0" y="190.8" textLength="109.8" clip-path="url(#terminal-2846493834-line-7)">Commands:</text><text class="terminal-2846493834-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-2846493834-line-7)">
</text><text class="terminal-2846493834-r1" x="0" y="215.2" textLength="683.2" clip-path="url(#terminal-2846493834-line-8)">&#160;&#160;run-cmd&#160;&#160;&#160;&#160;&#160;&#160;&#160;Run&#160;arbitrary&#160;command&#160;to&#160;an&#160;ANTA&#160;device.</text><text class="terminal-2846493834-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-2846493834-line-8)">
</text><text class="terminal-2846493834-r1" x="0" y="239.6" textLength="805.2" clip-path="url(#terminal-2846493834-line-9)">&#160;&#160;run-template&#160;&#160;Run&#160;arbitrary&#160;templated&#160;command&#160;to&#160;an&#160;ANTA&#160;device.</text><text class="terminal-2846493834-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#terminal-2846493834-line-9)">
</text><text class="terminal-2846493834-r1" x="1464" y="264" textLength="12.2" clip-path="url(#terminal-2846493834-line-10)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7 KiB

139
docs/imgs/anta_help.svg Normal file
View file

@ -0,0 +1,139 @@
<svg class="rich-terminal" viewBox="0 0 1482 562.4" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-409832191-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-409832191-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-409832191-r1 { fill: #c5c8c6 }
.terminal-409832191-r2 { fill: #c5c8c6;font-weight: bold }
.terminal-409832191-r3 { fill: #d0b344 }
</style>
<defs>
<clipPath id="terminal-409832191-clip-terminal">
<rect x="0" y="0" width="1463.0" height="511.4" />
</clipPath>
<clipPath id="terminal-409832191-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-10">
<rect x="0" y="245.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-11">
<rect x="0" y="269.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-12">
<rect x="0" y="294.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-13">
<rect x="0" y="318.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-14">
<rect x="0" y="343.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-15">
<rect x="0" y="367.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-16">
<rect x="0" y="391.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-17">
<rect x="0" y="416.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-18">
<rect x="0" y="440.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-409832191-line-19">
<rect x="0" y="465.1" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="560.4" rx="8"/><text class="terminal-409832191-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-409832191-clip-terminal)">
<g class="terminal-409832191-matrix">
<text class="terminal-409832191-r1" x="0" y="20" textLength="146.4" clip-path="url(#terminal-409832191-line-0)">Usage:&#160;anta&#160;</text><text class="terminal-409832191-r2" x="146.4" y="20" textLength="12.2" clip-path="url(#terminal-409832191-line-0)">[</text><text class="terminal-409832191-r1" x="158.6" y="20" textLength="85.4" clip-path="url(#terminal-409832191-line-0)">OPTIONS</text><text class="terminal-409832191-r2" x="244" y="20" textLength="12.2" clip-path="url(#terminal-409832191-line-0)">]</text><text class="terminal-409832191-r1" x="256.2" y="20" textLength="109.8" clip-path="url(#terminal-409832191-line-0)">&#160;COMMAND&#160;</text><text class="terminal-409832191-r2" x="366" y="20" textLength="12.2" clip-path="url(#terminal-409832191-line-0)">[</text><text class="terminal-409832191-r1" x="378.2" y="20" textLength="48.8" clip-path="url(#terminal-409832191-line-0)">ARGS</text><text class="terminal-409832191-r2" x="427" y="20" textLength="12.2" clip-path="url(#terminal-409832191-line-0)">]</text><text class="terminal-409832191-r3" x="439.2" y="20" textLength="36.6" clip-path="url(#terminal-409832191-line-0)">...</text><text class="terminal-409832191-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-409832191-line-0)">
</text><text class="terminal-409832191-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-409832191-line-1)">
</text><text class="terminal-409832191-r1" x="0" y="68.8" textLength="402.6" clip-path="url(#terminal-409832191-line-2)">&#160;&#160;Arista&#160;Network&#160;Test&#160;Automation&#160;</text><text class="terminal-409832191-r2" x="402.6" y="68.8" textLength="12.2" clip-path="url(#terminal-409832191-line-2)">(</text><text class="terminal-409832191-r1" x="414.8" y="68.8" textLength="48.8" clip-path="url(#terminal-409832191-line-2)">ANTA</text><text class="terminal-409832191-r2" x="463.6" y="68.8" textLength="12.2" clip-path="url(#terminal-409832191-line-2)">)</text><text class="terminal-409832191-r1" x="475.8" y="68.8" textLength="61" clip-path="url(#terminal-409832191-line-2)">&#160;CLI.</text><text class="terminal-409832191-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-409832191-line-2)">
</text><text class="terminal-409832191-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-409832191-line-3)">
</text><text class="terminal-409832191-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-409832191-line-4)">Options:</text><text class="terminal-409832191-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-409832191-line-4)">
</text><text class="terminal-409832191-r1" x="0" y="142" textLength="744.2" clip-path="url(#terminal-409832191-line-5)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-409832191-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-409832191-line-5)">
</text><text class="terminal-409832191-r1" x="0" y="166.4" textLength="732" clip-path="url(#terminal-409832191-line-6)">&#160;&#160;--version&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;the&#160;version&#160;and&#160;exit.</text><text class="terminal-409832191-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-409832191-line-6)">
</text><text class="terminal-409832191-r1" x="0" y="190.8" textLength="951.6" clip-path="url(#terminal-409832191-line-7)">&#160;&#160;--log-file&#160;FILE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Send&#160;the&#160;logs&#160;to&#160;a&#160;file.&#160;If&#160;logging&#160;level&#160;is</text><text class="terminal-409832191-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-409832191-line-7)">
</text><text class="terminal-409832191-r1" x="0" y="215.2" textLength="927.2" clip-path="url(#terminal-409832191-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DEBUG,&#160;only&#160;INFO&#160;or&#160;higher&#160;will&#160;be&#160;sent&#160;to</text><text class="terminal-409832191-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-409832191-line-8)">
</text><text class="terminal-409832191-r1" x="0" y="239.6" textLength="524.6" clip-path="url(#terminal-409832191-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;stdout.&#160;&#160;</text><text class="terminal-409832191-r2" x="524.6" y="239.6" textLength="12.2" clip-path="url(#terminal-409832191-line-9)">[</text><text class="terminal-409832191-r1" x="536.8" y="239.6" textLength="268.4" clip-path="url(#terminal-409832191-line-9)">env&#160;var:&#160;ANTA_LOG_FILE</text><text class="terminal-409832191-r2" x="805.2" y="239.6" textLength="12.2" clip-path="url(#terminal-409832191-line-9)">]</text><text class="terminal-409832191-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#terminal-409832191-line-9)">
</text><text class="terminal-409832191-r1" x="0" y="264" textLength="219.6" clip-path="url(#terminal-409832191-line-10)">&#160;&#160;-l,&#160;--log-level&#160;</text><text class="terminal-409832191-r2" x="219.6" y="264" textLength="12.2" clip-path="url(#terminal-409832191-line-10)">[</text><text class="terminal-409832191-r1" x="231.8" y="264" textLength="402.6" clip-path="url(#terminal-409832191-line-10)">CRITICAL|ERROR|WARNING|INFO|DEBUG</text><text class="terminal-409832191-r2" x="634.4" y="264" textLength="12.2" clip-path="url(#terminal-409832191-line-10)">]</text><text class="terminal-409832191-r1" x="1464" y="264" textLength="12.2" clip-path="url(#terminal-409832191-line-10)">
</text><text class="terminal-409832191-r1" x="0" y="288.4" textLength="658.8" clip-path="url(#terminal-409832191-line-11)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA&#160;logging&#160;level&#160;&#160;</text><text class="terminal-409832191-r2" x="658.8" y="288.4" textLength="12.2" clip-path="url(#terminal-409832191-line-11)">[</text><text class="terminal-409832191-r1" x="671" y="288.4" textLength="97.6" clip-path="url(#terminal-409832191-line-11)">env&#160;var:</text><text class="terminal-409832191-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#terminal-409832191-line-11)">
</text><text class="terminal-409832191-r1" x="0" y="312.8" textLength="768.6" clip-path="url(#terminal-409832191-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_LOG_LEVEL;&#160;default:&#160;INFO</text><text class="terminal-409832191-r2" x="768.6" y="312.8" textLength="12.2" clip-path="url(#terminal-409832191-line-12)">]</text><text class="terminal-409832191-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#terminal-409832191-line-12)">
</text><text class="terminal-409832191-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#terminal-409832191-line-13)">
</text><text class="terminal-409832191-r1" x="0" y="361.6" textLength="109.8" clip-path="url(#terminal-409832191-line-14)">Commands:</text><text class="terminal-409832191-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#terminal-409832191-line-14)">
</text><text class="terminal-409832191-r1" x="0" y="386" textLength="610" clip-path="url(#terminal-409832191-line-15)">&#160;&#160;check&#160;&#160;Commands&#160;to&#160;validate&#160;configuration&#160;files.</text><text class="terminal-409832191-r1" x="1464" y="386" textLength="12.2" clip-path="url(#terminal-409832191-line-15)">
</text><text class="terminal-409832191-r1" x="0" y="410.4" textLength="732" clip-path="url(#terminal-409832191-line-16)">&#160;&#160;debug&#160;&#160;Commands&#160;to&#160;execute&#160;EOS&#160;commands&#160;on&#160;remote&#160;devices.</text><text class="terminal-409832191-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#terminal-409832191-line-16)">
</text><text class="terminal-409832191-r1" x="0" y="434.8" textLength="732" clip-path="url(#terminal-409832191-line-17)">&#160;&#160;exec&#160;&#160;&#160;Commands&#160;to&#160;execute&#160;various&#160;scripts&#160;on&#160;EOS&#160;devices.</text><text class="terminal-409832191-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#terminal-409832191-line-17)">
</text><text class="terminal-409832191-r1" x="0" y="459.2" textLength="805.2" clip-path="url(#terminal-409832191-line-18)">&#160;&#160;get&#160;&#160;&#160;&#160;Commands&#160;to&#160;get&#160;information&#160;from&#160;or&#160;generate&#160;inventories.</text><text class="terminal-409832191-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#terminal-409832191-line-18)">
</text><text class="terminal-409832191-r1" x="0" y="483.6" textLength="658.8" clip-path="url(#terminal-409832191-line-19)">&#160;&#160;nrfu&#160;&#160;&#160;Run&#160;ANTA&#160;tests&#160;on&#160;selected&#160;inventory&#160;devices.</text><text class="terminal-409832191-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#terminal-409832191-line-19)">
</text><text class="terminal-409832191-r1" x="1464" y="508" textLength="12.2" clip-path="url(#terminal-409832191-line-20)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,91 @@
<svg class="rich-terminal" viewBox="0 0 1482 269.6" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-529781442-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-529781442-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-529781442-r1 { fill: #c5c8c6 }
.terminal-529781442-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-529781442-clip-terminal">
<rect x="0" y="0" width="1463.0" height="218.6" />
</clipPath>
<clipPath id="terminal-529781442-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-529781442-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="267.6" rx="8"/><text class="terminal-529781442-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;csv&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-529781442-clip-terminal)">
<g class="terminal-529781442-matrix">
<text class="terminal-529781442-r1" x="0" y="20" textLength="256.2" clip-path="url(#terminal-529781442-line-0)">Usage:&#160;anta&#160;nrfu&#160;csv&#160;</text><text class="terminal-529781442-r2" x="256.2" y="20" textLength="12.2" clip-path="url(#terminal-529781442-line-0)">[</text><text class="terminal-529781442-r1" x="268.4" y="20" textLength="85.4" clip-path="url(#terminal-529781442-line-0)">OPTIONS</text><text class="terminal-529781442-r2" x="353.8" y="20" textLength="12.2" clip-path="url(#terminal-529781442-line-0)">]</text><text class="terminal-529781442-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-529781442-line-0)">
</text><text class="terminal-529781442-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-529781442-line-1)">
</text><text class="terminal-529781442-r1" x="0" y="68.8" textLength="671" clip-path="url(#terminal-529781442-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;states&#160;with&#160;CSV&#160;result.</text><text class="terminal-529781442-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-529781442-line-2)">
</text><text class="terminal-529781442-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-529781442-line-3)">
</text><text class="terminal-529781442-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-529781442-line-4)">Options:</text><text class="terminal-529781442-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-529781442-line-4)">
</text><text class="terminal-529781442-r1" x="0" y="142" textLength="683.2" clip-path="url(#terminal-529781442-line-5)">&#160;&#160;--csv-output&#160;FILE&#160;&#160;Path&#160;to&#160;save&#160;report&#160;as&#160;a&#160;CSV&#160;file&#160;&#160;</text><text class="terminal-529781442-r2" x="683.2" y="142" textLength="12.2" clip-path="url(#terminal-529781442-line-5)">[</text><text class="terminal-529781442-r1" x="695.4" y="142" textLength="97.6" clip-path="url(#terminal-529781442-line-5)">env&#160;var:</text><text class="terminal-529781442-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-529781442-line-5)">
</text><text class="terminal-529781442-r1" x="0" y="166.4" textLength="549" clip-path="url(#terminal-529781442-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_CSV_CSV_OUTPUT</text><text class="terminal-529781442-r2" x="549" y="166.4" textLength="12.2" clip-path="url(#terminal-529781442-line-6)">]</text><text class="terminal-529781442-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-529781442-line-6)">
</text><text class="terminal-529781442-r1" x="0" y="190.8" textLength="585.6" clip-path="url(#terminal-529781442-line-7)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-529781442-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-529781442-line-7)">
</text><text class="terminal-529781442-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-529781442-line-8)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,303 @@
<svg class="rich-terminal" viewBox="0 0 1482 1538.3999999999999" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-724480872-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-724480872-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-724480872-r1 { fill: #c5c8c6 }
.terminal-724480872-r2 { fill: #c5c8c6;font-weight: bold }
.terminal-724480872-r3 { fill: #d0b344 }
.terminal-724480872-r4 { fill: #98a84b }
.terminal-724480872-r5 { fill: #68a0b3;font-weight: bold }
.terminal-724480872-r6 { fill: #98729f }
</style>
<defs>
<clipPath id="terminal-724480872-clip-terminal">
<rect x="0" y="0" width="1463.0" height="1487.3999999999999" />
</clipPath>
<clipPath id="terminal-724480872-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-10">
<rect x="0" y="245.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-11">
<rect x="0" y="269.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-12">
<rect x="0" y="294.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-13">
<rect x="0" y="318.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-14">
<rect x="0" y="343.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-15">
<rect x="0" y="367.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-16">
<rect x="0" y="391.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-17">
<rect x="0" y="416.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-18">
<rect x="0" y="440.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-19">
<rect x="0" y="465.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-20">
<rect x="0" y="489.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-21">
<rect x="0" y="513.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-22">
<rect x="0" y="538.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-23">
<rect x="0" y="562.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-24">
<rect x="0" y="587.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-25">
<rect x="0" y="611.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-26">
<rect x="0" y="635.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-27">
<rect x="0" y="660.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-28">
<rect x="0" y="684.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-29">
<rect x="0" y="709.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-30">
<rect x="0" y="733.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-31">
<rect x="0" y="757.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-32">
<rect x="0" y="782.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-33">
<rect x="0" y="806.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-34">
<rect x="0" y="831.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-35">
<rect x="0" y="855.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-36">
<rect x="0" y="879.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-37">
<rect x="0" y="904.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-38">
<rect x="0" y="928.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-39">
<rect x="0" y="953.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-40">
<rect x="0" y="977.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-41">
<rect x="0" y="1001.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-42">
<rect x="0" y="1026.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-43">
<rect x="0" y="1050.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-44">
<rect x="0" y="1075.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-45">
<rect x="0" y="1099.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-46">
<rect x="0" y="1123.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-47">
<rect x="0" y="1148.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-48">
<rect x="0" y="1172.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-49">
<rect x="0" y="1197.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-50">
<rect x="0" y="1221.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-51">
<rect x="0" y="1245.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-52">
<rect x="0" y="1270.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-53">
<rect x="0" y="1294.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-54">
<rect x="0" y="1319.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-55">
<rect x="0" y="1343.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-56">
<rect x="0" y="1367.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-57">
<rect x="0" y="1392.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-58">
<rect x="0" y="1416.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-724480872-line-59">
<rect x="0" y="1441.1" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1536.4" rx="8"/><text class="terminal-724480872-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-724480872-clip-terminal)">
<g class="terminal-724480872-matrix">
<text class="terminal-724480872-r1" x="0" y="20" textLength="207.4" clip-path="url(#terminal-724480872-line-0)">Usage:&#160;anta&#160;nrfu&#160;</text><text class="terminal-724480872-r2" x="207.4" y="20" textLength="12.2" clip-path="url(#terminal-724480872-line-0)">[</text><text class="terminal-724480872-r1" x="219.6" y="20" textLength="85.4" clip-path="url(#terminal-724480872-line-0)">OPTIONS</text><text class="terminal-724480872-r2" x="305" y="20" textLength="12.2" clip-path="url(#terminal-724480872-line-0)">]</text><text class="terminal-724480872-r1" x="317.2" y="20" textLength="109.8" clip-path="url(#terminal-724480872-line-0)">&#160;COMMAND&#160;</text><text class="terminal-724480872-r2" x="427" y="20" textLength="12.2" clip-path="url(#terminal-724480872-line-0)">[</text><text class="terminal-724480872-r1" x="439.2" y="20" textLength="48.8" clip-path="url(#terminal-724480872-line-0)">ARGS</text><text class="terminal-724480872-r2" x="488" y="20" textLength="12.2" clip-path="url(#terminal-724480872-line-0)">]</text><text class="terminal-724480872-r3" x="500.2" y="20" textLength="36.6" clip-path="url(#terminal-724480872-line-0)">...</text><text class="terminal-724480872-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-724480872-line-0)">
</text><text class="terminal-724480872-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-724480872-line-1)">
</text><text class="terminal-724480872-r1" x="0" y="68.8" textLength="573.4" clip-path="url(#terminal-724480872-line-2)">&#160;&#160;Run&#160;ANTA&#160;tests&#160;on&#160;selected&#160;inventory&#160;devices.</text><text class="terminal-724480872-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-724480872-line-2)">
</text><text class="terminal-724480872-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-724480872-line-3)">
</text><text class="terminal-724480872-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-724480872-line-4)">Options:</text><text class="terminal-724480872-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-724480872-line-4)">
</text><text class="terminal-724480872-r1" x="0" y="142" textLength="756.4" clip-path="url(#terminal-724480872-line-5)">&#160;&#160;-u,&#160;--username&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Username&#160;to&#160;connect&#160;to&#160;EOS&#160;&#160;</text><text class="terminal-724480872-r2" x="756.4" y="142" textLength="12.2" clip-path="url(#terminal-724480872-line-5)">[</text><text class="terminal-724480872-r1" x="768.6" y="142" textLength="97.6" clip-path="url(#terminal-724480872-line-5)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-724480872-line-5)">
</text><text class="terminal-724480872-r1" x="0" y="166.4" textLength="695.4" clip-path="url(#terminal-724480872-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_USERNAME;&#160;required</text><text class="terminal-724480872-r2" x="695.4" y="166.4" textLength="12.2" clip-path="url(#terminal-724480872-line-6)">]</text><text class="terminal-724480872-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-724480872-line-6)">
</text><text class="terminal-724480872-r1" x="0" y="190.8" textLength="890.6" clip-path="url(#terminal-724480872-line-7)">&#160;&#160;-p,&#160;--password&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Password&#160;to&#160;connect&#160;to&#160;EOS&#160;that&#160;must&#160;be</text><text class="terminal-724480872-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-724480872-line-7)">
</text><text class="terminal-724480872-r1" x="0" y="215.2" textLength="878.4" clip-path="url(#terminal-724480872-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;provided.&#160;It&#160;can&#160;be&#160;prompted&#160;using&#160;&#x27;--</text><text class="terminal-724480872-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-724480872-line-8)">
</text><text class="terminal-724480872-r1" x="0" y="239.6" textLength="622.2" clip-path="url(#terminal-724480872-line-9)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;prompt&#x27;&#160;option.&#160;&#160;</text><text class="terminal-724480872-r2" x="622.2" y="239.6" textLength="12.2" clip-path="url(#terminal-724480872-line-9)">[</text><text class="terminal-724480872-r1" x="634.4" y="239.6" textLength="268.4" clip-path="url(#terminal-724480872-line-9)">env&#160;var:&#160;ANTA_PASSWORD</text><text class="terminal-724480872-r2" x="902.8" y="239.6" textLength="12.2" clip-path="url(#terminal-724480872-line-9)">]</text><text class="terminal-724480872-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#terminal-724480872-line-9)">
</text><text class="terminal-724480872-r1" x="0" y="264" textLength="951.6" clip-path="url(#terminal-724480872-line-10)">&#160;&#160;--enable-password&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Password&#160;to&#160;access&#160;EOS&#160;Privileged&#160;EXEC&#160;mode.</text><text class="terminal-724480872-r1" x="1464" y="264" textLength="12.2" clip-path="url(#terminal-724480872-line-10)">
</text><text class="terminal-724480872-r1" x="0" y="288.4" textLength="719.8" clip-path="url(#terminal-724480872-line-11)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;It&#160;can&#160;be&#160;prompted&#160;using&#160;</text><text class="terminal-724480872-r4" x="719.8" y="288.4" textLength="122" clip-path="url(#terminal-724480872-line-11)">&#x27;--prompt&#x27;</text><text class="terminal-724480872-r1" x="841.8" y="288.4" textLength="97.6" clip-path="url(#terminal-724480872-line-11)">&#160;option.</text><text class="terminal-724480872-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#terminal-724480872-line-11)">
</text><text class="terminal-724480872-r1" x="0" y="312.8" textLength="524.6" clip-path="url(#terminal-724480872-line-12)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Requires&#160;</text><text class="terminal-724480872-r4" x="524.6" y="312.8" textLength="122" clip-path="url(#terminal-724480872-line-12)">&#x27;--enable&#x27;</text><text class="terminal-724480872-r1" x="646.6" y="312.8" textLength="122" clip-path="url(#terminal-724480872-line-12)">&#160;option.&#160;&#160;</text><text class="terminal-724480872-r2" x="768.6" y="312.8" textLength="12.2" clip-path="url(#terminal-724480872-line-12)">[</text><text class="terminal-724480872-r1" x="780.8" y="312.8" textLength="97.6" clip-path="url(#terminal-724480872-line-12)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#terminal-724480872-line-12)">
</text><text class="terminal-724480872-r1" x="0" y="337.2" textLength="658.8" clip-path="url(#terminal-724480872-line-13)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_ENABLE_PASSWORD</text><text class="terminal-724480872-r2" x="658.8" y="337.2" textLength="12.2" clip-path="url(#terminal-724480872-line-13)">]</text><text class="terminal-724480872-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#terminal-724480872-line-13)">
</text><text class="terminal-724480872-r1" x="0" y="361.6" textLength="902.8" clip-path="url(#terminal-724480872-line-14)">&#160;&#160;--enable&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Some&#160;commands&#160;may&#160;require&#160;EOS&#160;Privileged</text><text class="terminal-724480872-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#terminal-724480872-line-14)">
</text><text class="terminal-724480872-r1" x="0" y="386" textLength="939.4" clip-path="url(#terminal-724480872-line-15)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;EXEC&#160;mode.&#160;This&#160;option&#160;tries&#160;to&#160;access&#160;this</text><text class="terminal-724480872-r1" x="1464" y="386" textLength="12.2" clip-path="url(#terminal-724480872-line-15)">
</text><text class="terminal-724480872-r1" x="0" y="410.4" textLength="951.6" clip-path="url(#terminal-724480872-line-16)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mode&#160;before&#160;sending&#160;a&#160;command&#160;to&#160;the&#160;device.</text><text class="terminal-724480872-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#terminal-724480872-line-16)">
</text><text class="terminal-724480872-r2" x="414.8" y="434.8" textLength="12.2" clip-path="url(#terminal-724480872-line-17)">[</text><text class="terminal-724480872-r1" x="427" y="434.8" textLength="244" clip-path="url(#terminal-724480872-line-17)">env&#160;var:&#160;ANTA_ENABLE</text><text class="terminal-724480872-r2" x="671" y="434.8" textLength="12.2" clip-path="url(#terminal-724480872-line-17)">]</text><text class="terminal-724480872-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#terminal-724480872-line-17)">
</text><text class="terminal-724480872-r1" x="0" y="459.2" textLength="854" clip-path="url(#terminal-724480872-line-18)">&#160;&#160;-P,&#160;--prompt&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Prompt&#160;for&#160;passwords&#160;if&#160;they&#160;are&#160;not</text><text class="terminal-724480872-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#terminal-724480872-line-18)">
</text><text class="terminal-724480872-r1" x="0" y="483.6" textLength="549" clip-path="url(#terminal-724480872-line-19)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;provided.&#160;&#160;</text><text class="terminal-724480872-r2" x="549" y="483.6" textLength="12.2" clip-path="url(#terminal-724480872-line-19)">[</text><text class="terminal-724480872-r1" x="561.2" y="483.6" textLength="244" clip-path="url(#terminal-724480872-line-19)">env&#160;var:&#160;ANTA_PROMPT</text><text class="terminal-724480872-r2" x="805.2" y="483.6" textLength="12.2" clip-path="url(#terminal-724480872-line-19)">]</text><text class="terminal-724480872-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#terminal-724480872-line-19)">
</text><text class="terminal-724480872-r1" x="0" y="508" textLength="939.4" clip-path="url(#terminal-724480872-line-20)">&#160;&#160;--timeout&#160;FLOAT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Global&#160;API&#160;timeout.&#160;This&#160;value&#160;will&#160;be&#160;used</text><text class="terminal-724480872-r1" x="1464" y="508" textLength="12.2" clip-path="url(#terminal-724480872-line-20)">
</text><text class="terminal-724480872-r1" x="0" y="532.4" textLength="634.4" clip-path="url(#terminal-724480872-line-21)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for&#160;all&#160;devices.&#160;&#160;</text><text class="terminal-724480872-r2" x="634.4" y="532.4" textLength="12.2" clip-path="url(#terminal-724480872-line-21)">[</text><text class="terminal-724480872-r1" x="646.6" y="532.4" textLength="268.4" clip-path="url(#terminal-724480872-line-21)">env&#160;var:&#160;ANTA_TIMEOUT;</text><text class="terminal-724480872-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#terminal-724480872-line-21)">
</text><text class="terminal-724480872-r1" x="0" y="556.8" textLength="524.6" clip-path="url(#terminal-724480872-line-22)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;default:&#160;</text><text class="terminal-724480872-r5" x="524.6" y="556.8" textLength="48.8" clip-path="url(#terminal-724480872-line-22)">30.0</text><text class="terminal-724480872-r2" x="573.4" y="556.8" textLength="12.2" clip-path="url(#terminal-724480872-line-22)">]</text><text class="terminal-724480872-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#terminal-724480872-line-22)">
</text><text class="terminal-724480872-r1" x="0" y="581.2" textLength="829.6" clip-path="url(#terminal-724480872-line-23)">&#160;&#160;--insecure&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Disable&#160;SSH&#160;Host&#160;Key&#160;validation.&#160;&#160;</text><text class="terminal-724480872-r2" x="829.6" y="581.2" textLength="12.2" clip-path="url(#terminal-724480872-line-23)">[</text><text class="terminal-724480872-r1" x="841.8" y="581.2" textLength="97.6" clip-path="url(#terminal-724480872-line-23)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#terminal-724480872-line-23)">
</text><text class="terminal-724480872-r1" x="0" y="605.6" textLength="573.4" clip-path="url(#terminal-724480872-line-24)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_INSECURE</text><text class="terminal-724480872-r2" x="573.4" y="605.6" textLength="12.2" clip-path="url(#terminal-724480872-line-24)">]</text><text class="terminal-724480872-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#terminal-724480872-line-24)">
</text><text class="terminal-724480872-r1" x="0" y="630" textLength="719.8" clip-path="url(#terminal-724480872-line-25)">&#160;&#160;--disable-cache&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Disable&#160;cache&#160;globally.&#160;&#160;</text><text class="terminal-724480872-r2" x="719.8" y="630" textLength="12.2" clip-path="url(#terminal-724480872-line-25)">[</text><text class="terminal-724480872-r1" x="732" y="630" textLength="97.6" clip-path="url(#terminal-724480872-line-25)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="630" textLength="12.2" clip-path="url(#terminal-724480872-line-25)">
</text><text class="terminal-724480872-r1" x="0" y="654.4" textLength="634.4" clip-path="url(#terminal-724480872-line-26)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_DISABLE_CACHE</text><text class="terminal-724480872-r2" x="634.4" y="654.4" textLength="12.2" clip-path="url(#terminal-724480872-line-26)">]</text><text class="terminal-724480872-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#terminal-724480872-line-26)">
</text><text class="terminal-724480872-r1" x="0" y="678.8" textLength="829.6" clip-path="url(#terminal-724480872-line-27)">&#160;&#160;-i,&#160;--inventory&#160;FILE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Path&#160;to&#160;the&#160;inventory&#160;YAML&#160;file.&#160;&#160;</text><text class="terminal-724480872-r2" x="829.6" y="678.8" textLength="12.2" clip-path="url(#terminal-724480872-line-27)">[</text><text class="terminal-724480872-r1" x="841.8" y="678.8" textLength="97.6" clip-path="url(#terminal-724480872-line-27)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#terminal-724480872-line-27)">
</text><text class="terminal-724480872-r1" x="0" y="703.2" textLength="707.6" clip-path="url(#terminal-724480872-line-28)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_INVENTORY;&#160;required</text><text class="terminal-724480872-r2" x="707.6" y="703.2" textLength="12.2" clip-path="url(#terminal-724480872-line-28)">]</text><text class="terminal-724480872-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#terminal-724480872-line-28)">
</text><text class="terminal-724480872-r1" x="0" y="727.6" textLength="878.4" clip-path="url(#terminal-724480872-line-29)">&#160;&#160;--tags&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;List&#160;of&#160;tags&#160;using&#160;comma&#160;as&#160;separator:</text><text class="terminal-724480872-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#terminal-724480872-line-29)">
</text><text class="terminal-724480872-r1" x="0" y="752" textLength="622.2" clip-path="url(#terminal-724480872-line-30)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tag1,tag2,tag3.&#160;&#160;</text><text class="terminal-724480872-r2" x="622.2" y="752" textLength="12.2" clip-path="url(#terminal-724480872-line-30)">[</text><text class="terminal-724480872-r1" x="634.4" y="752" textLength="219.6" clip-path="url(#terminal-724480872-line-30)">env&#160;var:&#160;ANTA_TAGS</text><text class="terminal-724480872-r2" x="854" y="752" textLength="12.2" clip-path="url(#terminal-724480872-line-30)">]</text><text class="terminal-724480872-r1" x="1464" y="752" textLength="12.2" clip-path="url(#terminal-724480872-line-30)">
</text><text class="terminal-724480872-r1" x="0" y="776.4" textLength="793" clip-path="url(#terminal-724480872-line-31)">&#160;&#160;-c,&#160;--catalog&#160;FILE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Path&#160;to&#160;the&#160;test&#160;catalog&#160;file&#160;&#160;</text><text class="terminal-724480872-r2" x="793" y="776.4" textLength="12.2" clip-path="url(#terminal-724480872-line-31)">[</text><text class="terminal-724480872-r1" x="805.2" y="776.4" textLength="97.6" clip-path="url(#terminal-724480872-line-31)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#terminal-724480872-line-31)">
</text><text class="terminal-724480872-r1" x="0" y="800.8" textLength="683.2" clip-path="url(#terminal-724480872-line-32)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_CATALOG;&#160;required</text><text class="terminal-724480872-r2" x="683.2" y="800.8" textLength="12.2" clip-path="url(#terminal-724480872-line-32)">]</text><text class="terminal-724480872-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#terminal-724480872-line-32)">
</text><text class="terminal-724480872-r1" x="0" y="825.2" textLength="231.8" clip-path="url(#terminal-724480872-line-33)">&#160;&#160;--catalog-format&#160;</text><text class="terminal-724480872-r2" x="231.8" y="825.2" textLength="12.2" clip-path="url(#terminal-724480872-line-33)">[</text><text class="terminal-724480872-r1" x="244" y="825.2" textLength="109.8" clip-path="url(#terminal-724480872-line-33)">yaml|json</text><text class="terminal-724480872-r2" x="353.8" y="825.2" textLength="12.2" clip-path="url(#terminal-724480872-line-33)">]</text><text class="terminal-724480872-r1" x="366" y="825.2" textLength="475.8" clip-path="url(#terminal-724480872-line-33)">&#160;&#160;&#160;&#160;Format&#160;of&#160;the&#160;catalog&#160;file,&#160;either&#160;</text><text class="terminal-724480872-r4" x="841.8" y="825.2" textLength="73.2" clip-path="url(#terminal-724480872-line-33)">&#x27;yaml&#x27;</text><text class="terminal-724480872-r1" x="915" y="825.2" textLength="36.6" clip-path="url(#terminal-724480872-line-33)">&#160;or</text><text class="terminal-724480872-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#terminal-724480872-line-33)">
</text><text class="terminal-724480872-r4" x="414.8" y="849.6" textLength="73.2" clip-path="url(#terminal-724480872-line-34)">&#x27;json&#x27;</text><text class="terminal-724480872-r2" x="512.4" y="849.6" textLength="12.2" clip-path="url(#terminal-724480872-line-34)">[</text><text class="terminal-724480872-r1" x="524.6" y="849.6" textLength="341.6" clip-path="url(#terminal-724480872-line-34)">env&#160;var:&#160;ANTA_CATALOG_FORMAT</text><text class="terminal-724480872-r2" x="866.2" y="849.6" textLength="12.2" clip-path="url(#terminal-724480872-line-34)">]</text><text class="terminal-724480872-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#terminal-724480872-line-34)">
</text><text class="terminal-724480872-r1" x="0" y="874" textLength="878.4" clip-path="url(#terminal-724480872-line-35)">&#160;&#160;-d,&#160;--device&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Run&#160;tests&#160;on&#160;a&#160;specific&#160;device.&#160;Can&#160;be</text><text class="terminal-724480872-r1" x="1464" y="874" textLength="12.2" clip-path="url(#terminal-724480872-line-35)">
</text><text class="terminal-724480872-r1" x="0" y="898.4" textLength="707.6" clip-path="url(#terminal-724480872-line-36)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;provided&#160;multiple&#160;times.</text><text class="terminal-724480872-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#terminal-724480872-line-36)">
</text><text class="terminal-724480872-r1" x="0" y="922.8" textLength="854" clip-path="url(#terminal-724480872-line-37)">&#160;&#160;-t,&#160;--test&#160;TEXT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Run&#160;a&#160;specific&#160;test.&#160;Can&#160;be&#160;provided</text><text class="terminal-724480872-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#terminal-724480872-line-37)">
</text><text class="terminal-724480872-r1" x="0" y="947.2" textLength="597.8" clip-path="url(#terminal-724480872-line-38)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;multiple&#160;times.</text><text class="terminal-724480872-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#terminal-724480872-line-38)">
</text><text class="terminal-724480872-r1" x="0" y="971.6" textLength="719.8" clip-path="url(#terminal-724480872-line-39)">&#160;&#160;--ignore-status&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit&#160;code&#160;will&#160;always&#160;be&#160;</text><text class="terminal-724480872-r5" x="719.8" y="971.6" textLength="12.2" clip-path="url(#terminal-724480872-line-39)">0</text><text class="terminal-724480872-r1" x="732" y="971.6" textLength="36.6" clip-path="url(#terminal-724480872-line-39)">.&#160;&#160;</text><text class="terminal-724480872-r2" x="768.6" y="971.6" textLength="12.2" clip-path="url(#terminal-724480872-line-39)">[</text><text class="terminal-724480872-r1" x="780.8" y="971.6" textLength="97.6" clip-path="url(#terminal-724480872-line-39)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#terminal-724480872-line-39)">
</text><text class="terminal-724480872-r1" x="0" y="996" textLength="695.4" clip-path="url(#terminal-724480872-line-40)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_IGNORE_STATUS</text><text class="terminal-724480872-r2" x="695.4" y="996" textLength="12.2" clip-path="url(#terminal-724480872-line-40)">]</text><text class="terminal-724480872-r1" x="1464" y="996" textLength="12.2" clip-path="url(#terminal-724480872-line-40)">
</text><text class="terminal-724480872-r1" x="0" y="1020.4" textLength="634.4" clip-path="url(#terminal-724480872-line-41)">&#160;&#160;--ignore-error&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit&#160;code&#160;will&#160;be&#160;</text><text class="terminal-724480872-r5" x="634.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-724480872-line-41)">0</text><text class="terminal-724480872-r1" x="646.6" y="1020.4" textLength="280.6" clip-path="url(#terminal-724480872-line-41)">&#160;if&#160;all&#160;tests&#160;succeeded</text><text class="terminal-724480872-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#terminal-724480872-line-41)">
</text><text class="terminal-724480872-r1" x="0" y="1044.8" textLength="451.4" clip-path="url(#terminal-724480872-line-42)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;or&#160;</text><text class="terminal-724480872-r5" x="451.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-724480872-line-42)">1</text><text class="terminal-724480872-r1" x="463.6" y="1044.8" textLength="268.4" clip-path="url(#terminal-724480872-line-42)">&#160;if&#160;any&#160;test&#160;failed.&#160;&#160;</text><text class="terminal-724480872-r2" x="732" y="1044.8" textLength="12.2" clip-path="url(#terminal-724480872-line-42)">[</text><text class="terminal-724480872-r1" x="744.2" y="1044.8" textLength="97.6" clip-path="url(#terminal-724480872-line-42)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#terminal-724480872-line-42)">
</text><text class="terminal-724480872-r1" x="0" y="1069.2" textLength="683.2" clip-path="url(#terminal-724480872-line-43)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_IGNORE_ERROR</text><text class="terminal-724480872-r2" x="683.2" y="1069.2" textLength="12.2" clip-path="url(#terminal-724480872-line-43)">]</text><text class="terminal-724480872-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#terminal-724480872-line-43)">
</text><text class="terminal-724480872-r1" x="0" y="1093.6" textLength="109.8" clip-path="url(#terminal-724480872-line-44)">&#160;&#160;--hide&#160;</text><text class="terminal-724480872-r2" x="109.8" y="1093.6" textLength="12.2" clip-path="url(#terminal-724480872-line-44)">[</text><text class="terminal-724480872-r1" x="122" y="1093.6" textLength="353.8" clip-path="url(#terminal-724480872-line-44)">success|failure|error|skipped</text><text class="terminal-724480872-r2" x="475.8" y="1093.6" textLength="12.2" clip-path="url(#terminal-724480872-line-44)">]</text><text class="terminal-724480872-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#terminal-724480872-line-44)">
</text><text class="terminal-724480872-r1" x="0" y="1118" textLength="780.8" clip-path="url(#terminal-724480872-line-45)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Hide&#160;results&#160;by&#160;type:&#160;success&#160;</text><text class="terminal-724480872-r6" x="780.8" y="1118" textLength="12.2" clip-path="url(#terminal-724480872-line-45)">/</text><text class="terminal-724480872-r1" x="793" y="1118" textLength="109.8" clip-path="url(#terminal-724480872-line-45)">&#160;failure&#160;</text><text class="terminal-724480872-r6" x="902.8" y="1118" textLength="12.2" clip-path="url(#terminal-724480872-line-45)">/</text><text class="terminal-724480872-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#terminal-724480872-line-45)">
</text><text class="terminal-724480872-r1" x="0" y="1142.4" textLength="488" clip-path="url(#terminal-724480872-line-46)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;error&#160;</text><text class="terminal-724480872-r6" x="488" y="1142.4" textLength="12.2" clip-path="url(#terminal-724480872-line-46)">/</text><text class="terminal-724480872-r1" x="500.2" y="1142.4" textLength="122" clip-path="url(#terminal-724480872-line-46)">&#160;skipped&#x27;.</text><text class="terminal-724480872-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#terminal-724480872-line-46)">
</text><text class="terminal-724480872-r1" x="0" y="1166.8" textLength="866.2" clip-path="url(#terminal-724480872-line-47)">&#160;&#160;--dry-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Run&#160;anta&#160;nrfu&#160;command&#160;but&#160;stop&#160;before</text><text class="terminal-724480872-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#terminal-724480872-line-47)">
</text><text class="terminal-724480872-r1" x="0" y="1191.2" textLength="951.6" clip-path="url(#terminal-724480872-line-48)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;starting&#160;to&#160;execute&#160;the&#160;tests.&#160;Considers&#160;all</text><text class="terminal-724480872-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#terminal-724480872-line-48)">
</text><text class="terminal-724480872-r1" x="0" y="1215.6" textLength="695.4" clip-path="url(#terminal-724480872-line-49)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;devices&#160;as&#160;connected.&#160;&#160;</text><text class="terminal-724480872-r2" x="695.4" y="1215.6" textLength="12.2" clip-path="url(#terminal-724480872-line-49)">[</text><text class="terminal-724480872-r1" x="707.6" y="1215.6" textLength="97.6" clip-path="url(#terminal-724480872-line-49)">env&#160;var:</text><text class="terminal-724480872-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#terminal-724480872-line-49)">
</text><text class="terminal-724480872-r1" x="0" y="1240" textLength="622.2" clip-path="url(#terminal-724480872-line-50)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_DRY_RUN</text><text class="terminal-724480872-r2" x="622.2" y="1240" textLength="12.2" clip-path="url(#terminal-724480872-line-50)">]</text><text class="terminal-724480872-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#terminal-724480872-line-50)">
</text><text class="terminal-724480872-r1" x="0" y="1264.4" textLength="744.2" clip-path="url(#terminal-724480872-line-51)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-724480872-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#terminal-724480872-line-51)">
</text><text class="terminal-724480872-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#terminal-724480872-line-52)">
</text><text class="terminal-724480872-r1" x="0" y="1313.2" textLength="109.8" clip-path="url(#terminal-724480872-line-53)">Commands:</text><text class="terminal-724480872-r1" x="1464" y="1313.2" textLength="12.2" clip-path="url(#terminal-724480872-line-53)">
</text><text class="terminal-724480872-r1" x="0" y="1337.6" textLength="817.4" clip-path="url(#terminal-724480872-line-54)">&#160;&#160;csv&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;states&#160;with&#160;CSV&#160;result.</text><text class="terminal-724480872-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#terminal-724480872-line-54)">
</text><text class="terminal-724480872-r1" x="0" y="1362" textLength="829.6" clip-path="url(#terminal-724480872-line-55)">&#160;&#160;json&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;JSON&#160;results.</text><text class="terminal-724480872-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#terminal-724480872-line-55)">
</text><text class="terminal-724480872-r1" x="0" y="1386.4" textLength="866.2" clip-path="url(#terminal-724480872-line-56)">&#160;&#160;md-report&#160;&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;Markdown&#160;report.</text><text class="terminal-724480872-r1" x="1464" y="1386.4" textLength="12.2" clip-path="url(#terminal-724480872-line-56)">
</text><text class="terminal-724480872-r1" x="0" y="1410.8" textLength="841.8" clip-path="url(#terminal-724480872-line-57)">&#160;&#160;table&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;table&#160;results.</text><text class="terminal-724480872-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#terminal-724480872-line-57)">
</text><text class="terminal-724480872-r1" x="0" y="1435.2" textLength="829.6" clip-path="url(#terminal-724480872-line-58)">&#160;&#160;text&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;text&#160;results.</text><text class="terminal-724480872-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#terminal-724480872-line-58)">
</text><text class="terminal-724480872-r1" x="0" y="1459.6" textLength="878.4" clip-path="url(#terminal-724480872-line-59)">&#160;&#160;tpl-report&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;templated&#160;report.</text><text class="terminal-724480872-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#terminal-724480872-line-59)">
</text><text class="terminal-724480872-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#terminal-724480872-line-60)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,91 @@
<svg class="rich-terminal" viewBox="0 0 1482 269.6" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-1762251436-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-1762251436-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-1762251436-r1 { fill: #c5c8c6 }
.terminal-1762251436-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-1762251436-clip-terminal">
<rect x="0" y="0" width="1463.0" height="218.6" />
</clipPath>
<clipPath id="terminal-1762251436-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1762251436-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="267.6" rx="8"/><text class="terminal-1762251436-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;json&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-1762251436-clip-terminal)">
<g class="terminal-1762251436-matrix">
<text class="terminal-1762251436-r1" x="0" y="20" textLength="268.4" clip-path="url(#terminal-1762251436-line-0)">Usage:&#160;anta&#160;nrfu&#160;json&#160;</text><text class="terminal-1762251436-r2" x="268.4" y="20" textLength="12.2" clip-path="url(#terminal-1762251436-line-0)">[</text><text class="terminal-1762251436-r1" x="280.6" y="20" textLength="85.4" clip-path="url(#terminal-1762251436-line-0)">OPTIONS</text><text class="terminal-1762251436-r2" x="366" y="20" textLength="12.2" clip-path="url(#terminal-1762251436-line-0)">]</text><text class="terminal-1762251436-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-1762251436-line-0)">
</text><text class="terminal-1762251436-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-1762251436-line-1)">
</text><text class="terminal-1762251436-r1" x="0" y="68.8" textLength="683.2" clip-path="url(#terminal-1762251436-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;JSON&#160;results.</text><text class="terminal-1762251436-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-1762251436-line-2)">
</text><text class="terminal-1762251436-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-1762251436-line-3)">
</text><text class="terminal-1762251436-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-1762251436-line-4)">Options:</text><text class="terminal-1762251436-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-1762251436-line-4)">
</text><text class="terminal-1762251436-r1" x="0" y="142" textLength="695.4" clip-path="url(#terminal-1762251436-line-5)">&#160;&#160;-o,&#160;--output&#160;FILE&#160;&#160;Path&#160;to&#160;save&#160;report&#160;as&#160;a&#160;JSON&#160;file&#160;&#160;</text><text class="terminal-1762251436-r2" x="695.4" y="142" textLength="12.2" clip-path="url(#terminal-1762251436-line-5)">[</text><text class="terminal-1762251436-r1" x="707.6" y="142" textLength="97.6" clip-path="url(#terminal-1762251436-line-5)">env&#160;var:</text><text class="terminal-1762251436-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-1762251436-line-5)">
</text><text class="terminal-1762251436-r1" x="0" y="166.4" textLength="512.4" clip-path="url(#terminal-1762251436-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_JSON_OUTPUT</text><text class="terminal-1762251436-r2" x="512.4" y="166.4" textLength="12.2" clip-path="url(#terminal-1762251436-line-6)">]</text><text class="terminal-1762251436-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-1762251436-line-6)">
</text><text class="terminal-1762251436-r1" x="0" y="190.8" textLength="585.6" clip-path="url(#terminal-1762251436-line-7)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-1762251436-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-1762251436-line-7)">
</text><text class="terminal-1762251436-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-1762251436-line-8)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,91 @@
<svg class="rich-terminal" viewBox="0 0 1482 269.6" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-1686430077-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-1686430077-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-1686430077-r1 { fill: #c5c8c6 }
.terminal-1686430077-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-1686430077-clip-terminal">
<rect x="0" y="0" width="1463.0" height="218.6" />
</clipPath>
<clipPath id="terminal-1686430077-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-1686430077-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="267.6" rx="8"/><text class="terminal-1686430077-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;md-report&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-1686430077-clip-terminal)">
<g class="terminal-1686430077-matrix">
<text class="terminal-1686430077-r1" x="0" y="20" textLength="329.4" clip-path="url(#terminal-1686430077-line-0)">Usage:&#160;anta&#160;nrfu&#160;md-report&#160;</text><text class="terminal-1686430077-r2" x="329.4" y="20" textLength="12.2" clip-path="url(#terminal-1686430077-line-0)">[</text><text class="terminal-1686430077-r1" x="341.6" y="20" textLength="85.4" clip-path="url(#terminal-1686430077-line-0)">OPTIONS</text><text class="terminal-1686430077-r2" x="427" y="20" textLength="12.2" clip-path="url(#terminal-1686430077-line-0)">]</text><text class="terminal-1686430077-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-1686430077-line-0)">
</text><text class="terminal-1686430077-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-1686430077-line-1)">
</text><text class="terminal-1686430077-r1" x="0" y="68.8" textLength="719.8" clip-path="url(#terminal-1686430077-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;Markdown&#160;report.</text><text class="terminal-1686430077-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-1686430077-line-2)">
</text><text class="terminal-1686430077-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-1686430077-line-3)">
</text><text class="terminal-1686430077-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-1686430077-line-4)">Options:</text><text class="terminal-1686430077-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-1686430077-line-4)">
</text><text class="terminal-1686430077-r1" x="0" y="142" textLength="780.8" clip-path="url(#terminal-1686430077-line-5)">&#160;&#160;--md-output&#160;FILE&#160;&#160;Path&#160;to&#160;save&#160;the&#160;report&#160;as&#160;a&#160;Markdown&#160;file&#160;&#160;</text><text class="terminal-1686430077-r2" x="780.8" y="142" textLength="12.2" clip-path="url(#terminal-1686430077-line-5)">[</text><text class="terminal-1686430077-r1" x="793" y="142" textLength="97.6" clip-path="url(#terminal-1686430077-line-5)">env&#160;var:</text><text class="terminal-1686430077-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-1686430077-line-5)">
</text><text class="terminal-1686430077-r1" x="0" y="166.4" textLength="719.8" clip-path="url(#terminal-1686430077-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_MD_REPORT_MD_OUTPUT;&#160;required</text><text class="terminal-1686430077-r2" x="719.8" y="166.4" textLength="12.2" clip-path="url(#terminal-1686430077-line-6)">]</text><text class="terminal-1686430077-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-1686430077-line-6)">
</text><text class="terminal-1686430077-r1" x="0" y="190.8" textLength="573.4" clip-path="url(#terminal-1686430077-line-7)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-1686430077-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-1686430077-line-7)">
</text><text class="terminal-1686430077-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-1686430077-line-8)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -0,0 +1,87 @@
<svg class="rich-terminal" viewBox="0 0 1482 245.2" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-3479160619-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-3479160619-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-3479160619-r1 { fill: #c5c8c6 }
.terminal-3479160619-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-3479160619-clip-terminal">
<rect x="0" y="0" width="1463.0" height="194.2" />
</clipPath>
<clipPath id="terminal-3479160619-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3479160619-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="243.2" rx="8"/><text class="terminal-3479160619-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;table&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-3479160619-clip-terminal)">
<g class="terminal-3479160619-matrix">
<text class="terminal-3479160619-r1" x="0" y="20" textLength="280.6" clip-path="url(#terminal-3479160619-line-0)">Usage:&#160;anta&#160;nrfu&#160;table&#160;</text><text class="terminal-3479160619-r2" x="280.6" y="20" textLength="12.2" clip-path="url(#terminal-3479160619-line-0)">[</text><text class="terminal-3479160619-r1" x="292.8" y="20" textLength="85.4" clip-path="url(#terminal-3479160619-line-0)">OPTIONS</text><text class="terminal-3479160619-r2" x="378.2" y="20" textLength="12.2" clip-path="url(#terminal-3479160619-line-0)">]</text><text class="terminal-3479160619-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-3479160619-line-0)">
</text><text class="terminal-3479160619-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-3479160619-line-1)">
</text><text class="terminal-3479160619-r1" x="0" y="68.8" textLength="695.4" clip-path="url(#terminal-3479160619-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;table&#160;results.</text><text class="terminal-3479160619-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-3479160619-line-2)">
</text><text class="terminal-3479160619-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-3479160619-line-3)">
</text><text class="terminal-3479160619-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-3479160619-line-4)">Options:</text><text class="terminal-3479160619-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-3479160619-line-4)">
</text><text class="terminal-3479160619-r1" x="0" y="142" textLength="158.6" clip-path="url(#terminal-3479160619-line-5)">&#160;&#160;--group-by&#160;</text><text class="terminal-3479160619-r2" x="158.6" y="142" textLength="12.2" clip-path="url(#terminal-3479160619-line-5)">[</text><text class="terminal-3479160619-r1" x="170.8" y="142" textLength="134.2" clip-path="url(#terminal-3479160619-line-5)">device|test</text><text class="terminal-3479160619-r2" x="305" y="142" textLength="12.2" clip-path="url(#terminal-3479160619-line-5)">]</text><text class="terminal-3479160619-r1" x="317.2" y="142" textLength="402.6" clip-path="url(#terminal-3479160619-line-5)">&#160;&#160;Group&#160;result&#160;by&#160;test&#160;or&#160;device.</text><text class="terminal-3479160619-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-3479160619-line-5)">
</text><text class="terminal-3479160619-r1" x="0" y="166.4" textLength="671" clip-path="url(#terminal-3479160619-line-6)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-3479160619-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-3479160619-line-6)">
</text><text class="terminal-3479160619-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-3479160619-line-7)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,83 @@
<svg class="rich-terminal" viewBox="0 0 1482 220.79999999999998" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-3793388881-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-3793388881-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-3793388881-r1 { fill: #c5c8c6 }
.terminal-3793388881-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-3793388881-clip-terminal">
<rect x="0" y="0" width="1463.0" height="169.79999999999998" />
</clipPath>
<clipPath id="terminal-3793388881-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3793388881-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3793388881-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3793388881-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3793388881-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-3793388881-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="218.8" rx="8"/><text class="terminal-3793388881-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;text&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-3793388881-clip-terminal)">
<g class="terminal-3793388881-matrix">
<text class="terminal-3793388881-r1" x="0" y="20" textLength="268.4" clip-path="url(#terminal-3793388881-line-0)">Usage:&#160;anta&#160;nrfu&#160;text&#160;</text><text class="terminal-3793388881-r2" x="268.4" y="20" textLength="12.2" clip-path="url(#terminal-3793388881-line-0)">[</text><text class="terminal-3793388881-r1" x="280.6" y="20" textLength="85.4" clip-path="url(#terminal-3793388881-line-0)">OPTIONS</text><text class="terminal-3793388881-r2" x="366" y="20" textLength="12.2" clip-path="url(#terminal-3793388881-line-0)">]</text><text class="terminal-3793388881-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-3793388881-line-0)">
</text><text class="terminal-3793388881-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-3793388881-line-1)">
</text><text class="terminal-3793388881-r1" x="0" y="68.8" textLength="683.2" clip-path="url(#terminal-3793388881-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;text&#160;results.</text><text class="terminal-3793388881-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-3793388881-line-2)">
</text><text class="terminal-3793388881-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-3793388881-line-3)">
</text><text class="terminal-3793388881-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-3793388881-line-4)">Options:</text><text class="terminal-3793388881-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-3793388881-line-4)">
</text><text class="terminal-3793388881-r1" x="0" y="142" textLength="451.4" clip-path="url(#terminal-3793388881-line-5)">&#160;&#160;--help&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-3793388881-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-3793388881-line-5)">
</text><text class="terminal-3793388881-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-3793388881-line-6)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -0,0 +1,99 @@
<svg class="rich-terminal" viewBox="0 0 1482 318.4" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
@font-face {
font-family: "Fira Code";
src: local("FiraCode-Bold"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
font-style: bold;
font-weight: 700;
}
.terminal-2361930775-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
.terminal-2361930775-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
.terminal-2361930775-r1 { fill: #c5c8c6 }
.terminal-2361930775-r2 { fill: #c5c8c6;font-weight: bold }
</style>
<defs>
<clipPath id="terminal-2361930775-clip-terminal">
<rect x="0" y="0" width="1463.0" height="267.4" />
</clipPath>
<clipPath id="terminal-2361930775-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
<clipPath id="terminal-2361930775-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
</defs>
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="316.4" rx="8"/><text class="terminal-2361930775-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">anta&#160;nrfu&#160;tpl-report&#160;--help</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
<g transform="translate(9, 41)" clip-path="url(#terminal-2361930775-clip-terminal)">
<g class="terminal-2361930775-matrix">
<text class="terminal-2361930775-r1" x="0" y="20" textLength="341.6" clip-path="url(#terminal-2361930775-line-0)">Usage:&#160;anta&#160;nrfu&#160;tpl-report&#160;</text><text class="terminal-2361930775-r2" x="341.6" y="20" textLength="12.2" clip-path="url(#terminal-2361930775-line-0)">[</text><text class="terminal-2361930775-r1" x="353.8" y="20" textLength="85.4" clip-path="url(#terminal-2361930775-line-0)">OPTIONS</text><text class="terminal-2361930775-r2" x="439.2" y="20" textLength="12.2" clip-path="url(#terminal-2361930775-line-0)">]</text><text class="terminal-2361930775-r1" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-2361930775-line-0)">
</text><text class="terminal-2361930775-r1" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-2361930775-line-1)">
</text><text class="terminal-2361930775-r1" x="0" y="68.8" textLength="732" clip-path="url(#terminal-2361930775-line-2)">&#160;&#160;ANTA&#160;command&#160;to&#160;check&#160;network&#160;state&#160;with&#160;templated&#160;report.</text><text class="terminal-2361930775-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-2361930775-line-2)">
</text><text class="terminal-2361930775-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-2361930775-line-3)">
</text><text class="terminal-2361930775-r1" x="0" y="117.6" textLength="97.6" clip-path="url(#terminal-2361930775-line-4)">Options:</text><text class="terminal-2361930775-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-2361930775-line-4)">
</text><text class="terminal-2361930775-r1" x="0" y="142" textLength="841.8" clip-path="url(#terminal-2361930775-line-5)">&#160;&#160;-tpl,&#160;--template&#160;FILE&#160;&#160;Path&#160;to&#160;the&#160;template&#160;to&#160;use&#160;for&#160;the&#160;report&#160;&#160;</text><text class="terminal-2361930775-r2" x="841.8" y="142" textLength="12.2" clip-path="url(#terminal-2361930775-line-5)">[</text><text class="terminal-2361930775-r1" x="854" y="142" textLength="97.6" clip-path="url(#terminal-2361930775-line-5)">env&#160;var:</text><text class="terminal-2361930775-r1" x="1464" y="142" textLength="12.2" clip-path="url(#terminal-2361930775-line-5)">
</text><text class="terminal-2361930775-r1" x="0" y="166.4" textLength="780.8" clip-path="url(#terminal-2361930775-line-6)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_TPL_REPORT_TEMPLATE;&#160;required</text><text class="terminal-2361930775-r2" x="780.8" y="166.4" textLength="12.2" clip-path="url(#terminal-2361930775-line-6)">]</text><text class="terminal-2361930775-r1" x="1464" y="166.4" textLength="12.2" clip-path="url(#terminal-2361930775-line-6)">
</text><text class="terminal-2361930775-r1" x="0" y="190.8" textLength="683.2" clip-path="url(#terminal-2361930775-line-7)">&#160;&#160;-o,&#160;--output&#160;FILE&#160;&#160;&#160;&#160;&#160;&#160;Path&#160;to&#160;save&#160;report&#160;as&#160;a&#160;file&#160;&#160;</text><text class="terminal-2361930775-r2" x="683.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2361930775-line-7)">[</text><text class="terminal-2361930775-r1" x="695.4" y="190.8" textLength="97.6" clip-path="url(#terminal-2361930775-line-7)">env&#160;var:</text><text class="terminal-2361930775-r1" x="1464" y="190.8" textLength="12.2" clip-path="url(#terminal-2361930775-line-7)">
</text><text class="terminal-2361930775-r1" x="0" y="215.2" textLength="634.4" clip-path="url(#terminal-2361930775-line-8)">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ANTA_NRFU_TPL_REPORT_OUTPUT</text><text class="terminal-2361930775-r2" x="634.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2361930775-line-8)">]</text><text class="terminal-2361930775-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#terminal-2361930775-line-8)">
</text><text class="terminal-2361930775-r1" x="0" y="239.6" textLength="634.4" clip-path="url(#terminal-2361930775-line-9)">&#160;&#160;--help&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Show&#160;this&#160;message&#160;and&#160;exit.</text><text class="terminal-2361930775-r1" x="1464" y="239.6" textLength="12.2" clip-path="url(#terminal-2361930775-line-9)">
</text><text class="terminal-2361930775-r1" x="1464" y="264" textLength="12.2" clip-path="url(#terminal-2361930775-line-10)">
</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

View file

@ -1,5 +1,5 @@
<!--
~ Copyright (c) 2023-2024 Arista Networks, Inc.
~ Copyright (c) 2023-2025 Arista Networks, Inc.
~ Use of this source code is governed by the Apache License 2.0
~ that can be found in the LICENSE file.
-->
@ -84,7 +84,7 @@ which anta
```bash
# Check ANTA version
anta --version
anta, version v1.2.0
anta, version v1.3.0
```
## EOS Requirements

View file

@ -1,4 +0,0 @@
# Copyright (c) 2024 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
"""Scripts for ANTA documentation."""

View file

@ -0,0 +1,29 @@
#!/usr/bin/env python
# Copyright (c) 2024-2025 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
"""Generates SVG for documentation purposes."""
import sys
from pathlib import Path
# TODO: svg in another PR
from generate_snippet import main as generate_snippet
sys.path.insert(0, str(Path(__file__).parents[2]))
COMMANDS = [
"anta --help",
"anta nrfu --help",
"anta nrfu csv --help",
"anta nrfu json --help",
"anta nrfu table --help",
"anta nrfu text --help",
"anta nrfu tpl-report --help",
"anta nrfu md-report --help",
"anta get tags --help",
]
for command in COMMANDS:
# TODO: svg in another PR
generate_snippet(command.split(" "), output="txt")

View file

@ -1,5 +1,5 @@
#!/usr/bin/env python
# Copyright (c) 2024 Arista Networks, Inc.
# Copyright (c) 2024-2025 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
"""Generates examples/tests.py."""

View file

@ -1,11 +1,12 @@
# Copyright (c) 2023-2024 Arista Networks, Inc.
#!/usr/bin/env python
# Copyright (c) 2023-2025 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
"""A script to generate svg files from anta command.
"""A script to generate svg or txt files from anta command.
usage:
python generate_svg.py anta ...
python generate_snippet.py anta ...
"""
# This script is not a package
# ruff: noqa: INP001
@ -20,12 +21,15 @@ import sys
from contextlib import redirect_stdout, suppress
from importlib import import_module
from importlib.metadata import entry_points
from typing import Literal
from unittest.mock import patch
from rich.console import Console
from rich.logging import RichHandler
from rich.markup import escape
from rich.progress import Progress
sys.path.insert(0, str(pathlib.Path(__file__).parents[2]))
from anta.cli.console import console
from anta.cli.nrfu.utils import anta_progress_bar
@ -35,9 +39,6 @@ r = RichHandler(console=console)
root.addHandler(r)
OUTPUT_DIR = pathlib.Path(__file__).parent.parent / "imgs"
def custom_progress_bar() -> Progress:
"""Set the console of progress_bar to main anta console.
@ -50,12 +51,14 @@ def custom_progress_bar() -> Progress:
return progress
if __name__ == "__main__":
def main(args: list[str], output: Literal["svg", "txt"] = "svg") -> None:
"""Execute the script."""
# Sane rich size
os.environ["COLUMNS"] = "120"
output_dir = pathlib.Path(__file__).parent.parent / "snippets" if output == "txt" else pathlib.Path(__file__).parent.parent / "imgs"
# stolen from https://github.com/ewels/rich-click/blob/main/src/rich_click/cli.py
args = sys.argv[1:]
script_name = args[0]
console_scripts = entry_points(group="console_scripts")
scripts = {script.name: script for script in console_scripts}
@ -80,27 +83,32 @@ if __name__ == "__main__":
module = import_module(module_path)
function = getattr(module, function_name)
# Console to captur everything
new_console = Console(record=True)
pipe = io.StringIO()
console.record = True
console.file = pipe
with redirect_stdout(io.StringIO()) as f:
# tweaks to record and redirect to a dummy file
console.print(f"ant@anthill$ {' '.join(sys.argv)}")
# Redirect stdout of the program towards another StringIO to capture help
# that is not part or anta rich console
# redirect potential progress bar output to console by patching
with patch("anta.cli.nrfu.utils.anta_progress_bar", custom_progress_bar), suppress(SystemExit):
function()
# Redirect stdout of the program towards another StringIO to capture help
# that is not part or anta rich console
# redirect potential progress bar output to console by patching
with redirect_stdout(io.StringIO()) as f, patch("anta.cli.nrfu.utils.anta_progress_bar", custom_progress_bar), suppress(SystemExit):
if output == "txt":
console.print(f"$ {' '.join(sys.argv)}")
function()
if "--help" in args:
console.print(f.getvalue())
console.print(escape(f.getvalue()))
filename = f"{'_'.join(x.replace('/', '_').replace('-', '').replace('.', '') for x in args)}.{output}"
filename = output_dir / filename
if output == "txt":
content = console.export_text()[:-1]
with filename.open("w") as fd:
fd.write(content)
# TODO: Not using this to avoid newline console.save_text(str(filename))
elif output == "svg":
console.save_svg(str(filename), title=" ".join(args))
filename = f"{'_'.join(x.replace('/', '_').replace('-', '_').replace('.', '_') for x in args)}.svg"
filename = f"{OUTPUT_DIR}/{filename}"
print(f"File saved at {filename}")
console.save_svg(filename, title=" ".join(args))
if __name__ == "__main__":
main(sys.argv[1:], "txt")

View file

@ -0,0 +1,11 @@
$ anta debug --help
Usage: anta debug [OPTIONS] COMMAND [ARGS]...
Commands to execute EOS commands on remote devices.
Options:
--help Show this message and exit.
Commands:
run-cmd Run arbitrary command to an ANTA device.
run-template Run arbitrary templated command to an ANTA device.

View file

@ -0,0 +1,35 @@
$ anta get tags --help
Usage: anta get tags [OPTIONS]
Get list of configured tags in user inventory.
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 FLOAT Global API timeout. This value will be used
for all devices. [env var: ANTA_TIMEOUT;
default: 30.0]
--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]
--inventory-format [yaml|json] Format of the inventory file, either 'yaml'
or 'json' [env var: ANTA_INVENTORY_FORMAT]
--tags TEXT List of tags using comma as separator:
tag1,tag2,tag3. [env var: ANTA_TAGS]
--help Show this message and exit.

View file

@ -1,8 +1,10 @@
$ anta --help
Usage: anta [OPTIONS] COMMAND [ARGS]...
Arista Network Test Automation (ANTA) CLI.
Options:
--help Show this message and exit.
--version Show the version and exit.
--log-file FILE Send the logs to a file. If logging level is
DEBUG, only INFO or higher will be sent to
@ -10,7 +12,6 @@ Options:
-l, --log-level [CRITICAL|ERROR|WARNING|INFO|DEBUG]
ANTA logging level [env var:
ANTA_LOG_LEVEL; default: INFO]
--help Show this message and exit.
Commands:
check Commands to validate configuration files.

View file

@ -0,0 +1,9 @@
$ anta nrfu csv --help
Usage: anta nrfu csv [OPTIONS]
ANTA command to check network state with CSV report.
Options:
--csv-output FILE Path to save report as a CSV file [env var:
ANTA_NRFU_CSV_CSV_OUTPUT; required]
--help Show this message and exit.

View file

@ -1,3 +1,4 @@
$ anta nrfu --help
Usage: anta nrfu [OPTIONS] COMMAND [ARGS]...
Run ANTA tests on selected inventory devices.
@ -27,6 +28,8 @@ Options:
ANTA_DISABLE_CACHE]
-i, --inventory FILE Path to the inventory YAML file. [env var:
ANTA_INVENTORY; required]
--inventory-format [yaml|json] Format of the inventory file, either 'yaml'
or 'json' [env var: ANTA_INVENTORY_FORMAT]
--tags TEXT List of tags using comma as separator:
tag1,tag2,tag3. [env var: ANTA_TAGS]
-c, --catalog FILE Path to the test catalog file [env var:

View file

@ -0,0 +1,11 @@
$ anta nrfu json --help
Usage: anta nrfu json [OPTIONS]
ANTA command to check network state with JSON results.
If no `--output` is specified, the output is printed to stdout.
Options:
-o, --output FILE Path to save report as a JSON file [env var:
ANTA_NRFU_JSON_OUTPUT]
--help Show this message and exit.

Some files were not shown because too many files have changed in this diff Show more