Junos PyEZテーブルでSaltを使用し、Junos OSを搭載したデバイスから運用データや設定データを取得する
ジュニパーネットワークスでは、Salt を使用した Junos OS が動作するデバイスの管理をサポートしており、Junos の実行および状態モジュール(Salt 用)は、管理対象デバイス上で運用タスクや設定タスクを実行するための機能を定義します。 salt.modules.junos.get_table
実行機能と状態関数は、 salt.states.junos.get_table
定義済みまたはカスタムのJunos PyEZテーブルを参照し、Junos OSを実行しているデバイスから運用情報や設定データを抽出できます。
Junos PyEZテーブルについて
Junos PyEZは、Junos OSを実行するデバイスの管理と自動化を可能にするPython用マイクロフレームワークです。Junosプロキシミニオン(Salt用)は、ZeroMQイベントバスを使用してSaltマスターに接続し、Junos PyEZライブラリを使用してJunos OSを実行しているデバイスに接続します。その結果、Saltはデバイスを管理する際にJunos PyEZの機能を活用できます。
Junos PyEZは、 テーブル と ビューと呼ばれるシンプルなYAML定義を使用して、Junos OSを実行しているデバイスから運用コマンドの出力と設定データを取得し、フィルタリングすることをサポートしています。 Junos PyEZ運用(op)テーブルは運用コマンドやRPCの出力から情報を抽出し、設定テーブルは特定の設定データを取得します。Junos PyEZ jnpr.junos.op
モジュールには、いくつかの一般的なRPC用に定義済みのテーブルとビューの定義が含まれています。カスタムのテーブルとビューを作成することもできます。
Salt を使用して Junos OS が動作するデバイスを管理する場合、その junos.get_table
関数は Junos PyEZ テーブルを使用してデバイスからデータを取得できます。この関数は、Junos PyEZディストリビューションに含まれている定義済みの操作テーブルとビューを参照することも、Saltマスターまたは別のプロキシミニオンサーバーに存在するユーザー定義の操作および構成テーブルとビューを参照することもできます。
Junos PyEZのテーブルとビューに関する一般的な情報については、 Junos PyEZ開発者ガイドの以下のセクションおよび関連ドキュメントを参照してください。
junos.get_table機能概要
この junos.get_table
関数は、Junos PyEZ Tables を使用して、Junos OS を実行しているデバイスからデータを取得できます。ここでは、 junos.get_table
実行関数と状態関数の基本的な構文を示します。使用可能な関数パラメーターの完全なリストについては、関数の API ドキュメントを参照してください。
実行関数の salt.modules.junos.get_table
構文は次のとおりです。
salt 'target' junos.get_table table table_file path
状態関数の salt.states.junos.get_table
構文は次のとおりです。
id: junos.get_table: - table: table - table_file: table_file - path: path
どこ:
id- 状態宣言のユーザー定義識別子。
path: path
—(オプション)テーブル定義とビュー定義を含む YAML ファイルへのパス。table: table
- Junos PyEZテーブルの名前。table_file: table_file
- テーブル定義とビュー定義を含む YAML ファイルのファイル名。
および table_file
パラメーターを使用してpath
、テーブル定義を含む YAML ファイルのパスとファイル名を指定します。Junos PyEZ ディストリビューションに含まれるモジュールからjnpr.junos.op
テーブルをインポートする場合、 パラメーターをpath
省略できます。この場合、get_table
関数は指定されたテーブル ファイルの Junos PyEZ インストール パス内の適切なディレクトリを自動的にチェックします。カスタムテーブルへのパスを指定することもできます。カスタムテーブルを使用する場合、テーブルはSaltマスターまたはプロキシミニオンサーバーに配置できます。表 1 に、使用できるさまざまなテーブル、テーブルの場所、およびパラメーターに必要なpath
値の概要を示します。
テーブル |
場所 |
|
例 |
---|---|---|---|
jnpr.junos.op モジュール テーブル |
プロキシミニオンサーバー上のJunos PyEZインストールパスの下にあるjnpr/junos/opディレクトリ |
– |
junos.get_table: - table: ArpTable - table_file: arp.yml |
カスタムテーブル |
ソルトマスター |
カスタム テーブルを含む YAML ファイルへのパス ( salt:// 表記を使用)。 |
junos.get_table: - table: IFTable - table_file: IFTable.yml - path: salt://tables |
プロキシミニオンサーバー |
カスタム テーブルを含む YAML ファイルへの絶対パス。 |
junos.get_table: - table: IFTable - table_file: IFTable.yml - path: /srv/salt/tables |
junos.get_table 関数の使用方法
関数を呼び出すjunos.get_table
と、Junos PyEZテーブルを使用して、Junos OSを実行しているデバイスから運用データや設定データを取得できます。次のコマンドは、モジュール内のテーブルを使用してArpTable
、jnpr.junos.op
ターゲットデバイスのアドレス解決プロトコル(ARP)エントリを取得します。テーブルは、Junos PyEZ jnpr/junos/op ディレクトリにある arp.yml ファイルで定義されます。
saltuser@salt-master:~$ sudo salt 'router1' junos.get_table ArpTable arp.yml
関数の応答には、デバイスのホスト名、テーブルとビュー、および out
操作が成功したかどうかを返す True
キーが含まれます。操作が成功した場合、応答には Table 項目を含むキーも含まれます reply
。各テーブル項目には、View で定義されたフィールドと、対応する各フィールドのデータから抽出された値が含まれます。
router1: ---------- hostname: router1.example.com out: True reply: ---------- 00:50:56:93:7c:13: ---------- interface_name: fxp0.0 ip_address: 198.51.100.10 mac_address: 00:50:56:93:7c:13 f8:c0:01:18:8b:67: ---------- interface_name: fxp0.0 ip_address: 198.51.100.254 mac_address: f8:c0:01:18:8b:67 ... table: ---------- ArpTable: ---------- args: ---------- no-resolve: True item: arp-table-entry key: mac-address rpc: get-arp-table-information view: ArpView ArpView: ---------- fields: ---------- interface_name: interface-name ip_address: ip-address mac_address: mac-address tablename: ArpTable
別の例として、次のステート ファイルは、IFTable という名前のカスタム Junos PyEZ テーブルを使用して、インターフェイスのステータス情報を取得します。テーブルとビューは、ソルトマスターの / srv/salt/tables/IFTable.yml ファイルで定義されます。
saltuser@salt-master:~$ cat /srv/salt/junos_get_table_interface_status.sls Get Interface Status Information: junos.get_table: - table: IFTable - table_file: IFTable.yml - path: salt://tables
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_get_table_interface_status router1: ---------- ID: Get Interface Status Information Function: junos.get_table Result: True Comment: Started: 22:51:38.947322 Duration: 373.053 ms Changes: ---------- hostname: router1.example.com out: True reply: ---------- cbp0: ---------- adstat: up name: cbp0 opstat: up ...
方法 : テーブルとビューで省略可能なパラメーターを定義する
Junos PyEZのテーブルとビューには、テーブルの種類に応じて、いくつかのオプションパラメーターを含めることができます。表定義およびビュー定義では、これらのパラメーターのデフォルト値を定義できます。アプリケーションで Table を使用するときに、1 つ以上のパラメーターの値を指定またはオーバーライドすることもできます。
この junos.get_table
関数を使用すると、値を定義したり、これらの同じパラメーターの多くの既定値をオーバーライドしたりできます。たとえば、関数を呼び出す junos.get_table
ときに、対応するパラメーターをサポートする Table の引数を含めることができます key
。また、引数を含めて table_args
、パラメーターの args
キーと値のペアを指定することもできます。テーブルとビューの異なるタイプでサポートされているパラメータについては、 Junos PyEZ開発者ガイドを参照してください。
EthPortTable
RPCを実行するget-interface-information
モジュール内のjnpr.junos.op
テーブルを考えてみましょう。RPC はデフォルトの引数media: True
と interface_name: '[afgxe][et]-*'
.
--- EthPortTable: rpc: get-interface-information args: media: True interface_name: '[afgxe][et]-*' args_key: interface_name item: physical-interface view: EthPortView
この場合、関数を呼び出すjunos.get_table
ときに、RPC を実行し、構造化された出力を返す op テーブルでサポートされているオプションのパラメーターを含めることができます。たとえば、 で定義されている args
RPC 引数の既定値をオーバーライドするパラメーターを含めることができますtable_args
。
次のコマンドは、デバイスからインターフェイス情報を取得するために使用 EthPortTable
し、テーブルで定義されているデフォルトのインターフェイスセットではなく、10ギガビットイーサネット(GbE)インターフェイスのデータのみを返すためのパラメーターが含まれています table_args
。出力に表示されるテーブル定義には、 で args
更新された引数が反映されます。
saltuser@salt-master:~$ sudo salt 'router1' junos.get_table EthPortTable ethport.yml table_args='{"interface_name" : "xe-*"}' router1: ---------- ... table: ---------- EthPortTable: ---------- args: ---------- interface_name: xe-* media: True args_key: interface_name item: physical-interface key: name rpc: get-interface-information view: EthPortView ...
これに相当する状態ファイルは次のとおりです。
saltuser@salt-master:~$ cat /srv/salt/junos_get_table_ethport.sls Retrieve Ethernet port information: junos.get_table: - table: EthPortTable - table_file: ethport.yml - table_args: interface_name: 'xe-*'