Fortsetzung der vorherigen Sitzung.
Referenz: Unterstützung für Python und Bash auf Containern, auf denen der beliebte Switch Catalyst von Cisco und das neue Betriebssystem (IOS-XE) auf Routern ausgeführt werden Python und Bash unter Cisco Catalyst IOS-XE
Es wurde auch festgestellt, dass das Python-Skript auf dem Switch jederzeit automatisch ausgegeben werden kann, basierend auf dem von IOS intern erkannten Ereignis (EEM: Ausgestellt mit Embedded Event Manager). Wir haben auch festgestellt, dass EEM in Python-Skripten geschrieben werden kann. Die beiden letzteren sind ähnlich, aber streng unterschiedlich. Diesmal das Betriebsprotokoll des ersteren. Dieses Mal habe ich Catalyst 3850 verwendet.
(Eigentlich möchte ich es mit Catalyst 9300 machen, da 3850 MIPS-CPU, 9300 x86 usw. ist, scheint es nur wenige Einschränkungen zu geben.)
Referenz: Ausführen von Tcl-Skripten mit Cisco IOS EEM
Siehe unten. Python und Bash unter Cisco Catalyst IOS-XE
Bitte beachten Sie, dass der sogenannte Front-Port für die Netzwerkverbindung zwischen Guestshell und Außen nicht unterstützt wird, sondern nur den Management-Port.
Einstellungsbeispiel
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>
Die Bestätigung der Kommunikation mit der Außenwelt ist in Ordnung.
[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
Registrieren Sie den Nameserver.
[guestshell@guestshell ~]$ cat /etc/resolv.conf
nameserver <ipaddress>
Die Namensauflösung ist ebenfalls in Ordnung.
[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 ist von Anfang an enthalten. Ich werde das Requests-Modul einfügen.
[guestshell@guestshell ~]$ sudo -E pip install requests
Bestätigung.
[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)
Eine kurze Erläuterung der Erfassung von Cisco Spark und Zugriffstoken finden Sie in den folgenden Artikeln. Gepostet an Cisco Spark unter Ansible-cisco_spark
Der Switch Bootflash: ist auf / flash montiert. Gehen Sie zu / flash, erstellen Sie Ihr eigenes Verzeichnis und erstellen Sie ein Skript.
[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
Sie können ein Skript lokal erstellen und auf den Bootflash des Switches übertragen. Wenn es einfach ist, können Sie es mit vi in der Guestshell erstellen. Mit Cat9300 können Sie den Editor ganz einfach mit yum installieren, sodass er etwas praktischer erscheint.
--Einfaches Posten einer Nachricht im Bereich von 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]
#Header-Erstellung
def setHeaders():
accessToken_hdr = 'Bearer ' + ACCESS_TOKEN
spark_header = {'Authorization': accessToken_hdr, 'Content-Type': 'application/json; charset=utf-8'}
return spark_header
#Poste eine Nachricht in das Feld
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)
Bestätigter Vorgang für die Gast-Shell. Schreiben Sie die Argumente entsprechend.
[guestshell@guestshell kikuta]$ python ./spark_post.py "Hello from Cat3850"
<Response [200]>
Ich konnte gut posten.
Letztes Mal wurde manuell mit dem NONE-Ereignis getestet, diesmal ist es jedoch ein Beispiel für das Syslog-Ereignis. Geben Sie ein von Syslog ausgelöstes Ereignis aus, das dem regulären Ausdruck entspricht, und führen Sie das Python-Skript als EEM-Aktion aus. Erstellen Sie vorerst einen Loopback, der keine Rolle spielt, und schließen Sie / no shut.
interface Loopback100
ip address 1.1.1.1 255.255.255.255
In EEM gibt das System für jedes ausgegebene Ereignis eine integrierte Variable zurück. Daher wollte ich das gesamte Syslog entfernen und an Spark senden, habe es jedoch nicht in das Argument des Befehls eingefügt. Die integrierten Variablen sind nützlich. Notieren Sie sich diese.
Embedded Event Manager Built-In Environment Variables Used in EEM Applets
Dieses Mal ist die Schnittstelle nach oben / unten aufgetreten. Überprüfen Sie sie daher. Übrigens habe ich versucht, ein Beispiel zu erstellen, das auch das NMS-Dashboard führt. Da Sie beispielsweise verschiedene Ereignisse erstellen können, können Sie ein Dashboard oder Tool veröffentlichen, das Sie für jeden Trigger führt, z. B. einen defekten Peer, einen instabilen Tunnel, eine Verzögerung zu einem entfernten Server, die den Schwellenwert überschreitet usw. Es kann sein. Erstellen von Tickets für das Incident-Ticket-System.
(205 und 206 sind redundant, aber sie sind Beispiele.)
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/"
Aktivieren Sie das Debugging, um das Verhalten von EEM zu überprüfen.
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
wohlfühlen.
das ist alles. Es scheint, dass das Anwendungsspektrum ziemlich breit ist und Sie eine Weile spielen können.
Programmability Configuration Guide, Cisco IOS XE Everest 16.5.1a (Catalyst 3850 Switches)
Recommended Posts