Junos REST API

Dernière modification le 11 janvier 2020

Comme déjà évoqué, il existe plusieurs façons d’accéder aux informations et de les configurer sur des équipements Juniper Networks. Une de ces méthodes est de passer par les API REST (Representational State Transfer). Comme pour le CLI et NETCONF, les connexions REST, appelée parfois RESTful, se font au travers du process mgd. REST est considéré comme étant stateless car aucun contexte client n’est stocké sur le serveur entre les requêtes. Chaque requête contient toutes les informations nécessaires pour executer la requête et l’état de la session est conservé sur le client.

Junos REST API mgd

On peut y voir différents intérêts, comme utiliser un mode d’accès disponible chez d’autres acteurs de l’automatisation de réseau ou faciliter une intégration dans une application web. La configuration sur Junos permet d’utiliser les protocoles http ou https, d’indiquer les adresses IP sur lesquelles répondre et même limiter les adresses IP susceptibles de faire les requêtes.

Par défaut le serveur lighttpd utilisé sur Junos répond sur les ports 3000 pour http et 3443 pour https. Les API REST peuvent être interrogées avec un navigateur web, un programme écrit dans un langage avec les librairies adaptées, un outil comme Postman ou même seulement la commande Unix curl.

Pour mettre au point les requêtes, il faut d’abord connaître la requête RPC qui va devoir être utilisée. Le plus simple est d’avoir accès à un équipement Junos virtuel ou physique et taper la commande permettant de retrouver la requête RPC équivalente à la commande CLI.

Display XML RPC

Dans l’exemple ci-dessus, on voit que la requête RPC équivalente à un « show interface » est « get-interface-information ». On peut maintenant l’utiliser pour tester le résultat sur un équipement Juniper sur lequel on aura configuré au minimum les éléments suivants pour un lab :

set system services rest http
set system services rest enable-explorer

L’outil REST-API Explorer embarqué sur Junos va nous permettre de construire des requêtes et de tester le résultat avant de se lancer dans une élaboration plus avancée depuis un outil d’automatisation comme Ansible ou un langage de programmation comme Python ou Golang.

http://192.168.1.217:3000

Sur l’image ci-dessus, la requête curl s’est construite toute seule en bas à gauche. On peut maintenant fabriquer une requête plus sophistiquée comme on aimerait l’avoir sous une forme programmatique.

curl -u "root:Juniper" http://192.168.1.217:3000/rpc/get-interface-information@format=json?interface-name=vme&terse=

ou

curl -u "root:Juniper" http://192.168.1.217:3000/rpc/get-interface-information@format=json/interface-name=vme/terse=
REST API curl