Definieren von Junos PyEZ-Konfigurationstabellen
ZUSAMMENFASSUNG Erstellen Sie benutzerdefinierte Tabellen, die eine bestimmte Ressource auf einem Junos-Gerät konfigurieren, oder extrahieren Sie Konfigurationsdaten aus dem Gerät.
Sie definieren Junos PyEZ-Konfigurationstabellen, um bestimmte Daten aus der ausgewählten Konfigurationsdatenbank eines Junos-Geräts zu extrahieren oder um strukturierte Ressourcen zu erstellen, die zur programmgesteuerten Konfiguration eines Junos-Geräts verwendet werden können. Auf diese Weise können Sie bestimmte Konfigurationsobjekte auf dem Gerät schnell abrufen oder ändern.
Junos PyEZ-Tabellen werden mit YAML formatiert. Wenn Sie eine Junos PyEZ-Konfigurationstabelle definieren, müssen Sie den Konfigurationsbereich entweder mit oder set
angebenget
. Tabellen, die die get
Eigenschaft enthalten, können nur die angegebenen Konfigurationsdaten von einem Gerät abrufen. Tabellen, die die set
Eigenschaft enthalten, definieren Konfigurationsressourcen, die Sie zum Konfigurieren des Geräts sowie zum Abrufen von Konfigurationsdaten vom Gerät verwenden können. Daher sind sie eine Obermenge und enthalten alle Funktionen von Tabellen, get
die .
Konfigurationstabellendefinitionen können eine Reihe von erforderlichen und optionalen Parametern enthalten. Tabelle 1 fasst die Parameter zusammen und gibt an, ob der Parameter in Tabellen verwendet werden kann, die ausschließlich Konfigurationsdaten vom Gerät abrufen (get
) oder in Tabellen, die das Gerät ebenfalls konfigurieren können (set
).
Name der Tabellenparameter |
Tabellen-Parameter |
Tabellentyp |
Beschreibung |
---|---|---|---|
Tabellenname |
– |
|
Benutzerdefinierter Tabellenbezeichner. |
Konfigurationsumfang |
|
— |
XPath-Ausdruck relativ zum Element der obersten Ebene Geben Sie an, dass Konfigurationsobjekte abgerufen werden sollen, oder geben Sie Diese Objekte werden zur Referenz für die zugeordnete Ansicht. |
Feld "Konfigurationsressourcenschlüssel" |
|
|
Zeichenfolge oder Liste von Zeichenfolgen, die auf alle in der Ansicht definierten Feldnamen verweist, die Bezeichnerelementen zugeordnet sind und zur eindeutigen Identifizierung des Konfigurationsobjekts verwendet werden können. Sie können z. B. den Feldnamen angeben, der dem Sie müssen immer mindestens ein Schlüsselfeld in der Tabelle definieren, und Benutzer müssen Werte für alle Schlüssel deklarieren, wenn sie die Ressource in ihrer Anwendung konfigurieren. |
Erforderliche Schlüssel |
|
|
(Optional) Assoziatives Array oder Wörterbuch von Schlüssel-Wert-Paaren, die eine Hierarchieebene im Konfigurationsbereich dem Element zuordnen, das das Objekt auf dieser Hierarchieebene eindeutig identifiziert, z. B. das Benutzer müssen alle erforderlichen Schlüssel als Argumente für die |
Tabellenansicht |
|
|
Ansicht, die mit der Tabelle verknüpft ist. |
Betrachten Sie die folgenden Junos PyEZ-Konfigurationstabellen und die zugehörigen Ansichten. UserTable
, die die get
Eigenschaft enthält, extrahiert Konfigurationsdaten für Benutzerkonten auf dem Zielgerät. UserConfigTable
, die die set
Eigenschaft enthält, definiert eine strukturierte Konfigurationsressource, die zum Konfigurieren von Benutzerkonten auf dem Zielgerät sowie zum Abrufen von Konfigurationsdaten für Benutzerkonten verwendet werden kann.
--- UserTable: get: system/login/user required_keys: user: name view: UserView UserView: fields: username: name userclass: class uid: uid UserConfigTable: set: system/login/user key-field: username required_keys: user: name view: UserConfigView UserConfigView: fields: username: name userclass: class uid: uid password: authentication/encrypted-password fullname: full-name
In den folgenden Abschnitten werden die verschiedenen Komponenten der Tabellen erläutert:
Tabellenname
Der Tabellenname ist ein benutzerdefinierter Bezeichner für die Tabelle. Die YAML-Datei oder -Zeichenfolge kann eine oder mehrere Tabellen enthalten. Der Anfang des YAML-Dokuments muss linksbündig ausgerichtet werden. Zum Beispiel:
--- UserTable: # Table definition
Konfigurationsbereich (Abrufen oder Festlegen)
Die Konfigurationsbereichseigenschaft, die in allen Konfigurationstabellendefinitionen erforderlich ist, gibt je nach Tabellentyp die Konfigurationshierarchieebene an, auf der Objekte abgerufen oder konfiguriert werden sollen. Junos PyEZ-Konfigurationstabellen können zum Abrufen und Ändern von Konfigurationsdaten auf einem Junos-Gerät verwendet werden. Konfigurationstabellen, die die get
Eigenschaft angeben, können nur Konfigurationsdaten abrufen. Konfigurationstabellen, die die set
Eigenschaft angeben, können Daten sowohl konfigurieren als auch abrufen.
Der Wert für get
oder set
ist ein XPath-Ausdruck relativ zum Element der obersten Ebene <configuration>
, das die Hierarchieebene angibt, auf der die Konfigurationsdaten abgerufen oder festgelegt werden sollen. Diese Daten werden zur Referenz für die zugeordnete Ansicht.
Betrachten Sie die folgende Beispielkonfigurationshierarchie:
user@router> show configuration system login | display xml <rpc-reply> <configuration> <system> <login> ... <user> <name>user1</name> <uid>2001</uid> <class>super-user</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> <user> <name>readonly</name> <uid>3001</uid> <class>read-only</class> <authentication> <encrypted-password>...</encrypted-password> </authentication> </user> </login> </system> </configuration> </rpc-reply>
Um die user
Elemente auf Hierarchieebene [edit system login]
abzurufen oder zu konfigurieren, würde der Wert für die or-Eigenschaft get
set
den folgenden Ausdruck verwenden:
system/login/user
Fügen Sie keinen Schrägstrich ( / ) am Ende des XPath-Ausdrucks ein, da das Skript einen Fehler generiert.
Um z. B. eine Tabelle zu definieren, die nur zum Abrufen user
von Objekten verwendet werden kann, verwenden Sie get
.
get: system/login/user
Um eine Tabelle zu definieren, die nicht nur zum Abrufen von Objekten, sondern auch zum Konfigurieren user
von Objekten verwendet werden kann, verwenden Sie set
.
set: system/login/user
Standardmäßig rufen Junos PyEZ-Konfigurationstabellen Daten aus der Kandidatenkonfigurationsdatenbank ab. Wenn Sie die get()
Methode im Python-Skript aufrufen, um die Tabellendaten abzurufen, können Sie angeben, dass die Methode stattdessen Daten aus der festgeschriebenen Konfigurationsdatenbank zurückgeben soll, indem Sie das options
Argument übergeben und das 'database':'committed'
Element in das options
Wörterbuch aufnehmen. Zum Beispiel:
table_object.get(options={'database':'committed'})
Schlüsselfeld (Schlüsselfeld)
In der Junos OS-Konfiguration muss jede Instanz eines Konfigurationsobjekts, z. B. eine Schnittstelle oder ein Benutzerkonto, über eine eindeutige Kennung verfügen. In vielen Fällen identifiziert das <name>
Element, das explizit in der Junos-XML-Ausgabe angezeigt wird, jede Instanz des Objekts eindeutig. In einigen Fällen wird jedoch ein anderes Element oder eine Kombination von Elementen verwendet. Eine logische Schnittstelle wird z. B. eindeutig durch die Kombination aus dem Namen der physischen Schnittstelle und der Nummer der logischen Einheit identifiziert.
Konfigurationstabellen, die die set
Eigenschaft zum Definieren einer Konfigurationsressource angeben, müssen angeben, welches Element oder welche Kombination von Elementen die Ressource eindeutig identifiziert. Die key-field
Eigenschaft, bei der es sich um eine Zeichenfolge oder eine Liste von Zeichenfolgen handelt, erfüllt diese Funktion und ist für alle set
Konfigurationstabellen erforderlich.
In der Ansicht für eine set
Tabelle müssen explizit Felder für alle Bezeichnerelemente für die Konfigurationsressource definiert werden. Die key-field
Eigenschaft muss dann auf alle Feldnamen für die Bezeichnerelemente in der Tabellendefinition verweisen. Wenn Sie die Tabelle zum Konfigurieren der Ressource verwenden, muss eine Junos PyEZ-Anwendung Werte für alle Schlüsselfelder bereitstellen.
In der folgenden Tabelle wird z. B. eine strukturierte Ressource definiert, die zum Konfigurieren von Benutzerkonten auf Hierarchieebene [edit system login]
verwendet werden kann. Die View definiert das username
Feld explizit und ordnet es dem name
Element auf Hierarchieebene [edit system login user]
zu. Die key-field
Eigenschaft verweist auf dieses Feld, um anzugeben, dass das name
Element Instanzen dieses Objekts eindeutig identifiziert.
UserConfigTable: set: system/login/user key-field: username required_keys: user: name view: UserConfigView UserConfigView: fields: username: name userclass: class uid: uid password: authentication/encrypted-password fullname: full-name
Wenn die Junos PyEZ-Anwendung Instanzen der UserConfigTable
Ressource auf dem Gerät konfiguriert, muss sie für jede Instanz einen Wert für den username
Schlüssel definieren. Zum Beispiel:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable with Device(host='router1.example.com') as dev: users = UserConfigTable(dev) users.username = 'admin' users.userclass = 'super-user' ...
Wenn die Konfigurationstabelle Felder für Anweisungen in mehreren Hierarchieebenen definiert, die auf jeder Ebene Bezeichner haben, muss die key-field
Eigenschaft alle Bezeichner enthalten. Wenn die Tabelle z. B. eine logische Einheit auf einer Schnittstelle konfiguriert, muss die key-field
Eigenschaft sowohl den Schnittstellennamen als auch die Nummer der logischen Einheit als Schlüssel enthalten.
Erforderliche Schlüssel (required_keys)
Sie fügen die optionale required_keys
Eigenschaft in Ihre Konfigurationstabellendefinition ein, um zu verlangen, dass die Tabellenbenutzer Werte für einen oder mehrere Schlüssel angeben, wenn sie die Daten in ihrer Anwendung abrufen. Jeder Schlüssel muss eine Hierarchieebene im Konfigurationsbereich, der durch den get
Parameter or set
definiert ist, dem <name>
Bezeichner auf dieser Ebene zuordnen. Sie können nur einen SchlÃ1/4ssel pro Hierarchieebene definieren.
Im folgenden Beispiel ist es erforderlich, UserTable
dass die Junos PyEZ-Anwendung beim Abrufen der Daten den Wert eines name
Elements auf Hierarchieebene [edit system login user]
angibt:
UserTable: get: system/login/user required_keys: user: name view: UserView
Im entsprechenden Junos PyEZ-Skript müssen Sie die erforderlichen Schlüssel in die Liste der get()
Methodenargumente aufnehmen. Im folgenden Beispiel werden die Konfigurationsdaten für den Benutzer mit dem Namen "readonly" angefordert:
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router1.example.com') as dev: users = UserTable(dev) users.get(user='readonly')
Sie können Schlüssel nur auf Hierarchieebenen in dem Konfigurationsumfang anfordern, der durch den get
Parameter or set
definiert ist. Betrachten Sie die folgende Definition für get
:
get: interfaces/interface/unit
In diesem Fall können Sie den Benutzer auffordern, Werte für den Schnittstellennamen und die Gerätenummer anzugeben, wie im folgenden Beispielcode gezeigt, aber Sie können keinen erforderlichen Schlüssel für die Schnittstellenadresse definieren, die sich auf einer niedrigeren Hierarchieebene befindet:
required_keys: interface: name unit: name
Tabellenansicht (Ansicht)
Die view
Eigenschaft ordnet die Tabellendefinition einer bestimmten Ansicht zu. Eine Ansicht ordnet Ihre benutzerdefinierten Feldnamen mithilfe von XPath-Ausdrücken Elementen in den ausgewählten Tabellenelementen zu. Sie können die Ansicht so anpassen, dass je nach Tabellentyp und -vorgang nur bestimmte Elemente zum Abrufen oder Konfigurieren ausgewählt werden.
Weitere Informationen zum Definieren von Ansichten für Konfigurationstabellen finden Sie unter Definieren von Ansichten für Junos PyEZ-Konfigurationstabellen.