Nautobot Inventory dynamique

Nautobot est une plateforme utilisée en tant que Source de Vérité et d’automatisation réseau extensible et flexible. Que ce soit pour mettre en place une automatisation Python ou Ansible, il est possible et judicieux d’utiliser Nautobot en tant qu’inventory.

Pour programmer en Python, l’utilisation du Framework Nornir est un standard pour l’automatisation réseau. Il existe le plugin nornir-nautobot qui permet de faciliter la connexion à la Source de Vérité et de filtrer les équipements sur lesquels on souhaite travailler.

#!/usr/bin/env python
from nornir import InitNornir
from nornir.core.task import Task, Result
from nornir_utils.plugins.functions import print_result


def hello_device(task: Task) -> Result:
    return Result(host=task.host, result=f"{task.host.name} says hello!")


def main():
    nr = InitNornir(
        runner={
            "plugin": "threaded",
            "options": {
                "num_workers": 100,
            },
        },
        inventory={
            "plugin": "NautobotInventory",
            "options": {
                "nautobot_url": "http://192.168.105.29:8000",
                "nautobot_token": "cc80ed4727abd39e8c35c877e1b921754597b18b",
                "filter_parameters": {"site": "cdg"},
                "ssl_verify": False,
            },
        },
    )

    # Print out the number of hosts corresponding to filter
    print(f"Hosts found: {len(nr.inventory.hosts)}")
    # Print out the keys for the inventory
    print(nr.inventory.hosts.keys())
    # Run nornir task
    result = nr.run(task=hello_device)
    print_result(result)


if __name__ == "__main__":
    main()
Python Nornir Nautobot
Python Nornir

Pour ceux qui préfèrent utiliser Ansible, il existe également une Collection nommée nautobot-ansible qui facile l’utilisation de la Source de Vérité Nautobot en tant qu’inventory.

---
plugin: networktocode.nautobot.inventory
api_endpoint: http://192.168.105.29:8000
token: cc80ed4727abd39e8c35c877e1b921754597b18b
validate_certs: False
config_context: False
group_by:
  - sites
query_filters:
  - site: cdg
compose:
  ansible_network_os: platform.slug
[defaults]
inventory = ./inventory.yml
host_key_checking = False
interpreter_python=auto
roles_path = roles.galaxy:roles
collections_paths = collections.galaxy:collections

Il est possible de contrôler le bon fonctionnement de l’inventory avec la commande ansible-inventory --list ou ansible-inventory --graph.

Ansible Nautobot Inventory
ansible-inventory –graph