Ansible for Junos OSコレクションとモジュールについて
Junos OSを実行しているデバイスとJunos OS Evolvedを実行しているデバイスの管理に使用できるAnsibleコレクションとモジュールについて説明します。
Junosデバイスを管理するためのAnsibleコレクションとモジュールについて
Ansibleは、インフラストラクチャの構成管理に使用できるIT自動化フレームワークです。個別のコード単位であるAnsibleモジュールを使用して、マネージドノードで特定の機能を実行します。リモートホストで個々のモジュールを実行して、アドホックタスクを実行できます。プレイブックを使用してモジュールを実行することもできます。
ジュニパーネットワークスは、Junosデバイスの管理に使用できるAnsibleモジュールを提供しています。Ansibleモジュールは、 Ansible Galaxy リポジトリーでホストされているAnsible Content Collectionsを通じてグループ化され、配布されます。Ansibleコレクションは、Ansibleコアインストールの一部として含まれていないAnsibleコンテンツを配布するための形式です。コレクションには、モジュール、プレイブック、プラグイン、ロールなど、幅広いコンテンツを含めることができます。コレクションには独自のリポジトリもあるため、Ansibleコアインストールとは独立して開発およびリリースできます。
表1 は、Junosデバイスの管理に使用できるコンテンツセットの概要を示しています。ジュニパーネットワークス は、 juniper.device コレクションを提供します。 juniper.device リリース 2.0.0 以降、ジュニパーネットワークス juniper.device コレクションと Red Hat Ansible junipernetworks.junos コレクションは、両方のモジュールセットを含む 1 つのコレクションに統合されました。
| コレクション | モジュールセット | 説明 |
|---|---|---|
juniper.device |
Junosデバイスを管理するためのモジュール。ジュニパーネットワークスは、このコレクションをオープンソースプロジェクトとして提供および管理しています。 |
|
|
( |
Junosデバイスを管理するためのモジュール。このコレクションはもともと Red Hat Ansible Networking チームが管理していました。リリース 2.0.0 |
juniper.device Merged Collection について
マージの概要
juniper.device リリース 2.0.0 以前は、ジュニパーネットワークス juniper.device コレクションと Red Hat Ansible junipernetworks.junos コレクションは別個のコレクションでした。各コレクション所有者は、それぞれのコレクションを管理していました。リリース 2.0.0 juniper.device以降、junipernetworks.junos コレクションが juniper.device コレクションにマージされました。ジュニパーネットワークスは、今後もマージされたコレクションを維持します。
モジュールの結合セットを示すために、juniper.deviceコレクションを参照します。コレクション内のモジュールセットを区別するために、モジュールを次のように参照します。
-
juniper.deviceモジュールまたは元のモジュールjuniper.device -
junipernetworks.junosモジュールまたはjuniper.device.junos_*モジュール
juniper.device コレクションをインストールすると、juniper.device.module_name を使用して、いずれかのモジュールセットのモジュールを実行できます。junipernetworks.junos.module_nameを参照する既存のプレイブックを引き続き使用するには、junipernetworks.junosコレクションもインストールする必要があります。いずれかの名前空間を使用してjunipernetworks.junosモジュールを実行するには、ansible_network_osをjuniper.device.junosに設定する必要があります。それ以外の場合、どちらのモジュール セットを使用しても、他のものはすべて同じままです。
juniper.deviceコレクションには両方のモジュールセットが含まれていますが、各モジュールセットでは異なるAnsible接続値とネットワークOS値が使用されます。その結果、2 つのモジュール セットで同じインベントリ ファイルを使用できず、同じプレイブック内でモジュール セットを混在させることはできません。したがって、プレイブックとタスクに使用するモジュールのセットを 1 つ選択することをお勧めします。選択するセットは好みの問題です。どのモジュール セットが環境に最適かを判断できるように、2 つのセットの概要と比較を提供しています。
モジュールセットの比較
juniper.deviceコレクションとjunipernetworks.junosコレクションは、もともと異なる目的とユースケースのために構築されました。ジュニパーネットワークス、ユーザーが幅広いJunos OS機能に直接アクセスできるようにjuniper.deviceモジュールを設計しました。Red Hat は、Red Hat が管理するすべてのネットワーキングコレクションに適用される一貫したアプローチを使用して、junipernetworks.junos モジュールを開発しました。このアプローチにより、テンプレート化された構成が提供され、合理化された繰り返し可能な構成管理が実現しました。
いくつかの明確な違いを除けば、 juniper.device モジュールと junipernetworks.junos モジュールはどちらも、Junosデバイスを管理するための同様の機能を提供します。どちらのモジュールセットでも、以下のことが可能になります。
-
デバイスの事実を確認する
-
デバイス上でコマンドとRPCを実行する
-
ソフトウェアパッケージをインストールする
-
デバイスから ping 操作を実行する
-
デバイスの設定
どちらのモジュール セットも、デバイスを設定するための同様のオプションを提供します。たとえば、次のことができます。
-
ファイルから、受け入れられた形式のいずれかで設定データを読み込みます
-
モジュール引数で指定された
setコマンドとして設定データを読み込みます -
設定をロールバックする
-
設定全体の置き換え
-
設定データを読み込むための形式と読み込み操作を指定します
-
設定をコミットし、共通のコミットオプションを含めます
また、モジュールセットには、設定操作に関していくつかの違いがあります。 junipernetworks.junos モジュールには、設定階層の特定の領域に共通のステートメントを簡単に設定できる多数の設定テンプレートが用意されています。例えば、OSPF や静的ルートに共通オプションを設定することができます。
同様に、 juniper.device モジュールには、いくつかの追加設定機能があります。Jinja2テンプレートを使用して、設定の比較、レスキュー設定の読み込み、設定データの読み込みを行うことができます。設定モードを選択することもできます。たとえば、バッチモードを使用できます。候補の設定のプライベートコピーを設定します。動的または一時的なデータベースを設定することもできます。 juniper.device モジュールには、設定の同期、空の変更のコミット、コミット警告の無視などの追加のコミットオプションも用意されています。
モジュール セット間のもう 1 つの重要な違いは、 juniper.device モジュールが他のいくつかのジュニパーネットワークス製品と統合できることです。例えば、Ansibleプレイブックは、Junos PyEZ運用テーブルを参照して、デバイスから運用状態データを取得できます。Ansibleプレイブックは、PythonでのJunos Snapshot Administrator(JSNAPy)操作を実行することもできます。JSNAPyを使用すると、Junosデバイスのランタイム環境スナップショットをキャプチャして監査できます。したがって、既存のJunos PyEZテーブルとJSNAPyの設定およびテストファイルをAnsibleプレイブックで使用できます。
Junosデバイスでモジュールを実行する方法
Ansible Galaxyリポジトリでホストされているコレクションを使用するには、まず制御ノードにAnsibleをインストールしてから、コレクションをインストールする必要があります。 juniper.device コレクションのインストールについての詳細は、 Ansible for Junos OS Server の要件を参照してください。
Ansibleモジュールは、マネージドノード上で操作を実行できます。通常、Ansible制御ノードは、操作を実行するためにモジュールをマネージドノードに送信します。ノードはモジュールを実行してから削除します。このシナリオでは、マネージドノードにはモジュールを実行する機能が必要です。ほとんどのAnsibleモジュールはPythonで記述されているため、Ansibleでは通常、マネージドノードにPythonが必要です。
ただし、 juniper.device コレクション内のモジュールは、マネージドノードで Python を必要としません。一般的な操作とは異なり、Ansible制御ノードはモジュールをローカルで実行します。モジュールは、Junos XML APIとNETCONFを使用してマネージドノードとインターフェイスします。この実行方法では、Ansibleを使用してサポートされているすべてのJunosデバイスを管理できます。 図1 は、Ansible制御ノードと管理対象Junosデバイス間の通信を示しています。
juniper.deviceモジュールまたはjunipernetworks.junosモジュールを使用するには、Ansibleプレイブックまたはコマンドが必要です。
-
コレクションまたはFQCN—コレクションを指定するには、プレイに
collectionsキーを含めます。または、collectionsキーを省略し、代わりに、推奨される方法である完全修飾コレクション名 (FQCN) でコレクション コンテンツを参照することもできます。 -
モジュールを制御ノードでローカルに実行—Ansibleモジュールをローカルで実行するには、プレイブック、インベントリファイル、またはコマンドオプションで適切な接続パラメーターを定義します。プレイブックで
connectionパラメーターを定義するか、インベントリファイルまたはホストまたはグループ変数ファイルでansible_connectionパラメーターを定義します。junipernetworks.junosモジュールでは、ansible_network_osパラメーターも指定する必要があります。通常、このパラメータはインベントリファイルで定義します。 表2は 、サポートされている値の概要を示しています。表2:接続パラメーター モジュールセット プレイブック インベントリファイル juniper.device
(オリジナルモジュール)-
connection: (local | juniper.device.pyez)
-
ansible_connection=(local | juniper.device.pyez)
junipernetworks.junos
(を除くすべてのjunos_*モジュールjunos_netconfおよびjunos_ping)-
connection: netconf
-
ansible_connection=netconf -
ansible_network_os=juniper.device.junos
junipernetworks.junos
(junos_netconfおよびjunos_ping)-
connection: network_cli
-
ansible_connection=network_cli -
ansible_network_os=juniper.device.junos
-
-
管理対象デバイスに接続するための適切な接続情報と認証情報を提供します。
管理対象のJunosデバイスにアクセスできる任意のユーザーアカウントを使用して、Ansibleモジュールを実行できます。Ansibleモジュールを実行すると、Junos OSユーザーアカウントのアクセス権限が適用されます。Junos OSユーザーアカウントに設定されたクラスによって権限が決まります。したがって、ユーザーが設定変更をデバイスにロードするモジュールを実行する場合、そのユーザーは設定の関連部分を変更する権限を持っている必要があります。
以下のセクションでは、さまざまなモジュールセットのサンプルプレイブックとインベントリファイルを提供します。
juniper.deviceモジュール用サンプルプレイブック
次のプレイブックでは、 juniper.device.facts モジュールを実行してデバイスのファクトを取得し、ファイルに保存します。この例では、インベントリ ファイルではなくプレイブックで接続タイプを定義します。ユーザーは、SSHキーエージェントにロードされたSSHキーを使用して、デバイスを認証します。
---
- name: Get Device Facts
hosts: junos
connection: local
gather_facts: no
tasks:
- name: Retrieve facts from a Junos device
juniper.device.facts:
savedir: "{{ playbook_dir }}"
- name: Print version
ansible.builtin.debug:
var: junos.version
コマンドラインでアドホック操作を実行することもできます。次のコマンドは、 juniper.device.facts モジュールを実行し、インベントリグループ junos内のホストからデバイスのファクトを取得します。
user@ansible-cn:~$ ansible --connection local -i production junos -m juniper.device.facts
junipernetworks.junosモジュールのサンプルインベントリファイルとプレイブック
junipernetworks.junosモジュールセットを使用している場合は、インベントリファイル、ホスト変数ファイル、グループ変数ファイルでansible_connection変数とansible_network_os変数を定義できます。次のインベントリ ファイルの例では、dc1:varsの下のグループ dc1 の接続パラメーターを定義しています。
[dc1] switch1.example.com [dc1:vars] ansible_connection=netconf ansible_network_os=juniper.device.junos
次のプレイブックでは、juniper.device名前空間でjunipernetworks.junos.junos_factsモジュールを実行します。プレイブックは、インベントリファイル内の適切な接続とネットワークOS値を定義するdc1グループを参照します。
- name: Get Device Facts
hosts: dc1
gather_facts: no
tasks:
- name: Retrieve facts from a Junos device
juniper.device.junos_facts:
register: response
- name: Print version
ansible.builtin.debug:
var: response.ansible_facts.ansible_net_version
juniper.deviceモジュール
表 3 は、juniper.device コレクション内の元の juniper.device モジュールの概要を示しています。モジュールの現在のモジュールリスト、ドキュメント、および使用例については、https://ansible-juniper-collection.readthedocs.io を参照してください。
|
モジュール名 |
説明 |
サポートされているAnsible接続 |
|---|---|---|
|
|
Junosデバイス上で動作モードコマンドを実行し、出力をローカルに保存します。 |
|
|
|
Junosデバイスの設定を管理します。 |
|
|
|
リモートホストから、Junos OSのバージョン、シリアル番号、ハードウェアモデル番号などのデバイス固有の情報を取得します。 |
|
|
|
ローカルAnsibleコントロールノードとJunosデバイス間でファイルを転送します。 |
|
|
|
Ansibleを介してPythonでJunos Snapshot Administrator(JSNAPy)テストを実行します。 |
|
|
|
Junosデバイスから |
|
|
|
JunosデバイスでパスMTU検出(PMTUD)を実行します。 |
|
|
|
Junos OS RPCを実行します。 |
|
|
|
ソフトウェア パッケージをインストールし、Junos デバイスを再起動します。 |
|
|
|
クラスター対応SRXシリーズファイアウォール用のSRXシリーズシャーシクラスターを作成します。 |
|
|
|
デバイスのリセット、再起動、シャットダウンなどのシステム操作をJunosデバイス上で実行します。 |
|
|
|
Junos PyEZ運用テーブルとビューを使用して、Junosデバイスから運用情報を取得します。 |
|
junipernetworks.junos モジュール
リリース 2.0.0 以降juniper.device、juniper.device コレクションにはjunipernetworks.junos モジュールが含まれます。表4は、juniper.deviceコレクションのjunipernetworks.junosモジュールの概要を示しています。モジュールセットを使用すると、運用タスクを実行できます。また、Junosデバイスのさまざまな機能、プロトコル、およびサービスに共通の設定を構成する多くの構成テンプレートモジュールも含まれています。
| モジュール名 | 説明 | サポートされているAnsible接続 |
|---|---|---|
| 運用モジュール | ||
|
|
Junosデバイス上で動作モードコマンドを実行します。 |
|
|
|
リモートホストからデバイス固有の情報を取得します。 |
|
|
|
ソフトウェア パッケージをインストールし、Junos デバイスを再起動します。 |
|
|
|
Junosデバイスから |
|
|
|
Junosデバイス上でNETCONFを介してJunos OS RPCを実行します。 |
|
| 構成モジュール | ||
|
|
インターフェイスにファイアウォールフィルターを適用します。 |
|
|
|
ファイアウォールフィルターを設定します。 これは、アクセスコントロールリスト (ACL)とも呼ばれます。 |
|
|
|
バナーを設定します。 |
|
|
|
インターフェイスの BGP アドレスファミリー属性を管理します。 |
|
|
|
BGPのグローバルプロパティを設定します。 |
|
|
|
Junosデバイスの設定を管理します。 |
|
|
|
デバイスホスト名を設定します。 |
|
|
|
基本的な物理および論理インターフェイスのプロパティを設定します。 |
|
|
|
L2インターフェイスを設定します。 |
|
|
|
L3インターフェイスを設定します。 |
|
|
|
集合型イーサネットインターフェイスに対して、グローバルなリンクアグリゲーション制御プロトコル(LACP)プロパティを設定します。 |
|
|
|
インターフェイスのLACP属性を管理します。 |
|
|
|
リンクアグリゲーショングループ(LAG)を設定します。 |
|
|
|
LLDP(Link Layer Discovery Protocol)のグローバル設定を構成します。 |
|
|
|
インターフェイスのLLDP属性を管理します。 |
|
|
|
システムロギングを設定します。 |
|
|
|
NETCONFシステムサービスを設定します。 |
|
|
|
Network Time Protocol(NTP)を設定します。 |
|
|
|
インターフェイスの OSPF 設定を管理します。 |
|
|
|
OSPFv2を設定します。 |
|
|
|
OSPFv3を設定します。 |
|
|
|
ルーティングポリシープレフィックスリストを設定します。 |
|
|
|
ルーティングインスタンスを設定します。 |
|
|
|
ルーティングオプションを設定します。 |
|
|
|
セキュリティポリシーを設定および管理します。 |
|
|
|
グローバルセキュリティポリシー設定を構成します。 |
|
|
|
セキュリティゾーンを設定します。 |
|
|
|
SNMPサーバー設定を管理します。 |
|
|
|
スタティックルートを設定します。 |
|
|
|
ホスト名とDNS設定を管理します。 |
|
|
|
ローカルユーザーアカウントを設定します。 |
|
|
|
VLANを設定します。 |
|
|
|
デバイス上のVRF定義を管理します。 |
|