Python pandas et le NetDevOps

Python Pandas module

Pandas est un outil d’analyse et de manipulation de données Open Source, écrit en Python, rapide, puissant, flexible et facile à utiliser. Lorsqu’on travaille avec des données tabulaires, telles que des données stockées dans des feuilles de calcul ou des bases de données, pandas est l’outil adapté. Pandas aide à explorer, nettoyer et traiter les données. Dans pandas, une table de données s’appelle un DataFrame.

DataFrame pandas
DataFrame pandas (source pandas)

Pandas prend en charge, nativement, l’intégration de nombreux formats de fichiers ou sources de données (csv, excel, sql, json, parquet,…). L’importation de données à partir de chacune de ces sources de données est réalisée par une fonction avec le préfixe read_*. De la même manière, les méthodes to_* sont utilisées pour stocker des données.

Importation Exportation Python pandas
Importation et exportation de données avec Python pandas (source pandas)
Continuer la lecture de « Python pandas et le NetDevOps »

Python, gestion des packages et des dépendances

Gestion Packages et dépendances Python

Lorsqu’il s’agit de démarrer un produit pour le NetDevOps en langage Python, la principale préoccupation est la gestion des dépendances. Les dépendances font références à tous les composants logiciels requis par le produit pour qu’il fonctionne.

PyPI (Python Package Index) fournit des packages qui aident à démarrer un produit sur tout type de sujet, mais outre le fait qu’il convient de ne pas installer les packages au niveau du système, il peut être nécessaire de gérer des versions différentes d’environnements de développement pour un même produit, avec une gestion pointue des dépendances et de leurs éventuels conflicts.

Pip est l’outil standard pour installer les packages Python et gérer leurs dépendances. En utilisant pip pour installer des packages, il les récupère automatiquement avec toutes ses dépendances à partir du Python Package Index (PyPI) et les installe localement sur le système. De façon à ne pas installer l’environnement de développement de façon globale sur le système, mais plutôt de l’isoler, le recours à un environnement virtuel Python est fortement recommandé.

Continuer la lecture de « Python, gestion des packages et des dépendances »

NetPalm, un cocktail pour le NetDevOps

Architecture NetPalm NetDevOps

NetPalm a vu le jour en 2020 sous l’impulsion de Tony Nealon et rassemble plusieurs outils, qui ont déjà été évoqués séparément, pour construire une plateforme OpenAPI à destination des équipements réseaux. NetPalm forme une couche d’abstraction pour utiliser napalm, netmiko, ncclient ou requests afin d’accéder aux différents matériels avec la méthode la plus adaptée. L’accès à NetPalm se fait au travers d’une interface OpenAPI v3.

NetPalm utilise Docker pour apporter une touche de modernité et une capacité d’évolution de manière à encaisser une montée en charge.

Architecture NetPalm
Architecture NetPalm
Continuer la lecture de « NetPalm, un cocktail pour le NetDevOps »

Batfish, outil Open Source d’analyse de configuration réseau

Batfish

L’écosystème NetDevOps propose de nombreux outils pouvant être positionnés aux différentes étapes de la boucle interne de l’Intent-Based Networking. Dans une approche NetDevOps, Batfish permet de contrôler des configurations avant leur déploiement.

Batfish détecte les erreurs et garantit l’exactitude des configurations de réseau prévisionnelles ou actuellement utilisées. Il permet une évolution sûre et rapide du réseau, sans crainte de pannes ou de failles de sécurité.

Batfish a été initialement développé par des chercheurs de Microsoft Research, UCLA et USC. Beaucoup d’autres y ont contribué depuis. Il est actuellement maintenu par Intentionet, qui propose également Batfish Enterprise, un service qui étend et améliore les capacités de base de Batfish.

Batfish est un service qui tourne sous la forme d’un conteneur Docker. Batfish est conçu pour analyser une série de snapshots d’un réseau. Il faut voir le réseau comme un regroupement logique d’appareils, que ce soit tous les appareils du réseau ou un sous-ensemble. Un snapshot est un état du réseau à un instant donné. Un réseau peut contenir de nombreux snapshots, pour permettre de comprendre son évolution.

