TP 10 : Cisco IOS-XE – Télémétrie et NETCONF

Module : 3 – Standards industriels (YANG) et approche Cloud/SDN Durée indicative : 2h Prérequis : TP 9 terminé (même routeur), Python 3, pip install ncclient

Objectifs

  • Interagir avec un routeur Cisco IOS-XE via NETCONF (SSH/XML).
  • Utiliser les datastores running et candidate.
  • Découvrir le principe de la télémétrie streaming (push).

Contexte

Vous comparez, sur le même équipement que le TP 9, l’approche transactionnelle NETCONF à l’approche REST légère de RESTCONF.

Étape 1 – Activation de NETCONF

configure terminal
netconf-yang
end

Vérifiez le port d’écoute (830/TCP par défaut) :

ssh [email protected] -p 830 -s netconf

Étape 2 – Premher appel avec ncclient

from ncclient import manager

with manager.connect(
    host="192.168.1.1", port=830,
    username="api-user", password="VotreMotDePasse",
    hostkey_verify=False
) as m:
    config = m.get_config(source="running")
    print(config)

Étape 3 – Lecture ciblée avec un filtre XML

filter_xml = """
<filter>
  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"/>
</filter>
"""
with manager.connect(host="192.168.1.1", port=830, username="api-user",
                      password="VotreMotDePasse", hostkey_verify=False) as m:
    result = m.get_config(source="running", filter=filter_xml)
    print(result)

Étape 4 – Modification via candidate + commit

Séquence lock, edit-config, commit, unlock Séquence lock, edit-config, commit, unlock “candidate” passe par un état intermédiaire avant que “commit” ne l’applique dans “running”.

edit_data = """
<config>
  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
    <interface>
      <name>Loopback200</name>
      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:softwareLoopback</type>
      <enabled>true</enabled>
    </interface>
  </interfaces>
</config>
"""
with manager.connect(host="192.168.1.1", port=830, username="api-user",
                      password="VotreMotDePasse", hostkey_verify=False) as m:
    m.lock(target="candidate")
    m.edit_config(target="candidate", config=edit_data)
    m.commit()
    m.unlock(target="candidate")

Vérifiez sur le routeur : show ip interface brief.

Étape 5 – Comparaison NETCONF vs RESTCONF (pratique)

Reprenez la création de Loopback100 du TP 9 (RESTCONF) et Loopback200 de cette étape (NETCONF). Rédigez un tableau comparatif (temps d’écriture du script, lisibilité du payload XML vs JSON, gestion du verrouillage) basé sur votre expérience.

Étape 6 – Introduction à la télémétrie streaming (découverte)

Sur le routeur, configurez un abonnement de télémétrie simple (modèle YANG-Push, si supporté par l’image) :

telemetry ietf subscription 100
 encoding encode-kvgpb
 filter xpath /interfaces-ios-xe-oper:interfaces/interface
 source-address 192.168.1.1
 update-policy periodic 5000
 receiver ip address 192.168.1.10 port 57500 protocol grpc-tcp

Note : sans collecteur gRPC en face, cette étape reste démonstrative — l’objectif est de comprendre la configuration d’un abonnement push, pas de traiter le flux (hors périmètre de ce TP).

Rendu attendu

  • Scripts Python (ncclient) versionnés.
  • Le tableau comparatif NETCONF vs RESTCONF.
  • Une capture de la configuration de l’abonnement de télémétrie.

Points de vérification

  • Loopback200 est créée via le cycle lock → edit-config → commit → unlock.
  • Le tableau comparatif s’appuie sur des observations concrètes des deux TP.
  • L’abonnement de télémétrie est visible dans show telemetry ietf subscription all.