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 »

ALE AOS8 Web Services

ALE AOS8 Web Services

Alcatel-Lucent Enterprise le rappelle régulièrement : « l’objectif est de n’avoir à terme que des commutateurs Ethernet en AOS8 ». Effectivement, tous les modèles qui sont sortis et se sont rajoutés au catalogue, parfois en remplacement de modèles existants, font tourner la version 8 de l’AOS. Dans ce contexte il était intéressant de voir les possibilités offertes en matière d’automatisation externe en environnement homogène.

Pour rappel, lorsqu’on est dans un contexte de mixité AOS6 et AOS8, les possibilités sont les suivantes :

  • Utiliser la librairie Netmiko avec Python, pour laquelle j’avais écrit le module AOS en 2017 et qui est toujours maintenu par Kirk Byers lors des différentes montées de version de la librairie.
  • Utiliser le Network Module ale_aos que j’ai écrit pour Ansible en 2020.

C’est la fonction Web Services qui permet de personnaliser et d’étendre l’interface de gestion sur les dispositifs AOS8. Dans le cas qui nous intéresse, il prend en charge l’utilisation d’une interface web basée sur REST qui interagit avec les variables de gestion AOS (MIB) et les commandes CLI. Donc, il fournit deux méthodes de configuration via la gestion directe des variables MIB ou l’utilisation de commandes CLI et prend en charge à la fois les formats de réponse en XML et en JSON.

Il ne faut pas confondre REST et le protocole RESTCONF qui utilise le modèle de données YANG. REST est un ensemble de directives pour l’architecture logicielle des systèmes distribués et AOS8 supporte les verbes suivants :

  • GET : pour récupérer des informations. C’est un équivalent grossier de SNMP / MIB GET mais aussi, à un niveau supérieur, un équivalent de la commande show. Ce verbe est utilisé exclusivement pour les commandes en lecture seule et sans autre effet secondaire.
  • PUT : pour créer de nouvelles informations, comme, par exemple, un nouveau VLAN. Il s’agit d’une opération d’écriture.
  • POST : fonctionne de la même façon que lors de la soumission de formulaires Web et il est utilisé, dans un contexte de service Web, pour mettre à jour des informations existantes.
  • DELETE : pour supprimer des informations existantes.
Continuer la lecture de « ALE AOS8 Web Services »

Représentations UML des modules Arista YANG OpenConfig

Arista YANG UML

Je vous propose une archive contenant des images, au format png, des représentations UML des modules YANG OpenConfig Arista EOS-4.24.2F. Ces 139 images ont été générées avec un script utilisant pyang et plantuml.jar.

Représentations UML des modules Arista YANG OpenConfig

Téléchargement gratuit

Envoyer le lien de téléchargement à :

Je confirme avoir lu et accepté la Politique de confidentialité.

openconfig-interfaces
openconfig-interfaces.uml

Automatisation du générateur de trafic TRex

Automatisation TRex

Comme je l’ai déjà abordé lors d’un précédent article, lorsque je souhaite utiliser un générateur de trafic en mode « stateless », je fais mon choix entre TRex et Ostinato. Lorsque l’objectif est de générer du trafic sans que la CPU du générateur ne représente un point de contention, TRex a ma préférence du fait qu’il s’appuie sur DPDK. Ostinato propose des APIs Python soumises à licence et cela fait 6 ans qu’une version « turbo » est en gestation, les priorités de son concepteur ayant été focalisées sur d’autres points. Il se pourrait qu’une version « Turbo Transmit » soit en préparation et que la sortie de cette version n’ait jamais été aussi proche.

Nous sommes dans une période d’automatisation durant laquelle aucun produit n’échappe à cette approche, et il en est de même pour les générateurs de trafic. TRex permet d’automatiser la génération de trafic à l’aide de scripts Python.

Ce lab s’appuie sur une de mes appliances générateur faisant tourner Linux Ubuntu 20.04. TRex est un produit qui évolue très régulièrement, non seulement pour l’améliorer, mais aussi pour tenir compte des évolutions de DPDK. L’installation de la dernière version de TRex est rapide avec les deux commandes : wget --no-cache --no-check-certificate https://trex-tgn.cisco.com/trex/release/latest et tar -xzvf latest. Pour pouvoir fonctionner, il est nécessaire de rajouter des dépendances et outils supplémentaires sur Ubuntu « Focal Fossa » avec la commande : sudo apt install python3-distutils build-essential. A la date d’écriture de cet article, c’est la version v2.84 de TRex qui est la dernière disponible.

Continuer la lecture de « Automatisation du générateur de trafic TRex »

Programmation Cisco Meraki

Programmation Meraki

Cisco Meraki est une solution réseau complète gérée depuis le cloud avec une interface graphique. En terme d’automatisation, la solution Meraki propose les domaines suivants :

  • Captive portal API
  • Scanning API
  • Dashboard API
  • Webhooks

Le « Dashboard API » Meraki est une interface permettant aux programmes extérieurs d’interagir directement avec la plate-forme cloud Meraki et les appareils gérés par Meraki. L’API contient un ensemble d’outils appelés « endpoints » pour créer des logiciels et des applications qui communiquent avec le tableau de bord Meraki. C’est une API RESTful moderne utilisant des requêtes HTTPS vers une URL avec un format de données JSON. Pour tester le Dashboard Meraki, il est possible d’utiliser l’URL https://account.meraki.com/secure/login/dashboard_login avec le compte devnetmeraki@cisco.com et le mode de passe ilovemeraki, puis choisir « DevNet Sandbox ».

