SUR CETTE PAGE
Exemple : Utilisation de Junos PyEZ pour restaurer la configuration
La bibliothèque Junos PyEZ vous permet d’effectuer des tâches opérationnelles et de configuration sur les équipements Junos. Cet exemple utilise l’utilitaire Junos PyEZ jnpr.junos.utils.config.Config
pour restaurer la configuration sur un périphérique Junos.
Exigences
Cet exemple utilise les composants matériels et logiciels suivants :
Serveur de gestion de la configuration exécutant Python 3.5 ou version ultérieure et Junos PyEZ version 2.0 ou ultérieure
Équipement Junos sur lequel NETCONF est activé et compte d’utilisateur configuré avec les autorisations appropriées
Paire de clés publique/privée SSH configurée pour l’utilisateur approprié sur le serveur et le périphérique Junos
Aperçu
Cet exemple présente une application Python qui utilise l’utilitaire Junos PyEZ Config
pour restaurer la configuration sur l’équipement spécifié. Les équipements Junos stockent une copie de la dernière configuration validée et jusqu’à 49 configurations précédentes. Vous pouvez restaurer n’importe quelle configuration stockée. Ceci est utile lorsque les modifications de configuration entraînent des résultats indésirables et que vous souhaitez revenir à une configuration de travail connue. La restauration de la configuration est similaire au processus de modification de la configuration sur l’appareil, mais au lieu de charger les données de configuration, vous effectuez une restauration, qui remplace l’intégralité de la configuration candidate par une configuration précédemment validée.
L’application Python importe la Device
classe, qui gère la connexion avec le périphérique Junos, la classe, qui est utilisée pour exécuter des commandes en mode de configuration sur le périphérique cible, et les Config
exceptions requises du module, qui contient les exceptions rencontrées lors de la jnpr.junos.exception
gestion des périphériques Junos.
Après avoir créé l’instance Device
de l’équipement cible, la open()
méthode établit une connexion et une session NETCONF avec l’appareil. Les Config
méthodes utilitaires verrouillent, restaurent, valident et déverrouillent ensuite la configuration candidate.
La rollback()
méthode n’a qu’un seul paramètre, rb_id
, qui est l’ID de restauration spécifiant la configuration stockée à charger. Les valeurs valides sont égales à 0 (zéro, pour la configuration validée la plus récente) à une valeur inférieure au nombre de configurations précédentes stockées (la valeur maximale est de 49). Si vous omettez ce paramètre dans l’appel de méthode, la valeur par défaut est 0. Cet exemple charge la configuration avec l’ID de restauration 1, qui correspond à la configuration validée juste avant la configuration active. La rollback()
méthode charge la configuration dans la configuration candidate, qui est ensuite validée pour la rendre active en appelant la commit()
méthode.
Après avoir restauré et validé la configuration, l’application appelle la close()
méthode pour mettre fin à la session et à la connexion NETCONF. L’application inclut du code pour la gestion des exceptions, telles que LockError
les erreurs qui se produisent lors du verrouillage de la configuration et CommitError
les erreurs qui se produisent pendant l’opération de validation. L’application inclut également du code pour gérer toutes les exceptions supplémentaires qui pourraient se produire.
Configuration
Création de l’application Junos PyEZ
Procédure étape par étape
Pour créer une application Python qui utilise Junos PyEZ pour restaurer la configuration sur un périphérique Junos :
Importez tous les modules, classes et objets requis.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError
Incluez toutes les variables requises, ce qui, dans cet exemple, inclut le nom d’hôte de l’appareil géré.
host = 'dc1a.example.com'
Créez une définition de fonction et un
main()
appel de fonction, puis placez les instructions restantes dans la définition.def main(): if __name__ == "__main__": main()
Créez une instance de la
Device
classe et fournissez le nom d’hôte et tous les paramètres requis pour cette connexion spécifique.dev = Device(host=host)
Ouvrez une connexion et établissez une session NETCONF avec l’appareil.
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
Créez une instance de l’utilitaire
Config
.# Set up config object cu = Config(dev)
Verrouillez la configuration.
# Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return
Restaurez et validez la configuration, et gérez les erreurs éventuelles.
# Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err))
Déverrouillez la configuration, puis mettez fin à la session NETCONF et fermez la connexion avec le périphérique.
finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return
Résultats
Sur le serveur de gestion de la configuration, examinez la demande terminée. Si l’application n’affiche pas le code prévu, répétez les instructions de cet exemple pour corriger l’application.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError host = 'dc1a.example.com' def main(): dev = Device(host=host) # open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return # Set up config object cu = Config(dev) # Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return # Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err)) finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return if __name__ == "__main__": main()
Exécuter le code Junos PyEZ
Exécuter l’application
Pour exécuter le code Junos PyEZ :
-
Sur le serveur de gestion de la configuration, exécutez l’application.
user@server:~$ python3 junos-pyez-config-rollback.py Locking the configuration Rolling back the configuration Committing the configuration Unlocking the configuration
Vérification
Vérification de la configuration
But
Vérifiez que la configuration a été correctement restaurée sur l’équipement Junos.
Action
Connectez-vous à l’équipement Junos et affichez la configuration ou les différences de configuration ainsi que le fichier journal. Par exemple :
user@dc1a> show configuration | compare rollback 1 [edit system scripts op] - file bgp-neighbors.slax; [edit interfaces] - ge-1/0/0 { - unit 0 { - family inet { - address 198.51.100.1/26; - } - } - } + ge-1/1/0 { + unit 0 { + family inet { + address 198.51.100.65/26; + } + } + }
user@dc1a> show log messages Sep 19 12:42:06 dc1a sshd[5838]: Accepted publickey for user from 198.51.100.1 port 58663 ssh2: RSA 02:dd:53:3e:f9:97:dd:1f:d9:31:e9:7f:82:06:aa:67 Sep 19 12:42:10 dc1a file[5841]: UI_LOAD_EVENT: User 'user' is performing a 'rollback 1' Sep 19 12:42:11 dc1a file[5841]: UI_COMMIT: User 'user' requested 'commit' operation (comment: none) Sep 19 12:42:26 dc1a file[5841]: UI_COMMIT_COMPLETED: commit complete
Sens
Les différences de configuration et le contenu du fichier journal indiquent que la configuration a été restaurée et validée avec succès sur l’appareil.