BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】AnsibleTowerでPlaybookの実行をスケジューリング

 こんにちは!
 BFT名古屋支店の、佐野です。

 以前までの記事で、Playbookの実行を行なうテンプレートの作成や、Playbookを一連の流れとして順に実行していくワークフローの作成について解説を行なってまいりました。
 これらで作成したジョブテンプレートおよびワークフローテンプレートについては、指定した時間や周期による自動実行を設定し、行なうことができます。
 AnsibleTowerのできることについて紹介した記事でも、こちらをスケジューリング機能として紹介しておりますが、今回はこの機能をジョブに設定する手順の解説をいたします。


はじめに:周期的・自動的な実行をスケジューリングできるもの

 周期的、あるいは単純な自動実行をスケジューリングできるものは、ジョブ単体を実行する「ジョブテンプレート」と、ワークフローとして構築した一連の流れでジョブを実行する「ワークフローテンプレート」のふたつです。  どちらもテンプレート自体に自動実行のスケジュールを設定しておくことで、指定した時刻やタイミングに実行がされるようになります。

 またスケジュールされた実行は、それを「どんな周期で繰り返していつ終えるか」といった周期実行を継続する期間を設定することも可能です。
 例えば「今年の●●月××日までに△△周期で実行する」というようなことを設定することができます。
 実行スケジュールとその終了については細かく設定できるので、こちらも覚えておきましょう。

 今回においては「スケジュールを作成して約5分後の時刻に1日に一度実行させる」スケジュールを例として設定する手順を解説します。


実行スケジュールの設定方法

 まずAnsible Tower管理画面の左ペインにある「テンプレート」をクリックし、スケジュール実行を設定したいテンプレートをクリックします。
 (図においては「Kintai_daily_backup」)

f:id:bftnagoya:20210224162517p:plain

 選択したテンプレートの編集画面に遷移したら「スケジュール」をクリックします。

f:id:bftnagoya:20210224162520p:plain

 スケジュールをクリックした後、右上の「+」アイコンをクリックします。
 その後スケジュール情報を入力できる欄が表示されるため、それぞれに値を入力・選択します。
 「名前」にはそのスケジュールを識別するための任意の名前、「開始日」は自動実行を開始する日付、「開始時間」は自動実行を開始する時刻を入力します。
 今回の例では「開始日」にはこのスケジュールを作成している当日の日付、「開始時刻」には現在時刻+5分ほどの時刻を入力します。
 「ローカルタイムゾーン」では(ご覧いただいている方は日本にお住まいであると思うので)“Asia/Tokyo”を選択し、「繰り返しの頻度」では、今回は日単位で実行するため“Day”を選択します。
 「実行頻度」では1日おきに実行するため1を入力、「終了」はこの繰り返し行なう処理の期間をどう設定するかの項目ですが、今回は自動的に終了しないものとして“Never”を選択します。
 以上の設定を入力後、「保存」をクリックします。

f:id:bftnagoya:20210224162524p:plain

 保存した後、設定が反映されるため、「名前」・「スケジュール開始時刻」が正しく設定されていることを確認します。

f:id:bftnagoya:20210224162505p:plain

 スケジュールが正しく設定されていることを確認したら、Ansible Tower管理画面の左ペインにある「ジョブ」をクリックし、現在の状態を確認します。
 その状態がスケジュールによる自動実行がまだ行われていない状態です。

f:id:bftnagoya:20210224162508p:plain

 スケジュールで設定した時間になったら、再度ジョブの画面を確認し、一番上にあるだろう先ほど設定したスケジュールの名前をクリックします。
 (図においては43の「Kintai_daily_backup」)

f:id:bftnagoya:20210224162511p:plain

 スケジュールによって自動実行されたジョブの実行結果が確認できます。
 「開始日時が設定した時刻であること」と「failedやignoredなど、実行が失敗している表示が出ていないこと」が確認できれば、スケジュール設定による自動実行は成功しています。

f:id:bftnagoya:20210224162514p:plain


さいごに

 以上がAnsibleTowerのジョブの実行をスケジューリングし、周期的に自動実行させる手順になります。
 今回は1日に1度の周期で実行させるものを作成しましたが、2日に1度の周期や指定曜日毎など、様々な周期で実行スケジュールを組むことが可能です。
 これを活かすことで一定期間毎に毎回実行するPlaybookを人の手に寄らず実行し、手間を大幅に削減することができるかと思います。
 以上、お読みいただきありがとうございました。