Documentation

16. ジョブスライス

sliced job という用語は、分散されたジョブのコンセプトのことです。分散されたジョブは、大多数のホストでジョブを実行する場合に使用し、インベントリーのサブセット上で、複数の Ansible Playbook それぞれを実行することで、クラスターで並行してスケジューリングができます。

デフォルトでは、Ansible は単一のコントロールインスタンスから複数のジョブを実行します。Ansible Tower 3.4 以前は、単一の Tower ジョブでは Ansible Playbook を 1 つだけしか実行できず、クラスター内の複数のノードに作業を分散する Tower の機能が完全に活用されていませんでした。

ホスト間のオーケストレーションが必要のないジョブの場合は、ジョブスライスで対応できます。ジョブスライスは、ジョブテンプレートのフィールド job_slice_count を追加して、Ansible 実行をスライスするジョブの数を指定することで機能します。この数が 1 より大きい場合には、Tower はジョブではなくジョブテンプレートからワークフローを生成します。インベントリーが、複数のスライスジョブに均等に分散されて、ワークフロージョブが起動し、通常のワークフローのように続行されます。ジョブを起動すると、API はジョブリソース (job_slice_count = 1 の場合) か、ワークフロージョブのリソースを返します。対応の Tower ユーザーインターフェースで、適切な画面にリダイレクトされ、実行のステータスが表示されます。

16.1. ジョブスライスの留意事項

ジョブスライスの設定時には以下を考慮してください。

  • スライスされたジョブは、ワークフロージョブを作成してからジョブを作成すること。
  • ジョブスライスはジョブテンプレート、インベントリー、スライス数で構成されること。
  • 実行時に、スライスされたジョブは、各インベントリーを「スライスサイズ」のチャンクに分割します。次に、適切なインベントリーのチャンクごとに、Ansible Playbook 実行のジョブをキューに追加します。Ansible Playbook にフィードしたインベントリーは、元のインベントリーを縮小したバージョンで、特定のスライスのホストだけを含みます。ジョブリストに表示される、完了したスライスジョブは随時、実行済みのスライスジョブ数で、ラベルがつけられます。
_images/sliced-job-shown-jobs-list-view.png
  • スライスされたジョブでのスケジュールの動作は、通常通りです (フォーク数、容量に合わせたキューへの追加、インベントリーマッピングをもとにしたインスタンスグループへの割り当て)。
  • スライスされたジョブテンプレートにプロンプトや追加の変数が指定されている場合に、標準のジョブテンプレートと同じ動作をし、スライス後のワークフロージョブに含まれるスライスジョブセット全体に、全変数と制限が適用されます。ただし、スライスされたジョブに制限が課された場合には、この制限が原因で、スライスにホストが割り当てられず、これらのスライスが失敗するので、ジョブ全体が失敗してしまいます。
  • 分散されたジョブのジョブスライスのステータスは、ワークフロージョブと同じ方法で計算されます。サブジョブでの失敗した内容が未処理の場合は、失敗となります。

警告

(個別のホストだけに変更を適用するのではなく) ホスト全体でオーケストレーションする予定のジョブは、スライスジョブとして設定しないようにしてください。スライスジョブとして設定してしまうと、ジョブが失敗する可能性があり、Tower では、スライスジョブとして設定されている場合に、失敗した Playbook の検出や対応は試行されません。

16.2. ジョブスライスの実行動作

ジョブをスライスすると、どの Tower ノードでも実行でき、(たとえば、システム内に容量が十分にない場合など) 同時に実行されないことがあります。スライスジョブの実行中は、ジョブの詳細で現在実行中のワークフローとジョブスライス以外に、個別の詳細を確認するためのリンクが表示されます。

_images/sliced-job-shown-jobs-output-view.png

デフォルトでは、ジョブテンプレートは通常同時に実行されるようには設定されていません (API で allow_simultaneous を有効にするか、UI で 同時実行ジョブの有効化 にチェックを入れる必要があります)。スライスすることで、この動作が上書きされ、対象の設定にチェックが入れられていない場合でも allow_simultaneous が有効とみなされます。これの指定方法や、ジョブテンプレート設定でのジョブスライス数の指定方法に関する情報は、「 ジョブテンプレート 」を参照してください。

ジョブテンプレート 」のセクションでは、Tower ユーザーインターフェースの以下の操作を実行する方法が追加で提供されています。

  • スライスジョブが複数あるジョブテンプレートでワークフロージョブを起動する
  • スライスジョブのテンプレート軌道跡にワークフロー全体または個別ジョブをキャンセルする
  • スライスジョブの実行が完了した後にワークフロー全体または個別ジョブを再起動する
  • ジョブテンプレートの起動後にワークフローとスライスジョブに関する情報を表示する
  • スライスジョブ作成後に特定のスライスジョブを検索する (次のセクション「 ジョブスライスの検索 」を参照)

16.3. ジョブスライスの検索

スライスジョブの検索を簡素化するには、検索機能を使用して検索フィルターを適用します。

  • ジョブリストに適用してスライスジョブだけを表示
  • ジョブリストに適用してジョブスライスの親ワークフロージョブのみを表示
  • ジョブテンプレートリストに適用してスライスジョブを生成するジョブテンプレートのみを表示

ジョブリストのスライスジョブのみを表示するには、他の多くの場合と同様に、タイプ (ここではジョブ) または unified_jobs でフィルタリングできます。

/api/v2/jobs/?job_slice_count__gt=1

ジョブスライスの親ワークフロージョブのみを表示する方法:

/api/v2/workflow_jobs/?job_template__isnull=false

スライスジョブを生成するジョブテンプレートのみを表示する方法:

/api/v2/job_templates/?job_slice_count__gt=1