Disposer des informations de son réseau c'est super en faire une représentation graphique c'est encore mieux
Pour rappel nous en sommes en Netbox 3.0.11.
Lors des versions précédentes de Netbox je m'étais essayé à réaliser une représentation graphique du réseau. Le rendu était .. comment pourrait on dire ... pas top.
J'ai donc voulu voir ce qu'il se faisait depuis.
J'ai donc trouvé 2 plugins :
https://github.com/iDebugAll/nextbox-ui-plugin
et
https://github.com/mattieserver/netbox-topology-views
mais ce dernier ne semble plus maintenu et surtout ne fonctionne plus avec Netbox v3 (lors de mes tests)
Voici le process Installer le plugins via PIP
cd /opt/netbox source /opt/netbox/venv/bin/activate pip3 install nextbox-ui-plugin
Pour garder les pré-requis en cas de réinstallation ou de mise à jour
echo nextbox-ui-plugin >> local_requirements.txt
Activer le plugins dans Django
nano netbox/netbox/configuration.py
PLUGINS = [ 'nextbox_ui_plugin', ]
Enfin finaliser l'installation
(venv) $ cd /opt/netbox/netbox/ (venv) $ python3 manage.py collectstatic (venv) $ python3 manage.py migrate systemctl restart netbox
Si vous rencontré des erreurs
(venv) $ python3 manage.py collectstatic --clear (venv) $ python3 manage.py migrate
Vous pouvez accéder maintenant au plugin depuis le "Menu Principal > Plugfins > " ou depuis un "Site"
Pour aller plus loin
Les icônes fournient par défaut dans ce plugins ne me convenait pas :
https://developer.cisco.com/site/neXt/discover/demo/#Basic/icons
J'ai donc chercher un moyen de completer les icones. Créer des icones png avec Photoshop ou en récupérer sur Internet. (Ici pts.png)
A partir de là voici les fichier à éditer afin d'ajouter de nouveaux icones. Déplacer les images dans le dossier : /opt/netbox/netbox/static/nextbox_ui_plugin/img/ Ajouter pour chaque image la ligne suivante (ligne 80) en dessous d'un exemple dead_node :
nano /opt/netbox/netbox/static/nextbox_ui_plugin/next_app.js
topo.registerIcon("pts", "/static/nextbox_ui_plugin/img/pts.png", 49, 49);
Mettre en relation les objets et les images via leur role ou leur type :
nano /opt/netbox/netbox/netbox/configuration.py
Voici en exemple mon PLUGINS_CONFIG
PLUGINS_CONFIG = { 'nextbox_ui_plugin': { 'layers_sort_order': ( 'edge', 'edge-switch', 'edge-router', 'core', 'core-router', 'core-switch', 'distribution', 'distribution-router', 'distribution-switch', 'access', 'access-switch', 'pts', 'undefined', ), 'icon_role_map': { 'router': 'router', 'firewall': 'firewall', 'server': 'server', 'nas': 'server', 'border': 'router', 'edge-switch': 'switch', 'edge-router': 'router', 'core-router': 'router', 'core-switch': 'switch', 'distribution': 'switch', 'distribution-router': 'router', 'distribution-switch': 'switch', 'access-switch': 'switch', 'pts': 'pts', }, 'DISPLAY_PASSIVE_DEVICES': True, 'DISPLAY_LOGICAL_MULTICABLE_LINKS': True, 'DISPLAY_UNCONNECTED': True } }
Aller encore plus loin:
Il me manque les interface qui sont en tagged-all je dois donc modifier la configuration
Editer le fichier de views
nano /opt/netbox-3.0.3/venv/lib/python3.9/site-packages/nextbox_ui_plugin/views.py
Ajouter à partir de la ligne 240
interfaces = vlan.get_interfaces() interfaces2 = Interface.objects.filter(mode='tagged-all') filtred_devices = [d.id for d in nb_devices_qs] filtred_interfaces = [] for interface in interfaces: if interface.is_connectable: direct_device_id = interface.device.id interface_trace = interface.trace() if len(interface_trace) != 0: termination_b_iface = interface_trace[-1][-1] connected_device_id = termination_b_iface.device.id if (direct_device_id in filtred_devices) or (direct_device_id in filtred_devices): filtred_interfaces.append(interface)
for interface2 in interfaces2: if interface2.is_connectable: direct_device_id = interface2.device.id interface2_trace = interface2.trace() if len(interface2_trace) != 0: termination_b_iface = interface2_trace[-1][-1] connected_device_id = termination_b_iface.device.id if (direct_device_id in filtred_devices) or (direct_device_id in filtred_devices): filtred_interfaces.append(interface2)
devices = [] for interface in filtred_interfaces: if interface.is_connectable: if interface.device not in devices: devices.append(interface.device) interface_trace = interface.trace() if len(interface_trace) != 0: termination_b_iface = interface_trace[-1][-1] if termination_b_iface.device not in devices: devices.append(termination_b_iface.device)
Redémarrer le service pour la prise en compte
(venv) root@netbox:/opt/netbox# python netbox/manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /opt/netbox-3.0.11/netbox/static This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes 0 static files copied to '/opt/netbox-3.0.11/netbox/static', 392 unmodified. (venv) root@netbox:/opt/netbox# systemctl restart netbox netbox-rq
Voilà maintenant notre topology par VLAN prend également en compte les port Trunk All Tagged