AUF DIESER SEITE
Beispiel: Generieren einer benutzerdefinierten Systemprotokollmeldung
Junos OS-Commit-Skripte können während eines Commit-Vorgangs benutzerdefinierte Systemprotokollmeldungen generieren, die Sie warnen, wenn die Konfiguration nicht den benutzerdefinierten Konfigurationsregeln entspricht. Der Commit-Prozess wird durch das Generieren von Systemprotokollmeldungen nicht beeinflusst. In diesem Beispiel wird ein Commitskript erstellt, das eine benutzerdefinierte Systemprotokollmeldung generiert, wenn eine bestimmte Anweisung nicht in der Gerätekonfiguration enthalten ist.
Anforderungen
Junos OS Version 16.1R3 oder höher bei Verwendung eines Python-Skripts.
Übersicht und Commit-Skript
Schreiben Sie mithilfe eines Commitskripts eine benutzerdefinierte Systemprotokollmeldung, die angezeigt wird, wenn die read-write
Anweisung nicht auf der Hierarchieebene [edit snmp community community-name authorization]
enthalten ist.
Das Skript wird in XSLT, SLAX und Python angezeigt.
XSLT-Syntax
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:for-each select="snmp/community"> <xsl:if test="not(authorization) or (authorization != 'read-write')"> <xsl:variable name="community"> <xsl:call-template name="jcs:edit-path"/> </xsl:variable> <xsl:variable name="message" select="concat('SNMP community does not have read-write access: ', $community)"/> <syslog> <message> <xsl:value-of select="$message"/> </message> </syslog> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
SLAX-Syntax
version 1.2; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { for-each (snmp/community) { if ( not(authorization) or (authorization != "read-write")) { var $community = call jcs:edit-path(); var $message = "SNMP community does not have read-write access: " _ $community; <syslog> { <message> $message; } } } }
Python-Syntax
from junos import Junos_Configuration import jcs def main(): root = Junos_Configuration for element in root.xpath("./snmp/community"): if element.find("authorization") is None or \ element.find("authorization").text != 'read-write': jcs.syslog("172", "SNMP community does not have read-write access: " + element.find('name').text) if __name__ == '__main__': main()
Konfiguration
Verfahren
Schritt-für-Schritt-Anleitung
Laden Sie das Skript herunter, aktivieren und testen Sie es. Um zu testen, ob ein Commit-Skript eine Systemprotokollmeldung ordnungsgemäß generiert, stellen Sie sicher, dass die Kandidatenkonfiguration die Bedingung enthält, die die Systemprotokollmeldung auslöst. Stellen Sie in diesem Beispiel sicher, dass die read-write
Anweisung nicht auf der [edit snmp community community-name authorization]
Hierarchieebene enthalten ist.
So testen Sie das Beispiel in diesem Thema:
Kopieren Sie das Skript in eine Textdatei, nennen Sie die Datei read-write.xsl, read-write.slax oder read-write.py nach Bedarf und kopieren Sie sie in das Verzeichnis /var/db/scripts/commit/ auf dem Gerät.
Anmerkung:Unsignierte Python-Skripte müssen entweder im Besitz von root oder eines Benutzers in der Junos OS-Anmeldeklasse
super-user
sein, und nur der Dateieigentümer kann Schreibberechtigungen für die Datei haben.Konfigurieren Sie im Konfigurationsmodus die
file
Anweisung und den Skriptdateinamen auf Hierarchieebene[edit system scripts commit]
.[edit] user@host# set system scripts commit file read-write.xsl
Wenn das Skript in Python geschrieben ist, aktivieren Sie die Ausführung von Python-Skripten ohne Vorzeichen.
[edit] user@host# set system scripts language python
Anmerkung:Konfigurieren Sie die Anweisung für die
language python3
Verwendung von Python 3 zum Ausführen von Python-Skripts, oder konfigurieren Sie die Anweisung für dielanguage python
Verwendung von Python 2.7 zum Ausführen von Python-Skripts. Weitere Informationen finden Sie unter Sprache.(Optional) Um die Bedingung zu testen, löschen Sie vorübergehend die Berechtigung für eine vorhandene SNMP-Community, wenn die
read-write
Anweisung auf der[edit snmp community community-name authorization]
Hierarchieebene für jede Community enthalten ist.[edit] user@host# delete snmp community community-name authorization read-write
Geben Sie den folgenden Befehl aus, um zu überprüfen, ob die Systemprotokollierung so konfiguriert ist, dass in eine Datei geschrieben wird (ein häufig verwendeter Dateiname ist messages):
[edit] user@host# show system syslog
Informationen zur Konfiguration des Systemprotokolls finden Sie im Systemprotokoll-Explorer.
Geben Sie den Befehl aus, um die
commit
Konfiguration zu bestätigen.user@host# commit
Verifizierung
Überprüfen der Skriptausführung
Zweck
Überprüfen Sie die vom Commit-Skript generierte Systemprotokollmeldung.
Systemprotokollmeldungen werden während eines Commit-Vorgangs für Python-, SLAX- und XSLT-Skripte generiert, aber nur während eines Commit-Check-Vorgangs für Python-Skripts. Dies bedeutet, dass Sie die Befehle für den commit check | display xml
Konfigurationsmodus oder commit check | display detail
nicht verwenden können, um die Ausgabe von Systemprotokollmeldungen für SLAX- und XSLT-Skripte zu überprüfen.
Aktion
Wenn der Commit-Vorgang abgeschlossen ist, überprüfen Sie die Systemprotokolldatei. Das Standardverzeichnis für Protokolldateien ist /var/log/. Zeigen Sie die Protokolldatei an, indem Sie den Befehl für den show log filename
Betriebsmodus eingeben. Wenn z. B. Nachrichten in der Nachrichtendatei protokolliert sind, geben Sie den folgenden Befehl aus:
user@host> show log messages | match cscript
Systemprotokolleinträge, die von Commit-Skripten generiert werden, haben das folgende Format:
timestamp host-name cscript: message
Da die Anweisung read-write
nicht auf der [edit snmp community community-name authorization]
Hierarchieebene enthalten war, sollte das Commit-Skript die Meldung "SNMP-Community hat keinen Lese-/Schreibzugriff" in der Systemprotokolldatei generieren.
Jun 3 14:34:37 host-name cscript: SNMP community does not have read-write access: [edit snmp community community-name]