Junosデバイス管理時のAnsible接続エラーのトラブルシューティング
以下のセクションでは、Ansibleを使用してJunosデバイスを管理する際に発生する可能性のある接続エラーについて概説しています。これらのセクションでは、各エラーの潜在的な原因と解決策も示します。
接続の失敗または無効なエラーのトラブルシューティング
問題
形容
Junosデバイス上で juniper.device
モジュールの実行中に、Ansible制御ノードがSSH接続の失敗または不明なコマンドに関するエラーを生成します。例えば:
UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ", "unreachable": true}
又は
unknown command: /bin/sh\r\n
原因
これらのエラーは、モジュールがAnsible制御ノードでローカルに実行されていない場合に発生する可能性があります。
通常、Ansibleは管理対象ノードにPythonを必要とし、Ansible制御ノードはモジュールをノードに送信し、そこで実行してから削除します。ジュニパーネットワークスのモジュールは、Junos PyEZ と NETCONF 上の Junos XML API を使用してデバイスとインターフェイスするため、Junos デバイスに Python は必要ありません。そのため、Junosデバイスで操作を実行するには、PythonがインストールされているAnsible制御ノードでローカルにモジュールを実行する必要があります。AnsibleがJunosデバイス上で直接モジュールを実行しようとすると、エラーが発生します。
解決
juniper.device
モジュールをローカルで実行するようにAnsible制御ノードに指示するには、Ansibleプレイブックにconnection: local
を含めるか、個々のモジュールを実行するときに--connection local
コマンドライン引数を含めます。例えば:
--- - name: Get Device Facts hosts: junos connection: local gather_facts: no
不明なホストエラーのトラブルシューティング
問題
形容
juniper.device
モジュールの実行中に、Ansible制御ノードがConnectUnknownHostError
エラーを生成します。
"msg": "Unable to make a PyEZ connection: ConnectUnknownHostError(dc1a.example.net)"
原因
ホストがAnsibleインベントリ ファイルで定義されていないか、Ansible制御ノードがホスト名を解決できません。
Ansibleモジュールを直接またはプレイブックから実行する場合、モジュール引数またはプレイブックで参照されるホストは、Ansibleインベントリ ファイルで定義する必要があります。インベントリ ファイルのデフォルトの場所は /etc/ansible/hosts です。インベントリ ファイルがホスト名を参照する場合、Ansible制御ノードはホスト名を解決できる必要があります。
解決
欠落しているホストを含むようにAnsibleインベントリ ファイルを更新し、DNS解決が正しく機能していることを確認します。
Ansibleインベントリ ファイルの詳細については、 Understanding the Ansible Inventory File When Managing Junos Devices および https://www.ansible.com/ にあるAnsibleの公式ドキュメントを参照してください。
接続拒否エラーのトラブルシューティング
問題
形容
juniper.device
モジュールの実行中に、Ansible制御ノードがConnectRefusedError
エラーを生成します。例えば:
"msg": "Unable to make a PyEZ connection: ConnectRefusedError(dc1a.example.net)"
原因
接続拒否エラーの原因として最も可能性が高いのは、JunosデバイスでSSH経由のNETCONFが有効になっていないことです。
NETCONF が有効になっているかどうかを迅速にテストするには、Ansible モジュールを実行しているユーザー アカウントがデバイスとの NETCONF セッションを正常に開始できることを確認します。
user@ansible-cn:~$ ssh user@dc1a.example.net -p 830 -s netconf
ユーザーがデフォルトのNETCONFポート(830)またはデバイス上のNETCONF用に特別に設定されたポートのいずれかでデバイスとのNETCONFセッションを正常に確立できる場合、NETCONFは有効になります。それ以外の場合は、デバイスでSSH経由のNETCONFを有効にする必要があります。
解決
JunosデバイスでNETCONF-over-SSHサービスを有効にします。
[edit] user@host# set system services netconf ssh user@host# commit