68 lines
2 KiB
Python
68 lines
2 KiB
Python
|
# 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.
|
||
|
"""Example script for ANTA.
|
||
|
|
||
|
usage:
|
||
|
|
||
|
python anta_runner.py
|
||
|
"""
|
||
|
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import asyncio
|
||
|
import logging
|
||
|
import sys
|
||
|
from pathlib import Path
|
||
|
|
||
|
from anta.catalog import AntaCatalog
|
||
|
from anta.cli.nrfu.utils import anta_progress_bar
|
||
|
from anta.inventory import AntaInventory
|
||
|
from anta.logger import Log, setup_logging
|
||
|
from anta.models import AntaTest
|
||
|
from anta.result_manager import ResultManager
|
||
|
from anta.runner import main as anta_runner
|
||
|
|
||
|
# setup logging
|
||
|
setup_logging(Log.INFO, Path("/tmp/anta.log"))
|
||
|
LOGGER = logging.getLogger()
|
||
|
SCRIPT_LOG_PREFIX = "[bold magenta][ANTA RUNNER SCRIPT][/] " # For convenience purpose - there are nicer way to do this.
|
||
|
|
||
|
|
||
|
# NOTE: The inventory and catalog files are not delivered with this script
|
||
|
USERNAME = "admin"
|
||
|
PASSWORD = "admin"
|
||
|
CATALOG_PATH = Path("/tmp/anta_catalog.yml")
|
||
|
INVENTORY_PATH = Path("/tmp/anta_inventory.yml")
|
||
|
|
||
|
# Load catalog file
|
||
|
try:
|
||
|
catalog = AntaCatalog.parse(CATALOG_PATH)
|
||
|
except Exception:
|
||
|
LOGGER.exception("%s Catalog failed to load!", SCRIPT_LOG_PREFIX)
|
||
|
sys.exit(1)
|
||
|
LOGGER.info("%s Catalog loaded!", SCRIPT_LOG_PREFIX)
|
||
|
|
||
|
# Load inventory
|
||
|
try:
|
||
|
inventory = AntaInventory.parse(INVENTORY_PATH, username=USERNAME, password=PASSWORD)
|
||
|
except Exception:
|
||
|
LOGGER.exception("%s Inventory failed to load!", SCRIPT_LOG_PREFIX)
|
||
|
sys.exit(1)
|
||
|
LOGGER.info("%s Inventory loaded!", SCRIPT_LOG_PREFIX)
|
||
|
|
||
|
# Create result manager object
|
||
|
manager = ResultManager()
|
||
|
|
||
|
# Launch ANTA
|
||
|
LOGGER.info("%s Starting ANTA runner...", SCRIPT_LOG_PREFIX)
|
||
|
with anta_progress_bar() as AntaTest.progress:
|
||
|
# Set dry_run to True to avoid connecting to the devices
|
||
|
asyncio.run(anta_runner(manager, inventory, catalog, dry_run=False))
|
||
|
|
||
|
LOGGER.info("%s ANTA run completed!", SCRIPT_LOG_PREFIX)
|
||
|
|
||
|
# Manipulate the test result object
|
||
|
for test_result in manager.results:
|
||
|
LOGGER.info("%s %s:%s:%s", SCRIPT_LOG_PREFIX, test_result.name, test_result.test, test_result.result)
|