<!--
  ~ 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.
  -->

# Retrieving Inventory Information

The ANTA CLI offers multiple entrypoints to access data from your local inventory.

## Inventory used of examples

Let's consider the following inventory:

```yaml
---
anta_inventory:
  hosts:
    - host: 172.20.20.101
      name: DC1-SPINE1
      tags: ["SPINE", "DC1"]

    - host: 172.20.20.102
      name: DC1-SPINE2
      tags: ["SPINE", "DC1"]

    - host: 172.20.20.111
      name: DC1-LEAF1A
      tags: ["LEAF", "DC1"]

    - host: 172.20.20.112
      name: DC1-LEAF1B
      tags: ["LEAF", "DC1"]

    - host: 172.20.20.121
      name: DC1-BL1
      tags: ["BL", "DC1"]

    - host: 172.20.20.122
      name: DC1-BL2
      tags: ["BL", "DC1"]

    - host: 172.20.20.201
      name: DC2-SPINE1
      tags: ["SPINE", "DC2"]

    - host: 172.20.20.202
      name: DC2-SPINE2
      tags: ["SPINE", "DC2"]

    - host: 172.20.20.211
      name: DC2-LEAF1A
      tags: ["LEAF", "DC2"]

    - host: 172.20.20.212
      name: DC2-LEAF1B
      tags: ["LEAF", "DC2"]

    - host: 172.20.20.221
      name: DC2-BL1
      tags: ["BL", "DC2"]

    - host: 172.20.20.222
      name: DC2-BL2
      tags: ["BL", "DC2"]
```

## Obtaining all configured tags

As most of ANTA's commands accommodate tag filtering, this particular command is useful for enumerating all tags configured in the inventory. Running the `anta get tags` command will return a list of all tags that have been configured in the inventory.

### 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.
```

### Example

To get the list of all configured tags in the inventory, run the following command:

```bash
anta get tags
Tags found:
[
  "BL",
  "DC1",
  "DC2",
  "LEAF",
  "SPINE"
]

* note that tag all has been added by anta
```

!!! note
    Even if you haven't explicitly configured the `all` tag in the inventory, it is automatically added. This default tag allows to execute commands on all devices in the inventory when no tag is specified.

## 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. The `--connected` option allows to display only the devices where a connection has been established.

### Command overview

```bash
Usage: anta get inventory [OPTIONS]

  Show inventory loaded in ANTA.

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]
  --connected / --not-connected  Display inventory after connection has been
                                 created
  --help                         Show this message and exit.
```


!!! tip
    In its default mode, `anta get inventory` provides only information that doesn't rely on a device connection. If you are interested in obtaining connection-dependent details, like the hardware model, please use the `--connected` option.

### Example

To retrieve a comprehensive list of all devices along with their details, execute the following command. It will provide all the data loaded into the ANTA inventory from your [inventory file](../usage-inventory-catalog.md).

```bash
anta get inventory --tags SPINE
Current inventory content is:
{
    'DC1-SPINE1': AsyncEOSDevice(
        name='DC1-SPINE1',
        tags=['SPINE', 'DC1'],
        hw_model=None,
        is_online=False,
        established=False,
        disable_cache=False,
        host='172.20.20.101',
        eapi_port=443,
        username='arista',
        enable=True,
        enable_password='arista',
        insecure=False
    ),
    'DC1-SPINE2': AsyncEOSDevice(
        name='DC1-SPINE2',
        tags=['SPINE', 'DC1'],
        hw_model=None,
        is_online=False,
        established=False,
        disable_cache=False,
        host='172.20.20.102',
        eapi_port=443,
        username='arista',
        enable=True,
        insecure=False
    ),
    'DC2-SPINE1': AsyncEOSDevice(
        name='DC2-SPINE1',
        tags=['SPINE', 'DC2'],
        hw_model=None,
        is_online=False,
        established=False,
        disable_cache=False,
        host='172.20.20.201',
        eapi_port=443,
        username='arista',
        enable=True,
        insecure=False
    ),
    'DC2-SPINE2': AsyncEOSDevice(
        name='DC2-SPINE2',
        tags=['SPINE', 'DC2'],
        hw_model=None,
        is_online=False,
        established=False,
        disable_cache=False,
        host='172.20.20.202',
        eapi_port=443,
        username='arista',
        enable=True,
        insecure=False
    )
}
```
