てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] エラー「paramiko is not installed: No module named 'paramiko'」の原因と対策

■ エラーの原因と対策

Ansible コントールノードに paramiko (PythonSSHクライアント実装ライブラリ)がインストールされていない環境で、Ansible を実行すると、以下のようなエラーが表示されて異常終了してしまいます。

fatal: [iosao1]: FAILED! => {"msg": "paramiko is not installed: No module named 'paramiko'"}

対策としては、paramiko をインストールします。

pip install paramiko


■ 補足

Ansible 2.8 以降でネットワークモジュール利用時に注意

Ansible 2.7 台までは、 paramiko も一緒にインストールされる構成でしたが、Ansible 2.8 から一緒にインストールされない構成になりました。

2.8 からのドキュメントにも関連の記述が追記されました。

In order to use the paramiko connection plugin or modules that require paramiko, install the required module

paramiko was included in Ansible’s requirements.txt prior to 2.8.

これでも、例えばサーバーに対して ssh コネクションプラグインで接続する場合は問題ありません。paramiko を利用しないためです。 一方で、ネットワークモジュールとセットで利用する network_cli コネクションプラグインで接続する場合は、内部で paramiko を利用するため paramiko がないと前述のようなエラーになってしまいます。

例えば以下のような Playbook です。

- hosts: iosal
  gather_facts: no
  connection: network_cli

  tasks:
    - name: show version
      ios_command:
        commands:
          - show version

2.7 からのアップデートの場合は paramiko が残る

Ansible 2.7 までのバージョンから 2.8 にアップデートすると、paramiko は残ります。 そのため、「Ansible 2.8 の環境なのに、paramiko がないエラーが出る環境と出ない環境がある」という現象が起こりえます。

  • Ansible 2.7.10 から pip install -U ansible して 2.8.0 にアップデートした場合
$ pip list
Package      Version
------------ -------
ansible      2.8.0  
asn1crypto   0.24.0 
bcrypt       3.1.6  
cffi         1.12.3 
cryptography 2.6.1  
Jinja2       2.10.1 
MarkupSafe   1.1.1  
paramiko     2.4.2    <--
pip          10.0.1 
pyasn1       0.4.5  
pycparser    2.19   
PyNaCl       1.3.0  
PyYAML       5.1    
setuptools   39.0.1 
six          1.12.0 
  • Ansible 2.8 を新規インストールした場合の pip list
$ pip list
Package      Version
------------ -------
ansible      2.8.0  
asn1crypto   0.24.0 
cffi         1.12.3 
cryptography 2.6.1  
Jinja2       2.10.1 
MarkupSafe   1.1.1  
pip          10.0.1 
pycparser    2.19   
PyYAML       5.1    
setuptools   39.0.1 
six          1.12.0 

ncclient インストールで一緒に paramiko もインストールされる

Junos モジュールなどではnetconf コネクションプラグインで接続します。そのため、NETCONF 接続 Python ライブラリである ncclient を別途インストールします。 この際、paramiko も一緒にインストールされる構成になっています。