Continuer la lecture de « Batfish, outil Open Source d’analyse de configuration réseau »

Nornir, Netmiko et Template Text Parser

Template Text Parser

Les développements Python, dans le domaine de l’automatisation réseau, ont tout à gagner à utiliser le Framework Nornir. Celui-ci propose plusieurs méthodes pour accéder aux équipements. Chacune de ces méthodes a ses avantages et inconvénients et surtout elles ne sont pas toujours applicables à tous les constructeurs.

La méthode adressant le plus grand nombre de constructeurs est sans aucun doute Netmiko. Cette souplesse vient du fait que l’idée consiste à initier une connexion avec chacun des équipements pour leur envoyer des commandes et récupérer le résultat de la commande au travers du canal qui a été ouvert. Ce qui est reçu en retour est le même texte qui se serait affiché à l’écran si la manipulation avait été faite manuellement.

Analyser les informations qui sont retournées dans ces conditions, relève d’une pratique qui s’appelle le « Screen Scraping ». Il s’agit majoritairement d’utiliser des expressions régulières (regex) pour extraire du texte les informations recherchées. Des librairies ont été mises au point pour simplifier cette analyse et pour retourner les informations recherchées dans une structure de données utilisable programmatiquement. Qui plus est, ces librairies ont été intégrées dans le module Netmiko et par voie de conséquence, elles sont utilisables dans le Framework Nornir.

Continuer la lecture de « Nornir, Netmiko et Template Text Parser »

L’Intelligence Artificielle au service du NetDevOps

Intelligence Artificielle

Dernière modification le 17 novembre 2021

Je le répète assez souvent : « l’Intelligence Artificielle peut nous rendre des services dans le NetDevOps » pour résoudre des problèmes qui nécessiteraient des algorithmes très longs basés sur des successions de tests. Pour illustrer concrètement ces propos, je vous propose d’étudier un cas simple d’application de l’apprentissage automatique.

Prenons un exemple qui pourrait parfaitement faire partie d’un test de QI. Soit la suite de nombre suivante :

X-1012345
Y-3-11357?

Compléter la dernière valeur de Y manquante…

Pour résoudre ce problème, il va falloir trouver la relation qui relie X et Y et une fois trouvée, l’appliquer à la valeur manquante. Un oeil un peu entrainé va rapidement voir que la relation est Y = 2X – 1

Par soucis de validation, on pourra l’appliquer à chacun des X pour vérifier qu’on a trouvé la relation avec certitude. Une fois validée, la relation sera appliquée à la dernière valeur de X pour trouver Y = 9. Cette relation pourrait s’appliquer à de nouvelles valeurs de X.

Fonction Intelligence Artificielle
Fonction f(x)=2x-1
Continuer la lecture de « L’Intelligence Artificielle au service du NetDevOps »

Automatisation Juniper – Aéroport Nice Côte d’Azur

ACA - Aéroports de la Côte d'Azur

L’aéroport Nice Côte d’Azur est le deuxième aéroport de France avec 14.5 millions de passagers par an et un réseau de plus de 120 destinations, en majorité à l’international.

  • EVPN (Ethernet VPN)-VXLAN (Virtual Extensible LAN)
  • Underlay eBGP
  • Overlay iBGP
  • Centrally Routed Bridging (CBR) Overlay
  • 30 switchs Juniper QFX
  • 10 VRFs
  • 250 VLANs
  • 480 ports
  • 4000+ machines connectées
Grafana Aéroports de la Côte d'Azur
Monitoring Grafana / Prometheus en lab
Écosystème NetDevOps Aéroports de la Côte d'Azur
Écosystème NetDevOps ACA

