GraphQL et Nautobot

GraphQL Nautobot

GraphQL est un langage de requête et un environnement d’exécution côté serveur pour les API (Application Programming Interface) qui s’attache à fournir aux clients les données qui ont été demandées. Utilisé à la place de REST, GraphQL permet aux développeurs de créer des requêtes qui extraient les données de plusieurs sources à l’aide d’une seule requête API. Les requêtes GraphQL renvoient toujours des résultats prévisibles. Alors que les API REST typiques nécessitent un chargement à partir de plusieurs URL, les API GraphQL obtiennent toutes les données dont l’application a besoin en une seule demande. De plus, avec GraphQL, les équipes chargées de la maintenance des API peuvent librement ajouter ou retirer des champs sans perturber les requêtes existantes.

GraphQL a été développé par Facebook, qui a commencé à l’utiliser pour les applications mobiles en 2012. La spécification de GraphQL est devenue Open Source en 2015. Elle est désormais supervisée par la GraphQL Foundation.

Un service GraphQL est créé en définissant des types et des champs sur ces types, puis en fournissant des fonctions pour chaque champ sur chaque type. Par exemple, un service GraphQL qui indique qui est l’utilisateur connecté (me) ainsi que le nom de cet utilisateur peut ressembler à ceci :

type Query {
  me: User
}
 
type User {
  id: ID
  name: String
}

Avec des fonctions pour chaque champ sur chaque type :

function Query_me(request) {
  return request.auth.user;
}
 
function User_name(user) {
  return user.getName();
}
Continuer la lecture de « GraphQL et Nautobot »

Ansible 3.0.0

Ansible 3.0.0

La version 3.0.0 du package communautaire Ansible marque la fin de la restructuration de l’écosystème Ansible. Ce travail achève ce qui a commencé en 2019 pour restructurer le projet Ansible et façonner la manière dont le contenu Ansible est livré.

