Junos PyEZ設定テーブルのビューの定義
Junos PyEZ設定テーブルでは、Junosデバイスの選択した設定データベースから特定のデータを抽出したり、Junosデバイスのプログラムによる設定に使用できる構造化リソースを定義することができます。テーブルは、テーブル データ内の要素を選択して参照するために使用されるビューに関連付けられます。テーブルを特定のビューに関連付けるには、ビュー名を引数として受け取るプロパティをテーブル定義に含め view
ます。
ビューは、ユーザー定義フィールド名を、選択したテーブル項目の XML 要素にマップします。ビューを使用すると、Python で操作できるプロパティを持つ変数としてデータ内の特定のフィールドにアクセスできます。Junos PyEZは、Pythonへのデータの抽出だけでなく、あらゆる型変換やデータの正規化も処理します。
または set
プロパティを持つget
テーブルを使用して構成データを取得する場合、[ビュー] フィールドは、アプリケーションがオブジェクトに対して取得する構成データを指定します。プロパティを含みset
、デバイスで構成できるリソースを定義するテーブルの場合、ビューで定義されたフィールドは、そのリソースに対して構成できるステートメントを制限します。
Junos PyEZ ビューは、テーブルと同様に、YAML を使用してフォーマットされます。構成に関連付けられたビュー定義 表には、 表 1 に要約されているいくつかのパラメーターを含めることができます。
ビュー パラメータ名 |
ビューパラメータ |
テーブルの種類 |
説明 |
---|---|---|---|
ビュー名 |
– |
|
ユーザー定義のビュー識別子。 |
フィールド項目 |
|
|
ユーザー定義フィールド名を、設定データ内の要素を選択する XPath 式にマップするキーと値のペアの連想配列 (ディクショナリ)。フィールド名は、有効な Python 変数名である必要があります。XPath 式は、そのテーブルの または テーブル スコープ |
フィールドグループ |
|
|
ユーザー定義フィールド名を、設定データ内の要素を選択する XPath 式にマップするキーと値のペアの連想配列 (ディクショナリ)。フィールド名は、有効な Python 変数名である必要があります。XPath 式は、対応する テーブル スコープ |
グループ |
|
|
ユーザー定義グループ名を、そのグループ内のフィールドの XPath コンテキストを設定する XPath 式にマップする、キーと値のペアの連想配列 (ディクショナリ)。Xpath 式は、その Table の または |
次のJunos PyEZ構成テーブルとビューについて考えてみます。 UserTable
プロパティを含む get
は、ターゲット・デバイス上のユーザー・アカウントの構成データを抽出します。 UserConfigTable
プロパティーを含む は set
、ターゲット・デバイス上のユーザー・アカウントの構成およびユーザー・アカウントの構成データの取得に使用できる構造化された構成リソースを定義します。
--- UserTable: get: system/login/user view: UserView UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password --- UserConfigTable: set: system/login/user key-field: username view: UserConfigView UserConfigView: groups: auth: authentication fields: username: name userclass: class uid: uid fields_auth: password: encrypted-password
次のセクションでは、ビューのさまざまなコンポーネントについて説明します。
ビュー名
ビュー名は、ビューのユーザー定義識別子です。テーブルを特定のビューに関連付けるには、 view
テーブル定義にプロパティを含め、引数としてビュー名を指定します。例えば:
--- UserTable: # Table definition view: UserView UserView: # View definition
フィールド (フィールド)
ビューをカスタマイズして、選択した構成データ内の必要な要素のみを参照するようにします。これを行うには、fields
プロパティと、ユーザー定義フィールド名と、構成テーブル項目から目的の要素を選択する XPath 式へのユーザー定義フィールド名のマッピングを含む連想配列を含めます。フィールド名は、有効な Python 変数名である必要があります。XPath 式は、テーブル定義の または set
プロパティによってget
定義された構成スコープに対して相対的です。
または set
プロパティのいずれかを含むget
テーブルを使用して構成データを取得する場合、ビューで定義されたフィールドは、構成から抽出するステートメントを識別します。プロパティを含みset
、デバイスで構成できるリソースを定義するテーブルの場合、フィールドはそのリソースに対して構成できるステートメントを識別します。構成リソースのすべての識別子要素のフィールドを明示的に定義する必要があります。これらの識別子フィールドは、key-field
対応する Table 定義のプロパティで参照されます。
次の構成階層の例を考えてみます。
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>
Table get
またはset
パラメーターでスコープsystem/login/user
が と定義されている場合、ビュー定義の各フィールドの XPath 式は、そのコンテキストに対する相対パスになります。次のビュー定義は、ユーザー定義フィールド名 username
、 、および uid
を要素の子要素<user>
userclass
にマップします。
UserTable: get: system/login/user ... UserView: fields: username: name userclass: class uid: uid
Table 定義にプロパティが含まれている場合set
は、オブジェクトを一意に識別する識別子要素 (この場合<name>
は ) のフィールドを明示的に定義する必要があります。Table のプロパティは、key-field
オブジェクトの識別子要素にマップされるすべての View フィールドを参照する必要があります。テーブル の プロパティset
とkey-field
プロパティでfields
少なくとも 1 つの識別子要素を常に定義する必要があります。
Python スクリプトでは、変数プロパティとして View アイテムにアクセスできます。
from jnpr.junos import Device from myTables.ConfigTables import UserTable with Device(host='router.example.com') as dev: users = UserTable(dev) users.get() for account in users: print("Username is {}\nUser class is {}".format(account.name, account.userclass))
構成データを取得する場合、データ内に要素を持つ <name>
各オブジェクトには、その要素の値にアクセスするために使用できる既定の name
プロパティがあります。
ビュー フィールドには、そのビューを参照するテーブルの種類に応じて異なるオプションを含めることができます。構造化された構成リソース(set
)を定義するテーブルには、Junos PyEZアプリケーションがデバイス上でリソースを構成する際に有効なデータを提供することを確認するために、各フィールドのタイプと制約のチェックを含めることができます。構成データ (get
) を取得するテーブルには、特定の要素の属性値を返すオプションや、アプリケーションで使用するデータ型を指定するオプションを含めることができます。フィールドオプション ('get' テーブル) とフィールドオプション ('set' テーブル) は、それぞれテーブルとテーブルを使用するget
set
ときに含めることができるオプションの概要を説明します。
フィールドオプション ('get' テーブル)
プロパティを含み get
、デバイスから構成データのみを取得するテーブルでは、関連付けられたビューのフィールドに対して多数のオプションまたは演算子を定義できます。このセクションでは、さまざまなオプションの概要を説明します。
フィールド形式によって、フィールドの値のタイプが決まります。既定では、フィールド値は文字列として格納されます。フィールド マッピングの値に別の型を指定できます。次の例では、要素の値を uid
整数に定義しています。
UserView: fields: username: name userclass: class uid: { uid : int }
次の構文を使用して、フィールド アイテムの値をブール値に設定することもできます。
fieldname: { element-name: (True | False)=regex(expression) }
要素の値は、に渡され regex()
た正規表現に対して評価されます。要素の値が式と一致する場合、フィールド アイテムの値は、形式で定義されたブール値に設定されます。次の例では、 superuser
要素の値に 'super-user' が含まれている場合、 class
フィールドは True に設定されます。
superuser: { class : True=regex(super-user) }
Junos PyEZは、 group
設定ビューのフィールドの演算子も提供します。この 演算子を使用すると group
、Junos 設定グループから継承された要素の属性の値 junos:group
にアクセスできます。この値は、その要素が継承されたグループを示します。
例えば、以下の設定では、 remote
階層レベルで設定した設定グループから global
ユーザーを継承しています [edit groups global]
。
<user junos:group="global"> <name junos:group="global">remote</name> <uid junos:group="global">2000</uid> ... </user>
フィールド マッピングに 演算子を含めてgroup
、要素の値ではなく属性junos:group
の値を参照します。次の例では、uidgroup
演算子で フィールドと fullgroup
フィールドを定義していますgroup
。スクリプトでこれらのフィールド名にアクセスすると、フィールドは または full-name
要素に関連付けられた属性の値junos:group
を参照しますuid
。
UserView: groups: auth: authentication fields: username: name userclass: class uid: uid uidgroup: { uid: group } fullgroup: { full-name: group } fields_auth: password: encrypted-password
フィールドオプション (「設定」テーブル)
構造化された構成リソース(set
)を定義するテーブルには、Junos PyEZアプリケーションがデバイス上でリソースを構成する際に有効なデータを提供することを確認するために、関連するビューの各フィールドのタイプと制約チェックを含めることができます。型チェックは、Junos PyEZアプリケーションが特定のリソースに対してステートメントを設定する際に、正しいデータ型を提供することを確認します。制約チェックを使用すると、ステートメントのデフォルト値を定義し、アプリケーションがそれらのステートメントに対して正しい範囲内の値を提供することを確認できます。このセクションでは、関連付けられたビューのフィールドのオプションとして含まれている、サポートされている型と制約のチェックについて説明します。
表 2 および 表 3 は、構成表のビュー set
のフィールドに定義できるタイプ検査と制約検査をそれぞれ要約したものです。型チェックは相互に排他的ですが、フィールドごとに複数の制約チェックを定義できます。
|
説明 |
例 |
---|---|---|
|
フィールドは、 または の |
|
|
フィールドは、リストで定義されている |
|
|
フィールドは浮動小数点値のみを受け入れます |
|
|
フィールドは整数値のみを受け入れます |
|
|
フィールドは文字列値のみを受け入れます |
|
制約チェック名 |
説明 |
例 |
---|---|---|
|
フィールドの既定値。 ユーザーがフィールドを明示的に構成しない場合、フィールドはデフォルト値を使用します。ユーザーがメソッドを呼び出して |
|
|
フィールド |
|
|
フィールドの最小値は、フィールド |
|
1 つのフィールドに定義できる型チェックは 1 つだけですが、複数の制約チェックを定義できます。したがって、フィールドには、値、最小値 (minValue
)、および最大値 (maxValue
) を含めることができますdefault
。
native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'default' : 501, 'minValue' : 0, 'maxValue' : 4094 } }
minValue
および maxValue
オプションは、オプションの値type
に基づいて解釈されます。既定では、フィールド値は文字列です。文字列の場合、minValue
および maxValue
は文字列の最小長と最大長です。整数と浮動小数点数の場合、値はその型の最小値と最大値です。
フィールドに型または制約のチェックを含め、ユーザーがチェックに失敗した設定データを提供すると、Junos PyEZ アプリケーションは適切な TypeError
ValueError
または 例外を発生させ、エラーを説明するメッセージを表示します。
グループ (グループ) とフィールド グループ (fields_)
グループは、テーブル項目内の特定のノード セット内の要素を選択して参照するためのショートカット メソッドを提供します。
次の構成データでは、要素には <authentication>
ユーザーの認証方法に対応する子要素が含まれています。
<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>
ビュー定義内では、このプロパティを使用してfields
、選択した構成階層を基準とした各要素に完全な XPath 式を提供することで、子要素にアクセスできます。たとえば、Table get
またはset
プロパティが階層レベルで要素[edit system login]
を選択する<user>
場合、フィールド項目マッピングでは次の XPath 式が使用されます。
UserConfigTable: set: system/login/user ... UserConfigView: fields: password: authentication/encrypted-password
または、XPath コンテキストを要素に設定 <authentication>
するグループを作成し、そのコンテキストに関連する XPath 式を提供するだけのフィールドグループ項目を定義することもできます。ビュー定義内で任意の数のグループを定義できます。
グループを作成するには、プロパティを含め groups
、ユーザー定義のグループ名を新しいコンテキストを定義する XPath 式にマップします。次に、名前 fields_
の後にグループ名が続くフィールドグループを定義します。フィールドグループは、ユーザー定義フィールド名から XPath 式へのマッピングを含む連想配列で、 内で設定された groups
コンテキストに対する相対パスになりました。フィールド名は、有効な Python 変数名である必要があります。
次の例では、グループ auth
および対応するフィールドグループ fields_auth
を定義します。 auth
グループはコンテキストを階層レベルに設定 system/login/user/authentication
し、フィールドは password
要素の値を参照します encrypted-password
。
UserConfigTable: set: system/login/user ... UserConfigView: groups: auth: authentication fields_auth: password: encrypted-password ...
フィールドまたはフィールド グループを使用する場合でも、ユーザー定義のフィールド名を使用して、Junos PyEZ スクリプト内で同じ方法で値にアクセスします。