Utilisation de Junos PyEZ pour gérer la configuration de sauvegarde sur les équipements Junos
L’utilitaire Junos PyEZ jnpr.junos.utils.config.Config vous permet de gérer la configuration de sauvegarde sur les équipements Junos. Une configuration de sauvegarde vous permet de définir une configuration de fonctionnement connue ou une configuration avec un état connu que vous pouvez restaurer à tout moment. Vous utilisez la configuration de sauvegarde lorsque vous devez revenir à une configuration connue ou en dernier recours si votre configuration de routeur ou de commutateur et les fichiers de configuration de secours deviennent endommagés au-delà de la réparation.
Comment gérer la configuration de sauvegarde
L’utilitaire jnpr.junos.utils.config.Config vous permet d’enregistrer, de récupérer, de charger et de supprimer la configuration de sauvegarde sur un équipement Junos. Après avoir créé une instance de la Config classe, vous utilisez la rescue() méthode pour gérer la configuration de sauvegarde. Indiquez l’action à exécuter sur la configuration de sauvegarde en définissant le paramètre de la rescue() méthode action sur l’opération souhaitée. Les valeurs d’action valides incluent "save", "get"et "reload""delete". Les exemples suivants illustrent l’appel de méthode pour chaque rescue() action de méthode.
- Enregistrer une configuration de sauvegarde
- Récupération de la configuration de sauvegarde
- Charger et valider la configuration de sauvegarde
- Supprimer la configuration de sauvegarde
Enregistrer une configuration de sauvegarde
Lorsque vous créez une configuration de sauvegarde, l’équipement enregistre la configuration validée la plus récente en tant que configuration de sauvegarde. Pour enregistrer la configuration active comme configuration de sauvegarde, spécifiez action="save" dans la liste d’arguments de rescue() méthode. Cette opération remplace toute configuration de sauvegarde existante. Par exemple :
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
cu.rescue(action='save')
Récupération de la configuration de sauvegarde
Pour récupérer une configuration de sauvegarde existante, spécifiez action="get"et, éventuellement, indiquez le format sous "json", "text" ou "xml". Si vous ne spécifiez pas de format, le format par défaut est le texte. Si l’unité ne dispose pas d’une configuration de sauvegarde existante, la rescue() méthode renvoie None.
L’exemple suivant récupère et imprime la configuration de sauvegarde, le cas échéant.
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from lxml import etree
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
rescue = cu.rescue(action='get', format='xml')
if rescue is None:
print ('No existing rescue configuration.')
else:
print (etree.tostring(rescue, encoding='unicode'))
Charger et valider la configuration de sauvegarde
Pour charger la configuration de sauvegarde existante dans la configuration du candidat, spécifiez action="reload". En l’absence de configuration de sauvegarde, l’opération de charge renvoie False. Après avoir chargé la configuration de sauvegarde, vous devez valider la configuration pour en faire la configuration active sur l’unité.
L’exemple suivant tente de charger la configuration de sauvegarde et, le cas échéant, la valide pour en faire la configuration active.
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
rescue = cu.rescue(action='reload')
if rescue is False:
print ('No existing rescue configuration.')
else:
cu.pdiff()
cu.commit()
Supprimer la configuration de sauvegarde
Pour supprimer la configuration de sauvegarde existante, spécifiez action="delete".
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='dc1a.example.com') as dev:
cu = Config(dev)
cu.rescue(action='delete')
Exemple : utiliser Junos PyEZ pour enregistrer une configuration de sauvegarde
Cet exemple utilise l’utilitaire Junos PyEZ jnpr.junos.utils.config.Config pour enregistrer une configuration de sauvegarde sur un équipement Junos, le cas échéant.
Exigences
Cet exemple utilise les composants matériels et logiciels suivants :
Serveur de gestion de configuration exécutant Python 3.5 ou version ultérieure et Junos PyEZ version 2.0 ou ultérieure
Équipement Junos activé NETCONF et compte utilisateur configuré avec les autorisations appropriées
Paire de clés publiques/privées SSH configurée pour l’utilisateur approprié sur le serveur et l’équipement Junos
Aperçu
Cet exemple présente une application Python qui utilise l’utilitaire Junos PyEZ Config pour enregistrer une configuration de sauvegarde sur l’équipement spécifié. Une configuration de sauvegarde vous permet de définir une configuration de fonctionnement connue ou une configuration avec un état connu que vous pouvez restaurer à tout moment. Lorsque vous créez une configuration de sauvegarde, l’équipement enregistre la configuration validée la plus récente en tant que configuration de sauvegarde.
L’application Python importe la Device classe, qui gère la connexion avec l’équipement Junos, la Config classe utilisée pour effectuer les opérations de configuration de sauvegarde sur l’équipement cible, ainsi que les exceptions requises à partir du jnpr.junos.exception module, qui contient les exceptions rencontrées lors de la gestion des équipements Junos. Après avoir créé l’instance Device pour l’équipement cible, la open() méthode établit une connexion et une session NETCONF avec l’équipement.
L’application détermine d’abord s’il existe une configuration de sauvegarde existante sur l’équipement cible. Si une configuration de sauvegarde existe, elle est imprimée en sortie standard. S’il n’y a pas de configuration de sauvegarde existante, l’application demande à l’équipement d’en créer une. Les rescue() paramètres de la méthode action sont définis pour "get" récupérer la configuration de sauvegarde existante et pour "save" créer une configuration de sauvegarde si celle-ci n’existe pas.
Après avoir effectué les opérations de configuration de sauvegarde, l’application appelle la close() méthode pour mettre fin à la session et à la connexion NETCONF. L’application inclut du code pour le traitement des exceptions, par exemple ConnectError pour les erreurs qui se produisent lors de la connexion à l’équipement. L’application inclut également du code pour gérer toutes les exceptions supplémentaires qui peuvent se produire.
Configuration
Créer l’application PyEZ Junos
Procédure étape par étape
Pour créer une application Python qui utilise Junos PyEZ pour enregistrer une configuration de sauvegarde, si celle-ci n’existe pas déjà sur l’équipement Junos :
Importer 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
Incluez toutes les variables requises, qui incluent par exemple le nom d’hôte de l’équipement géré.
host = 'dc1a.example.com'
Créez une définition de fonction et un
main()appel de fonction, et placez les autres instructions dans la définition.def main(): if __name__ == "__main__": main()
Créez une instance de la
Deviceclasse et indiquez le nom de l’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’équipement.
# 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.# Create an instance of Config cu = Config(dev)
Imprimez la configuration de sauvegarde existante ou enregistrez-en une si aucune n’existe.
# Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err)
Terminez la session NETCONF et fermez la connexion avec l’équipement.
# End the NETCONF session and close the connection dev.close()
Résultats
Sur le serveur de gestion de la configuration, vérifiez l’application 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
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
# Create an instance of Config
cu = Config(dev)
# Print existing rescue configuration or save one if none exists
try:
rescue = cu.rescue(action='get', format='text')
if rescue is None:
print ('No existing rescue configuration.')
print ('Saving rescue configuration.')
cu.rescue(action='save')
else:
print ('Rescue configuration found:')
print (rescue)
except Exception as err:
print (err)
# End the NETCONF session and close the connection
dev.close()
if __name__ == "__main__":
main()
Exécuter le code PyEZ Junos
Exécution de l’application
Pour exécuter le code PyEZ Junos :
-
Sur le serveur de gestion de la configuration, exécutez l’application.
user@server:~$ python3 junos-pyez-config-rescue-create.py No existing rescue configuration. Saving rescue configuration.
Dans cet exemple, l’équipement cible ne dispose pas d’une configuration de sauvegarde existante. L’équipement en enregistre donc une. Si vous exécutez l’application une seconde fois, elle sort la configuration de sauvegarde qui a été enregistrée pendant l’exécution initiale.
Vérification
Vérifier la configuration
But
Vérifiez que la configuration de sauvegarde existe sur l’équipement Junos.
Action
Connectez-vous à l’équipement Junos et affichez la configuration de sauvegarde. Par exemple :
user@dc1a> show system configuration rescue
## Last changed: 2014-07-31 17:59:04 PDT
version 13.3R1.8;
groups {
re0 {
system {
host-name dc1a;
...
[output truncated]
Dépannage
Résoudre les erreurs d’action non prises en charge
Problème
Le code PyEZ Junos génère un message d’erreur indiquant une action non prise en charge.
unsupported action:
Ce message d’erreur est généré lorsque l’argument de rescue() méthode action contient une valeur non valide.
Solution
Définissez l’argument de rescue() la méthode action sur une action valide, qui inclut "save", "get""reload"et "delete".