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 つのコレクションに統合されました。

表1:Junosデバイスを管理するためのAnsibleコンテンツセット
コレクション モジュールセット 説明
juniper.device

juniper.device

Junosデバイスを管理するためのモジュール。ジュニパーネットワークスは、このコレクションをオープンソースプロジェクトとして提供および管理しています。

junipernetworks.junos

(juniper.device.junos_*)

Junosデバイスを管理するためのモジュール。このコレクションはもともと Red Hat Ansible Networking チームが管理していました。リリース 2.0.0 juniper.device では、モジュールを juniper.device コレクションにマージしました。ジュニパーネットワークスは、今後もこれらのモジュールを維持します。これらのモジュールは、 junos_で始まるモジュール名で識別できます。

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デバイス間の通信を示しています。

図1:JunosデバイスとのAnsible通信Ansible Communication with a Junos Device

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キーを使用して、デバイスを認証します。

コマンドラインでアドホック操作を実行することもできます。次のコマンドは、 juniper.device.facts モジュールを実行し、インベントリグループ junos内のホストからデバイスのファクトを取得します。

junipernetworks.junosモジュールのサンプルインベントリファイルとプレイブック

junipernetworks.junosモジュールセットを使用している場合は、インベントリファイル、ホスト変数ファイル、グループ変数ファイルでansible_connection変数とansible_network_os変数を定義できます。次のインベントリ ファイルの例では、dc1:varsの下のグループ dc1 の接続パラメーターを定義しています。

次のプレイブックでは、juniper.device名前空間でjunipernetworks.junos.junos_factsモジュールを実行します。プレイブックは、インベントリファイル内の適切な接続とネットワークOS値を定義するdc1グループを参照します。

juniper.deviceモジュール

表 3 は、juniper.device コレクション内の元の juniper.device モジュールの概要を示しています。モジュールの現在のモジュールリスト、ドキュメント、および使用例については、https://ansible-juniper-collection.readthedocs.io を参照してください。

表3:juniper.deviceモジュール

モジュール名

説明

サポートされているAnsible接続

command

Junosデバイス上で動作モードコマンドを実行し、出力をローカルに保存します。

  • local

  • juniper.device.pyez

config

Junosデバイスの設定を管理します。

  • local

  • juniper.device.pyez

facts

リモートホストから、Junos OSのバージョン、シリアル番号、ハードウェアモデル番号などのデバイス固有の情報を取得します。

  • local

  • juniper.device.pyez

file_copy

ローカルAnsibleコントロールノードとJunosデバイス間でファイルを転送します。

  • local

  • juniper.device.pyez

jsnapy

Ansibleを介してPythonでJunos Snapshot Administrator(JSNAPy)テストを実行します。

  • local

  • juniper.device.pyez

ping

Junosデバイスから ping コマンドを実行します。

  • local

  • juniper.device.pyez

pmtud

JunosデバイスでパスMTU検出(PMTUD)を実行します。

  • local

  • juniper.device.pyez

rpc

Junos OS RPCを実行します。

  • local

  • juniper.device.pyez

software

ソフトウェア パッケージをインストールし、Junos デバイスを再起動します。

  • local

  • juniper.device.pyez

srx_cluster

クラスター対応SRXシリーズファイアウォール用のSRXシリーズシャーシクラスターを作成します。

  • local

  • juniper.device.pyez

system

デバイスのリセット、再起動、シャットダウンなどのシステム操作をJunosデバイス上で実行します。

  • local

  • juniper.device.pyez

table

Junos PyEZ運用テーブルとビューを使用して、Junosデバイスから運用情報を取得します。

  • local

  • juniper.device.pyez

junipernetworks.junos モジュール

リリース 2.0.0 以降juniper.device、juniper.device コレクションにはjunipernetworks.junos モジュールが含まれます。表4は、juniper.deviceコレクションのjunipernetworks.junosモジュールの概要を示しています。モジュールセットを使用すると、運用タスクを実行できます。また、Junosデバイスのさまざまな機能、プロトコル、およびサービスに共通の設定を構成する多くの構成テンプレートモジュールも含まれています。

表4:junipernetworks.junosモジュール
モジュール名 説明 サポートされているAnsible接続
運用モジュール

