diff options
Diffstat (limited to 'examples/run_eos_commands.py')
-rw-r--r-- | examples/run_eos_commands.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/examples/run_eos_commands.py b/examples/run_eos_commands.py new file mode 100644 index 0000000..165220f --- /dev/null +++ b/examples/run_eos_commands.py @@ -0,0 +1,59 @@ +# 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. +"""Script that runs a list of EOS commands on reachable devices.""" + +# This is needed to run the script for python < 3.10 for typing annotations +from __future__ import annotations + +import asyncio +from pprint import pprint + +from anta.inventory import AntaInventory +from anta.models import AntaCommand + + +async def main(inv: AntaInventory, commands: list[str]) -> dict[str, list[AntaCommand]]: + """Run a list of commands against each valid device in the inventory. + + Take an AntaInventory and a list of commands as string + 1. try to connect to every device in the inventory + 2. collect the results of the commands from each device + + Returns + ------- + dict[str, list[AntaCommand]] + a dictionary where key is the device name and the value is the list of AntaCommand ran towards the device + """ + await inv.connect_inventory() + + # Make a list of coroutine to run commands towards each connected device + coros = [] + # dict to keep track of the commands per device + result_dict = {} + for name, device in inv.get_inventory(established_only=True).items(): + anta_commands = [AntaCommand(command=command, ofmt="json") for command in commands] + result_dict[name] = anta_commands + coros.append(device.collect_commands(anta_commands)) + + # Run the coroutines + await asyncio.gather(*coros) + + return result_dict + + +if __name__ == "__main__": + # Create the AntaInventory instance + inventory = AntaInventory.parse( + filename="inventory.yaml", + username="arista", + password="@rista123", + ) + + # Create a list of commands with json output + command_list = ["show version", "show ip bgp summary"] + + # Run the main asyncio entry point + res = asyncio.run(main(inventory, command_list)) + + pprint(res) |