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