Globale Parameter und Variablen in Junos OS-Automatisierungsskripten
Junos OS liefert automatisch Eingaben für Automatisierungsskripts, wenn diese ausgeführt werden. Das Skript kann auf diese Eingabe verweisen, die gerätespezifische Informationen über die Skriptausführungsumgebung enthält, z. B. den Gerätehostnamen, den Skripttyp und den Benutzer, der das Skript ausführt. Diese Informationen sind nützlich für die Erstellung von Skripts, die auf eine Vielzahl komplexer Szenarien reagieren.
SLAX- und XSLT-Skripte, die die Datei junos.xsl importieren, können diese Informationen mithilfe der $junos-context
globalen Variablen referenzieren, bei der es sich um einen Knotensatz handelt. Die Importdatei junos.xsl deklariert außerdem mehrere vordefinierte globale Parameter, die es den Skripten ermöglichen, einfacher auf eine Teilmenge dieser Informationen zu verweisen. Python-Skripte können über das Wörterbuch, das junos.Junos_Context
in das Skript importiert werden muss, auf diese Informationen verweisen.
Um die vordefinierten Parameter oder die globale Variable in SLAX- und XSLT-Skripten verwenden zu können, müssen Sie die Datei junos.xsl importieren, indem Sie das <xsl:import>
Tag in die Stylesheet-Deklaration eines XSLT-Skripts einfügen oder indem Sie die import
Anweisung in ein SLAX-Skript einfügen und den Speicherort der Datei junos.xsl angeben, wie im folgenden Beispielcode gezeigt:
XSLT-Syntax
<?xml version="1.0"?> <xsl:stylesheet version="1.0"> <xsl:import href="../import/junos.xsl"/> ... </xsl: stylesheet>
SLAX-Syntax
version 1.2; import "../import/junos.xsl";
Python
Um auf die Informationen in Python-Skripten zu verweisen, importieren Sie das Junos_Context
Wörterbuch.
from junos import Junos_Context
Die Skripteingabe wird in den folgenden Abschnitten ausführlich beschrieben:
Globale Parameter in SLAX- und XSLT-Skripten verfügbar
Mehrere vordefinierte globale Parameter stehen für die Verwendung in SLAX- und XSLT-Automatisierungsskripten zur Verfügung, die die Datei junos.xsl importieren. Die Parameter geben Auskunft über die Junos OS-Umgebung. In Tabelle 1 werden die integrierten Argumente beschrieben.
Name |
Beschreibung |
Beispiel |
---|---|---|
$hostname |
Hostname des lokalen Geräts |
Tokio |
$localtime |
Ortszeit, zu der das Skript ausgeführt wird |
Fri Dec 10 11:42:21 2010 |
$localtime-ISO |
Ortszeit im ISO-Format, wenn das Skript ausgeführt wird |
2010-12-10 11:42:21 PST |
$product |
Modell des lokalen Geräts |
M10i |
$script |
Dateiname des ausführenden Skripts |
test.slax |
$user |
Lokaler Name des Benutzers, der das Skript ausführt |
wurzel |
Die vordefinierten globalen Parameter sind in der Datei junos.xsl deklariert. Sie müssen diese Parameter nicht in einem Skript deklarieren, um sie verwenden zu können. Greifen Sie auf den Wert der globalen Parameter in einem Skript zu, indem Sie dem Parameternamen das Dollarzeichen ($) voranstellen, wie im folgenden Beispiel gezeigt:
SLAX-Syntax:
if ($user != "root") { var $script-message = $user _ " does not have permission to execute " _ $script; expr jcs:output($script-message); }
XSLT-Syntax:
<xsl:if test="$user != 'root'"> <xsl:variable name="script-message" select="concat($user, ' does not have permission to execute ', $script)"/> <xsl:value-of select="jcs:output($script-message)"/> </xsl:if>
Globale Variable, die in Automatisierungsskripten verfügbar ist
Commit-, Ereignis- und Op-Skripte können auf bestimmte Umgebungsinformationen zugreifen, die dem Skript bei der Ausführung zur Verfügung gestellt werden. Um auf diese Informationen zugreifen zu können, müssen Python-Skripte das junos.Junos_Context
Wörterbuch importieren und darauf verweisen, und SLAX- und XSLT-Skripte, die die Datei junos.xsl importieren, können auf die $junos-context
globale Variable verweisen. $junos-context
und Junos_Context
enthalten identische Informationen, jedoch in einem Format, das für die jeweilige Skriptsprache geeignet ist.
Bei der $junos-context
Variablen handelt es sich um eine Knotenmenge, die den <junos-context>
Knoten und die folgende Hierarchie enthält, die in der Quellstruktur aller Skripts enthalten und in diese eingebettet ist:
<junos-context> <chassis></chassis> <hostname></hostname> <localtime></localtime> <localtime-iso></localtime-iso> <pid></pid> <product></product> <re-master/> <routing-engine-name></routing-engine-name> <script-type></script-type> <tty></tty> <user-context> <class-name></class-name> <login-name></login-name> <uid></uid> <user></user> </user-context> </junos-context>
Darüber hinaus sind je nach Art des ausgeführten Skripts skriptspezifische Informationen verfügbar. Bei op-Skripten ist das <op-context>
Element auch in der Quellstruktur enthalten, die für ein op-Skript bereitgestellt wird:
<junos-context> <op-context> <via-url/> </op-context> </junos-context>
Bei Commit-Skripten ist das <commit-context>
Element auch in der Quellstruktur enthalten, die für ein Commit-Skript bereitgestellt wird:
<junos-context> <commit-context> <commit-comment>"This is a test commit"</commit-comment> <commit-boot/> <commit-check/> <commit-sync/> <commit-confirm/> <database-path/> </commit-context> </junos-context>
Tabelle 2 identifiziert jeden Knoten des $junos-context
variablen Knotensatzes, enthält eine kurze Beschreibung des Knotens und enthält Beispiele für Werte für alle Elemente, die nicht als leeres Tag in ein Skript eingegeben werden.
Übergeordneter Knoten |
Knoten |
Beschreibung |
Beispielinhalte |
---|---|---|---|
<junos-context> |
<Gehäuse> |
Gibt an, ob das Skript auf einer Komponente einer Routingmatrix, der Root System Domain (RSD) oder einer Protected System Domain (PSD) ausgeführt wird |
scc, lcc (TX-Matrix)psd, rsd (JCS)andere |
<Hostname> |
Hostname des lokalen Geräts |
Tokio |
|
<Ortszeit> |
Ortszeit, zu der das Skript ausgeführt wird |
Fri Dec 10 11:42:21 2010 |
|
<localtime-iso> |
Ortszeit im ISO-Format, wenn das Skript ausgeführt wird |
2010-12-10 11:42:21 PST |
|
<pid> |
cscript-Prozess-ID |
5257 |
|
<Produkt> |
Modell des lokalen Geräts |
M10i |
|
<Re-Master/> |
Leeres Element enthalten, wenn das Skript auf der primären Routing-Engine ausgeführt wird |
||
<Name der Routing-Engine> |
Routing-Engine, auf der das Skript ausgeführt wird |
re0 |
|
<script-type> |
Typ des ausgeführten Skripts |
Op |
|
<tty> |
TTY der Sitzung des Benutzers |
/dev/ttyp1 |
|
<junos-context> <user-context> |
<Klassenname> |
Anmeldeklasse des Benutzers, der das Skript ausführt |
Superuser |
<Login-Name> |
Anmeldename des Benutzers, der das Skript ausführt. Für den AAA-Zugriff ist dies der Benutzername von RADIUS/TACACS. |
jsmith |
|
<uid> |
Benutzer-ID-Nummer des Benutzers, der das Skript ausführt, wie in der Gerätekonfiguration definiert |
2999 |
|
<Benutzer> |
Lokaler Name des Benutzers, der das Skript ausführt. Junos OS verwendet den lokalen Namen für die Authentifizierung. Sie kann sich von der für die |
wurzel |
|
<junos-context> <op-context> (Nur Op-Skripte) |
<via-URL> |
Leeres Element, das enthalten ist, wenn das Remote-Op-Skript mit dem |
|
<junos-context> <commit-context> (nur Commit-Skripte) |
<commit-boot/> |
Leeres Element, das enthalten ist, wenn der Commit beim Booten auftritt |
|
<Commit-Check/> |
Leeres Element, das beim Ausführen von a |
||
<Commit-Kommentar> |
Benutzerkommentar zum Commit |
Verpflichten Sie sich, das Weiterleitungsproblem zu beheben |
|
<commit-confirm/> |
Leeres Element, das beim Ausführen von a |
||
<Commit-Sync/> |
Leeres Element, das beim Ausführen von a |
||
<Datenbankpfad/> |
Element, das den Speicherort der Konfiguration des Kandidaten vor der Vererbung der Sitzung angibt. Bei normalen Konfigurationssitzungen ist der Wert des Elements der Speicherort der normalen Kandidatendatenbank. Bei privaten Konfigurationssitzungen ist der Wert des Elements der Speicherort der privaten Kandidatendatenbank. Wenn das |
Bei der $junos-context
Variablen handelt es sich um eine Knotenmenge. Daher können Sie in einem Skript auf die untergeordneten Elemente zugreifen, indem Sie den richtigen XPath-Ausdruck einfügen. Das folgende SLAX-Commit-Skript schreibt eine Meldung in die Systemprotokolldatei, wenn der Commit während des ersten Bootvorgangs ausgeführt wird. Der Nachricht wird ein Einrichtungswert von daemon
und ein Schweregradwert von zugewiesen.info
Weitere Informationen finden Sie unter syslog().
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 { if ($junos-context/commit-context/commit-boot) { expr jcs:syslog("daemon.info", "This is boot-time commit"); } else { /* Do this ... */ } }
Python-Skripte müssen das Junos_Context
Wörterbuch aus dem junos
Modul importieren, um auf die Umgebungsinformationen zugreifen zu können, die den Skripten zur Verfügung gestellt werden. Die Namen der Schlüssel im Junos_Context
Wörterbuch sind identisch mit den Namen der Knoten, die $junos-context
in Tabelle 2 aufgeführt sind. Knoten mit untergeordneten Elementen, die unter dem junos-context
Knoten verschachtelt sind, z. B user-context
. , op-context
und commit-context
Elementen in Junos_Context
zugeordnet sind, wobei der Schlüssel der Knotenname und der Wert ein Wörterbuch der untergeordneten Elemente des Knotens ist. Zum Beispiel:
'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}
In der folgenden Beispielausgabe wird das Junos_Context
Wörterbuch für ein lokal ausgeführtes op-Skript angezeigt. Beachten Sie, dass die op-Skripteingabe den op-context
Schlüssel enthält, der in diesem Szenario leer ist.
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'op', 're-master': None, 'hostname': 'R1', 'pid': '7136', 'tty': '/dev/ttyp1', 'chassis': 'others', 'op-context': ' ', 'localtime': 'Thu Jan 22 11:45:47 2015', 'localtime-iso': '2015-01-22 11:45:47 PST'}
In der folgenden Beispielausgabe wird das Junos_Context
Wörterbuch für ein Commitskript angezeigt, das während eines commit check
Vorgangs ausgeführt wurde. Beachten Sie, dass die Eingabe des Commit-Skripts den commit-context
Schlüssel enthält.
{'product': 'm7i', 'user-context': {'login-name': 'bsmith', 'user': 'bsmith', 'class-name': 'j-superuser', 'uid': '9999'}, 'routing-engine-name': 're0', 'script-type': 'commit', 're-master': None, 'hostname': 'R1', 'pid': '11201', 'tty': '/dev/ttyp1', 'commit-context': {'database-path': '/var/run/db/juniper.db', 'commit-check': None}, 'chassis': 'others', 'localtime': 'Thu Jan 22 16:23:55 2015', 'localtime-iso': '2015-01-22 16:23:55 PST'}
Um auf einzelne Werte im Wörterbuch zuzugreifen, geben Sie den Schlüsselnamen an. Zum Beispiel:
Junos_Context['hostname'] Junos_Context['user-context']['class-name']