[PYTHON] Partager les événements de périphérique des conteneurs de commutateur Catalyst vers Cisco Spark

introduction

Suite de la session précédente.

référence: Prise en charge de Python et Bash sur les conteneurs exécutant le populaire Switch Catalyst de Cisco et le nouveau système d'exploitation (IOS-XE) sur les routeurs Python et Bash sur Cisco Catalyst IOS-XE

Il a également été constaté que le script Python sur le commutateur peut être automatiquement émis à tout moment en fonction de l'événement détecté en interne par IOS (EEM: émis à l'aide du gestionnaire d'événements intégré). Nous avons également constaté que EEM peut être écrit dans des scripts Python. Les deux derniers sont similaires, mais strictement différents. Cette fois, le journal des opérations de l'ancien. Cette fois, j'ai utilisé Catalyst 3850.

(Je veux vraiment le faire avec le Catalyst 9300, car il semble qu'il y ait peu de restrictions telles que le processeur MIPS pour 3850 et x86 pour 9300.)

référence: Exécution de scripts Tcl à l'aide de Cisco IOS EEM

couler

  1. Paramètres de guesthell sur Catalyst / IOS-XE
  2. Préparez l'environnement
  3. Créez un compte Cisco Spark et obtenez un jeton d'accès, etc.
  4. Créez un script python sur Catalyst (publiez un message sur Cisco Spark)
  5. Paramètres EEM sur Catalyst / IOS-XE
  6. Contrôle de fonctionnement

1. Paramètres de guesthell sur Catalyst / IOS-XE

Voir ci-dessous. Python et Bash sur Cisco Catalyst IOS-XE

2. Préparez l'environnement

Veuillez noter que le soi-disant port frontal n'est pas pris en charge pour la connexion réseau entre le guestshell et l'extérieur, uniquement le port de gestion.

Exemple de réglage


interface GigabitEthernet0/0
 vrf forwarding Mgmt-vrf
 ip address <ipaddress> <mask>
!
ip route vrf Mgmt-vrf 0.0.0.0 0.0.0.0 <mgmt-gateway>

La confirmation de la communication avec l'extérieur est OK.

[guestshell@guestshell ~]$ sudo ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=3.00 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=2.46 ms

Enregistrez le serveur de noms.

[guestshell@guestshell ~]$ cat /etc/resolv.conf 
nameserver <ipaddress>

La résolution de nom est également OK.

[guestshell@guestshell ~]$ sudo ping www.cisco.com
PING origin-www.cisco.com (72.163.4.161) 56(84) bytes of data.
64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=1 ttl=235 time=300 ms
64 bytes from www1.cisco.com (72.163.4.161): icmp_seq=2 ttl=235 time=292 ms

PIP est inclus depuis le début. Je vais mettre dans le module Demandes.

[guestshell@guestshell ~]$ sudo -E  pip install requests

Vérification.

[guestshell@guestshell ~]$ sudo pip list install
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
certifi (2017.7.27.1)
chardet (3.0.4)
idna (2.5)
pip (9.0.1)
requests (2.18.2)
setuptools (22.0.5)
urllib3 (1.22)

3. Créez un compte Cisco Spark et obtenez un jeton d'accès, etc.

Pour une brève explication de Cisco Spark et de l'acquisition de jetons d'accès, consultez les articles suivants. Publié sur Cisco Spark sur Ansible-cisco_spark

4. Créez un script python sur Catalyst (publiez un message sur Cisco Spark)

Le bootflash du commutateur: est monté sur / flash. Allez dans / flash, créez votre propre répertoire et créez un script.

[guestshell@guestshell ~]$ pwd
/home/guestshell
[guestshell@guestshell ~]$ cd /flash
[guestshell@guestshell flash]$ mkdir kikuta
[guestshell@guestshell flash]$ cd kikuta
[guestshell@guestshell kikuta]$ touch spark_post.py
[guestshell@guestshell kikuta]$ ls
spark_post.py

Vous pouvez créer un script localement et le transférer dans le bootflash du commutateur, ou s'il est simple, vous pouvez le créer avec vi sur le guesthell. Avec Cat9300, vous pouvez facilement installer l'éditeur avec yum, cela semble donc un peu plus pratique.

Points de script de test

--Facile à publier un message dans l'espace de Cisco Spark

spark_post.py


[guestshell@guestshell kikuta]$ cat spark_post.py 
import requests
import sys

ACCESS_TOKEN = "<my_access_token>"
ROOM_ID = "<my_room_id>"
YOUR_MESSAGE = sys.argv[1]

#Création d'en-tête
def setHeaders():
    accessToken_hdr = 'Bearer ' + ACCESS_TOKEN
    spark_header = {'Authorization': accessToken_hdr, 'Content-Type': 'application/json; charset=utf-8'}
    return spark_header

#Postez un message dans l'espace
def postMsg(the_header,roomId,message):
    message = '{"roomId":"' + roomId + '","text":"' + message +'"}'
    uri = 'https://api.ciscospark.com/v1/messages'
    resp = requests.post(uri, data=message, headers=the_header)
    print resp

header=setHeaders()
postMsg(header,ROOM_ID,YOUR_MESSAGE)

Opération confirmée sur le shell invité. Écrivez les arguments de manière appropriée.

[guestshell@guestshell kikuta]$ python ./spark_post.py "Hello from Cat3850"
<Response [200]>

J'ai pu poster gentiment.

SS 2017-07-28 8.44.20.png

5. Paramètres EEM sur Catalyst / IOS-XE

Dernière fois a été testé manuellement à l'aide de l'événement NONE, mais cette fois, c'est un exemple de l'événement Syslog. Émettez un événement déclenché par Syslog qui correspond à l'expression régulière et exécutez le script Python en tant qu'action EEM. Pour le moment, faites un Loopback qui n'a pas d'importance et fermez / non fermez.

interface Loopback100
 ip address 1.1.1.1 255.255.255.255

Dans EEM, le système renvoie une variable intégrée pour chaque événement émis, je voulais donc retirer le Syslog entier et le lancer à Spark, mais je n'ai pas réussi à le mettre dans l'argument de la commande. Les variables intégrées sont utiles, alors notez-les.

Embedded Event Manager Built-In Environment Variables Used in EEM Applets

Cette fois, l'interface Up / Down s'est produite, veuillez donc la vérifier. Au fait, j'ai essayé de créer un échantillon qui guide également le tableau de bord NMS. Puisque vous pouvez créer divers événements, par exemple, vous pouvez publier un tableau de bord ou un outil qui vous guide pour chaque déclencheur, comme un pair cassé, un tunnel instable, un retard vers un serveur distant dépassant le seuil, etc. Il peut y avoir. Création de tickets pour le système de tickets d'incident.

(205 et 206 sont redondants, mais ce sont des échantillons ..)

Cat3850-3#sh run | sec event manager
event manager applet syslog
 event syslog pattern "%LINEPROTO-5-UPDOWN:"
 action 100 syslog msg "Syslog ## $_syslog_msg ## by EEM"
 action 200 cli command "enable"
 action 205 cli command "guestshell run python /bootflash/kikuta/spark_post.py Interface_UpDownEvent_Detected"
 action 206 cli command "guestshell run python /bootflash/kikuta/spark_post.py Please_Confirm_theEvent_Soon"
 action 208 cli command "guestshell run python /bootflash/kikuta/spark_post.py https://10.71.154.112/"

6. Contrôle de fonctionnement

Activez le débogage pour vérifier le comportement d'EEM.

Cat3850-3#debug event manager action cli 
Debug EEM action cli debugging is on
Cat3850-3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Cat3850-3(config)#int loopback 100
Cat3850-3(config-if)#no shut
Cat3850-3(config-if)#end
Cat3850-3#
Cat3850-3#
*Jul 27 16:45:31.287: %SYS-5-CONFIG_I: Configured from console by console
*Jul 27 16:45:32.727: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback100, changed state to up
*Jul 27 16:45:32.728: %LINK-3-UPDOWN: Interface Loopback100, changed state to up
*Jul 27 16:45:32.738: %HA_EM-6-LOG: syslog: EEM Syslog 
*Jul 27 16:45:32.727: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback100, changed state to up by EEM
*Jul 27 16:45:32.739: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : CTL : cli_open called.
*Jul 27 16:45:32.742: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : Cat3850-3>
*Jul 27 16:45:32.743: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : IN  : Cat3850-3>enable
*Jul 27 16:45:32.755: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : Cat3850-3#
*Jul 27 16:45:32.756: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : IN  : Cat3850-3#guestshell run python /bootflash/kikuta/spark_post.py Interface_UpDownEvent_Detected
*Jul 27 16:45:39.782: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : <Response [200]>
*Jul 27 16:45:39.783: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : 
*Jul 27 16:45:39.783: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : 
*Jul 27 16:45:39.784: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : Cat3850-3#
*Jul 27 16:45:39.784: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : IN  : Cat3850-3#guestshell run python /bootflash/kikuta/spark_post.py Please_Confirm_theEvent_Soon
*Jul 27 16:45:46.716: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : <Response [200]>
*Jul 27 16:45:46.716: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : 
*Jul 27 16:45:46.717: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : 
*Jul 27 16:45:46.717: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : OUT : Cat3850-3#
*Jul 27 16:45:46.717: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : IN  : Cat3850-3#guestshell run python /bootflash/kikuta/spark_post.py https://10.71.154.112/
*Jul 27 16:45:52.795: %HA_EM-6-LOG: syslog : DEBUG(cli_lib) : : CTL : cli_close called.
*Jul 27 16:45:52.798: 
*Jul 27 16:45:52.798: tty is now going through its death sequence

se sentir bien.

SS 2017-07-28 8.57.40.png

c'est tout. Il semble que la gamme d'applications soit assez large, et il semble que vous puissiez jouer pendant un certain temps.

référence

Programmability Configuration Guide, Cisco IOS XE Everest 16.5.1a (Catalyst 3850 Switches)

Recommended Posts

Partager les événements de périphérique des conteneurs de commutateur Catalyst vers Cisco Spark
Passer de python2.7 à python3.6 (centos7)
Comment créer une bibliothèque .dylib à partir d'une bibliothèque .a avec OSX (El Capitan)
Faire une demande de Device Farm (appium python) à API Gateway
[Spark Data Frame] Changer une colonne de l'horizontale à la verticale (Scala)
Tout, de la création d'un environnement Python à son exécution sous Windows