てくなべ (tekunabe)

ansible / network automation / 学習メモ

Ansible の panos_object モジュール使用時のエラー「Missing required libraries.」の対策

■ はじめに

Ansible には PaloAlto (PAN-OS) 用のモジュールがいくつかあります。これらのモジュールを利用するにあたって、別途Pythonライブラリが必要なものもあります。 たとえば、 アドレスやサービスオブジェクトを操作する panos_object モジュール の公式ドキュメントには以下の2つのPythonライブラリが必要(Requirements)という記述があります。

ところが私の環境(Centos 7.4、Ansible 2.4.3、Python 2.7.5)では、それでもまだライブラリが足りないというエラーが発生したので、その詳細と対策を記載します。


■ 実行エラー内容

panos_object モジュールの公式ドキュメントのサンプルにある、サービスオブジェクトを追加する Playbook を実行したところ、以下のエラーになりました。

TASK [create a global service for TCP 3306] ***********************************************************
fatal: [192.168.1.15]: FAILED! => {"changed": false, "msg": "Missing required libraries."}


■ 対策

結論としては、 xmltodict を追加でインストールすることで処理を正常に実行することができました。

準備

pip install xmltodict

実行

[vagrant@centos7 vagrant]$ ansible-playbook -i inventory p25.yml

PLAY [panos] *******************************************************************

TASK [create a global service for TCP 3306] ************************************
changed: [192.168.1.15]

PLAY RECAP *********************************************************************
192.168.1.15               : ok=1    changed=1    unreachable=0    failed=0


■ 補足:調べ方

エラーメッセージの Missing required libraries. をヒントにして、panos_object モジュールのコードを調べました。 エラーメッセージを設定している箇所がこちらでした。

遡ってみると、以下のimport に失敗したときにエラーが表示されることが分かりました。

    import pan.xapi
    from pan.xapi import PanXapiError
    import pandevice
    from pandevice import base
    from pandevice import firewall
    from pandevice import panorama
    from pandevice import objects
    import xmltodict
    import json

ここに import xmltodict とあるのに対して、私の環境には xmltodict がなかったのでインストールしました。