Junosデバイスを管理する際のAnsibleインベントリファイルについて
インベントリファイルの概要
Ansibleインベントリファイルは、プレイブック内のコマンド、モジュール、およびタスクが動作するホストとホストのグループを定義します。このファイルは、Ansible環境とプラグインに応じて、さまざまな形式のいずれかにすることができます。一般的な形式には、INIやYAMLなどがあります。
インベントリ ファイルのデフォルトの場所は /etc/ansible/hosts です。また、プロジェクトのプレイブックディレクトリなど、別の場所にプロジェクト固有のインベントリファイルを作成することもできます。Ansible設定ファイルでは、デフォルト以外のインベントリファイルの場所へのパスを指定できます。プレイブックの実行時にインベントリ ファイルの場所を指定することもできます。
インベントリ ファイルには、個々のホストまたはユーザー定義のホスト グループをリストできます。したがって、同様の役割を持つJunosデバイスをグループに編成できます。そうすれば、そのグループ内のデバイスで同じ運用タスクおよび設定タスクを実行できます。たとえば、1つ以上のデータセンターを管理している場合、同様の設定の適用やJunos OSのアップグレードなど、同じ操作セットを必要とするスイッチ用にグループを作成できます。
Ansibleを使用してJunosデバイスを管理するには、各管理対象デバイスに対して適切なアクセス権限を持つJunos OSログインアカウントが必要です。インベントリファイル内の各ホストに、ユーザー名とパスワードまたはアクセスキーがあることを確認する必要があります。
次のINI形式のサンプルインベントリファイルでは、個々のホスト、host1、および2つのホストグループ(routersとswitches)を定義しています。インベントリでは、routersグループとswitchesグループを含む親グループnetworkも定義されます。
host1.example.com [routers] router1.example.com router2.example.com [switches] switch1.example.com switch2.example.com [network:children] routers switches
Ansibleインベントリファイルの詳細については、 https://docs.ansible.com/projects/ansible/latest/inventory_guide/intro_inventory.html にあるAnsibleの公式ドキュメントを参照してください。
juniper.device コレクション:接続とネットワークOSの変数
juniper.device リリース 2.0.0 以降、ジュニパーネットワークス juniper.device コレクションと Red Hat Ansible junipernetworks.junos コレクションが 1 つの juniper.device コレクションに統合されました。同じ名前空間でモジュールを実行しますが、各モジュール セットでは Ansible 接続値とネットワーク OS 値が異なるため、同じ Playbook 内でモジュールを混在させることはできません。
Ansible接続は、プレイブック、インベントリファイル、ホストまたはグループ変数ファイル、またはコマンドライン引数で定義できます。インベントリ ファイルで接続を定義する場合は、モジュールに適した値に ansible_connection を設定します。 表1は 、各モジュールセットの接続値の概要を示しています。 junipernetworks.junos モジュールについては、 ansible_network_osも定義する必要があります。
| モジュールセット | ansible_connection 値 |
ansible_network_os 値 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
インベントリ ファイルで ansible_connection を定義する代わりに、プレイブックのプレイで connection を定義することもできます。どちらのパラメータも同じ値を取ります。
必要な接続変数とネットワークOS変数に加えて、インベントリファイルでは、Ansibleがデバイスへの接続に使用するユーザー名をオプションで定義できます。また、デフォルトのポートと異なる場合は、ポートを指定することもできます。また、Ansible設定ファイルまたはAnsibleインベントリファイルのいずれかでPythonインタープリターパスを定義することをお勧めします。Python インタープリターパスを指定すると、環境で使用されている Python インストールを Ansible が見つけられない場合に不要なエラーを防ぐことができます。
次のセクションでは、各モジュール セットのインベントリ ファイルの簡略化された例をいくつか示します。
juniper.deviceモジュール用サンプルインベントリファイル
元の juniper.device モジュールを使用してJunosデバイスを管理する場合、インベントリファイルで ansible_connection を local または juniper.device.pyezとして定義する必要があります。
次のインベントリ ファイルでは、3 つのホストを持つ junos という名前のグループを定義しています。ホストは、 local 接続を使用して管理対象デバイスに接続します。
[junos] router1.example.com router2.example.com router3.example.com [junos:vars] ansible_connection=local ansible_user=username ansible_port=port [all:vars] ansible_python_interpreter=python-interpreter-path
junipernetworks.junosモジュールのサンプルインベントリファイル
junipernetworks.junosモジュール(juniper.device.junos_*モジュール)を使用してJunosデバイスを管理する場合、インベントリファイルでそのモジュールセットに適した変数を定義する必要があります。ansible_connection値は、完全修飾名ansible.netcommon.netconfまたはansible.netcommon.network_cliを使用して指定できます。または、netconfまたはnetwork_cliを指定することもできます。各モジュールでサポートされている接続値を確認するには、モジュールのドキュメントを確認してください。
次のインベントリ ファイルでは、3 つのホストを持つ junos という名前のグループを定義しています。Ansibleは、 ansible.netcommon.netconf 接続を使用して管理対象デバイスに接続します。インベントリ ファイルには、これらのモジュールに必要な ansible_network_os 値も含まれています。
[junos] router1.example.com router2.example.com router3.example.com [junos:vars] ansible_connection=ansible.netcommon.netconf ansible_network_os=juniper.device.junos ansible_user=username ansible_port=port [all:vars] ansible_python_interpreter=python-interpreter-path