TP 9 : Cisco IOS-XE – Modélisation YANG et RESTCONF
Module : 3 – Standards industriels (YANG) et approche Cloud/SDN
Durée indicative : 2h
Prérequis : partie théorique du Module 3, un routeur virtuel Cisco IOS-XE (CSR1000v ou Catalyst 8000V) accessible, Python 3, pip install requests
Objectifs
- Explorer les modèles de données YANG exposés par un équipement Cisco IOS-XE.
- Lire et modifier une configuration (OSPF, interfaces loopback) via RESTCONF.
- Manipuler des URLs RESTCONF correspondant à des ressources YANG.
Contexte
Vous automatisez la configuration d’un routeur d’accès Cisco à l’aide de RESTCONF, en remplacement des commandes CLI classiques.
POST → GET → PATCH → DELETE : le fil rouge des étapes 3 à 6 de ce TP, avec le code HTTP attendu à chaque appel.
Étape 1 – Activation de RESTCONF
Sur le routeur (console ou SSH) :
configure terminal
restconf
ip http secure-server
username api-user privilege 15 secret VotreMotDePasse
endÉtape 2 – Découverte des capacités
curl -k -u api-user:VotreMotDePasse \
-H "Accept: application/yang-data+json" \
https://192.168.1.1/restconf/data/ietf-yang-library:yang-libraryIdentifiez dans la réponse quelques modules disponibles (ietf-interfaces, Cisco-IOS-XE-native, openconfig-interfaces si présent).
Étape 3 – Lecture des interfaces (GET)
import requests
BASE = "https://192.168.1.1/restconf/data"
AUTH = ("api-user", "VotreMotDePasse")
HEADERS = {"Accept": "application/yang-data+json"}
resp = requests.get(f"{BASE}/ietf-interfaces:interfaces", auth=AUTH, headers=HEADERS, verify=False)
resp.raise_for_status()
print(resp.json())Étape 4 – Création d’une interface loopback
payload = {
"ietf-interfaces:interface": {
"name": "Loopback100",
"type": "iana-if-type:softwareLoopback",
"enabled": True,
"ietf-ip:ipv4": {
"address": [{"ip": "10.100.100.1", "netmask": "255.255.255.255"}]
}
}
}
headers = {"Content-Type": "application/yang-data+json"}
resp = requests.post(f"{BASE}/ietf-interfaces:interfaces", json=payload, auth=AUTH, headers=headers, verify=False)
resp.raise_for_status()Vérifiez sur le routeur avec show ip interface brief.
Étape 5 – Configuration OSPF via le modèle natif Cisco
Utilisez le modèle Cisco-IOS-XE-ospf pour créer un processus OSPF annonçant le réseau de la loopback :
ospf_payload = {
"Cisco-IOS-XE-ospf:ospf": [
{
"id": 1,
"network": [
{"ip": "10.100.100.0", "mask": "0.0.0.255", "area": 0}
]
}
]
}
resp = requests.post(f"{BASE}/Cisco-IOS-XE-native:native/router/Cisco-IOS-XE-ospf:router-ospf",
json=ospf_payload, auth=AUTH, headers=headers, verify=False)
resp.raise_for_status()Vérifiez avec show ip ospf neighbor / show running-config | section ospf.
Étape 6 – Modification et suppression (PATCH/DELETE)
- Modifiez l’adresse de la loopback avec une requête
PATCHsur l’URL de l’interface. - Supprimez l’interface
Loopback100avecDELETE.
Rendu attendu
- Scripts Python versionnés dans un dépôt Git.
- Une capture
show running-configavant/après montrant les changements appliqués. - Un court résumé des modules YANG explorés à l’étape 2.
Points de vérification
- La loopback est créée puis supprimée avec succès via RESTCONF.
- Le processus OSPF apparaît dans
show ip ospfaprès configuration. - Chaque requête vérifie le code de statut HTTP retourné.