Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Junosデバイスを管理するためのAnsibleプレイブックを作成および実行する

概要 ジュニパーネットワークスのモジュールを実行するAnsibleプレイブックを作成して、Junosデバイス上で運用タスクと設定タスクを実行できます。

ジュニパーネットワークスは、Junosデバイス上で運用タスクと設定タスクを実行できるAnsibleモジュールを提供しています。このトピックでは、Junos デバイスでジュニパーネットワークスのモジュールを実行するためのシンプルな Ansible プレイブックを作成する方法について説明します。

Ansibleプレイブックを作成して、より複雑な管理タスクを処理します。プレイブックは、定義されたホストのセットで動作する 1 つ以上のプレイまたはタスクのグループで構成されます。プレイブックで参照されるAnsibleホストは、デフォルトで /etc/ansible/hostsに存在するAnsibleインベントリファイルで定義する必要があります。

各プレイブックプレイでは、以下を指定する必要があります。

  • タスクが動作するホスト

  • 各ホストで実行するタスクのリスト

  • 必要な変数またはモジュール・パラメーター (認証パラメーターを含む) が他の場所で定義されていない場合

Playbook は、モジュールを呼び出すことによってホストでタスクを実行します。ジュニパーネットワークスのAnsibleモジュールは、Ansible Galaxyでホストされているjuniper.deviceコレクションを通じて配布されます。プレイブックでジュニパーネットワークスのモジュールを使用するには、Ansible制御ノードにコレクションをインストールする必要があります。コレクションとモジュールの詳細については、Junos OSのコレクションとモジュール向けAnsibleについてを参照してください。

ジュニパーネットワークスのモジュールは、Junos PyEZとNETCONF上のJunos XML APIを使用してデバイスとインターフェイスするため、JunosデバイスにPythonは必要ありません。そのため、Junosデバイスで操作を実行するには、PythonがインストールされているAnsible制御ノードでローカルにモジュールを実行する必要があります。Playbook プレイに connection: local を含めることで、モジュールをローカルで実行できます。 connection: local を使用すると、Ansible は、接続を必要とする Play 内のタスクごとにホストへの個別の接続を確立します。 juniper.device 収集モジュールも connection: juniper.device.pyez をサポートします。この接続タイプでは、モジュールは Ansible 制御ノードでローカルに実行されますが、プレイ内のすべてのタスクの実行に対して持続するホストへの接続が確立されます。

デフォルトでは、Ansibleプレイはリモートホストからシステムファクトを自動的に収集します。ただし、ローカルでプレイを実行すると、Ansible はリモートホストではなく Ansible 制御ノードからファクトを収集します。制御ノードのファクトが収集されないようにするには、プレイブックに gather_facts: no を含めます。

SSH経由のNETCONFセッション(デフォルト)を使用してジュニパーネットワークスのモジュールを実行する場合、JunosデバイスでNETCONFが有効になっている必要があります。他のタスクを実行する前に、各デバイスで NETCONF が有効になっているかどうかを明示的にテストするシンプルなタスクをプレイブックに作成することを推奨します。このタスクがいずれかのホストで失敗した場合、デフォルトでは、Ansible はこのホストの残りのタスクを実行しません。このテストを行わないと、Playbook の実行中に、この問題と別の問題のどちらが失敗の原因であるかが示されない一般的な接続エラーが発生する可能性があります。

プレイブックは YAML で表現されます。YAMLは空白を区別し、インデントは重要です。したがって、プレイブックでは、常にタブではなくスペースを使用する必要があります。YAML では、ハイフン (-) が前に付いた項目はリスト項目と見なされ、 key: value 表記はハッシュを表します。Ansibleプレイブックの作成の詳細については、 https://docs.ansible.com/ansible/latest/playbook_guide/playbooks.html の公式Ansibleドキュメントを参照してください。

以下のセクションでは、Junosデバイス上でAnsibleモジュールを実行するシンプルなプレイブックを作成して実行する手順について説明します。

プレイブックの作成

Junos デバイスでタスクを実行するシンプルなプレイブックを作成するには、次の手順に従います。

  1. お気に入りのエディターで、.yaml ファイル拡張子を使用するわかりやすい Playbook 名を持つ新しいファイルを作成します。
  2. YAML ドキュメントの開始を示す 3 つのダッシュを含めます。
  3. プレイのわかりやすい名前を指定します。
  4. モジュールが稼働するホストまたはホスト グループをコロンで区切ったリストを定義するか、インベントリ ファイル内のすべてのホストを示す all を指定します。

    プレイブックで参照されるホストまたはグループは、Ansibleインベントリ ファイルで定義する必要があります。

  5. JunosデバイスにPythonは必要ないため、PythonがインストールされているAnsible制御ノードでローカルにプレイのタスクを実行するようにAnsibleに指示します。
    • タスクをローカルで実行する connection: local を含めますが、接続を必要とするプレイ内のタスクごとにホストへの個別の接続を確立します。

    • タスクをローカルで実行する connection: juniper.device.pyez を含めますが、プレイ内のすべてのタスクの実行にわたって保持されるホストへの永続的な接続を確立します。この接続タイプは、 juniper.device 収集モジュールでのみサポートされます。

    残りの手順では connection: local を使用します。永続的な接続で juniper.device 収集モジュールを使用するには、 connection: juniper.device.pyezを使用するように最終プレイブックを更新します。

  6. (オプション)ターゲットホスト(ローカル接続の場合はAnsible制御ノード)のファクトの収集を回避するために、gather_facts: noを含めます。
  7. (オプション) juniper.device コレクションを参照します。

    プレイブックで collections キーを定義し、タスクでモジュール名のみを参照できます。ただし、推奨される方法は、 collections キーを省略し、代わりに完全修飾コレクション名 (FQCN) でコレクション コンテンツを参照することです。

    この例では、 collections キーを省略し、完全修飾コレクション名を使用します。

  8. タスク セクションを定義し、1 つ以上のタスクをリスト アイテムとして含めます。
  9. (オプション)追加のチェックとして、各JunosデバイスのNETCONF接続を検証するタスクを作成します。
  10. ジュニパーネットワークスのモジュールを使用するタスクを作成し、必要な接続パラメータと認証パラメータを指定します。

    この例では、デフォルトの場所にある既存の SSH キーを使用し、Playbook で facts モジュールの認証情報を明示的に提供しません。

  11. (オプション)必要に応じて、追加のタスクまたは追加のプレイを定義します。

プレイブックを実行する

Playbook を実行するには、次のようにします。

  • 制御ノードで ansible-playbook コマンドを発行し、プレイブックのパスと必要なオプションを指定します。