はじめに
Ansible のネットワークモジュールでたまに見かけるエラー
"msg": "No existing session"
は、個人的に切り分けが難しいエラーの一つだと思っています。
先日は IOS-XR に対する Playbook で、認証系の誤りによってこのエラーが表示されたことがあります。
再現方法と対処をまとめます。
このエラーが必ずしもこの対処で解消されるとは限りませんので、一つの例として捉えていただければと思います。
環境
- ansible-core 2.16.0
- paramiko (
ansible-pylibssh
は未インストール) - cisco.iosxr コレクション 6.1.0
- ansible.netcommon コレクション5.3.0
Playbook 類
適用させるインベントリ変数ファイルは以下のとおりです。
--- ansible_network_os: cisco.iosxr.iosxr ansible_connection: ansible.netcommon.network_cli ansible_user: admin ansible_password: xxxxx
show コマンドを実行するかんたんな Playbook は以下のとおりです。
--- - hosts: iosxr_sandbox gather_facts: false tasks: - name: Test show command cisco.iosxr.iosxr_command: commands: - show version
実行とエラー
Playbook を実行すると・・・
% ansible-playbook -i inventory.ini iosxr.yml PLAY [iosxr_sandbox] ***************************************************************************************************************** TASK [Test show command] ************************************************************************************************************* [WARNING]: ansible-pylibssh not installed, falling back to paramiko fatal: [iosxr_sandbox01]: FAILED! => {"changed": false, "msg": "No existing session"} PLAY RECAP *************************************************************************************************************************** iosxr_sandbox01 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
例のエラーが表示されます。
"msg": "No existing session"
ぱっと見ではわかりませんよね・・
対処
もともとは Ansible Forum のトピック で、このエラーが出てる現象を見かけました。なんだろうなと思ったんですが、ふと思い出したのが以前の記事でも触れた、パスワードを指定していても paramiko がデフォルトの秘密鍵を探す件です。
このときの対処と同じく、鍵を探さないように look_for_keys
の値を変更したら正常に実行できました。
ansible.cfg
:
[paramiko_connection] look_for_keys = False
おわりに
エラーの切り分けが難しいときは、認証周りも含めて確認しようと思いました。