Junos PyEZ設定テーブルの定義
概要 Junosデバイス上の特定のリソースを構成するカスタムテーブルを作成したり、デバイスから構成データを抽出したりします。
Junos PyEZ設定テーブルを定義することで、Junosデバイスの選択した設定データベースから特定のデータを抽出したり、Junosデバイスのプログラムによる設定に使用できる構造化リソースを作成したりできます。したがって、デバイス上の特定の設定オブジェクトをすばやく取得または変更できます。
Junos PyEZ テーブルは YAML を使用してフォーマットされます。Junos PyEZ 構成テーブルを定義する場合、 または setのいずれかgetを使用して構成スコープを指定する必要があります。プロパティを含むgetテーブルは、デバイスから指定された構成データのみを取得できます。プロパティを含むsetテーブルは、デバイスの構成とデバイスからの構成データの取得に使用できる構成リソースを定義します。したがって、これらはスーパーセットであり、を指定するテーブルのgetすべての機能が含まれています。
構成テーブルの定義には、いくつかの必須およびオプションのパラメーターを含めることができます。 表1 は、パラメータを要約し、デバイスから設定データのみを取得するテーブル(get)でパラメータを使用できるか、デバイスを設定できるテーブル(set)でパラメータを使用できるかを指定しています。
テーブル パラメーター名 |
テーブル パラメーター |
テーブルの種類 |
説明 |
|---|---|---|---|
テーブル名 |
– |
|
ユーザー定義のテーブル識別子。 |
構成スコープ |
|
— |
テーブルタイプに応じて、オブジェクトを選択または構成する構成階層レベルを識別する最上位要素 構成オブジェクトを検索するように指定するか、または を構成および取得する両方に指定します これらのオブジェクトは、関連付けられたビューの参照になります。 |
構成リソース キー フィールド |
|
|
View で定義されているフィールド名を参照し、識別子要素にマップされ、構成オブジェクトを一意に識別するために使用できる文字列または文字列のリスト。たとえば、オブジェクトの要素に対応する Table には常に少なくとも 1 つのキー フィールドを定義する必要があり、ユーザーはアプリケーションでリソースを構成するときにすべてのキーの値を宣言する必要があります。 |
必要なキー |
|
|
(オプション)設定スコープ内の階層レベルを、その階層レベルでオブジェクトを一意に識別する要素(要素など) ユーザーは、アプリケーションで構成データを取得するときに、 |
テーブルビュー |
|
|
テーブルに関連付けられているビュー。 |
次のJunos PyEZ設定テーブルとそれに関連するビューについて考えてみましょう。 UserTableプロパティを含む get は、ターゲット・デバイス上のユーザー・アカウントの構成データを抽出します。 UserConfigTableプロパティーを含む は set 、ターゲット・デバイス上のユーザー・アカウントの構成およびユーザー・アカウントの構成データの取得に使用できる構造化された構成リソースを定義します。
---
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
以下のセクションでは、テーブルのさまざまなコンポーネントについて説明します。
テーブル名
テーブル名は、テーブルのユーザー定義識別子です。YAML ファイルまたは文字列には、1 つ以上のテーブルを含めることができます。YAML ドキュメントの先頭は左揃えにする必要があります。例えば:
--- UserTable: # Table definition
構成スコープ (取得または設定)
すべての構成テーブル定義で必要な構成スコーププロパティは、テーブルタイプに応じて、オブジェクトを取得または構成する構成階層レベルを識別します。Junos PyEZ設定テーブルは、Junosデバイスの設定データの取得と変更の両方に使用できます。プロパティを指定する構成テーブルは get 、構成データのみを取得できます。プロパティを指定する構成テーブルは、 set データを構成および取得できます。
または set の値はget、構成データを取得または設定する階層レベルを識別する最上位<configuration>要素に対する相対的な XPath 式です。このデータは、関連付けられたビューの参照になります。
次の構成階層の例を考えてみます。
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>
階層レベルで要素[edit system login]を取得または構成userするには、or get set プロパティの値で次の式を使用します。
system/login/user
XPath 式の末尾にスラッシュ (/) は、スクリプトによってエラーが生成されるため、含めないでください。
たとえば、オブジェクトの取得 user にのみ使用できる Table を定義するには、 get.
get: system/login/user
オブジェクトの取得だけでなく設定にも使用できる user Table を定義する setには、を使用します。
set: system/login/user
デフォルトでは、Junos PyEZ設定テーブルは候補の設定データベースからデータを取得します。Python スクリプトでメソッドを呼び出してget()テーブル データを取得する場合、引数を渡してoptionsディクショナリにoptions項目を含める'database':'committed'ことで、コミットされた構成データベースからデータを返すように指定できます。例えば:
table_object.get(options={'database':'committed'})
キー項目 (キー項目)
Junos OS の設定では、インターフェイスやユーザー アカウントなどの設定オブジェクトの各インスタンスは、一意の識別子を持つ必要があります。多くの場合、Junos XML 出力に明示的に表示される要素は、 <name> オブジェクトの各インスタンスを一意に識別します。ただし、場合によっては、異なる要素または要素の組み合わせが使用されます。例えば、論理インターフェイスは、物理インターフェイス名と論理ユニット番号の組み合わせで一意に識別されます。
構成リソースを定義するプロパティを指定する構成テーブルは、 set リソースを一意に識別する要素または要素の組み合わせを示す必要があります。 key-field 文字列または文字列のリストであるプロパティは、この関数を提供し、すべての set 構成テーブルに必要です。
テーブルのビューでは、 set 構成リソースのすべての識別子要素のフィールドを明示的に定義する必要があります。その後、プロパティは key-field 、Table 定義内の識別子要素のすべてのフィールド名を参照する必要があります。テーブルを使用してリソースを設定する場合、Junos PyEZアプリケーションはすべてのキーフィールドに値を指定する必要があります。
たとえば、次の表では、階層レベルでユーザー アカウントを構成するために使用できる構造化リソースを定義しています[edit system login]。ビューはフィールドを明示的に定義し、username階層レベルで要素[edit system login user]にnameマップします。プロパティはkey-fieldこのフィールドを参照して、name要素がそのオブジェクトのインスタンスを一意に識別することを示します。
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
Junos PyEZアプリケーションは、デバイス上のリソースのインスタンス UserConfigTable を設定する際、各インスタンスのキーの値 username を定義する必要があります。例えば:
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'
...
構成テーブルが、各レベルに識別子を持つ複数の階層レベルのステートメントのフィールドを定義する場合、プロパティには key-field すべての識別子を含める必要があります。たとえば、テーブルがインターフェイスに論理ユニットを設定する場合、プロパティには key-field インターフェイス名と論理ユニット番号の両方をキーとして含める必要があります。
必要なキー (required_keys)
構成テーブル定義に省略可能required_keysなプロパティを含めて、Table ユーザーがアプリケーションでデータを取得するときに 1 つ以上のキーの値を指定するように要求します。各キーは、または パラメーターでget定義された構成スコープ内の階層レベルを、そのレベルの識別子に<name>マップsetする必要があります。階層レベルごとに定義できるキーは 1 つだけです。
次の例では、 UserTable は、Junos PyEZアプリケーションがデータを取得する際に、[edit system login user]階層レベルで要素の値nameを指定する必要があります。
UserTable:
get: system/login/user
required_keys:
user: name
view: UserView
対応するJunos PyEZスクリプトでは、メソッド引数リストに必要なキー get() を含める必要があります。次の例では、'readonly' という名前のユーザーの構成データを要求します。
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')
キーは、 または set パラメーターでget定義された構成スコープ内の階層レベルでのみ要求できます。について、次の定義getについて考えてみます。
get: interfaces/interface/unit
この場合、次のサンプル コードに示すように、インターフェイス名とユニット番号の値を指定するようにユーザーに要求できますが、下位の階層レベルにあるインターフェイス アドレスに必要なキーを定義することはできません。
required_keys:
interface: name
unit: name
テーブル ビュー (表示)
このプロパティは view 、テーブル定義を特定のビューに関連付けます。ビューは、XPath 式を使用して、ユーザー定義フィールド名を選択したテーブル項目の要素にマップします。ビューをカスタマイズして、テーブルの種類と操作に応じて、取得または構成する特定の要素のみを選択できます。
設定テーブルのビュー定義の詳細については、 Junos PyEZ設定テーブルのビューを定義するを参照してください。