Documentation

16. ジョブ

job (ジョブ) は、Ansible Playbook をホストのインベントリーに対して起動する Tower のインスタンスです。

ジョブリンクには、ジョブの一覧とそれらのステータスが表示 (正常に完了、失敗、またはアクティブ (実行中の) ジョブとして表示) されます。この画面から実行できるアクションには、特定のジョブの詳細および標準出力、ジョブの起動、またはジョブの削除が含まれます。

Jobs - home with example job

Tower 検索機能を使用して各種の条件に基づいてジョブを検索します。Tower 検索についての詳細は、検索 の章を参照してください。

どのタイプのジョブをクリックしても、そのジョブのジョブの詳細ビューに移動します。このビューは 2 つのセクションから構成されます。

  • 詳細 ペイン: ジョブについての情報およびステータスを提供するペイン。
  • 標準出力 ペイン: ジョブプロセスおよび出力を表示するペイン。
_images/job-details-view.png

16.1. Job Details (ジョブの詳細): インベントリーの同期

job details example of inventory sync

16.1.1. 詳細

詳細 ペインには、ジョブの基本的なステータスおよびその開始時間が表示されます。詳細 ペインの右上にあるアイコンからジョブの再起動 (launch) または削除 (delete) を実行できます。

詳細 ペイン: ジョブ実行についての詳細を提供します。

  • 名前: 関連付けられたインベントリーグループの名前。

  • ステータス: 以下のいずれかになります。

    • 保留中: インベントリーの同期は作成されていますが、まだキューに入れられていないか、または開始されていません。すべてのジョブ (インベントリーソースの同期に限らない) はシステムで実際に実行可能になるまで保留中の状態になります。ジョブが保留にされる理由には、依存関係にある実行中のジョブの終了を待機する必要があることや、設定された場所にジョブの実行容量が十分にないことがあります。
    • 待機中: インベントリーの同期はキューに入れられており、実行を待機中です。
    • 実行中: インベントリーの同期が進行中です。
    • 成功: インベントリー同期ジョブが成功しました。
    • 失敗: インベントリーの同期ジョブが失敗しました。
  • 説明: 失敗の理由についての説明です。

  • ライセンスエラー: インベントリーの同期 ジョブについてのみ表示されます。これが True の場合、インベントリーの同期でホストが追加されたために、Tower の管理ホストのライセンス数が制限を上回りました。

  • 開始: ジョブが Tower で開始された時点のタイムスタンプ。

  • 完了日時: ジョブの完了時点のタイプスタンプ。

  • 経過時間: ジョブに要した時間の合計。

  • 起動タイプ: 手動スケジュール済み、または 依存関係

  • 認証情報: このインベントリー同期で使用される認証情報。

  • ソース: クラウドインベントリーのタイプ。

  • 上書き: True の場合、外部ソースに存在していたホストおよびグループは削除され、Tower インベントリーから削除されます。インベントリーソースで管理されていなかったホストおよびグループは、次に手動で作成されたグループにプロモートされるか、またはプロモート先となる手動で作成されたグループがない場合には、インベントリーの「すべて」のデフォルトグループに置かれます。False の場合、外部ソースに見つからないローカルの子ホストおよびグループはインベントリー更新プロセスの影響を受けません。

  • 変数の上書き: True の場合、子グループおよびホストのすべての変数は削除され、外部ソースにある変数で置き換えられます。False の場合、マージが実行され、ローカル変数と外部ソースにある変数が組み合わされます。

これらの項目をクリックすると、適切な場合には該当するジョブテンプレート、プロジェクトその他の Tower オブジェクトが表示されます。

16.1.2. 標準出力

標準出力 ペインでは、インベントリー同期 Playbook の完全な実行結果が表示されます。ここでは、Ansible のコマンドラインで実行した時に表示される情報と同じ情報が表示され、これはデバッグの際に役立ちます。標準出力ペインの右上隅にあるアイコンでは、出力をメインビューに切り替えたり (toggle)、出力をダウンロードしたりできます (download)。

16.2. Job Details (ジョブの詳細): SCM

Jobs - show job results for example job, scm

16.2.1. 詳細

詳細 ペインには、ジョブの基本的なステータスおよびその開始時間が表示されます。詳細 ペインの右上にあるアイコンからジョブの再起動 (launch) または削除 (delete) を実行できます。

