BFT名古屋 TECH BLOG

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

【Ansible】AnsibleTowerのワークフローの使い方

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

 今回はAnsibleTowerにてワークフローを使用する時の解説をします。
 AnsibleTowerの機能としては活用頻度の高いものですので、基本的な話にはなりますが、これからAnsibleTowerやAWXを使われる方に向けてお送りしたいと思います。


はじめに:今回の前提

 本記事ではAnsibleTowerにおけるワークフローについて扱いますが、AnsibleTowerおよびAWXの導入に関しては完了している前提でお話をさせていただきます。
 また差異はないかとは思いますが、今回の解説はAnsibleTowerで行なった作業を元として行なっておりますので、AWX上で同じように行なえるかは必ずしも保証しかねます。
 (おそらく大丈夫のはずです)

 「そもそもAnsibleTowerやAWXってなに?」という方は、以下の記事にて解説を行なっていますので、よろしければそちらをお読みいただければと思います。
 ワークフローについても、さらっと解説を行なっております。

bftnagoya.hateblo.jp


AnsibleTowerのワークフローとは?

 上述した以前の記事でも触れていますが、こちらでも改めて説明いたします。
 AnsibleTowerのワークフローは「複数のPlaybook(をジョブ化したもの)を一連の流れとして連続・並行して実行する仕組み」です。
 一応、Ansibleでも複数のPlaybookを実行すること自体はRoleを活用するなどして可能であることは過去の記事で示したかと思います。
 しかしワークフローでは管理対象を定めるインベントリ、Playbook、管理対象の認証情報の3つをまとめた実行単位“ジョブ”で実行の流れを構成します。
 そのため、例えば日頃使っている処理AのPlaybookの実施が成功・終了した後、同じく日頃使っているが処理Aとは特に連動しない処理BのPlaybookを実施するような、全く別の工程で使用しているPlaybook同士を一連の流れで実行させることすら容易に可能となっています。

 またワークフローはRoleと違い、その一連実行の順序や条件を視覚的かつ簡便に設定・変更することが可能です。
 Roleを使用した場合においても使用するPlaybookを作りこめば似たようなことをすることはできますが、どうしてもPlaybook自体が複雑化してしますし、急な条件変更をする場合は手間がかかります。
 ワークフローの場合は、どのジョブがどのような順序や条件で実行されるかが一目瞭然となりますし、作り込みの必要もなくその実行順序や条件を組み替えることができます。

 ワークフローにおいて視覚化された実行順序と実行条件についての例は以下となります。
 開始の位置から右へ順に、条件に従って流れていくような形となっています。

f:id:bftnagoya:20210203155458p:plain


ワークフロー(テンプレート)の作成

 では実際にワークフローを構築する手順を説明します。
 ワークフローを構築する際は「ワークフローテンプレート」というものを作成し、その上で既存のジョブをワークフローに載せていくという流れになります。

 まずAnsible Tower管理画面の左ペインにある【テンプレート】をクリックします。
 そして「テンプレート」の画面の右側にある+マークをクリックし、“ワークフローテンプレート”を選択します。

f:id:bftnagoya:20210217173440p:plain

 作成するジョブテンプレートの名前と、属させる組織、使用する(管理対象とする)インベントリをそれぞれの場所に入力します。
 入力後、“保存”をクリックします。

f:id:bftnagoya:20210217173444p:plain

 保存をクリック後、“ワークフロービジュアライザー”を選択して、その画面に移ります。
 ワークフロービジュアライザーの画面に遷移した後、“開始”をクリックしてください。

f:id:bftnagoya:20210217173447p:plain f:id:bftnagoya:20210217173451p:plain

 “開始”をクリック後、破線の枠が表示されます。  画面右から最初に実行したいジョブファイルを選択し、“選択”をクリックしてください。

f:id:bftnagoya:20210217173455p:plain

 その後、ワークフロービジュアライザー上に配置された最初に実行するジョブファイルの上にカーソルを置くと、そのジョブの削除(×マークをクリック)または次に実行するジョブの追加(+マークをクリック)を行なうことができます。
 また次に実行するジョブには、前のジョブが実行終了・成功・失敗したかによって実行するかどうかを定めることができます。

 例えば前のジョブが実行終了した場合にジョブを実行する、という流れを連続させると、以下のようなワークフローとなります。

f:id:bftnagoya:20210217173458p:plain

 ワークフロービジュアライザーでワークフローを構築したら、“詳細”を選択した後に“保存”をクリックします。  保存したあと、“起動”をクリックすることで、ワークフローの実行を行なうことが可能です。

f:id:bftnagoya:20210217173432p:plain f:id:bftnagoya:20210217173436p:plain


さいごに:ワークフローの使い時

 以上がAnsibleTowerのワークフローの基本的な仕様方法になります。
 ワークフローは、主な用途としてやはり別々のPlaybookに分けた一連の処理を行なうことが挙げられますが、工夫によってはAnsible単体だと煩わしい処理を行なうことも可能です。
 例えば以前の記事で紹介したWindowsUpdateをAnsibleで行なう手法と組み合わせ、WindowsUpdateが必要かどうか判断するPlaybookとWindowsUpdateを行なうPlaybookを用意すれば、そのふたつを数回連続で実行させるワークフローを組むことで、疑似的にWindowsUpdateを繰り返し行なわせる自動化を行なうことができます。
 (もちろん、これはかなり力技ではありますが…)

 AnsibleTowerやAWXにおいて、Ansible実行環境の可視化と同じかそれ以上にワークフローという要素は重要で、利用度が高いものであるかと思います。
 この記事が少しでもワークフローの使いこなしに貢献できれば幸いです。
 以上、お読みいただきありがとうございました。