てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] IOS-XR 向けのタスクがエラー「No existing session」になる原因のひとつ

はじめに

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

おわりに

エラーの切り分けが難しいときは、認証周りも含めて確認しようと思いました。