YANG Data Model

Dernière modification le 27 septembre 2020

YANG (Yet Another Next Generation) est un langage de modélisation de données pour la configuration du réseau. Il est utilisé pour exprimer la structure des données (pas les données elles-mêmes) et les instances de données peuvent être exprimées en XML, JSON, Protobuf, etc. Elles sont considérées comme valides si elles adhèrent au modèle de données YANG (schéma).

Les fichiers YANG sont appelés des modules, de façon similaire aux modules python (scripts). Nous pourrions faire les analogies suivantes par rapport au langage Python.

YANGPythonDescription
ModuleModuleUn fichier YANG complet
Data TypeData TypesString, Integer, Boolean, … Pour YANG on peut définir son propre type en utilisant typedef
Structures
LeafVariableUne seule variable pouvant contenir une seule valeur
Leaf-listListUne collection de Leaf du même type de données
ListDictionaryUne collection de paires clé / valeur, la clé est la Leaf et la valeur peut être n’importe quel type de données
ContainerClassHiérarchie de haut niveau qui regroupe Leaf, Leaf-list et list, et peut regrouper d’autres conteneurs
Analogies YANG et Python

Les modules sont publiés avant tout par les constructeurs, par l’IETF et par l’initiative OpenConfig. Les modules des constructeurs sont appelés « vendors native YANG modules ». L’IETF définit des modules YANG communs qui décrivent comment configurer les interfaces, la QOS et définir d’autres types de données courants (comme Ipv4, IPv6, etc…). Les modules doivent être pris en charge par l’équipement du fournisseur pour être utilisés. OpenConfig est une initiative menée par Google et d’autres acteurs pour définir des modèles YANG communs que tous les fournisseurs devraient prendre en charge pour configurer des fonctionnalités critiques (BGP, interfaces, VLAN, etc…). Avec la poussée de ce consortium, plusieurs fournisseurs commencent à prendre en charge les modèles OpenConfig YANG. L’ensemble des modules YANG (YANG Modules) pour un device forme un modèle YANG (YANG Model) ou son schéma (Schema). L’industrie a commencé à centraliser les modules YANG les plus important sur GitHub avec une interface graphique. Certains consortium, forums et projets Open Source contribuent au développement de modèles YANG. C’est le cas du MEF Forum, de OpenDaylight ou de OpenConfig.

Le protocole NETCONF (RFC 6241) est basé sur des messages XML échangés via le protocole SSH à l’aide du port TCP 830 (par défaut). Les périphériques réseau exécutant un agent NETCONF peuvent être gérés via ces cinq opérations principales (on pourrait ajouter lock, unlock, close-session et kill-session) :

  • get : Cette opération récupère la configuration en cours et les informations sur l’état du périphérique.
  • get-config : Cette opération récupère tout ou partie d’une configuration spécifiée.
  • edit-config : Cette opération charge tout ou partie d’une configuration spécifiée sur le périphérique indiqué.
  • copy-config : Cette opération crée ou remplace une configuration entière avec le contenu spécifié.
  • delete-config : Cette opération supprime une configuration. La configuration en cours ne peut pas être supprimée.

RESTCONF est une autre norme IETF (RFC 8040) implémentant certaines fonctionnalités NETCONF en plus de l’interface RESTful. Les périphériques réseau exécutant un agent RESTCONF peuvent être gérés via ces principales méthodes HTTP (on pourrait ajouter OPTIONS et HEAD) :

  • GET : Cette méthode récupère les données et les métadonnées d’une ressource. Il est pris en charge pour tous les types de ressources, à l’exception des ressources d’exploitation.
  • PATCH : Cette méthode modifie partiellement une ressource (l’équivalent de l’opération merge de NETCONF).
  • PUT : Cette méthode crée ou remplace la ressource cible.
  • POST : Cette méthode crée une ressource de données ou appelle une ressource d’opérations.
  • DELETE : Cette méthode supprime la ressource cible.

Il semble que RESTCONF soit du NETCONF via HTTP / HTTPS en utilisant des messages XML ou JSON, mais il manque plusieurs composants NETCONF cruciaux, y compris plusieurs banques de données, des validations ou des annulations et le verrouillage de la configuration.

gNMI est l’interface de gestion de réseau gRPC développée par Google. gNMI fournit le mécanisme pour installer, manipuler et supprimer la configuration des périphériques réseau, ainsi que pour afficher les données opérationnelles. Le contenu fourni via gNMI peut être modélisé à l’aide de YANG. gRPC est un appel de procédure à distance développé par Google pour des distributions évolutives à faible latence avec des clients mobiles communiquant avec un serveur cloud. gRPC transporte gNMI et fournit les moyens de formuler et de transmettre des données et des demandes d’opération. Du fait du traitement extrêmement rapide de gRPC/Protobuf, son domaine de prédilection est la télémétrie.

Le langage Python possède de nombreuses librairies pour manipuler tous les éléments décrits précédemment. La librairie requests permet de générer des requêtes HTTP vers un équipement en fournissant une URI qui peut être testée à l’aide de l’utilitaire Linux curl ou de l’outil graphique Postman. La librairie Python ncclient permet d’offrir une API intuitive qui fait correspondre la nature codée en XML de NETCONF aux constructions et idiomes Python, et facilite l’écriture de scripts de gestion de réseau avec NETCONF. Il convient de fournir soit une expression utilisée en tant que filtre, soit une expression XPATH. Pour construire un filtre pour NETCONF, il existe des utilitaires et outils pouvant permettre de gagner du temps et monter en compétences. « YANG Explorer » et son interface flash ou « YANG Suite » et sa nouvelle interface HTML5 sont des utilitaires Cisco permettant de forger rapidement des filtres et retrouver des expressions XPATH. L’utilitaire Python pyang est également très pratique pour comprendre et faire apparaître une hiérarchie d’un module YANG. Le catalogue YANG permet aux utilisateurs de trouver des modèles pertinents pour leurs cas d’utilisation à partir du nombre important et croissant de modules YANG publiés. Le catalogue YANG comprend des modules de diverses entreprises et organisations, y compris des organisations de normalisation telles que l’IETF, le Broadband Forum, l’IEEE, le Metro Ethernet Forum, y compris certains fournisseurs d’équipements, ainsi que des communautés open source telles que l’Open Daylight Project. On trouve également des dépôts constructeurs GitHub qui proposent des librairies pour interagir en gNMI avec leurs équipements.

J’ai eu l’occasion de faire de nombreux tests et développements NETCONF et RESTCONF en Python et même si la courbe d’apprentissage peut paraître un peu rude au départ, il est assez facile de manipuler ces concepts une fois les grands principes assimilés et il est intéressant de privilégier cette approche avec les principaux constructeurs du monde de l’automatisation.