Ansible Towerで追加したAnsibleモジュールを動かす方法
Ansible Towerとは
AnsibleをWeb GUIで実行できるRed Hatの製品です。
動作部分では同じくAnsible Enginが動いていますが、サーバーの中に入ってAnsibleを動かすのとは少し勝手が違いました。
Ansibleをインストールすると使える標準モジュールではなく、追加で入れたモジュールを動かす為にどうしたら・・・となったのでメモ。
環境は以下です。
- RHEL: 7.7
- Ansible Tower: 3.5.3
- Ansible version: 2.8.2
- Python: 2.7.5 & 3.6.8
Ansible モジュールの追加について
標準のAnsibleでモジュールを追加するお作法については公式の手順ですんなりいきます。
今回ハマったのは、サーバーの中に入ってAnsibleを実行すると上手くいくけど、Towerからじゃうまくいかない。。
他のエラーも併発したのではげそうでした。
Ansible TowerでのPlaybook実行にPython3を使用する時の落とし穴
モジュールの追加には関係ありませんが、私が追加したモジュールでは使用するPythonが2ではなく3系ではないといけなくて、"ansible_python_interpreter"でRHEL7に追加インストールしたPython3を使うように指定していました。
普通のAnsibleでは正常にpython3で実行できていたのですが、Towerで動かすとこんなエラーが。。。
AttributeError: module 'enum' has no attribute 'IntFlag'
結論、私の環境では以下のenum34が悪さしていましたのでバルスすることでfixしました。
※サーバーローカルのpipではなく、Ansible Towerのvenvで入ってきたpipのenum34です
# /var/lib/awx/venv/ansible/bin/pip uninstall enum34
Tower上に追加したモジュールの環境変数を追加
ようやく本題ですが、上のenumバグをfixすると、次はこのエラーです。
<module>ImportError: cannot import name 'ModuleName'
ここで初めて、あ、読み込めてないんだと察した結果、Ansible Towerの設定に環境変数を追加する箇所があり、"ANSIBLE_LIBRARY"の設定をJSONにして登録する事でめでたく正常に実行する事ができました。
{
"ANSIBLE_LIBRARY": "/usr/share/ansible/plugins/modules/<added module name>",
"ANSIBLE_MODULE_UTILS": "/usr/share/ansible/plugins/modules/<added module name>/module_utils/"
}
設定する場所は、Ansible Towerの設定>ジョブ>追加の環境変数です。
Author And Source
この問題について(Ansible Towerで追加したAnsibleモジュールを動かす方法), 我々は、より多くの情報をここで見つけました https://qiita.com/kaws/items/161fb172824d7a7b6b40著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .