NetBox est une application Web Open Source conçue pour aider à gérer et documenter les réseaux informatiques. Initialement conçue par l’équipe d’ingénierie réseau de DigitalOcean, NetBox a été développée spécifiquement pour répondre aux besoins des experts réseau et infrastructure. Il englobe les aspects suivants de la gestion de réseau :
- IP address management (IPAM) – Réseaux et adresses IP, VRFs et VLANs
- Equipment racks – Organisé par groupe et site
- Devices – Types de devices et où ils sont installés
- Connections – Connexions réseau, console et alimentation des devices
- Virtualization – Machines virtuelles et clusters
- Data circuits – Circuits de communication longue distance et fournisseurs
- Secrets – Stockage crypté des informations d’identification sensibles
NetBox est construit sur le framework Django Python et utilise une base de données PostgreSQL. Il fonctionne comme un service WSGI derrière un serveur HTTP.
Utilisé en tant que Source de Vérité, NetBox permet de décrire l’infrastructure sous forme de paramètres ou variables pouvant être consommées grâce aux APIs. L’installation est simplifiée dès lors qu’on utilise la conteneurisation. Dès qu’on utilise Docker, Docker Swarm ou containerd piloté par Kubernetes, le déploiement est très rapide. L’utilisation du Chart Helm personnalisé en surchargeant les variables de values.yaml rend le déploiement encore plus simple et efficace.
Que ce soit avec curl ou Postman pour les tests et les mises au point des requêtes, que ce soit en Python avec la librairie requests ou en Ansible avec le module uri, il est possible d’accéder aux informations stockées dans NetBox.
--- - name: This is a test to request NetBox API hosts: servers vars: ansible_python_interpreter: "/usr/bin/python3" connection: local gather_facts: no tasks: - name: Access API uri: url: "https://netbox.local/api/dcim/sites/" follow_redirects: none method: GET return_content: yes headers: Accept: "application/json; indent=4" Authorization: "Token 0123456789abcdef0123456789abcdef01234567" validate_certs: no register: result - name: Print body of the response debug: msg: - "{{ result }}" - "{{ result.content }}" - "{{ result.json.results[0].description }}" when: result.status == 200