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