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設定テーブルのビューを定義するを参照してください。