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
Voir ci-dessous. Python et Bash sur Cisco Catalyst IOS-XE
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)
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
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.
--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.
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/"
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.
c'est tout. Il semble que la gamme d'applications soit assez large, et il semble que vous puissiez jouer pendant un certain temps.
Programmability Configuration Guide, Cisco IOS XE Everest 16.5.1a (Catalyst 3850 Switches)
Recommended Posts