Junosデバイス管理時のAnsible接続エラーのトラブルシューティング
以下のセクションでは、Ansible を使用して Junos デバイスを管理する際に発生する可能性のある接続エラーの概要を説明します。これらのセクションでは、各エラーの潜在的な原因と解決策も示します。
失敗または無効な接続エラーのトラブルシューティング
問題
説明
Junosデバイス上の または juniper.device
Juniper.junos
モジュールの実行中に、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.junos
モジュールをローカルで実行するように juniper.device
Ansible 制御ノードに指示するには、Ansible プレイブックに含めるか、connection: local
個々のモジュールの実行時にコマンド ライン引数を含め--connection local
ます。例えば:
--- - name: Get Device Facts hosts: junos connection: local gather_facts: no
不明なホストエラーのトラブルシューティング
問題
説明
またはJuniper.junos
モジュールの実行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インベントリ ファイルの詳細については、 Junosデバイスを管理する際のAnsibleインベントリ ファイルについて および https://www.ansible.com/ にあるAnsibleの公式ドキュメントを参照してください。
拒否された接続エラーのトラブルシューティング
問題
説明
またはJuniper.junos
モジュールの実行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