Exemple : modifier la configuration à l’aide de scripts Python Op
Les scripts Op vous permettent d’apporter des modifications contrôlées à la configuration de Junos OS. Les scripts Op sont avantageux, car ils peuvent collecter des informations opérationnelles sur un équipement et mettre à jour la configuration en fonction de ces informations. Les utilisateurs expérimentés qui connaissent Junos OS peuvent écrire des scripts opérationnels qui demandent des informations de configuration pertinentes et modifient la configuration en conséquence. Ainsi, les utilisateurs qui ont moins d’expérience avec Junos OS peuvent modifier la configuration en toute sécurité à l’aide du script. Cet exemple illustre comment apporter des modifications à la configuration de Junos OS à l’aide d’un script d’exploitation Python qui exploite les API PyEZ Junos.
Exigences
Cet exemple utilise les composants matériels et logiciels suivants :
Routeur MX Series exécutant Junos OS Version 16.1R3 ou version ultérieure incluant le package d’extensions Python.
Script de présentation et d’exploitation
Les scripts Python op peuvent apporter des modifications à la configuration de Junos OS à l’aide de l’utilitaire Junos PyEZjnpr.junos.utils.config.Config
. L’utilitaire Junos PyEZ Config
fournit des méthodes d’instance pour verrouiller la configuration, charger les données de configuration et spécifier comment les intégrer à la configuration, valider la configuration et déverrouiller la configuration. Pour plus d’informations sur l’utilisation de Junos PyEZ pour configurer les équipements Junos, reportez-vous à la rubrique Utilisation de Junos PyEZ pour configurer les équipements Junos. Le script Python op de cet exemple montre comment mettre à jour la configuration pour désactiver une interface sur l’équipement local.
Le script Python op importe les éléments suivants :
Device
classe : gère la connexion à l’équipement JunosConfig
classe : exécute des commandes de mode de configuration sur l’équipement ciblejnpr.junos.exception
module : contient les exceptions rencontrées lors de la gestion des équipements Junosjcs
module : permet au script d’exécuter les fonctions d’extension prises en charge
Dans cet exemple, la usage
variable est initialisée avec une description générale de la fonction du script. Une fois le script exécuté, le script affiche la description de l’utilisation sur l’interface de ligne de commande afin que l’utilisateur puisse vérifier l’objectif de ce script.
Le script appelle la jcs.get_input()
fonction d’extension, qui invite l’utilisateur à saisir le nom de l’interface à désactiver et enregistre le nom de l’interface dans la interface
variable. La config_xml
variable est une chaîne XML qui définit les changements de configuration.
Le script ne fournit pas de paramètre d’hôte lors de la création de l’instance Device
, ce qui permet à la open()
méthode d’établir une connexion avec l’équipement local. Cet exemple crée l’instance à l’aide Config
d’un gestionnaire mode='exclusive'
de contexte afin d’obtenir un verrouillage exclusif de la configuration lors de sa modification. Dans ce mode, le gestionnaire de contexte gère automatiquement le verrouillage et le déverrouillage de la configuration du candidat. Les Config
méthodes d’utilité chargent les modifications de configuration dans la configuration du candidat en tant qu’opération load merge
et valident la configuration. La dev.close()
méthode ferme la connexion.
Python Script
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
Configuration
Procédure étape par étape
Pour télécharger, activer et tester le script :
-
Copiez le script dans un fichier texte, nommez le fichier config-change.py et copiez-le dans le répertoire /var/db/scripts/op/ de l’équipement.
Note:Les scripts Python non signés doivent appartenir à un utilisateur racine ou racine dans la classe de connexion junos OS
super-user
, et seul le propriétaire du fichier peut disposer d’une autorisation d’écriture pour le fichier. -
En mode configuration, incluez l’instruction
file config-change.py
au niveau de la[edit system scripts op]
hiérarchie.[edit system scripts] user@host# set op file config-change.py
-
Activez l’exécution de scripts Python non signés sur l’équipement.
[edit system scripts] user@host# set language python
Note:Configurez l’instruction
language python3
pour utiliser Python 3 pour exécuter des scripts Python, ou configurez l’instructionlanguage python
pour utiliser Python 2.7 pour exécuter des scripts Python. Pour plus d’informations, consultez la langue. -
Émettre la
commit and-quit
commande pour valider la configuration et revenir en mode opérationnel.[edit] user@host# commit and-quit
-
Avant d’exécuter le script, exécutez la commande du
show interfaces interface-name
mode opérationnel et enregistrez l’état actuel de l’interface qui sera désactivée par le script. -
Exécutez le script d’exploitation en exécutant la commande du
op config-change.py
mode opérationnel.user@host> op config-change.py This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0 Loading and committing configuration changes
Vérification
Vérification de la validation
But
Vérifiez que la validation a réussi.
Action
Vous devez inclure du code dans votre script qui détecte tous les avertissements ou erreurs associés à la modification et à la validation de la configuration. Vous pouvez ainsi déterminer plus facilement si la validation a réussi. En l’absence de messages d’avertissement ou d’erreur, vous pouvez vérifier la réussite de la validation de plusieurs manières.
Vérifiez que le journal de validation a réussi.
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
Vérifiez que l’opération de validation a été enregistrée dans le fichier de messages syslog. Dans ce cas, un message s’affiche
SNMP_TRAP_LINK_DOWN
également pour l’interface désactivée. Selon vos paramètres de configuration pour les options de trace, ce message peut ou non apparaître dans votre fichier journal.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Vérification des modifications de configuration
But
Vérifiez que les modifications correctes sont intégrées à la configuration.
Action
Affichez la configuration et vérifiez que les modifications sont visibles pour l’interface spécifiée.
user@host> show configuration interfaces so-0/0/0 disable;
Par exemple, vous pouvez également émettre la commande du
show interfaces interface-name
mode opérationnel pour vérifier que l’interface a été désactivée. Dans ce cas, le résultat capturé avant la désactivation de l’interface indique que l’interface estEnabled
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
Le résultat capturé après avoir exécuté le script pour désactiver l’interface indique que l’interface est maintenant
Administratively down
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None