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 テーブルを使用して、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 ファイルのファイル名。
path パラメーターと table_file パラメーターを使用して、テーブル定義を含む YAML ファイルのパスとファイル名を指定します。Junos PyEZディストリビューションに含まれるjnpr.junos.opモジュールからテーブルをインポートする場合は、pathパラメータを省略できます。この場合、get_table機能は、Junos PyEZ インストール パス内の適切なディレクトリで、指定された Table ファイルを自動的にチェックします。また、カスタムテーブルへのパスを指定することもできます。カスタム テーブルを使用する場合、テーブルは 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 を実行しているデバイスから運用データまたは設定データを取得できます。次のコマンドは、jnpr.junos.opモジュールのArpTableテーブルを使用して、ターゲットデバイスのアドレス解決プロトコル(ARP)エントリを取得します。テーブルは、Junos PyEZ jnpr/junos/opディレクトリにあるarp.ymlファイルで定義されています。
saltuser@salt-master:~$ sudo salt 'router1' junos.get_table ArpTable arp.yml
関数の応答には、デバイスのホスト名、テーブルとビュー、および操作が成功した場合にTrueを返すoutキーが含まれます。操作が成功した場合、応答には、テーブル項目を含む reply キーも含まれます。各テーブル項目には、ビューによって定義されたフィールドと、対応する各フィールドのデータから抽出された値が含まれます。
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 テーブルを使用して、インターフェイスのステータス情報を取得します。テーブルとビューは、Salt マスターの /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 関数を呼び出すときに、対応するパラメーターをサポートする Tables の key 引数を含めることができます。また、table_args 引数を含めて、op テーブルの args パラメーターにキーと値のペアを指定することもできます。さまざまなタイプのテーブルとビューでサポートされるパラメーターについては、Junos PyEZ 開発者ガイドを参照してください。
get-interface-information RPC を実行する jnpr.junos.op モジュールの EthPortTable テーブルについて考えてみましょう。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 テーブルでサポートされている省略可能なパラメーターを含めることができます。たとえば、 table_args パラメーターを含めて、 args で定義されている RPC 引数の既定値をオーバーライドできます。
次のコマンドは、 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-*'