juniper.device.commandおよびjuniper.device.rpcAnsibleモジュールを使用して、Junosデバイス上でコマンドとRPCを実行します。
juniper.device.commandおよびjuniper.device.rpcAnsibleモジュールを使用して、Junosデバイス上で動作モードコマンドとRPCを実行できます。
ジュニパーネットワークスは、Junos OSを実行するデバイスおよびJunos OS Evolvedを実行するデバイス上で、動作モードコマンドとリモートプロシージャコール(RPC)を実行するために使用できるJunos OSモジュールを提供します。 表1は 、モジュールの概要を示しています。 juniper.device コレクションの特定のモジュール セットを既に使用している場合は、そのセットのモジュールを使用します。
|
コレクション |
モジュールセット |
モジュール名 |
|---|---|---|
|
|
|
|
|
|
次のセクションでは、 juniper.device.command モジュールと juniper.device.rpc モジュールの使用方法、モジュール 応答の解析方法、出力形式の指定、および出力のファイルへの保存方法について説明します。
運用出力からターゲット データをより簡単に抽出するために、カスタムまたは事前定義された Junos PyEZ 運用テーブルで juniper.device.table モジュールを使用することもできます。詳細については、「 AnsibleとJunos PyEZテーブルを使用して、Junosデバイスから運用情報を取得する」を参照してください。
juniper.device.commandモジュールでコマンドを実行する方法
juniper.device.commandモジュールにより、Junosデバイス上で動作モードコマンドを実行できます。モジュールには、デバイス上で実行する1つ以上のJunos OS動作モードコマンドのリストである引数commandsが1つ必要です。
次のプレイブックでは、インベントリグループの各デバイスで2つの動作モードコマンドを実行します。プレイブックは、モジュールの応答を標準出力(stdout)で表示します。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.command:
commands:
- "show version"
- "show system uptime"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
モジュールの応答と出力形式については、「 モジュールの応答について 」および 「コマンドまたは RPC 出力の形式を指定する方法」を参照してください。
juniper.device.rpcモジュールでRPCを実行する方法
Junos XML APIは、Junos OS設定ステートメントと動作モードコマンドのXML表現です。Junos OS設定階層のすべてのステートメントと、Junos OS CLIで発行する多くの動作モードコマンドに相当するXMLを定義します。Junos XMLに対応する各動作モードコマンドは、リクエストタグ要素と、必要に応じてレスポンスタグ要素にマッピングされます。リクエストタグは、NETCONFまたはJunos XMLプロトコルセッション内のRPCで、Junosデバイスから情報をリクエストするために使用されます。サーバーは、対応する応答タグ要素内に囲まれた Junos XML 要素を使用して応答を返します。
juniper.device.rpcモジュールにより、Junosデバイス上でRPCを実行できます。モジュールには、デバイス上で実行する1つ以上のJunos OS RPCのリストである引数rpcsが1つ必要です。
次のプレイブックでは、インベントリグループ内の各デバイスで get-interface-information RPCを実行し、モジュール応答を標準出力で表示します。RPCは、 show interfaces の運用モードコマンドに相当します。
---
- name: Execute RPC
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get interface information
juniper.device.rpc:
rpcs: "get-interface-information"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
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 を実行します。
---
- name: Get Device Information
hosts: dc1a
connection: local
gather_facts: no
tasks:
- name: Get device information
juniper.device.rpc:
rpcs:
- "get-interface-information"
- "get-lldp-interface-neighbors"
- "get-software-information"
kwargs:
- interface_name: "lo0.0"
terse: true
- interface_device: "ge-0/0/0"
- {}
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
モジュール応答の理解
juniper.device.commandモジュールとjuniper.device.rpcモジュールは、デバイスからのRPC応答をモジュール応答の複数の異なるキー内に格納します。各キーのデータは次のように構成されています。
-
stdout—RPC応答は1つの複数行の文字列です。 -
stdout_lines—RPC応答は、1行の文字列のリストです。 -
parsed_output—RPC応答は、JavaScript Object Notation(JSON)データ構造に解析されます。このキーは、データの形式がXMLまたはJSONの場合にのみ存在します。
モジュールが単一のコマンドまたはRPCを実行した場合、モジュールの応答は返されたキーを最上位レベルに配置します。モジュールが複数のコマンドまたはRPCを実行する場合、モジュールの応答には代わりに、辞書のリストである results キーが含まれます。一覧内の各要素は、1 つのコマンドまたは RPC に対応します。これには、そのコマンドまたは RPC に対して返されるすべてのキーが含まれます。
たとえば、次の応答は 1 つの RPC の実行に対応します。
"junos_result": {
"attrs": null,
"changed": false,
"failed": false,
"format": "xml",
"kwargs": null,
"msg": "The RPC executed successfully.",
"parsed_output": {
"interface-information": {
"physical-interface": [
[...output omitted...]
}
},
"rpc": "get-interface-information",
"stdout": "<interface-information style=\"normal\">\n <physical-interface>\n
[...output omitted...] </physical-interface>\n</interface-information>\n"
"stdout_lines": [
"<interface-information style=\"normal\">",
" <physical-interface>",
[...output omitted...]
" </physical-interface>",
"</interface-information>"
]
}
場合によっては、コマンドまたは RPC の出力が広範囲に及ぶ場合があり、モジュールの応答で出力を抑制する必要がある場合があります。モジュールの応答で出力キーを省略するには、そのモジュールの引数リストに return_output: false を含めます。
tasks:
- name: Get interface information
juniper.device.rpc:
rpcs: "get-interface-information"
return_output: false
register: junos_result
コマンドまたはRPC出力の形式を指定する方法
commandモジュールとrpcモジュールは、デバイスからのRPC応答をモジュール応答の複数の異なるキー(stdout、stdout_lines、parsed_output)内に格納します。parsed_output キーは、コマンドまたは RPC 出力形式が XML または JSON の場合にのみ存在し、JSON データ構造に解析されるデータが含まれています。
stdout キーと stdout_lines キーには、モジュールに定義されたデフォルト形式のデータが含まれます。デフォルトでは、commandモジュールはコマンド出力をテキスト形式で返し、rpcモジュールはRPC出力をXML形式で返します。
別の出力形式を指定するには、 formats 引数を含め、必要な形式と等しい値を設定します。サポートされている形式は次のとおりです。
-
json -
text -
xml
formatsパラメーターは、文字列または文字列のリストのいずれかを取ります。単一の形式のみを指定すると、実行されるすべてのコマンドまたはRPCがその形式を使用します。コマンドまたは RPC ごとに異なる形式を指定するには、formats引数を必要な形式のリストに設定します。フォーマットの数は、コマンドまたはRPCの数と同じである必要があります。
次のプレイブックでは、インベントリグループの各デバイスで2つのRPCを実行します。プレイブックは、実行されたすべての RPC の出力のテキスト形式を要求します。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and system uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
formats: text
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
モジュールの応答では、 stdout キーと stdout_lines キーにテキスト形式でRPCの応答が含まれています。
次のプレイブックでは、インベントリグループの各デバイスで2つのRPCを実行します。このモジュールは、最初の RPC の出力をテキスト形式で、2 番目の RPC の出力を JSON 形式でリクエストします。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and system uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
formats:
- "text"
- "json"
register: junos_result
- name: Print response
ansible.builtin.debug:
var: junos_result
コマンドまたはRPC出力をファイルに保存する方法
juniper.device.command または juniper.device.rpc モジュールを使用すると、返されたデータをローカル Ansible 制御ノード上のファイルに保存できます。データを保存するには、dest または dest_dir モジュール引数を含めます。dest_dirオプションは、各コマンドまたはRPCの出力をデバイス用の個別のファイルに保存します。destオプションは、すべてのコマンドとRPCの出力をデバイスの同じファイルに保存します。ターゲット名を持つ出力ファイルが既に存在する場合、モジュールはファイルを上書きします。
データをファイルに保存し、モジュールの応答で出力を複製したくない場合は、オプションでモジュールの引数リストに return_output: false を含めることができます。 return_output を false に設定すると、モジュール はモジュールの応答で出力キーを省略します。デバイスが大量のデータを返す場合は、キーを省略する必要がある場合があります。
次のセクションでは、 dest_dir オプションと dest オプションの使用方法について説明します。
dest_dir
取得したデータが保存されるローカルAnsible制御ノード上のディレクトリを指定するには、dest_dir引数を含め、ターゲットディレクトリへのパスを定義します。このモジュールは、デバイス上で実行された各コマンドまたはRPCの出力を、hostname_name.formatという名前の別のファイルに格納します。
-
hostname—コマンドまたはRPCが実行されるデバイスのホスト名。
-
name—管理対象デバイスで実行されたコマンドまたはRPCの名前。このモジュールは、コマンド名のスペースをアンダースコア ( _ ) に置き換えます。
-
format—出力の形式( json、 text、 またはxml)です。
次のプレイブックでは、インベントリグループの各デバイスで2つのRPCを実行します。プレイブックは、各デバイスの各RPCの出力を、Ansibleコントロールノードのプレイブックディレクトリ内の個別のファイルに保存します。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
dest_dir: "{{ playbook_dir }}"
ホスト dc1a.example.net の結果出力ファイルは以下のとおりです。
-
dc1a.example.net_get-software-information.xml
-
dc1a.example.net_get-system-稼働時間-information.xml
同様に、次のプレイブックでは、インベントリグループ内の各デバイスで同等のコマンドを実行します。プレイブックは、各デバイスの各コマンドの出力を、Ansibleコントロールノードのプレイブックディレクトリ内の個別のファイルに保存します。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.command:
commands:
- "show version"
- "show system uptime"
dest_dir: "{{ playbook_dir }}"
ホスト dc1a.example.net の結果出力ファイルは以下のとおりです。
-
dc1a.example.net_show_version.text
-
dc1a.example.net_show_system_稼働時間.text
送信先
destオプションを使用して、ターゲットノードのすべてのコマンドまたはRPC出力がローカルAnsible制御ノードに保存される出力ファイルを指定できます。ファイルのファイル名またはフルパスを定義します。dest引数を含めてもディレクトリを省略すると、ファイルはプレイブックディレクトリに保存されます。複数のデバイスでコマンドやRPCを実行する場合、dest引数には、デバイスごとのファイル名を区別するために、{{ inventory_hostname }}などの変数を含める必要があります。ファイル名を区別しない場合、各デバイスの出力ファイルが他のデバイスの出力ファイルを上書きします。
次のプレイブックでは、インベントリグループ内の各デバイスでRPCを実行します。プレイブックは、すべてのRPCの出力をデバイスごとに個別のファイルに保存します。ファイルは、Ansible制御ノードのプレイブックディレクトリに配置されます。各ファイルは、デバイスホスト名によって一意に識別されます。
---
- name: Get device information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get software and uptime information
juniper.device.rpc:
rpcs:
- "get-software-information"
- "get-system-uptime-information"
dest: "{{ inventory_hostname }}-system-information.xml"
たとえば、ホスト dc1a.example.net の結果出力ファイルは dc1a.example.net-system-information.xml され、デバイス上で実行されたすべての RPC の出力が含まれます。