AUF DIESER SEITE
Beispiel: Ändern der Konfiguration mithilfe von SLAX- und XSLT-Op-Skripten
In diesem Beispiel wird erläutert, wie Sie mithilfe eines SLAX-Op-Skripts strukturierte Änderungen an der Junos OS-Konfiguration vornehmen.
Gerätekonfiguration
Schritt-für-Schritt-Anleitung
So laden Sie das Skript herunter, aktivieren es und testen es:
Kopieren Sie das Skript in eine Textdatei, nennen Sie die Datei config-change.slax, und kopieren Sie sie in das Verzeichnis /var/db/scripts/op/ auf dem Gerät.
Konfigurieren Sie im Konfigurationsmodus den Dateinamen des Skripts auf Hierarchieebene
[edit system scripts op file].[edit system scripts op] user@host# set file config-change.slax
Geben Sie den Befehl ein, um die Konfiguration zu bestätigen und in den
commit and-quitBetriebsmodus zurückzukehren.[edit] user@host# commit and-quit
Geben Sie vor dem Ausführen des Skripts den Befehl für den
show interfaces interface-nameBetriebsmodus aus, und notieren Sie sich den aktuellen Status der Schnittstelle, der vom Skript deaktiviert wird.Führen Sie das op-Skript aus.
user@host> op config-change This script disables the interface specified by the user. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0
Anforderungen
In diesem Beispiel wird ein Gerät verwendet, auf dem Junos OS ausgeführt wird.
Übersicht und Op-Skript
SLAX- und XSLT-Op-Skripte können mithilfe der jcs:load-configuration Vorlage in der Importdatei junos.xsl strukturierte Änderungen an der Junos OS-Konfiguration vornehmen. In diesem Beispiel wird ein SLAX op-Skript erstellt, das die Vorlage verwendet, um eine Schnittstelle auf einem Gerät zu deaktivieren, auf jcs:load-configuration dem Junos OS ausgeführt wird. Alle für die jcs:load-configuration Vorlage erforderlichen Werte werden als Variablen definiert, die dann an die Vorlage übergeben werden.
In diesem Beispiel wird die Variable usage mit einer allgemeinen Beschreibung der Funktion des Skripts initialisiert. Wenn Sie das Skript ausführen, ruft es die jcs:output() Funktion auf, um die Verwendungsbeschreibung in der CLI auszugeben. Auf diese Weise können Sie überprüfen, ob Sie das Skript für den richtigen Zweck verwenden.
Das Skript ruft die jcs:get-input() Funktion auf, die zur Deaktivierung des Namens der Schnittstelle auffordert, und speichert den Schnittstellennamen in der interface Variablen. Die config-changes Variable speichert die Junos XML-Konfigurationsdaten, die auf dem Gerät geladen werden sollen, und verweist auf die interface Variable. Der jcs:load-configuration Vorlagenaufruf legt den Wert des configuration Parameters auf die in der config-changes Variablen gespeicherten Daten fest.
Die load-action Variable wird auf mergegesetzt, wodurch die neuen Konfigurationsdaten mit der Kandidatenkonfiguration zusammengeführt werden. Dies ist das Äquivalent zum Befehl load mergeCLI configuration mode .
Die options Variable definiert die Optionen für den Commit-Vorgang. Mit dem Operator wird eine := Knotenmenge erstellt, die als Wert des commit-options Parameters an die Vorlage übergeben wird. Dieses Beispiel enthält das log Tag, um die Beschreibung des Commits zum Commit-Protokoll hinzuzufügen, damit Sie später darauf zurückgreifen können.
Der Aufruf der jcs:open() Funktion öffnet eine Verbindung mit dem Junos OS Management Process (mgd) auf dem lokalen Gerät und gibt ein Verbindungshandle zurück, das in der conn Variablen gespeichert ist. Das Skript ruft dann die jcs:load-configuration Vorlage auf.
Der := Operator kopiert die Ergebnisse des jcs:load-configuration Vorlagenaufrufs in eine temporäre Variable und führt die node-set Funktion für diese Variable aus. Die resultierende Knotenmenge wird dann in der results Variablen gespeichert. Der := Operator stellt sicher, dass es sich bei der results Variablen um eine Knotenmenge und nicht um ein Ergebnisstrukturfragment handelt, damit das Skript auf den Inhalt zugreifen kann.
Die jcs:close() Funktion schließt die Verbindung zum Gerät. Standardmäßig gibt die jcs:load-configuration Vorlage keine Meldungen an die CLI aus. In diesem Beispiel wird in der Antwort nach Meldungen xnm:error gesucht und gedrucktxmn:warning, um Probleme mit dem Commit schnell zu identifizieren.
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";
ns ext = "http://xmlsoft.org/XSLT/namespace";
import "../import/junos.xsl";
match / {
<op-script-results> {
var $usage = "This script disables the specified interface." _
"The script modifies the candidate configuration to disable " _
"the interface and commits the configuration to activate it.";
var $temp = jcs:output($usage);
var $interface = jcs:get-input("Enter interface to disable: ");
var $config-changes = {
<configuration> {
<interfaces> {
<interface> {
<name> $interface;
<disable>;
}
}
}
}
var $load-action = "merge";
var $options := {
<commit-options> {
<log> "disabling interface " _ $interface;
}
}
var $conn = jcs:open();
var $results := {
call jcs:load-configuration( $action=$load-action,
$commit-options=$options,
$configuration=$config-changes, $connection=$conn);
}
var $close-results = jcs:close($conn);
if ($results//xnm:error) {
for-each ($results//xnm:error) {
<output> message;
}
}
if ($results//xnm:warning) {
for-each ($results//xnm:warning) {
<output> message;
}
}
}
}
Verifizierung
Überprüfen des Commits
Zweck
Vergewissern Sie sich, dass der Commit erfolgreich war.
Aktion
Sie sollten Code in Ihr Skript einfügen, der die von der jcs:load-configuration Vorlage zurückgegebene Knotengruppe auf Fehler oder Warnungen analysiert. Auf diese Weise können Sie leichter feststellen, ob der Commit erfolgreich war. Wenn keine Warn- oder Fehlermeldungen vorhanden sind, können Sie den Erfolg des Commits auf verschiedene Weise überprüfen.
Überprüfen Sie das Commit-Protokoll, um sicherzustellen, dass der Commit erfolgreich war. Wenn Sie die
logOption in dencommit-optionsParameter aufgenommen haben, sollte die Nachricht zusammen mit den Commit-Informationen im Commit-Protokoll sichtbar sein.user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via junoscript disabling interface so-0/0/0Überprüfen Sie die Syslog-Meldungsdatei, um sicherzustellen, dass der Commit-Vorgang protokolliert wurde. In diesem Fall sehen Sie auch eine
SNMP_TRAP_LINK_DOWNMeldung für die deaktivierte Schnittstelle so-0/0/0. Abhängig von Ihren Konfigurationseinstellungen für Ablaufverfolgungsoptionen wird diese Meldung möglicherweise in Ihrer Protokolldatei angezeigt oder nicht.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation (comment: disabling interface so-0/0/0) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Überprüfen der Konfigurationsänderungen
Zweck
Stellen Sie sicher, dass die richtigen Änderungen in die Konfiguration integriert sind.
Aktion
Zeigen Sie die Konfiguration an, und stellen Sie sicher, dass die Änderungen für die angegebene Schnittstelle sichtbar sind.
user@host> show configuration interfaces so-0/0/0 disable;
In diesem Beispiel können Sie auch den
show interfaces interface-nameBefehl Betriebsmodus ausführen, um zu überprüfen, ob die Schnittstelle deaktiviert wurde. In diesem Fall zeigt die Ausgabe, die vor dem Deaktivieren der Schnittstelle erfasst wurde, dass die SchnittstelleEnabled.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
Die Ausgabe, die nach dem Ausführen des Skripts zum Deaktivieren der Schnittstelle erfasst wird, zeigt, dass die Schnittstelle jetzt
Administratively down.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None