Ansible Tower導入でつまずいたところ


TL;DR

Ansibleが便利で、Ansible Towerを使うともっと便利らしいので試しに使おうと思ったら色々つまずきましたので備忘録です。

かなり乱暴に解決しているので、良い方法あればください。

環境

Host PC   : Windows 10 Pro
Docker    : Version 2.1.0.4
Container : CentOS7:latest

参考にした手順

Mana Blog Next さま,

Ansible Tower を30分でインストールしてみよう
https://www.mana-cat.com/entry/2017/06/16/002910

生じた問題とWork Around

Windows 10 Pro上にDockerでCentOS7を立てて、その上で実行した際に発生した問題と、回避策を書いていきます。

RabbitMQのRestartが走らない

問題

error.log
TASK [rabbitmq : start and enable the rabbitmq service] **********************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "value of state must be one of: reloaded, restarted, started, stopped, got: running"}

./ansible-tower-setup-3.1.3/roles/rabbitmq/tasks/main.yml内の[start and enable the rabbitmq service]タスクが完了できていないようでした。
真因はわかりませんが、systemctl status rabbitmq-serverのStatusチェック?がreloaded, restarted, started, stoppedとならなければならないところを、runningとなってしまい例外となっています。

WA

同じ問題にあたっている人がいたので、回答にあるWA策を参考にして解決。

I resolved this by commenting that check out in the main.yml for rabbit and then restarting the rabbitmq-server service with systemctl during the check where it makes sure its running with a second window.
I dont know why it does that but this work-around fixed it for me.

[参考]https://superuser.com/questions/1462103/why-is-trial-of-ansible-tower-install-failing-on-centos7-due-to-rabbitmq-service

結局の所、ステータスチェック+サービス起動のタスクなので、以下手順によって手動で実施しています。冪等性とは…

  1. ./ansible-tower-setup-3.1.3/roles/rabbitmq/tasks/main.yml内の[start and enable the rabbitmq service]タスクを削除
  2. ./setup.sh実行
  3. [wait for rabbitmq service to be running]タスクで停止することを確認。
  4. 別セッションからsystemctl restart rabbitmq-server実行

pycryptodomeモジュール不足

問題

error.log
Unable to configure formatter 'json': Cannot resolve 'awx.main.utils.formatters.LogstashFormatter': No module named Crypto.Cipher"

要はCrypto.Cipherモジュールがないって言われました。

WA(これは普通に解決)

CentOSにpipを入れて、pip install cryptodomeしました。

ログファイルの権限競合

問題

error.log
Traceback (most recent call last):
File "/bin/tower-manage", line 9, in <module>
load_entry_point('ansible-tower==3.1.3', 'console_scripts', 'tower-manage')()
File "/lib/python2.7/site-packages/awx/__init__.py", line 105, in manage
File "/var/lib/awx/venv/tower/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/var/lib/awx/venv/tower/lib/python2.7/site-packages/django/core/management/__init__.py", line 328, in execute
django.setup()
File "/var/lib/awx/venv/tower/lib/python2.7/site-packages/django/__init__.py", line 17, in setup
  configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/var/lib/awx/venv/tower/lib/python2.7/site-packages/django/utils/log.py", line 86, in configure_logging
    logging_config_func(logging_settings)
File "/usr/lib64/python2.7/logging/config.py", line 803, in dictConfig
    dictConfigClass(config).configure()
File "/usr/lib64/python2.7/logging/config.py", line 585, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'fact_receiver': [Errno 13] Permission denied: '/var/log/tower/fact_receiver.log'

pythondjangoライブラリ内のlog.pyモジュールにおける、configure_logging関数内で、/var/log/tower/fact_receiver.logを編集する権限がないみたいです。
該当ファイルの権限をchmod 777にして、再度実行するも失敗。
検索してみると以下ドンピシャの問題があったので参考にして、ログファイルの出力自体を消して、権限の競合を解決しました。

アプリケーションのログの書き込みでのファイルローテーションが発生する場合は、問題ありませんでしたが、スケジュール起動している django command でローテーションが発生すると、ログファイルの所有者が root ユーザーになり、アプリケーションからの書き込みができなくなり、エラーとなりました。

[参考]https://www.monotalk.xyz/blog/django-log-rotaition-%E3%81%A7-permission-denied-%E3%81%8C%E7%99%BA%E7%94%9F/

結果

PLAY RECAP ******************************************************************************************************************************************************************************
localhost                  : ok=112  changed=10   unreachable=0    failed=0    skipped=136  rescued=0    ignored=2   

The setup process completed successfully.

無事インストールできました😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊
めちゃくちゃ時間かかりましたが、失敗要因を探していくのはまあ楽しかったです。インターネットはすごいですね。

何らかで起動失敗したら、おそらく雑なWAが原因なのでまた潜りたいと思います。