Ansible を使用して Junos デバイスからファクトを取得する
ジュニパーネットワークスは、Ansibleを使用したJunosデバイスの管理をサポートしており、デバイスの運用タスクや設定作業を可能にするAnsibleモジュールを提供しています。モジュールとインターフェイスするために、NETCONF 上で Junos PyEZ と Junos XML API を使用するため、管理対象デバイスに Python は必要ありません。したがって、Ansible を使用して Junos デバイスで操作を実行する場合は、制御ノードでローカルに Ansible モジュールを実行する必要があります。その結果、Ansibleはデフォルトで、管理対象ノードではなくAnsible制御ノードからファクトを収集します。
ジュニパーネットワークスは、Junosデバイスからアクティブな設定を含むデバイスのファクトを収集するためのモジュールを提供しています。 表 1 に、使用可能なモジュールの概要を示します。モジュールは、Junos PyEZファクト収集システムを使用して、デバイスのファクトを取得します。Junos PyEZファクト収集システムと返されるディクショナリキーの完全なリストの詳細については、 jnpr.junos.factsを参照してください。
コンテンツセット |
モジュール名 |
---|---|
|
|
モジュールjuniper_junos_facts
とfacts
モジュールは、ansible_facts.junos
ディクショナリ内のデバイスのファクトを返します。このモジュールを使用すると、返されたデータをローカルの Ansible 制御ノード上のファイルに保存することもできます。取得した情報を保存するディレクトリを指定するには、module 引数を含めsavedir
、ターゲット ディレクトリへのパスを定義します。引数を含めるsavedir
と、プレイブックはデバイスごとに次のファイルを生成します。ここでhostname、 はデバイスから取得されたhostname
ファクトの値であり、モジュールに渡されたホスト名とは異なる場合があります。
-
hostname-facts.json:JSON 形式のデバイス ファクト
-
hostname-inventory.xml:XML 形式のデバイスのハードウェア インベントリ
たとえば、次のプレイブックは、インベントリ グループ内の各デバイスのデバイス ファクトを取得し、各デバイスのデータを Ansible コントロール ノードのプレイブック ディレクトリ内の個別のファイルに保存します。プレイブックではジュニパーネットワークスモジュールがローカルで実行されるため、Ansibleはデフォルトで制御ノードからファクトを収集します。プレイブックには、gather_facts: no
Ansibleが制御ノードからファクトを収集するのを防ぐための引数が含まれており、juniper.device
代わりにコレクション内のモジュールを使用してfacts
管理対象デバイスからファクトを取得します。デバイスで認証するために、この例では既定の場所にある既存の SSH キーを使用しているため、プレイブックでモジュールの資格情報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
および juniper_junos_facts
モジュールはデバイス設定を返しません。デバイスのアクティブなコンフィギュレーションを返すには、デバイスのファクトに加えて、 オプションを含めconfig_format
、コンフィギュレーションを返す形式を指定します。使用できる形式値は'json'
、 'set'
'text'
'xml'
です。要求された形式は、デバイスで実行されている Junos OS リリースでサポートされている必要があります。
オプションを含める config_format
と、モジュール応答のディクショナリには ansible_facts.junos
、指定された形式の構成を持つキーが 1 つの複数行文字列で含まれ config
ます。 savedir
オプションが含まれている場合、コンフィギュレーション・データはファイルに書き込まれ ません 。
Ansible を使用して Junos デバイスから設定データを取得し、そのデータをファイルに保存するには、 モジュールではなく、 facts
モジュール または モジュールjuniper_junos_facts
juniper_junos_config
を使用しますconfig
。詳細については、次を参照してください:Ansible を使用して Junos OS 設定を取得または比較する。
次の例のプレイブックでは、次の操作が実行されます。
-
インベントリ グループ内の各デバイスのデバイスのファクトとアクティブな設定を取得します。
-
各デバイスのファクトとハードウェア インベントリを、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 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