Ansible Tower のよくあるお問い合わせから(2021年1月版)

みなさんこんにちは。レッドハットの杉村です。Ansible のテクニカルサポートをしています。

毎月何か書くのを目標にしているのですが、1月は残念ながら書けませんでした。きょうは2月1日ですが、1月32日ということにしてください。

今回は Ansible Tower についての問い合わせでよくいただくものについて軽く触れてみようと思います。

Engine からの移行

コマンドラインから ansible-playbook コマンドを利用して動いていたものを Ansible Tower に載せて動かそうとしたときに、必要なディレクトリを参照してくれないという問い合わせをよくいただきます。

プレイブックやその必要なファイルを含む「プロジェクト」としてのディレクトリが Ansible Tower 上に配置されますが、そのプロジェクトディレクトリにあるものを利用した処理によって Tower のインスタンスが壊されることがないよう、標準設定では「ジョブの分離」の機能が有効化されています。

docs.ansible.com

docs.ansible.com

安全のため、このジョブの分離の機能は有効のままでお使いいただくことをお勧めします。必要に応じて「分離されたジョブに公開するパス」を設定していくのがいいと思います。

Web UI が更新されない

特にクラスタ構成にしている場合、ジョブを実行しても画面が更新されずにずっと実行中になっていてブラウザをリロードすると終わっている、というようなことがあります。

Web UI の更新は WebSocket の仕組みで動作しています。ロードバランサーがあって SSL/TLS を終端している場合、Tower 側では 80/tcp だけで受けるように設定して構成します。このとき、インスタンス間の WebSocket のための追加の設定がされていない場合、通信が失敗して画面の更新がされないことがあります。 docs.ansible.com

上記のドキュメントにある「プロキシーのサポート」についての設定も必要な場合があります。

WebSocket の設定は、Tower のインスタンス上ではこちらのコマンドで確認することもできます。

接続できない場合

# awx-manage run_wsbroadcast --status
Broadcast websocket connection status from "host01" to:
hostname     state            start time     duration (sec)     
host02      disconnected     N/A            N/A                
host03      disconnected     N/A            N/A                

Broadcast websocket connection stats from "host01" to:
hostname     total     per minute     
host02      0         0              
host03      0         0  

接続できるよう設定した場合

# awx-manage run_wsbroadcast --status
Broadcast websocket connection status from "host01" to:
hostname         state         start time                     duration (sec)     
host02     connected     2021-02-01 02:41:35.337909     230                
host03     connected     2021-02-01 02:41:35.257562     230                

Broadcast websocket connection stats from "host01" to:
hostname         total     per minute     
host02     0         0              
host03     0         0 

アップグレードできない

Ansible Tower は比較的足の速いプロダクトで、すぐ EOL (End Of Life) を迎えてしまいます。

access.redhat.com

RHEL のバージョンも 7.7 以降もしくは 8.2 以降を要求するようになったのですが、特に日本のお客様では OS を古いバージョンに固定されていることも多く、Tower が EOL になってしまうのに OS を上げられないためにバージョンアップできないという問題を抱えていらっしゃることもあります。

EOL となった古いバージョンについての問い合わせは一切お受けすることができませんので、計画的にバージョンアップしていただくようお願いしています。

特に RHEL のバージョンについては、RHEL 7 をサポートするのは現在最新版の Ansible Tower 3.8 が最後となりますのでご注意ください。RHEL 8 をお使いいただくことで Python 3 に完全に移行することができますので、積極的にご検討いただきたいです。

認証の連携ができない

Ansible Tower の認証にはさまざまな外部サービスを利用することができます。ユーザに権限を適切に設定することも、弊社が提唱する「自動化2.0」の大事な要素となっています。

特に LDAP (主に Windows Active Directory) や SAML についてのお問い合わせをよくいただきます。

基本的にはドキュメントに書かれている通りではあるのですが、実際に試してみると環境や設定の問題でうまく連携しないということもよくあります。SSL/TLS 証明書を自己署名にしている場合に失敗するという事例も多いです。

事例があるたびにナレッジベースに残すようにはしています。こちらはわたしが書いたものの一例です。カスタマーポータルにアカウントがある方はご覧ください。

思うように動かないときは

構成情報や実行のログと、何が問題なのかを明確にいただけますとお手伝いしやすくなります。Ansible Tower は REST API からさまざまな情報を取得することができます。/api/v2/ping/ 以外の API については、admin ユーザでログインしてから取得してください。

Ansible Tower のインストール状況や設定

https://<TOWER_URL>/api/v2/ping/
https://<TOWER_URL>/api/v2/instances/
https://<TOWER_URL>/api/v2/config/
https://<TOWER_URL>/api/v2/settings/all/

ジョブが終わらないとき

https://<TOWER_URL>/api/v2/unified_jobs/?status__in=new,pending,waiting,running

プロジェクト

https://<TOWER_URL>/api/v2/project_updates/N/
https://<TOWER_URL>/api/v2/project_updates/N/stdout/

インベントリーの同期

https://<TOWER_URL>/api/v2/inventory_updates/N/
https://<TOWER_URL>/api/v2/inventory_updates/N/stdout/

ジョブ

https://<TOWER_URL>/api/v2/jobs/N/
https://<TOWER_URL>/api/v2/jobs/N/stdout/

その他 Ansible Tower のログ

sosreport コマンドを実行して収集していただけますととても助かります。

  • /var/log/tower/
  • /var/log/supervisor/
  • /var/log/nginx/

などをよく調査しています。

おわりに

Ansible Towerの評価ライセンスリクエストはこちらからご利用いただけますのでお試しください。

www.redhat.com

Happy Automation!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。