Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Ansibleを使用してJunosデバイスでコマンドとRPCを実行

概要 ジュニパーネットワークスのAnsibleモジュールを使用して、Junosデバイスで運用モードコマンドとRPCを実行します。

ジュニパーネットワークスは、Junosデバイス上で動作モードコマンドとリモートプロシージャコール(RPC)を実行するために使用できるAnsibleモジュールを提供しています。 表 1 にモジュールの概要を示します。

表 1:コマンドおよび RPC モジュール

コンテンツ セット

モジュール名

juniper.device 徴収

command

rpc

次のセクションでは、モジュールの使用方法、モジュール応答の解析方法、出力形式の指定方法、および出力のファイルへの保存方法について説明します。

手記:

運用出力から対象データをより簡単に抽出するため、Junos PyEZのカスタムまたは定義済みの運用テーブルで juniper.device.table モジュールを使用することもできます。詳細については、 Junos PyEZ テーブルで Ansible を使用して Junos デバイスから運用情報を取得するを参照してください。

ジュニパーネットワークスのモジュールでコマンドを実行する方法

juniper.device.commandモジュールを使用すると、Junosデバイス上で運用モードコマンドを実行できます。モジュールには 1 つの引数 commands が必要です。これは、デバイス上で実行する 1 つ以上のJunos OS動作モード コマンドのリストです。

次のプレイブックは、インベントリ グループの各デバイスで 2 つの運用モード コマンドを実行し、モジュールの応答を標準出力に表示します。この例では、 command モジュールが、デフォルトの場所にある SSH キーを使用して、デバイスで認証します。

モジュールの応答と出力形式については、 モジュールの応答 についておよび コマンドまたは RPC 出力の形式を指定する方法を参照してください。

ジュニパーネットワークスのモジュールでRPCを実行する方法

Junos XML APIは、Junos OSの設定ステートメントと動作モードコマンドをXML表現したものです。これは、Junos OS の設定階層内のすべての ステートメントと、Junos OS CLI で発行する多くの動作モード コマンドに相当する XML を定義します。対応するJunos XMLを持つ各運用モードコマンドは、要求タグ要素と、必要に応じて応答タグ要素にマッピングされます。リクエストタグは、NETCONFまたはJunos XMLプロトコルセッション内のリモートプロシージャコール(RPC)で使用され、Junosデバイスから情報を要求します。サーバーは、response タグ要素で囲まれた Junos XML 要素を使用して応答を返します。

juniper.device.rpc モジュールを使用すると、Junos デバイスで RPC を実行できます。モジュールには、デバイス上で実行する 1 つ以上の Junos OS RPC のリストである 1 つの引数 rpcs が必要です。

次のプレイブックは、インベントリグループ内の各デバイスで get-interface-information RPCを実行し、モジュール応答を標準出力で表示します。 、RPC は、 show interfaces 運用モードコマンドに相当します。この例では、 rpc モジュールは、デフォルトの場所にある SSH キーを使用して、デバイスで認証します。

手記:

CLIコマンドをRPCリクエストタグにマッピングする方法については、 Junos XML APIエクスプローラー で操作タグを参照してください。

モジュールの応答と出力形式については、 モジュールの応答 についておよび コマンドまたは RPC 出力の形式を指定する方法を参照してください。

juniper.device.rpc モジュールは kwargs オプションをサポートしており、RPC のキーワード引数と値を指定できます。kwargs値は次のようになります。

  • キーワードと値の単一の辞書

  • 複数のRPCの引数を提供する辞書のリスト

kwargsリストの項目とrpcsリストのRPCの間には、1対1の対応関係が必要です。複数のRPCを実行し、RPCが引数を必要としない場合は、対応するkwargsリスト項目を空の辞書{}に設定します。個々の RPC 引数に値が必要ない場合は、その値を true に設定します。

手記:

RPC 引数では、ハイフンの代わりにアンダースコアを使用する必要があります。これは、特定の状況で例外やエラーを引き起こす可能性があります。

次のプレイブックは、インベントリ グループの各デバイスで指定された RPC を実行し、モジュール応答を標準出力に表示します。 get-interface-information RPC は lo0.0 インターフェイスの簡潔なレベルの出力を要求し、 get-lldp-interface-neighbors RPC は ge-0/0/0 インターフェイスの情報を要求します。 get-software-information RPC は、空の辞書を使用して、追加の引数なしで RPC を実行します。

モジュール応答の理解

juniper.device.command モジュールと juniper.device.rpc モジュールは、デバイスからの RPC 応答をモジュール応答内の複数の異なるキー内に格納します。各キーのデータは、次のように構成されています。

  • stdout—RPC 応答は 1 つの複数行の文字列です。

  • stdout_lines—RPC 応答は 1 行の文字列のリストです。

  • parsed_output- RPC 応答は、JavaScript Object Notation (JSON) データ構造に解析されます。このキーは、データの形式が XML または JSON の場合にのみ返されます。

モジュールが 1 つのコマンドまたは RPC を実行する場合、モジュールの応答によって、返されたキーが最上位レベルに配置されます。モジュールが複数のコマンドまたは RPC を実行する場合、モジュールの応答には代わりに、辞書のリストである results キーが含まれます。リスト内の各要素は 1 つのコマンドまたは RPC に対応し、そのコマンドまたは RPC に対して返されるすべてのキーが含まれます。

たとえば、次の応答は 1 つの RPC の実行に対応します。