詳細 ペイン: ジョブ実行についての詳細を提供します。

  • 名前: 関連付けられたインベントリーグループの名前。

  • ステータス: 以下のいずれかになります。

    • 保留中: SCM ジョブは作成されていますが、まだキューに入れられていないか、または開始されていません。すべてのジョブ (SCM ジョブに限らない) はシステムで実際に実行可能になるまで保留中の状態になります。ジョブが保留にされる理由には、依存関係にある実行中のジョブの終了を待機する必要があることや、設定された場所にジョブの実行容量が十分にないことがあります。
    • 待機中: SCM ジョブはキューに入れられており、実行を待機中です。
    • 実行中: SCM ジョブが進行中です。
    • 成功: 直前の SCM ジョブが成功しました。
    • 失敗: 直前の SCM ジョブが失敗しました。
  • 開始: ジョブが Tower で開始された時点のタイムスタンプ。

  • 完了日時: ジョブの完了時点のタイプスタンプ。

  • 経過時間: ジョブに要した時間の合計。

  • 起動タイプ: 手動 または スケジュール済み

  • プロジェクト: プロジェクトの名前。

これらの項目をクリックすると、適切な場合には該当するジョブテンプレート、プロジェクトその他の Tower オブジェクトが表示されます。

16.2.2. 標準出力

標準出力 ペインでは、SCM 更新の完全な実行結果が表示されます。ここでは、Ansible のコマンドラインで実行した時に表示される情報と同じ情報が表示され、これはでデバッグに役立ちます。標準出力ペインの右上隅にあるアイコンでは、出力をメインビューに切り替えたり (toggle)、出力をダウンロードしたりできます (download)。

16.3. Job Details (ジョブの詳細): Playbook の実行

Jobs - show job details pane for example job, playbook

Playbook 実行 ジョブのジョブの詳細ビューには、ジョブテンプレート ページからジョブを起動した後にもアクセスできます。

16.3.1. 詳細

詳細 ペインには、ジョブの基本的なステータスおよびその開始時間が表示されます。詳細 ペインの右上にあるアイコンからジョブの再起動 (launch) または削除 (delete) を実行できます。

詳細 ペイン: ジョブ実行についての詳細を提供します。

  • ステータス: 以下のいずれかになります。

    • 保留中: Playbook 実行は作成されていますが、まだキューに入れられていないか、または開始されていません。すべてのジョブ (Playbook に限らない) はシステムで実際に実行可能になるまで保留中の状態になります。ジョブが保留にされる理由には、依存関係にある実行中のジョブの終了を待機する必要があることや、設定された場所にジョブの実行容量が十分にないことがあります。
    • 待機中: Playbook 実行はキューに入れられており、実行を待機中です。
    • 実行中: Playbook 実行が進行中です。
    • 成功: 直前の Playbook 実行が成功しました。
    • 失敗: 直前の Playbook 実行が失敗しました。
  • テンプレート: ジョブが起動されるジョブテンプレートの名前。

  • 開始: ジョブが Tower で開始された時点のタイムスタンプ。

  • 完了日時: ジョブの完了時点のタイプスタンプ。

  • 経過時間: ジョブに要した時間の合計。

  • Launch By (起動:): このジョブを起動したユーザー、ジョブ、またはスケジュール済みのスキャンの名前。

  • インベントリー: このジョブを実行するために選択されたインベントリー。

  • マシンの認証情報: このジョブで使用される認証情報の名前。

  • 詳細: ジョブテンプレートの作成時に設定される詳細レベル。

  • 追加変数: ジョブテンプレートの作成時に渡される追加変数がここに表示されます。

これらの項目をクリックすると、適切な場合には該当するジョブテンプレート、プロジェクトその他の Tower オブジェクトが表示されます。

16.3.2. 標準出力ペイン

標準出力 ペインには、Ansible Playbook の完全な実行結果が表示されます。ここでは、Ansible のコマンドラインで実行した時に表示される情報と同じ情報が表示され、これはデバッグに役立ちます。イベントの概要、ホストのステータス、ホストのイベントを表示することができます。標準出力ペインの右上隅にあるアイコンでは、出力をメインビューに切り替えたり (toggle)、出力をダウンロードしたりできます (download)。

16.3.2.1. イベントの概要

イベントの概要では、この Playbook の一部として実行されたイベントの集計が表示されます。

  • Play 数
  • タスク数
  • ホスト数
  • ジョブテンプレートの実行経過時間
