Ändern der Konfiguration mithilfe eines Ereignisskripts
Sie können eine Ereignisrichtlinie konfigurieren, um die Konfiguration als Reaktion auf ein Ereignis zu ändern. Ereignisrichtlinien können die Konfiguration ändern, indem ein Ereignisskript aufgerufen wird, das die Konfiguration ändert und einen Commit ausführt, oder indem die change-configuration
Anweisung zum Ausführen von Konfigurationsmodusbefehlen verwendet wird, die die Konfiguration ändern. Ereignisskripts bieten beim Ändern der Konfiguration mehr Flexibilität als die change-configuration
Anweisung. Mit Ereignisskripts können Sie z. B. nach bestimmten Bedingungen suchen, die Konfigurationsdaten in verschiedenen Formaten bereitstellen und angeben, wie die Daten mit der vorhandenen Konfiguration zusammengeführt werden sollen. In bestimmten Fällen, z. B. auf Geräten mit dualer Routing-Engine, auf denen NSR (Nonstop Active Routing) aktiviert ist, können Ereignisrichtlinien nur Ereignisskripts verwenden, um die Konfiguration zu ändern.
In den folgenden Abschnitten wird die Verwendung von Ereignisskripts zum Ändern der Konfiguration erläutert.
Ändern der Konfiguration mithilfe eines SLAX- oder XSLT-Ereignisskripts
SLAX- und XSLT-Ereignisskripte können die jcs:load-configuration
Vorlage aufrufen, um strukturierte Änderungen an der Junos OS-Konfiguration vorzunehmen. Sie müssen eine Verbindung mit dem Zielgerät herstellen, bevor Sie die Vorlage aufrufen, um die Konfiguration zu ändern. Weitere Informationen zur Vorlage finden Sie unter jcs:load-configuration und Ändern der Konfiguration mithilfe von SLAX- und XSLT-Skripten.
Das folgende SLAX-Ereignisskript öffnet eine Verbindung mit dem lokalen Gerät, ruft die jcs:load-configuration
Vorlage auf, um die Konfiguration zu ändern und zu bestätigen, und schließt dann die Verbindung. Alle für die jcs:load-configuration
Vorlage erforderlichen Werte werden als Variablen definiert, die dann als Argumente an die Vorlage übergeben werden.
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 / { <event-script-results> { /* Open a connection to the local device */ var $connection = jcs:open(); /* Define configuration change */ var $configuration-change = <configuration> { <routing-options> { <static> { <route> { <name>"198.51.100.0/24"; <next-hop>"10.1.3.1"; } } } } /* Load and commit the configuration */ var $load-action = "merge"; var $options := { <commit-options> { <log> "Configuration modified through event script"; } } var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration=$configuration-change, $commit-options=$options); } /* Close the connection */ var $close-results = jcs:close($connection); } }
So konfigurieren Sie eine Ereignisrichtlinie, die das SLAX-Ereignisskript für ein bestimmtes Ereignis aufruft:
Ändern der Konfiguration mithilfe eines Python-Ereignisskripts
Python-Skripte können die Junos PyEZ-Bibliothek verwenden, um Änderungen an der Konfiguration auf Geräten mit Junos OS vorzunehmen. Das PyEZ-Dienstprogramm jnpr.junos.utils.config.Config
Junos stellt Instanzmethoden zum Sperren, Laden, Bestätigen und Entsperren der Konfiguration bereit.
Das folgende Python-Ereignisskript stellt eine Verbindung mit dem lokalen Gerät her und aktualisiert und führt einen Commit für die Konfiguration durch.
from jnpr.junos import Device from jnpr.junos.utils.config import Config import jcs with Device() as dev: with Config(dev) as cu: cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set") cu.commit(comment="Configuration modified through event script", timeout=300)
So konfigurieren Sie eine Ereignisrichtlinie, die das Python-Ereignisskript für ein bestimmtes Ereignis aufruft:
Weitere Informationen zur Verwendung von Junos PyEZ zur Konfiguration von Geräten mit Junos OS finden Sie im Junos PyEZ-Entwicklerhandbuch.
Ändern der Konfiguration mithilfe von Ereignisskripts auf Geräten, auf denen aktives Nonstop-Routing aktiviert ist
Wenn Sie eine Ereignisrichtlinie verwenden, um die Konfiguration auf einem Gerät mit dualer Routing-Engine zu ändern, auf dem Nonstop Active Routing (NSR) aktiviert ist, wird empfohlen, dass die Ereignisrichtlinie ein Ereignisskript aufruft, das die aktualisierte Konfiguration nur auf der primären Routing-Engine festschreibt. Dadurch wird sichergestellt, dass die Aktualisierung der Konfiguration und der anschließende Commitvorgang auf beiden Routingmodulen erfolgreich sind. Die Konfiguration wird automatisch mit der Backup-Routing-Engine synchronisiert, da die commit synchronize
Anweisung auf Hierarchieebene [edit system]
als Teil der NSR-Konfiguration konfiguriert wird. Wenn Sie die change-configuration
Anweisung verwenden, um die Konfiguration zu ändern, oder wenn das Ereignisskript die Änderung nicht nur für die primäre Routing-Engine festschreibt, können beide Routingmodule gleichzeitig versuchen, eine Sperre für die Konfigurationsdatenbank abzurufen, wodurch ein oder beide Commits fehlschlagen.
Um ein Ereignisskript zu erstellen, das die Konfiguration nur auf der primären Routing-Engine konfiguriert und festschreibt, schließen Sie Logik ein, die testet, ob die aktuelle Routing-Engine die primäre Routing-Engine ist. Wenn die aktuelle Routing-Engine die primäre Routing-Engine ist, aktualisieren Sie die Konfiguration, und bestätigen Sie sie.
Das folgende SLAX-Ereignisskript stellt eine Verbindung mit dem lokalen Gerät her und prüft, ob die aktuelle Routing-Engine die primäre Routing-Engine ist. Wenn es sich um die primäre Routing-Engine handelt, aktualisiert das Skript die Konfiguration und führt dann einen Commit für sie durch.
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 / { <event-script-results> { /* Retrieve chassis information */ var $rpc = <get-chassis-inventory>; var $chassis_rpc = jcs:invoke($rpc); var $current_state = $chassis_rpc/chassis/name; /* Open a connection to the local device */ var $connection = jcs:open(); /* Define configuration change */ var $configuration-change = <configuration> { <routing-options> { <static> { <route> { <name>"198.51.100.0/24"; <next-hop>"10.1.3.1"; } } } } /* Load and commit the configuration */ var $load-action = "merge"; var $options := { <commit-options> { <log> "Configuration modified through event script"; } } if ($current_state == "Chassis") { var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration = $configuration-change, $commit-options=$options); } } /* Close the connection */ var $close-results = jcs:close($connection); } }
In ähnlicher Weise stellt das folgende Python-Ereignisskript eine Verbindung mit dem lokalen Gerät her und aktualisiert und führt nur dann einen Commit für die Konfiguration durch, wenn die aktuelle Routing-Engine die primäre Routing-Engine ist:
from jnpr.junos import Device from jnpr.junos.utils.config import Config import jcs with Device() as dev: if("master" in dev.facts["current_re"]): with Config(dev) as cu: cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set") cu.commit(comment="Configuration modified through event script", timeout=300)