La Source de Vérité NetBox

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.

NetBox Application Stack

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.

NetBox containerd
kubectl get pods

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.

NetBox Postman
Postman
---
- 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