2
1

More than 3 years have passed since last update.

Ansible Towerで追加したAnsibleモジュールを動かす方法

Last updated at Posted at 2019-11-12

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の設定>ジョブ>追加の環境変数です。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1