[PYTHON] Geben Sie Geräteereignisse von Catalyst-Switch-Containern an Cisco Spark weiter

Einführung

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

fließen

  1. Guestshell-Einstellungen unter Catalyst / IOS-XE
  2. Bereiten Sie die Umgebung vor
  3. Erstellen Sie ein Cisco Spark-Konto und erhalten Sie ein Zugriffstoken usw.
  4. Erstellen Sie ein Python-Skript in Catalyst (Senden Sie eine Nachricht an Cisco Spark).
  5. EEM-Einstellungen unter Catalyst / IOS-XE
  6. Funktionsprüfung

1. Guestshell-Einstellungen unter Catalyst / IOS-XE

Siehe unten. Python und Bash unter Cisco Catalyst IOS-XE

2. Bereiten Sie die Umgebung vor

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)

3. Erstellen Sie ein Cisco Spark-Konto und erhalten Sie ein Zugriffstoken usw.

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

4. Erstellen Sie ein Python-Skript in Catalyst (Senden Sie eine Nachricht an 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.

Testskriptpunkte testen

--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.

SS 2017-07-28 8.44.20.png

5. EEM-Einstellungen unter Catalyst / IOS-XE

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/"

6. Funktionsprüfung

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.

SS 2017-07-28 8.57.40.png

das ist alles. Es scheint, dass das Anwendungsspektrum ziemlich breit ist und Sie eine Weile spielen können.

Referenz

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

Recommended Posts

Geben Sie Geräteereignisse von Catalyst-Switch-Containern an Cisco Spark weiter
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
So erstellen Sie eine .dylib-Bibliothek aus einer .a-Bibliothek mit OSX (El Capitan)
Stellen Sie eine Anfrage von der Gerätefarm (Appium Python) an das API-Gateway
[Spark Data Frame] Ändern Sie eine Spalte von horizontal in vertikal (Scala).
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows