TP 12 : VyOS – Infrastructure as Code et Routage Déclaratif
Module : 4 – Approche NetDevOps et Orchestration globale
Durée indicative : 2h
Prérequis : partie théorique du Module 4, une VM VyOS accessible, Python 3, pip install requests jinja2 pyyaml
Objectifs
- Découvrir l’API HTTP intégrée de VyOS.
- Décrire une configuration BGP de façon déclarative (YAML) puis la générer/appliquer via l’API.
- Illustrer concrètement l’approche « état désiré » du Module 4.
Contexte
Plutôt que d’enchaîner des appels API impératifs comme aux Modules 2 et 3, vous décrivez l’état réseau souhaité dans un fichier YAML, que le script traduit en configuration.
Étape 1 – Activation de l’API HTTP
Sur VyOS :
configure
set service https api keys id api-user key VotreCleAPI
commit
saveÉtape 2 – Premier appel
import requests
URL = "https://192.168.1.1/configure"
KEY = "VotreCleAPI"
payload = {
"op": "set",
"path": ["interfaces", "ethernet", "eth1", "address"],
"value": "10.0.12.1/30"
}
data = {"data": str(payload).replace("'", '"'), "key": KEY}
resp = requests.post(URL, data=data, verify=False, timeout=5)
resp.raise_for_status()
print(resp.json())Étape 3 – Décrire l’état désiré en YAML
Créez desired_state.yaml :
interfaces:
eth1:
address: 10.0.12.1/30
bgp:
as_number: 65001
neighbors:
- ip: 10.0.12.2
remote_as: 65002
networks:
- 192.168.100.0/24Étape 4 – Script déclaratif
Le script ne construit et n’envoie que le delta entre l’état désiré et l’état actuel.
Écrivez apply_state.py qui :
- charge
desired_state.yaml(yaml.safe_load), - compare aux valeurs actuelles lues via l’API (
op: "show"ouop: "returnValue") — n’applique que ce qui diffère (idempotence), - construit et envoie les appels
set/deletenécessaires, - termine par un
commitpuis unsave.
payload_commit = {"op": "commit"}
payload_save = {"op": "save"}
# envoyer ces deux payloads après les 'set'Étape 5 – Vérification et non-régression
- Exécutez
apply_state.pyune première fois : la configuration BGP doit apparaître (show bgp summaryen CLI). - Modifiez une valeur manuellement en CLI (simulation de dérive de configuration), puis ré-exécutez le script : il doit corriger l’écart sans tout recréer.
- Ré-exécutez une seconde fois sans rien changer : le script ne doit envoyer aucune modification (idempotence vérifiée).
Rendu attendu
desired_state.yamletapply_state.pyversionnés.- Une capture
show bgp summaryconfirmant l’établissement de la session. - Une note expliquant comment le script détecte et corrige la dérive de configuration.
Points de vérification
- La session BGP s’établit entre les deux routeurs voisins.
- Une exécution répétée du script ne produit aucun changement inutile.
- Une modification manuelle est détectée et corrigée à la ré-exécution.