場合によっては、コマンドまたは RPC の出力が広範囲に及ぶことがあり、モジュールの応答で出力を抑制する必要がある場合があります。モジュールの応答で出力キーを省略するには、そのモジュールの引数リストに return_output: false を含めます。

コマンドまたは RPC 出力の形式を指定する方法

command モジュールと rpc モジュールは、デバイスからの RPC 応答をモジュール応答のいくつかの異なるキー(stdoutstdout_linesparsed_output)に格納します。parsed_output キーは、コマンドまたは RPC 出力形式が XML または JSON の場合にのみ存在し、JSON データ構造に解析されるデータが含まれています。

stdout キーと stdout_lines キーには、モジュールに定義されているデフォルト形式のデータが含まれています。デフォルトでは、commandモジュールはコマンド出力をテキスト形式で返し、rpcモジュールはRPC出力をXML形式形式で返します。

別の出力形式を指定するには、 formats 引数を含め、目的の形式と等しい値を設定します。サポートされている形式は次のとおりです。

  • json

  • text

  • xml

formats パラメーターは、文字列または文字列のリストのいずれかを取ります。複数のコマンドまたは RPC を実行し、1 つの形式のみを指定した場合、出力形式は実行されるすべてのコマンドと RPC で同じになります。各コマンドまたは RPC の出力に異なる形式を指定するには、formats 引数に目的の形式のリストを設定します。リストには、コマンドやRPCと同じ数のフォーマットを指定する必要があります。

以下のプレイブックは、インベントリグループ内の各デバイスで 2 つの RPC を実行し、実行されたすべての RPC の出力のテキスト形式を要求します。

Playbook が実行されると、モジュール応答の stdout キーと stdout_lines キーには、テキスト形式の RPC 応答が含まれます。

次のプレイブックは、インベントリグループの各デバイスで 2 つの RPC を実行し、最初の RPC の出力をテキスト形式で、2 番目の RPC の出力を JSON 形式で要求します。

コマンドまたは RPC 出力をファイルに保存する方法

juniper.device.commandおよびjuniper.device.rpcモジュールを使用してデバイス上でコマンドまたはRPCを実行する場合、destまたはdest_dirモジュール引数を含めることで、返されたデータをローカルのAnsible制御ノード上のファイルに保存できます。dest_dir オプションは、各コマンドまたは RPC の出力をデバイスごとに個別のファイルに保存しますが、dest オプションは、すべてのコマンドと RPC の出力をデバイス向けの同じファイルに保存します。ターゲット名を持つ出力ファイルが既に存在する場合、モジュールはそのファイルを上書きします。

データをファイルに保存していて、モジュールの応答でコマンドまたは RPC 出力を複製したくない場合は、オプションでモジュールの引数リストに return_output: false を含めることができます。 return_outputfalse に設定すると、モジュールはモジュールの応答で出力キーを省略します。これは、デバイスが大量のデータを返す場合に必要になることがあります。

次のセクションでは、 dest_dir オプションと dest オプションの使用方法について説明します。

dest_dir

取得したデータが保存されるローカルAnsible制御ノード上のディレクトリを指定するには、dest_dir引数を含め、ターゲットディレクトリへのパスを定義します。モジュールは、デバイスで実行された各コマンドまたはRPCの出力をhostname_name.formatという名前の個別のファイルに保存します。

  • hostname- コマンドまたは RPC が実行されるデバイスのホスト名。

  • name—管理対象デバイスで実行されたコマンドまたは RPC の名前。このモジュールは、コマンド名のスペースをアンダースコア(_ )に置き換えます。

  • format- 出力の形式( jsontext、または xml)。

以下のプレイブックは、インベントリグループ内の各デバイスで2つのRPCを実行し、各デバイスの各RPCの出力を、Ansible制御ノード上のプレイブックディレクトリ内の個別のファイルに保存します。

その結果、ホスト dc1a.example.net の出力ファイルは次のようになります。

  • dc1a.example.net_get-software-information.xml

  • dc1a.example.net_get-system-uptime-information.xml

同様に、以下のプレイブックは、インベントリグループ内の各デバイスで同等のコマンドを実行し、各デバイスの各コマンドの出力を、Ansible制御ノード上のプレイブックディレクトリ内の個別のファイルに保存します。

その結果、ホスト dc1a.example.net の出力ファイルは次のようになります。

  • dc1a.example.net_show_version.テキスト

  • dc1a.example.net_show_system_uptime.テキスト

宛先

ターゲット ノードのすべてのコマンドまたは RPC 出力がローカルの Ansible 制御ノードに保存されるパスとファイル名を指定するには、 dest 引数を含め、ファイル名またはファイルのフルパスを定義します。 dest 引数を含め、ディレクトリを省略すると、ファイルは Playbook ディレクトリに保存されます。複数のデバイスでコマンドやRPCを実行する場合、 dest 引数には {{ inventory_hostname }} などの変数を含めて、各デバイスのファイル名を区別する必要があります。ファイル名を区別しないと、各デバイスの出力ファイルが他のデバイスの出力ファイルを上書きします。

次のプレイブックは、インベントリグループの各デバイスでRPCを実行します。すべてのRPCの出力は、デバイスごとに個別のファイルに保存され、ファイルはAnsible制御ノードのプレイブックディレクトリに配置されます。各ファイルは、デバイスのホスト名によって一意に識別されます。

たとえば、ホスト dc1a.example.net の結果の出力ファイルは dc1a.example.net-system-information.xml され、デバイス上で実行されたすべての RPC の出力が含まれます。