_images/jobs-events-summary.png

16.3.2.2. ホストのステータスバー

ホストのステータスバーは、標準出力 ペインの上部で実行されます。ホストステータスバーのセクションにカーソルを置くと、その特定のステータスに関連付けられたホスト数が表示されます。

Job - All Host Events

16.3.2.4. 標準出力ビュー

標準出力ビューには、特定のジョブで発生するイベントすべてが表示されます。デフォルトでは、すべての行で全詳細が表示されるように展開されています。すべて折り畳む (collapse-all) を使用して、プレイおよびタスクのヘッダーのみを含むビューに切り替えます。標準出力のすべての行を表示するには、(expand-all) ボタンをクリックします。

または、それぞれのプレイやタスクの横にある矢印アイコンをクリックすると、その詳細をすべて表示することができます。矢印をクリックして横向きから下向きに切り替えると、プレイまたはタスクに関連付けられている行が拡大されます。矢印をもう一度クリックして横向きの位置に戻すと、折りたたみ表示になり、行が非表示になります。

_images/job-details-view-std-out-expand-collapse-icons.png

拡張/縮小モードで詳細を表示する際の留意点:

  • 縮小表示されない行で、対応する行番号と開始時間を含む、表示されたそれぞれの行。
  • プレイまたはタスクの完了後のプレイまたはタスクの開始時の拡張/縮小アイコン。
  • 特定のプレイまたはタスクのクエリーを実行する場合、それは完了したプロセスの最後に縮小表示されます。
  • エラーメッセージは、出力が大きすぎて表示できないことを示すエラーメッセージが表示される場合があります。これは、4000 を超えるイベントがある場合に生じます。エラーをバイパスするために、特定イベントについての検索およびフィルターを使用します。
  • 標準出力 ビューのイベント行にカーソルを置くと、この行の上にツールチップが表示され、このタスクで影響を受けた合計ホスト数およびステータスの内訳についての詳細を表示するオプションが表示されます。
_images/jobs-show-job-std-output-hover.png

標準出力 ペインからイベントの行をクリックすると、ホストイベント ダイアログが別のウィンドウに表示されます。このウィンドウでは、特定のイベントの影響を受けるホストが表示されます。

16.3.2.5. ホストイベント

ホストイベント ダイアログでは、選択したイベントの影響を受けるホストに関する情報と、それに関連するプレイおよびタスクが表示されます。

  • ホスト
  • ステータス
  • 固有 ID
  • Created (作成) タイムスタンプ
  • プレイ の名前
  • タスク の名前
  • 適用可能な場合、タスクの Ansible モジュール、およびモジュールのすべての 引数
  • タスクの 標準出力
_images/job-details-host-hostevent.png

JSON 形式で結果を表示するには、JSON タブをクリックします。

_images/job-details-host-hostevents-json.png

16.4. ジョブの同時実行

Tower は、物理メモリーの容量および Playbook の複雑度に基づいて実行できる同時ジョブの数を制限します。Ansible Tower 3.1.0 は、クラスターに N の追加 Tower ホストを設定してジョブ容量を追加します。Ping API エンドポイントでジョブを実行するための Tower の容量を表示することができます。ジョブ自体には、タスクが実行されているノードも表示されます。

「起動時の更新」の設定にチェックが付けられている場合、インベントリーまたはプロジェクトに依存するジョブテンプレートはキャッシュタイムアウト内である場合、それらについての更新をトリガー することもできます。同じプロジェクトまたはインベントリーに依存するキャッシュタイムアウト内の複数のジョブが起動する場合、それらのプロジェクトまたはインベントリー更新の 1 つのみが作成されます (それに依存するジョブ単位ではない) 。

問題がある場合は、プロジェクトまたはインベントリーソースのキャッシュアウトタイムアウトを 60 秒に設定してみてください。

Tower 容量の制限は、Tower サーバーの RAM 容量に関連します。インベントリー更新のサイズや保存されるマシンの合計数を制限するためです。使用されるアルゴリズムは以下のようになります。

50 + ((total memory in megabytes) / 1024) - 2) * 75

50 がベースラインになります。

実行される各ジョブは以下の計算に基づいて容量を消費します。

(number of forks on the job) * 10