junos_command

Junosデバイス上で動作モードコマンドを実行します。

  • ansible.netcommon.netconf

  • ansible.netcommon.network_cli

junos_facts

リモートホストからデバイス固有の情報を取得します。

  • ansible.netcommon.netconf

junos_package

ソフトウェア パッケージをインストールし、Junos デバイスを再起動します。

  • ansible.netcommon.netconf

junos_ping

Junosデバイスから ping コマンドを実行します。

  • ansible.netcommon.network_cli

junos_rpc

Junosデバイス上でNETCONFを介してJunos OS RPCを実行します。

  • ansible.netcommon.netconf

構成モジュール

junos_acl_interfaces

インターフェイスにファイアウォールフィルターを適用します。

  • ansible.netcommon.netconf

junos_acls

ファイアウォールフィルターを設定します。 これは、アクセスコントロールリスト (ACL)とも呼ばれます。

  • ansible.netcommon.netconf

junos_banner

バナーを設定します。

  • ansible.netcommon.netconf

junos_bgp_address_family

インターフェイスの BGP アドレスファミリー属性を管理します。

  • ansible.netcommon.netconf

junos_bgp_global

BGPのグローバルプロパティを設定します。

  • ansible.netcommon.netconf

junos_config

Junosデバイスの設定を管理します。

  • ansible.netcommon.netconf

junos_hostname

デバイスホスト名を設定します。

  • ansible.netcommon.netconf

junos_interfaces

基本的な物理および論理インターフェイスのプロパティを設定します。

  • ansible.netcommon.netconf

junos_l2_interfaces

L2インターフェイスを設定します。

  • ansible.netcommon.netconf

junos_l3_interfaces

L3インターフェイスを設定します。

  • ansible.netcommon.netconf

junos_lacp

集合型イーサネットインターフェイスに対して、グローバルなリンクアグリゲーション制御プロトコル(LACP)プロパティを設定します。

  • ansible.netcommon.netconf

junos_lacp_interfaces

インターフェイスのLACP属性を管理します。

  • ansible.netcommon.netconf

junos_lag_interfaces

リンクアグリゲーショングループ(LAG)を設定します。

  • ansible.netcommon.netconf

junos_lldp_global

LLDP(Link Layer Discovery Protocol)のグローバル設定を構成します。

  • ansible.netcommon.netconf

junos_lldp_interfaces

インターフェイスのLLDP属性を管理します。

  • ansible.netcommon.netconf

junos_logging_global

システムロギングを設定します。

  • ansible.netcommon.netconf

junos_netconf

NETCONFシステムサービスを設定します。

  • ansible.netcommon.network_cli

junos_ntp_global

Network Time Protocol(NTP)を設定します。

  • ansible.netcommon.netconf

junos_ospf_interfaces

インターフェイスの OSPF 設定を管理します。

  • ansible.netcommon.netconf

junos_ospfv2

OSPFv2を設定します。

  • ansible.netcommon.netconf

junos_ospfv3

OSPFv3を設定します。

  • ansible.netcommon.netconf

junos_prefix_lists

ルーティングポリシープレフィックスリストを設定します。

  • ansible.netcommon.netconf

junos_routing_instances

ルーティングインスタンスを設定します。

  • ansible.netcommon.netconf

junos_routing_options

ルーティングオプションを設定します。

  • ansible.netcommon.netconf

junos_security_policies

セキュリティポリシーを設定および管理します。

  • ansible.netcommon.netconf

junos_security_policies_global

グローバルセキュリティポリシー設定を構成します。

  • ansible.netcommon.netconf

junos_security_zones

セキュリティゾーンを設定します。

  • ansible.netcommon.netconf

junos_snmp_server

SNMPサーバー設定を管理します。

  • ansible.netcommon.netconf

junos_static_routes

スタティックルートを設定します。

  • ansible.netcommon.netconf

junos_system

ホスト名とDNS設定を管理します。

  • ansible.netcommon.netconf

junos_user

ローカルユーザーアカウントを設定します。

  • ansible.netcommon.netconf

junos_vlans

VLANを設定します。

  • ansible.netcommon.netconf

junos_vrf

デバイス上のVRF定義を管理します。

  • ansible.netcommon.netconf