Documentation

20. Tower のトラブルシューティング

20.1. エラーログ

Tower サーバーのエラーは /var/log/tower にロギングされます。supervisor ログは /var/log/supervisor/``に、Nginx web サーバーのエラは httpd エラーログに記録されます。その他の Tower ロギングの設定は ``/etc/tower/conf.d/ で行うようにしてください。

大半のブラウザーに組み込まれている JavaScript コンソールを使用してクライアント側の問題をチェックし、Red Hat カスタマーポータル (https://access.redhat.com/) 経由で Ansible にエラーを報告してください。

20.2. ホストへの接続に関する問題

ホストの接続エラーが原因で、クイックスタートガイドからの helloworld.yml のサンプルの Playbook やその他の Playbook を実行できない場合は、以下をお試しください。

  • ホストに ssh 接続できますか? Ansible では、管理するサーバーに SSH でアクセスできる必要があります。
  • ホスト名と IP がインベントリーファイルに正しく追加されていますか? (タイプミスがないか確認してください)

20.3. ライブイベント用の WebSockets ポートが機能しない

Ansible Tower は Tower サーバー上のポート 80/443 を使用して Playbook やその他のライブ更新をクライアントのブラウザーにストリーミングします。これらのポートは、デフォルトで 80/443 に設定されていますが、ファイアウォールでブロックされていたり、以前の Websocket ポート用に解放または追加するファイアウォールルールを削除して、ファイアウォールでこのポートへのトラフィックが許可されているようにします。

20.4. Playbook の実行に関する問題

Playbook のエラーが原因で、クイックスタートガイドからの helloworld.yml のサンプルの Playbook やその他の Playbook を実行できない場合は、以下をお試しください。

  • 現在コマンドを実行しているユーザーを認証していますか? そうでない場合には、ユーザー名の設定方法を確認して、--user=username または -u username コマンドを指定してユーザーを指定してください。
  • YAML ファイルで正しくインデントされていますか? 正しくホワイトスペースを揃える必要がある場合があります。YAML ではインデントのレベルは重要です。yamlint を使用して Playbook を確認してください。詳しい情報は、http://docs.ansible.com/YAMLSyntax.html で YAML 入門を参照してください。
  • - で始まるアイテムは、リストアイテムまたはプレイとみなされます。key: value 形式のアイテムは、ハッシュまたはディクショナリーとして機能します。- プレイが多すぎたり、抜けていたりしないように確認してください。

20.5. ジョブ実行時に関する問題

Playbook からのジョブの実行で問題がある場合には、Playbook の YAML ファイルを確認するようにしてください。ソース管理メカニズムを使用するか手動で Playbook をインポートする際に、Tower がホストの定義を管理しており、ホスト定義が hosts: all に設定されている必要があります。

20.6. Playbook が「ジョブテンプレート」のドロップダウンリストに表示されない

Playbook がジョブテンプレートのドロップダウンリストに表示されない場合は、以下に記載の内容を複数確認してください。

  • Playbook が有効な YML で、Ansible で解析できることを確認してください。
  • “awx” ユーザーにファイルが表示されるように、プロジェクトパス (/var/lib/awx/projects) が設定されていることを確認してください。以下のコマンドを実行して所有者を変更できます。
chown awx -R /var/lib/awx/projects/

20.7. Playbook が保留状態で止まる

Playbook のジョブの実行を試行して、「保留中で」止まる場合、以下を試行してください。

  • すべてのスパーバイザーサービスが supervisorctl status 経由で実行されていることを確認します。
  • /var/ のパーティションに 1 GB 以上の空き容量があることを確認します。/var/ パーティションに十分な容量がない場合にはジョブは完了しません。
  • Tower サーバーで ansible-tower-service restart を実行します。

問題が継続する場合には Tower サーバーで root として sosreport を実行してから、その結果を添付して サポートの依頼 をしてください。

20.8. Towr ジョブのキャンセル

実行中の Tower ジョブに cancel 要求を発行すると、Tower は ansible-playbook プロセスに SIGINT を発行します。これが原因で Ansible が新規タスクのディスパッチを停止して終了してしまいますが、リモートホストにディスパッチされたモジュールタスクは多くの場合、完了まで実行されます。この動作は、Ansible のコマンドラインを実行中に Ctrl-C を押す操作とよく似ています。

ソフトウェアの依存関係に関しては、実行中のジョブがキャンセルされた場合、曽於ジョブは基本的には削除されますが、依存関係は残ります。

20.9. 外部の HA データベースを再利用するとインストールに失敗する

HA インストールを 2 回目以降に実行した場合に外部 DB を再利用するとインストールが失敗してしまう件が報告されています。

たとえば、HA のインストールを実行して、もう一度インストールし直し、同じ外部データベースを再利用して 2 つ目の HA インストールを実行したとします。その場合に、この 2 回目のインストールのみが失敗します。

以前のインストールで使用した外部 HA データベースを設定する場合は、追加のインストールを正常に完了できるように HA データベースを手動で消去する必要があります。

20.9.1. Bubblewrap 機能および変数

Ansible Tower の bubblewrap 機能により、Tower ファイルシステムのどのディレクトリーが Playbook に表示され、また Playbook の実行時に使用できるかを制限します。場合によっては bubblewrap 設定をカスタマイズする必要がある場合もあります。bubblewrap の使用を微調整するには、設定可能な変数がいくつかあります。

bubblewrap がジョブの実行をサポートしないように無効化する場合 (Playbook の実行のみ):

AWX_PROOT_ENABLED = False

bubblewrap がジョブの実行をサポートするように有効化する場合 (Playbook の実行のみ):

AWX_PROOT_ENABLED = True

デフォルトでは、Tower はシステムの tmp ディレクトリー (デフォルト設定: /tmp) をステージングエリアとして使用します。これは、タワーの設定画面の Job Isolation Execution Path フィールドか、設定ファイルの以下のエントリーを更新することで変更できます。

AWX_PROOT_BASE_PATH = "/opt/tmp"

システム上に機密で非表示にすべきその他の情報がある場合には、Paths to Hide to Isolated Jobs の Tower の設定画面または、設定ファイルの以下のエントリーを更新して指定してください。

AWX_PROOT_HIDE_PATHS = ['/list/of/', '/paths']

特に公開する必要のあるディレクトリーがある場合には、Paths to Expose to Isolated Job の Tower の設定画面または、設定ファイルの以下のエントリーを更新して指定してください。

AWX_PROOT_SHOW_PATHS = ['/list/of/', '/paths']

注釈

Playbook が /var/lib/awx/.ssh で定義された鍵や設定を使用する必要がある場合には、/var/lib/awx/.ssh を主要ファイルとして、AWX_PROOT_SHOW_PATHS に追加してください。

設定ファイルに変更を加えた場合には、変更の保存後に ansible-tower-service restart コマンドを使用してサービスを再起動するようにしてください。

20.10. Tower インベントリーのプライベート EC2 VPC インスタンス

デフォルトでは、Tower は Elastic IP (EIP) が関連付けられた VPC にだけインスタンスを表示します。VPC インスタンスすべてを表示するには、以下の手順を実行してください。

  1. Tower のインターフェースでインベントリーを選択します。
  2. ソースが AWS に設定されたグループをクリックして、ソースタブをクリックします。
  3. ソース変数 ボックスで以下を入力します。
vpc_destination_variable: private_ip_address

次に、保存して、グループの更新をトリガーします。これが完了したら、すべての VPC インスタンスを表示できるはずです。

注釈

インスタンスを設定する場合には、Tower は、インスタンスへのアクセス権がある VPC 内で実行されている必要があります。

20.11. “Error: provided hosts list is empty” のトラブルシューティング

Tower で Playbook を実行しようとすると “Skipping: No Hosts Matched” のメッセージが表示された場合に、以下のように確認する点が複数あります。

  • Playbook のホスト宣言の行がインベントリーのグループ/ホストと完全に一致しているようにしてください (大文字、小文字の区別があります)。
  • これらが一致しておらず、Ansible Core 2.0 以降を使用している場合には、グループ名にスペースが含まれていないかを確認し、アンダースコアに変更するか、スペースを消して、グループが認識されるようにします。
  • ジョブテンプレートに制限を指定している場合に有効な制限値であるかを確認し、インベントリーに含まれるものと一致するかをチェックします。http://docs.ansible.com/intro_patterns.html で説明されているように、制限フィールドには、パターン引数を使用できます。

これらのオプションを確認した後にも問題が継続する場合には、サポートチケットを起票してください。