AnsibleモジュールのJunos PyEZ(junos-eznc)インストールエラーのトラブルシューティング
問題
形容
juniper.device
モジュールの実行中に、Ansible制御ノードは、junos-eznc
がインストールされていないというエラーを生成します。例えば:
"msg": "junos-eznc (aka PyEZ) >= 2.6.0 is required for this module. However, junos-eznc does not appear to be currently installed. See https://github.com/Juniper/py-junos-eznc#installation for details on installing junos-eznc."
又は
"msg": "junos-eznc is required but does not appear to be installed. It can be installed using `pip install junos-eznc`"
原因
juniper.device
コレクションに含まれるジュニパーネットワークスのAnsibleモジュールは、Junos PyEZ Pythonライブラリを使用してJunosデバイス上で操作を実行します。Ansibleは、ライブラリがインストールされていない場合、またはAnsibleがライブラリを見つけられない場合に、このエラーを生成します。例えば、Ansible を仮想環境にインストールした場合、または標準以外のシステムの場所にある Python インストールの下にインストールし、Ansible がデフォルトのシステムの場所などの別の場所でライブラリを検索している場合、Ansible がライブラリの検索に失敗することがあります。
解決
Junos PyEZをAnsible制御ノードにインストールし、必要な環境変数を更新します。詳細については、 https://github.com/Juniper/py-junos-eznc#installation を参照してください。
仮想環境または非標準のシステムの場所でPythonインストールを使用してAnsibleを実行する場合は、以下を実行する必要があります。
-
Junos PyEZを、目的のPythonインストールの下(必要に応じて、仮想環境または非標準のシステムの場所)にインストールします。
-
Ansible構成ファイルで
interpreter_python
変数を設定するか、Ansibleインベントリファイルで適切なデバイスのansible_python_interpreter
変数を定義するなどして、Pythonインタプリタへのパスを指定します。# file ansible.cfg [defaults] interpreter_python = /home/user/MyProjects/Ansible/venv/bin/python ...
詳細については、公式の Ansible ドキュメントの「 Interpreter Discovery 」を参照してください。
Junos PyEZが制御ノードに正常にインストールされていることを確認するには、Ansibleの運用に使用するのと同じPythonインストールを使用して、Pythonインタラクティブシェルを起動します。次に、 jnpr.junos
パッケージをインポートします。
(venv) user@ansible-cn:~/MyProjects/Ansible$ python3 Python 3.6.9 (default, Oct 8 2020, 12:12:24) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> >>> import jnpr.junos >>> jnpr.junos.__version__ '2.6.0'
jnpr.junos
パッケージを正常にインポートし、エラーメッセージが表示されない場合、Junos PyEZはAnsible制御ノードにインストールされています。Ansibleモジュールを実行しても同じエラーメッセージが表示される場合は、Ansible環境でPythonインタープリターの正しい場所を指定したことを確認してください。
Ansible が使用する Python インストールを確認するには、Ansible Playbook を -vvv
オプションで実行し、ログメッセージを確認します。