Écosystème NetDevOps Aéroport Nice Côte d’Azur :

  • EVE-NG Pro
  • GitLab
  • Docker Swarm
  • GlusterFS
  • Juniper
  • Ansible
  • Python
  • Junos PyEZ
  • Robot Framework
  • Grafana
  • Prometheus
  • SNMP Exporter
  • Blackbox Exporter
  • gNMIc

Documenter du code Python

Documenter code Python

Lorsqu’il s’agit de documenter des développements, il existe plusieurs méthodes. Soyons direct, l’approche qui consiste à réaliser un document n’a aucune pérennité. Dès les premières phases de refactoring ou d’amélioration, la documentation ne sera pas mise à jour.

L’approche qui consiste à utiliser un Wiki est déjà plus souple et permet à plusieurs développeurs de collaborer sur la construction documentaire. Cependant, idéalement, il convient de limiter les changements d’environnements qu’un développeur peut être amené à faire pour mener à bien sa mission. Il y a deux environnements dans lequel le développeur évolue depuis son IDE (Integrated Development Environment).

Il y a tout d’abord le répertoire qui contient l’ensemble de l’arborescence du produit et qui se traduit sur le serveur de versioning par une branche dans un repository. Le format le plus utilisé est le markdown qui permet de créer des fichiers documentaires un peu agrémentés de mises en pages, sachant que par convention, un serveur de versioning affiche automatiquement le fichier README.md du répertoire visité.

Le deuxième environnement est le code lui-même, dans lequel il est naturel pour le développeur, d’intégrer au moins des commentaires qui lui permettront de retrouver la logique utilisée lorsqu’il se replongera, plus tard, dans le code. Comme défini dans PEP 8 (Style Guide for Python Code), les commentaires peuvent être de type « Block Comments » ou « Inline Comments ».

Continuer la lecture de « Documenter du code Python »

Ansible Collection pour OmniSwitch

ALE Ansible Collection

J’avais écrit les modules ale_aos pour Ansible disponibles dans la Galaxy pour permettre l’interaction entre Ansible et des OmniSwitchs en AOS6 et AOS8.

Au cours du cycle de développement d’Ansible 2.10, la communauté Ansible a migré avec succès la plupart des modules et plugins vers les collections. Les collections, ainsi que les modules et plugins qu’elles contiennent, peuvent désormais être développées, mises à jour et publiées indépendamment d’Ansible lui-même. Depuis Ansible 2.10, les utilisateurs de la communauté ont deux options: continuer à installer tout avec le package de communauté Ansible, ou installer ansible-base (2.10) ou ansible-core (2.11), puis ajouter les collections sélectionnées individuellement.

Afin de suivre l’évolution d’Ansible, j’ai porté le rôle ale_aos vers une collection en apportant quelques améliorations. La collection est disponible dans la Galaxy Ansible et attend vos tests et propositions d’améliorations, le dépôt officiel des modules étant dans le GitHub public. La licence utilisée permet toutes les améliorations des Network Modules sur la branche main, mais n’autorise pas la redistributions des forks, afin d’éviter la perte d’énergie (licence Attribution-NonCommercial-NoDerivatives 4.0 International / CC BY-NC-ND 4.0).

  • gmoisio.ale.ale_aos_ping : Vérifie la connectivité en SSH à un équipement.
  • gmoisio.ale.ale_aos_command : Exécute une commande sur un équipement. Il est possible de chercher une chaîne de caractères dans le résultat de la commande.
  • gmoisio.ale.ale_aos_config : Exécute un ensemble de commandes, généralement pour effectuer une configuration. L’ensemble des commandes peut être transmis sous la forme d’une liste ou sous la forme d’un fichier texte pouvant être généré via un template Jinja2.
  • gmoisio.ale.ale_aos_facts : Module expérimental permettant de récupérer des informations (vlans, interfaces et serveurs ntp) sous la forme d’un dictionnaire de listes pour effectuer des boucles.
Continuer la lecture de « Ansible Collection pour OmniSwitch »

Nautobot Inventory dynamique

Nautobot Inventory

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.

Continuer la lecture de « Nautobot Inventory dynamique »