Ce qui pourrait nous intéresser, c’est de récupérer une clé API disponible dans Organization/Settings/profile, mais dans notre cas, c’est une clé standard permettant l’accès au Sandbox que nous allons utiliser. Il va sans dire que, comme pour un login/password, une clé API ne doit pas figurer dans les programmes sur une infrastructure en exploitation. Dans les labs, il est fréquent de prendre un raccourci sur le plan de la sécurité, qu’il ne faut pas reproduire sur le terrain. Il existe des solutions pour stocker les informations d’authentification et d’autorisation de manière sécurisée. Le produit Vault de la société HashiCorp en est un très répandu. Il existe des librairies, permettant l’accès à Vault, pour de nombreux langages et outils dont Golang, Python et Ansible qui nous concernent dans le domaine du NetDevOps. De manière plus globale, il est également possible de stocker les secrets dans NetBox qui, en plus, fait office de source de vérité.

Continuer la lecture de « Programmation Cisco Meraki »

Programmation Cisco NX-OS

Programmation NX-OS

Il existe plusieurs façon de programmer NX-OS dont celles au travers d’APIs, sachant que celles-ci pourraient se classer en deux catégories :

  • Controller APIs, dans laquelle on trouve Application Centric Infrastructure (ACI)
  • Device APIs, dans laquelle on trouve NX-API (CLI et REST) et les standards « Model Driven » NETCONF, RESTCONF et gNMI/gRPC

Entre la date de publication de NETCONF (2006) et celle de RESTCONF (2017), des implémentations d’approches plus personnelles ont été créées : NX-API CLI et NX-API REST. Le passage aux protocoles NETCONF, RESTCONF et gNMI s’appuyant sur des modèles YANG se distingue, dans la littérature, par l’utilisation du terme Open NX-OS.

C’est sur un commutateur Cisco Nexus 9300v version 9.3.5, injecté dans le simulateur EVE-NG que l’ensemble des requêtes sont générées.

NX-API CLI

NX-API CLI offre la possibilité d’incorporer des commandes CLI Cisco NX-OS dans un format de données structuré (JSON ou XML) pour être exécutées sur le commutateur via un transport HTTP ou HTTPS. Les données renvoyées seront également formatées en JSON ou XML, ce qui facilite l’analyse des données avec des langages de programmation modernes. NX-API CLI s’active sur le commutateur à l’aide de la commande feature nxapi. On notera que NX-API CLI ne supporte que l’opération POST.

Continuer la lecture de « Programmation Cisco NX-OS »

Cisco IOS-XE et RESTCONF / YANG

Cisco IOS-XE RESTCONF YANG

RESTCONF (RFC 8040) fournit une interface de programmation basée sur des mécanismes standard pour accéder aux données de configuration et d’état, mais aussi pour accéder aux opérations et événements RPC spécifiques au modèle de données défini dans le modèle YANG.

RESTCONF peut être vu comme un sous-ensemble de NETCONF qui expose les modèles YANG au travers d’une API REST (URL) à l’aide d’un transport HTTP ou HTTPS avec un encodage XML ou JSON. Il faut rappeler que RESTCONF ne supporte pas toutes les opérations NETCONF qui peuvent aller plus loin dans la granularité. Il faut également noter que RESTCONF ne gère pas de session, chaque requête possède toutes les informations nécessaires à son traitement. Les opérations supportées par le protocole RESTCONF sont les suivantes :

  • GET – Récupère les données d’une ressource (config / opérationnel).
  • POST – Crée une ressource de données de configuration.
  • PUT – Crée ou remplace une ressource de données de configuration.
  • PATCH – Fusionne les données de configuration avec une ressource cible.
  • DELETE – Supprime une ressource de données de configuration.

Un des outils le plus évolué pour manipuler RESTCONF est Postman. Avec son interface graphique, il permet de construire un ensemble de requêtes de manière organisée et évoluée pour tester les URLs et leurs comportements. L’authorization est passée avec les « headers », au même titre que le format de données XML ou JSON avec lequel on souhaite travailler (« application/yang-data+xml » ou « application/yang-data+json »).

Continuer la lecture de « Cisco IOS-XE et RESTCONF / YANG »

Cisco IOS-XE et NETCONF / YANG

Cisco IOS-XE NETCONF YANG

NETCONF est défini dans le RFC 6241. Il s’agit d’un protocole transporté via TLS et SSH, qui comprend des concepts d’opérations et de configuration de datastore permettant la gestion d’un périphérique réseau. Le protocole est présenté comme une API que les applications peuvent utiliser pour envoyer et recevoir des ensembles de données de configuration et recevoir des ensembles de données d’état et de fonctionnement. NETCONF définit l’existence d’un ou plusieurs datastores de configuration et autorise les opérations de configuration dessus. Le RFC 6241 définit trois datastores :

  • <running>, présent dans le modèle de base
  • <startup>, optionnel et annoncé dans les capabilities
  • <candidate>, optionnel et annoncé dans les capabilities

SSH est le principal protocole de transport utilisé par NETCONF. Les étapes suivantes se produisent lors d’une session NETCONF :

  1. Le client se connecte au sous-système NETCONF SSH.
  2. Le serveur répond avec un « hello » qui inclut les capabilities prises en charge.
  3. Le client répond avec des capabilities prises en charge pour établir une connexion.
  4. Le client émet une requête NETCONF.
  5. Le serveur émet une réponse ou effectue une opération.
Continuer la lecture de « Cisco IOS-XE et NETCONF / YANG »