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

Logique déclarative idempotente de apply_state.py Logique déclarative idempotente de apply_state.py Le script ne construit et n’envoie que le delta entre l’état désiré et l’état actuel.

Écrivez apply_state.py qui :

  1. charge desired_state.yaml (yaml.safe_load),
  2. compare aux valeurs actuelles lues via l’API (op: "show" ou op: "returnValue") — n’applique que ce qui diffère (idempotence),
  3. construit et envoie les appels set/delete nécessaires,
  4. termine par un commit puis un save.
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.py une première fois : la configuration BGP doit apparaître (show bgp summary en 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.yaml et apply_state.py versionnés.
  • Une capture show bgp summary confirmant 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.