Dans Ansible 2.9 et les versions antérieures, chaque plugin et module se trouvait dans le projet Ansible (https://github.com/ansible/ansible) lui-même. Lorsque vous installiez le package « ansible », vous aviez le langage, le runtime et tout le contenu (modules et autres plugins). Au fil du temps, le succès d’Ansible a créé des problèmes d’évolutivité. Les utilisateurs devaient attendre plusieurs mois pour un contenu mis à jour.

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. Le package de la communauté Ansible 2.10 comprenait ansible-base 2.10 ainsi que toutes les collections qui contiennent des modules et des plugins qui ont été migrés hors du référentiel d’origine. Depuis Ansible 2.10, les utilisateurs de la communauté avaient deux options: continuer à installer tout avec le package de communauté Ansible, ou installer ansible-base, puis ajouter les collections sélectionnées individuellement.

Continuer la lecture de « Ansible 3.0.0 »

Nautobot – Network to Code

Nautobot NTC

La solution communautaire NetBox a été supportée pendant plusieurs années par la société Network to Code qui a finalement décidé de procéder à un fork de manière à créer un nouveau produit appelé Nautobot avec une nouvelle orientation stratégique : proposer une plateforme d’automatisation avec un support de qualité.

Source de vérité flexible
À la base, Nautobot est une source de vérité qui définit l’état qui est prévu pour le réseau (Intent-Based Networking).


Plateforme de données extensible pour l’automatisation de réseau
Nautobot est plus que de la documentation du réseau. Nautobot propose des intégrations et une extensibilité pour véritablement alimenter des solutions d’automatisation de réseau. Nautobot possède des API de plateforme robustes qui incluent des API RESTful (HTTP) traditionnelles, des API GraphQL, des webhooks basés sur les événements et de nombreuses fonctionnalités d’extensibilité pour permettre une plus grande automatisation du réseau. Nautobot utilise également son extensibilité pour agréger des systèmes de données disparates créant une source unique de vérité pour les solutions d’automatisation de réseau.


Plateforme pour les applications d’automatisation de réseau
La plateforme d’applications Nautobot fournit une architecture à partir de laquelle des applications d’automatisation de réseau peuvent être créées. Les applications Nautobot sont des augmentations ou des ajouts flexibles et personnalisés. Grâce à la plateforme d’applications Nautobot, les entreprises peuvent fournir des extensions et des applications d’automatisation de réseau personnalisables 65 à 70% plus rapidement.

Continuer la lecture de « Nautobot – Network to Code »

YANG Suite

YANG Suite

On attendait le remplaçant de YANG Explorer et il vient de sortir. YANG Suite remplace l’interface flash par du HTML5 et permet d’aborder l’automatisation réseau à l’aide de modèles YANG en navigant dans les modules depuis une interface graphique, en créant des requêtes RPC pour interagir avec les équipements et en testant la télémétrie à l’aide de gRPC.

L’usage de conteneurs Docker facilite grandement la mise en place de YANG Suite. Sur la base d’une machine virtuelle Ubuntu 20.04 à jour, Docker est installé :

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
sudo apt install docker-ce
sudo apt install docker-compose
sudo usermod -aG docker ${USER}
sudo reboot

L’installation la plus simple de YANG Suite, consiste à cloner le dépôt de GitHub.

git clone https://github.com/CiscoDevNet/yangsuite
cd yangsuite/docker/
./gen_test_certs.sh

Par défaut, YANG Suite, ou plus exactement Django, est configuré pour répondre aux requêtes sur l’adresse locale 127.0.0.1. Afin de permettre un accès depuis le réseau sur l’adresse IP de la machine virtuelle, il conviendra de modifier le fichier docker-compose.yml avant le premier lancement pour changer la valeur d’une des lignes environment de la manière suivante : DJANGO_ALLOWED_HOSTS=*.

Continuer la lecture de « YANG Suite »

Cluster EVE-NG Pro

EVE-NG Pro cluster

Avec la version 4 de EVE-NG Pro, une nouvelle fonctionnalité attendue depuis longtemps est disponible. Il est, maintenant, possible de monter un cluster de serveur EVE-NG afin d’augmenter la capacité disponible pour faire tourner une simulation.

L’installation standard de EVE-NG Pro portant la licence devient d’office le « master » du cluster et toutes les autres installations doivent se faire en mode « agent » en suivant la dernière version de la documentation.

La gestion du cluster et l’intégration de nouveaux agents se fait depuis le « master ».

eve-ng-sat01
Cluster EVE-NG
Continuer la lecture de « Cluster EVE-NG Pro »

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 »

Python et les formats de données

Formats de données

Dernière modification le 13 mai 2021

Dès que l’on utilise le langage Python pour faire de l’automatisation réseau, on se retrouve confronté au format utilisé pour représenter les données. Il en existe trois qui sont populaires et qui représentent un bon compromis entre la lisibilité pour l’être humain et pour la machine :

  • XML (eXtensible Markup Language)
  • JSON (JavaScript Object Notation)
  • YAML (Yet Another Markup Language)

Chacun de ces formats possède son historique avec ses avantages et ses inconvénients. Si le format YAML parait plus lisible pour un être humain, il ne peut pas se compresser car le formatage doit être respecté pour garder son intégrité. Voici une même donnée représentée dans chacun des formats :

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <user>
    <name>Gilbert</name>
    <location>
      <city>Toulouse</city>
      <country>France</country>
    </location>
    <roles>admin</roles>
    <roles>user</roles>
  </user>
</root>
{
    "user": {
        "name": "Gilbert", 
        "location": {
            "city": "Toulouse", 
            "country": "France"
        },
        "roles": [
            "admin",
            "user"
        ]
    }
}
---
user:
  name: Gilbert
  location:
    city: Toulouse
    country: France
  roles:
    - admin
    - user
Continuer la lecture de « Python et les formats de données »

gRPC pour les nuls

gRPC pour les nuls

Ce titre n’a pas pour vocation d’être provocateur mais plutôt de reprendre l’humour de cette série de livres qui proposent de rendre accessibles à tous des sujets qui peuvent paraître complexes au premier abord. Pour illustrer le concept gRPC, nous allons construire une calculatrice gRPC.

Dans gRPC, une application cliente peut appeler directement une méthode sur une application serveur d’une machine différente comme s’il s’agissait d’un objet local, ce qui vous permet de créer plus facilement des applications et des services distribués. Comme dans de nombreux systèmes RPC, gRPC est basé sur l’idée de définir un service, en spécifiant les méthodes qui peuvent être appelées à distance avec leurs paramètres et leurs types de retour. Côté serveur, le serveur implémente cette interface et exécute un serveur gRPC pour gérer les appels clients. Du côté client, le client dispose d’un stub (appelé simplement client dans certaines langues) qui fournit les mêmes méthodes que le serveur.

gRPC
Continuer la lecture de « gRPC pour les nuls »

YANG Data Model

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
Continuer la lecture de « YANG Data Model »

Appliance v3.0

Appliance v3.0

L’objectif de cette nouvelle appliance n’est pas de remplacer l’Appliance Automation v2.0, ni l’Appliance EVE-NG v2.0. C’est une autre approche dont l’objectif est de concentrer de la puissance dans une plateforme miniature qui permet d’offrir la quasi-totalité des fonctionnalités des deux autres plateformes réunies. De même, le coût de cette plateforme est approximativement équivalente aux deux autres réunies.

Le premier étage sert à offrir des services de connexion réseau indépendamment des possibilités de l’infrastructure d’accueil.

Premier Etage Appliance v3.0
Continuer la lecture de « Appliance v3.0 »