フォークはリモートホストとの通信時に生成される並列プロセスのデフォルト数を定めます。Ansible フォーク数のデフォルトはきわめて控え目な値で (5) に設定されています。Tower でフォークの値を渡さない (これを 0 のままにする) 場合、Ansible は 5 つのフォーク (デフォルト) を使用します。これにより、容量の使用量の値は 50 になります。フォークの値を Tower で (1) に設定する場合、Ansible は入力した値を使用し、(1) フォークが作成されます。説明にあるように 0 以外の入力が使用されます。

フォーク数は使用可能なホストの数に自動的に制限されるため、これは処理できるネットワークおよび CPU ロードの制限になります。多くのユーザーはこれを 50 に設定し、他のユーザーはこれを 500 以上に設定します。数多くのホストがある場合、高い値であるほど、それらのすべてのホストでのアクションの速度が速くなります。すべてのジョブについて Ansible で使用されるデフォルトのフォーク値を変更するには ansible.cfg ファイルを編集することができます。ただし、このデフォルトを変更した値は容量の計算には使用されません。

例として、2 GB メモリーを持つシステムにフォーク数が 0 (Tower のデフォルト) の 1 つのジョブがある場合、アルゴリズムは以下のようになります。

50 + ((2048 / 1024) - 2) * 75 = 50

4 GB メモリーを持つシステムにフォーク数が 0 (Tower のデフォルト) の 1つのジョブがある場合、コールバックを含む (4) タスクを同時に実行できます。

50 + ((4096 / 1024) - 2) * 75 = 200

「Playbook のインベントリーのホスト数」がフォークの数より少ない場合、Tower はフォークの代わりにホスト数を乗数として使用します。この最小値には、ジョブテンプレートまたは Playbook の hosts: 行に設定される「制限」は反映されません。

システムの容量計算は事実上無効にでき、以下のように Tower 設定ファイル (/etc/tower/settings.py) の値を設定することで定数が指定されます。

SYSTEM_TASK_CAPACITY = 300
設定を上書きする場合は、この値を高すぎる値に設定すると RAM が不足する可能性があるので注意してください。/api/v2/instances および /api/v2/instance_groups API エンドポイントで使用される容量は、以下のような行を参照して確認できます。
"capacity": 125,
"consumed_capacity": 75,
"percent_capacity_remaining": 60.0,

Capacity: 60 が現在の計算されている設定です。

実行する容量がある限り、Tower は可能な限り多くのジョブをキューに入れ、実行するよう試行します。ただし、いくつかの留意すべきブロッカーおよび例外もあります。

  • プロジェクト更新、SCM 更新、またはインベントリー更新は同じ更新を必要とする別のブロックをブロックします。
  • プロビジョニングコールバックで起動するジョブテンプレートは、単に同じホストのインスタンスとしてではなく実行できます。これにより、同じインベントリーで (2) テンプレートを実行することができます。ただし、インベントリーに更新が必要な場合、それらは実行されません。コールバックは、ホストからインベントリーへの「プッシュリクエスト」が受信される特殊なタイプのジョブテンプレートです。それらは 1 つのホストでのみ実行され、異なるコールバックおよびホストである限り、他のジョブと並行して実行できます。
  • システムジョブは 1 度に 1 回のみ実行できます。それらは他のすべてのジョブをブロックするため、競合を避けられるように独自に実行する必要があります。システムジョブは、システムジョブの前にスケジュールされたジョブの後に終了し、システムジョブの後にスケジュールされたジョブの前に終了します。
  • ジョブは追加のジョブ実行容量を待機中の場合にキューに入れられる場合があります。
  • アドホックなジョブは、指定されるアドホックジョブのインベントリーに対して実行されているインベントリー更新によってブロックされます。
  • 複数のジョブテンプレートが同時に実行できるように選択することができます。これは、同時実行ジョブの有効化 オプションでジョブテンプレート別に設定できるオプションです。
_images/job-templates-create-new-job-template-options.png
  • 同時実行ジョブの有効化 にチェックが入っている場合は、同じインベントリーを共有する同じジョブテンプレートから起動した 2 つのジョブが、互いが同時に実行するのを妨げなくなります (これは動作変更で、Ansible Tower 3.0 以前では、ジョブテンプレートが、別のジョブテンプレートの同じインスタンスをブロックします)。起動したジョブがブロックするのは、共有インベントリーが原因ではなく、容量や、インベントリーまたはプロジェクトが更新中であることなどが原因となります。