Ansibleを使用してJunosデバイスからファクトを取得する
ジュニパーネットワークスは、Junosデバイスの管理と、デバイス上での運用および設定タスクの実行に使用できるAnsibleモジュールを提供しています。モジュールは、Junos PyEZおよびNETCONF上のJunos XML APIを使用してデバイスとインターフェイスするため、管理対象デバイスにPythonは必要ありません。そのため、Ansibleを使用してJunosデバイス上で操作を実行する場合は、制御ノードでローカルにAnsibleモジュールを実行する必要があります。その結果、Ansibleはデフォルトで、管理対象ノードではなくAnsible制御ノードからファクトを収集します。
ジュニパーネットワークスは、Junosデバイスからアクティブな設定を含むデバイスファクトを収集するために使用できるモジュールを提供しています。 表 1 は、使用可能なモジュールの概要を示しています。このモジュールは、Junos PyEZ ファクト収集システムを使用して、デバイスのファクトを取得します。Junos PyEZファクト収集システムの詳細と、返される辞書キーの完全なリストについては、 jnpr.junos.factsを参照してください。
| コンテンツ セット |
モジュール名 |
|---|---|
facts モジュールは、ansible_facts.junos ディクショナリ内のデバイス ファクトを返します。このモジュールでは、返されたデータをローカルのAnsible制御ノード上のファイルに保存することもできます。取得した情報を保存するディレクトリを指定するには、savedir モジュール引数を含め、ターゲットディレクトリへのパスを定義します。savedir 引数を含めると、Playbook はデバイスごとに次のファイルを生成します。ここで、hostname はデバイスから取得されたhostnameファクトの値であり、モジュールに渡されるホスト名とは異なる場合があります。
-
hostname-facts.json - JSON形式のデバイスファクト
-
hostname-inventory.xml—デバイスのハードウェアインベントリ(XML形式)
たとえば、次のプレイブックは、インベントリ グループ内の各デバイスのデバイス ファクトを取得し、各デバイスのデータを Ansible 制御ノードのプレイブック ディレクトリ内の個別のファイルに保存します。Playbook は facts モジュールをローカルで実行するため、Ansible はデフォルトで制御ノードからファクトを収集します。Playbook には、Ansible が制御ノードからファクトを収集するのを防ぎ、代わりに juniper.device.facts モジュールを使用して管理対象デバイスからファクトを取得するための gather_facts: no 引数が含まれています。デバイスで認証するために、この例ではデフォルトの場所にある既存の SSH キーを使用するため、Playbook で facts モジュールの認証情報を明示的に提供しません。
---
- name: Get device facts
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Retrieve device facts and save to file
juniper.device.facts:
savedir: "{{ playbook_dir }}"
デフォルトでは、 facts モジュールはデバイス設定を返しません。デバイスのアクティブな設定を返すには、デバイスファクトに加えて、 config_format オプションを含め、設定を返す形式を指定します。指定できる形式の値は、 'json'、 'set'、 'text' 、および 'xml' です。要求する形式は、デバイスで実行されている Junos OS リリースでサポートされている必要があります。
config_format オプションを含めると、モジュール応答の ansible_facts.junos ディクショナリには、指定された形式の設定を含む config キーが 1 行の文字列に含まれます。ただし、プレイブックに savedir オプションが含まれていても、設定データはファイルに書き込まれません。
Ansible を使用して Junos デバイスから設定データを取得し、ファイルに保存するには、facts モジュールではなく config モジュールを使用します。詳しくは、Ansible を使用して Junos OS の設定を取得または比較するを参照してください。
次の例の Playbook は、以下のオペレーションを実行します。
-
インベントリ グループ内の各デバイスについて、デバイス ファクトとアクティブな設定を取得します。
-
各デバイスのファクトとハードウェアインベントリを、Ansible制御ノードのプレイブックディレクトリにある個別のファイルに保存します
-
各デバイスの設定を標準出力に出力します
---
- name: Get device facts and configuration
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Retrieve device facts and configuration and save facts to file
juniper.device.facts:
savedir: "{{ playbook_dir }}"
config_format: "xml"
register: result
- name: Print configuration
ansible.builtin.debug:
var: result.ansible_facts.junos.config
user@ansible-cn:~$ ansible-playbook facts.yaml
PLAY [Get device facts and configurations] **********************************
TASK [Retrieve device facts and configuration and save facts to file] *******
ok: [dc1a.example.net]
TASK [Print configuration] **************************************************
ok: [dc1a.example.net] => {
"result.ansible_facts.junos.config": "<configuration commit-seconds=\"1605564153\" commit-localtime=\"2020-11-16 14:02:33 PST\" commit-user=\"admin\">\n <version>20191212.201431_builder.r1074901</version>\n
[...output truncated...]
</configuration>\n"
}
PLAY RECAP ******************************************************************
dc1a.example.net : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0